new post x small fixes
|
@ -1,9 +1,62 @@
|
|||
---
|
||||
title: "Gameboy Color mod"
|
||||
date: 2022-09-23T21:08:27+02:00
|
||||
description: ""
|
||||
title: "Bringing new life into my old GameBoy Color!"
|
||||
date: 2022-11-30T08:03:57+02:00
|
||||
description: "The pinnacle of Nostalgia."
|
||||
author: "Sindre Kjelsrud"
|
||||
image: ""
|
||||
draft: true
|
||||
draft: false
|
||||
---
|
||||
### The Idea
|
||||
During the 2022 summer I got hooked on watching YouTube videos about modding retro consoles, all from the GameBoy Color to the Nintendo Wii. It was like injecting pure dopamine in to my brain one video at a time lmao.
|
||||
|
||||
But one video, by [Macho Nacho Productions](https://www.youtube.com/watch?v=yqnrEpcaans), really stood out to me. Basically he made a "Super" GameBoy Color, where he crammed like 4 mods into it. I immediatly wanted to try something like it myself, so I took my dusty, old, purple GameBoy Color with me back to Bergen, where I study.
|
||||
|
||||

|
||||
[*GameBoy Color CGI by Alexander Gueres*](https://www.behance.net/gallery/38279981/Game-Boy-Color-1998-Full-CGI)
|
||||
|
||||
---
|
||||
|
||||
### Products
|
||||
As soon as I got to Bergen I ordered a GameBoy Color 2.0 Q5 IPS Laminated Backlight Kit, a white GameBoy Color 2.0 Laminated Q5 IPS Ready Shell and some purple buttons/pads from [FunnyPlaying](https://retrogamerepairshop.com/), and waited excitedly for them to arrive..
|
||||
|
||||

|
||||
|
||||
```js
|
||||
Photo of my old GameBoy Color and the products from FunnyPlaying
|
||||
```
|
||||
---
|
||||
|
||||
### Modding process
|
||||
The first step of the project was to disassemble the old GameBoy and clean the circuit board. This process was fairly easy as it only involved rubbing some q-tips, dipped in isopropyl alcohol, around the board to remove dirt and dust.
|
||||
|
||||

|
||||
```js
|
||||
Cleaning the circuit board with some isopropyl alcohol
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
The soldering part of the project wasn't something you need to do unless you wanted the ability to change the color of the logo and/or change the screens x- and y-position.
|
||||
|
||||
**Long story short**, it didn't go exactly as planned hehe.. I managed to break one circuit board by fucking up somehow withss the soldering of start and select, so had to buy a whole new GameBoy for it..
|
||||
|
||||
I still haven't soldered on the new board (that's why the logo is kinda scuffed lol). I'm kinda scared to do it, but one day I will!
|
||||
| | |
|
||||
|- | - |
|
||||
|| |
|
||||
```js
|
||||
Photo of me trying to solder.. For a noob it was pretty good!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### End result
|
||||
Here is the "finished" product. I'm very satisfied with the outcome as this was my first mod like ever. The games look so good and I will definitely enjoy taking this with me on trips forward!
|
||||
I recommend trying this out if you want to bust out your old GameBoy Color again and play some good old Pokémon games!
|
||||
| | |
|
||||
|- | - |
|
||||
|
|
||||
```js
|
||||
Pokémon Yellow & Blades of Steel 1991
|
||||
```
|
||||
|
||||
...
|
|
@ -20,7 +20,7 @@ Experience
|
|||
----------
|
||||
**Operator, Manpower, Coop Main Warehouse, Loading-Department**
|
||||
*2022 - 2022*
|
||||
> The main tasks consist of helping the truckdrivers with loading, localisation/retrieving of products and pallets using a forklift, and acquiring necessary papers before departure, as well as the use of Witronsoftware and general maintenance of the area
|
||||
> The main tasks consist of helping the truckdrivers with loading, localisation/retrieving of products and pallets using a forklift, and acquiring necessary papers before departure, as well as the use of Witronsoftware and general maintenance of the area.
|
||||
|
||||
**Lifeguard, Lillestrom municipality, Nebbursvollen Open-air swimming pool**
|
||||
*2019 - 2022*
|
||||
|
@ -61,13 +61,13 @@ sidBot | Python
|
|||
|
||||
<br><br>
|
||||
|
||||
My Personal Website | HTML / CSS
|
||||
My Personal Website | Hugo Framework
|
||||
: A personal website that gets updated during my education. [Github Repo](https://github.com/SindreKjelsrud/sindrekjelsrud.github.io)
|
||||
|
||||
<br><br>
|
||||
|
||||
CookieClicker | Java
|
||||
: A game where you collect cookies by clicking on a cookie. [Github Repo](https://github.com/SindreKjelsrud/CookieClicker)
|
||||
Wordle | Java
|
||||
: A clone of the game Wordle. [Github Repo](https://github.com/SindreKjelsrud/Wordle)
|
||||
|
||||
-----------------------------------------------
|
||||
|
||||
|
@ -75,7 +75,7 @@ Extra Section
|
|||
----------
|
||||
|
||||
IT-skills
|
||||
: Knowledge of **Java**, **HTML/CSS** & **Office 365**
|
||||
: Knowledge of **Java**, **HTML/CSS** & **Office 365**.
|
||||
Basic knowledge of **postgreSQL** & **Python**.
|
||||
|
||||
<br><br>
|
||||
|
@ -95,4 +95,4 @@ Language
|
|||
|
||||
References
|
||||
----------
|
||||
Provided on request.
|
||||
Provided on request.
|
||||
|
|
|
@ -14,10 +14,16 @@ _Dec. 2021 - Mar. 2022, Python_
|
|||
- For example, the command "!plsdog" uses this [API](https://dog.ceo/api) to show the user some cute pictures of dogs across the internet.
|
||||
---
|
||||
### My Personal Website
|
||||
_Sep. 2022 - Now, HTML, CSS, JS_
|
||||
_Sep. 2022 - Now, Hugo Framework_
|
||||
>Github Repo: <https://github.com/SindreKjelsrud/sindrekjelsrud.github.io>
|
||||
- This website uses [PaperMod](https://github.com/adityatelange/hugo-PaperMod) theme and is based on Hugo.
|
||||
---
|
||||
### Wordle 🔠
|
||||
_Oct. 2022 - Now, Java_
|
||||
>Github Repo: <https://github.com/SindreKjelsrud/Wordle>
|
||||
- A recreation of the popular game [Wordle](https://www.nytimes.com/games/wordle/index.html) by Josh Wardle/The New York Times, written in Java.
|
||||
- Still needs some finishing touches.. (bug fixes, cleaning up code etc.)
|
||||
---
|
||||
### 🍪 Cookie Clicker
|
||||
_Nov. 2021 - Dec. 2021, Java_
|
||||
>Github Repo: <https://github.com/SindreKjelsrud/CookieClicker>
|
||||
|
@ -27,5 +33,6 @@ _Nov. 2021 - Dec. 2021, Java_
|
|||
---
|
||||
# Hobby Projects
|
||||
### Gameboy Color mod
|
||||
_Sep. 2022 - (waiting for parts..)_
|
||||
- in the making.. (pictures coming)
|
||||
_Sep. 2022 - Nov. 2022_
|
||||
>Blog Post: https://sindrekjelsrud.github.io/blog-posts/gameboycolormod
|
||||

|
||||
|
|
154
layouts/partials/toc.html
Normal file
|
@ -0,0 +1,154 @@
|
|||
{{- $headers := findRE "<h[1-6].*?>(.|\n])+?</h[1-6]>" .Content -}}
|
||||
{{- $has_headers := ge (len $headers) 1 -}}
|
||||
{{- if $has_headers -}}
|
||||
<aside id="toc-container" class="toc-container wide">
|
||||
<div class="toc">
|
||||
<details {{if (.Param "TocOpen") }} open{{ end }}>
|
||||
<summary accesskey="c" title="(Alt + C)">
|
||||
<span class="details">{{- i18n "toc" | default "Table of Contents" }}</span>
|
||||
</summary>
|
||||
|
||||
<div class="inner">
|
||||
{{- $largest := 6 -}}
|
||||
{{- range $headers -}}
|
||||
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
|
||||
{{- $headerLevel := len (seq $headerLevel) -}}
|
||||
{{- if lt $headerLevel $largest -}}
|
||||
{{- $largest = $headerLevel -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}}
|
||||
|
||||
{{- $.Scratch.Set "bareul" slice -}}
|
||||
<ul>
|
||||
{{- range seq (sub $firstHeaderLevel $largest) -}}
|
||||
<ul>
|
||||
{{- $.Scratch.Add "bareul" (sub (add $largest .) 1) -}}
|
||||
{{- end -}}
|
||||
{{- range $i, $header := $headers -}}
|
||||
{{- $headerLevel := index (findRE "[1-6]" . 1) 0 -}}
|
||||
{{- $headerLevel := len (seq $headerLevel) -}}
|
||||
|
||||
{{/* get id="xyz" */}}
|
||||
{{- $id := index (findRE "(id=\"(.*?)\")" $header 9) 0 }}
|
||||
|
||||
{{- /* strip id="" to leave xyz, no way to get regex capturing groups in hugo */ -}}
|
||||
{{- $cleanedID := replace (replace $id "id=\"" "") "\"" "" }}
|
||||
{{- $header := replaceRE "<h[1-6].*?>((.|\n])+?)</h[1-6]>" "$1" $header -}}
|
||||
|
||||
{{- if ne $i 0 -}}
|
||||
{{- $prevHeaderLevel := index (findRE "[1-6]" (index $headers (sub $i 1)) 1) 0 -}}
|
||||
{{- $prevHeaderLevel := len (seq $prevHeaderLevel) -}}
|
||||
{{- if gt $headerLevel $prevHeaderLevel -}}
|
||||
{{- range seq $prevHeaderLevel (sub $headerLevel 1) -}}
|
||||
<ul>
|
||||
{{/* the first should not be recorded */}}
|
||||
{{- if ne $prevHeaderLevel . -}}
|
||||
{{- $.Scratch.Add "bareul" . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
</li>
|
||||
{{- if lt $headerLevel $prevHeaderLevel -}}
|
||||
{{- range seq (sub $prevHeaderLevel 1) -1 $headerLevel -}}
|
||||
{{- if in ($.Scratch.Get "bareul") . -}}
|
||||
</ul>
|
||||
{{/* manually do pop item */}}
|
||||
{{- $tmp := $.Scratch.Get "bareul" -}}
|
||||
{{- $.Scratch.Delete "bareul" -}}
|
||||
{{- $.Scratch.Set "bareul" slice}}
|
||||
{{- range seq (sub (len $tmp) 1) -}}
|
||||
{{- $.Scratch.Add "bareul" (index $tmp (sub . 1)) -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
</ul>
|
||||
</li>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
<li>
|
||||
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
|
||||
{{- else }}
|
||||
<li>
|
||||
<a href="#{{- $cleanedID -}}" aria-label="{{- $header | plainify -}}">{{- $header | safeHTML -}}</a>
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
<!-- {{- $firstHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers 0) 1) 0)) -}} -->
|
||||
{{- $firstHeaderLevel := $largest }}
|
||||
{{- $lastHeaderLevel := len (seq (index (findRE "[1-6]" (index $headers (sub (len $headers) 1)) 1) 0)) }}
|
||||
</li>
|
||||
{{- range seq (sub $lastHeaderLevel $firstHeaderLevel) -}}
|
||||
{{- if in ($.Scratch.Get "bareul") (add . $firstHeaderLevel) }}
|
||||
</ul>
|
||||
{{- else }}
|
||||
</ul>
|
||||
</li>
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</aside>
|
||||
<script>
|
||||
let activeElement;
|
||||
let elements;
|
||||
window.addEventListener('DOMContentLoaded', function (event) {
|
||||
checkTocPosition();
|
||||
|
||||
elements = document.querySelectorAll('h1[id],h2[id],h3[id],h4[id],h5[id],h6[id]');
|
||||
// Make the first header active
|
||||
activeElement = elements[0];
|
||||
const id = encodeURI(activeElement.getAttribute('id')).toLowerCase();
|
||||
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
|
||||
}, false);
|
||||
|
||||
window.addEventListener('resize', function(event) {
|
||||
checkTocPosition();
|
||||
}, false);
|
||||
|
||||
window.addEventListener('scroll', () => {
|
||||
// Check if there is an object in the top half of the screen or keep the last item active
|
||||
activeElement = Array.from(elements).find((element) => {
|
||||
if ((getOffsetTop(element) - window.pageYOffset) > 0 &&
|
||||
(getOffsetTop(element) - window.pageYOffset) < window.innerHeight/2) {
|
||||
return element;
|
||||
}
|
||||
}) || activeElement
|
||||
|
||||
elements.forEach(element => {
|
||||
const id = encodeURI(element.getAttribute('id')).toLowerCase();
|
||||
if (element === activeElement){
|
||||
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.add('active');
|
||||
} else {
|
||||
document.querySelector(`.inner ul li a[href="#${id}"]`).classList.remove('active');
|
||||
}
|
||||
})
|
||||
}, false);
|
||||
|
||||
const main = parseInt(getComputedStyle(document.body).getPropertyValue('--article-width'), 10);
|
||||
const toc = parseInt(getComputedStyle(document.body).getPropertyValue('--toc-width'), 10);
|
||||
const gap = parseInt(getComputedStyle(document.body).getPropertyValue('--gap'), 10);
|
||||
|
||||
function checkTocPosition() {
|
||||
const width = document.body.scrollWidth;
|
||||
|
||||
if (width - main - (toc * 2) - (gap * 4) > 0) {
|
||||
document.getElementById("toc-container").classList.add("wide");
|
||||
} else {
|
||||
document.getElementById("toc-container").classList.remove("wide");
|
||||
}
|
||||
}
|
||||
|
||||
function getOffsetTop(element) {
|
||||
if (!element.getClientRects().length) {
|
||||
return 0;
|
||||
}
|
||||
let rect = element.getBoundingClientRect();
|
||||
let win = element.ownerDocument.defaultView;
|
||||
return rect.top + win.pageYOffset;
|
||||
}
|
||||
</script>
|
||||
{{- end }}
|
BIN
static/img/gameboy-post/cleaning.jpg
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
static/img/gameboy-post/example.jpg
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
static/img/gameboy-post/funnyplaying-products.jpg
Normal file
After Width: | Height: | Size: 805 KiB |
BIN
static/img/gameboy-post/showcaseBoS-1.jpg
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
static/img/gameboy-post/showcasePok-1.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
static/img/gameboy-post/soldering-1.jpg
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
static/img/gameboy-post/soldering-2.jpg
Normal file
After Width: | Height: | Size: 83 KiB |