Full notes
Full DVD Screensaver 2: 30th Anniversary Survivors Edition update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- UI and audio
- Gameplay
- Store
DVD Screensaver 2: 30th Anniversary Survivors Edition changes
Hi there, I'm Christer, one of the devs 👋
I like to tinker with electronics in my spare time, so for this game I thought it would be fun to try to play the game with an actual old DVD remote.
If you want to try to play this way too then this guide will help guide you through the process of doing so. If all goes well this is what it should look like in the end:
Okay, on with the tutorial! First a list of requirements:
🧠 Skills you need:
Basic Arduino knowledge
🏗️ Physical things you will need:
An old DVD player remote
Arduino board with an 32u4 processor, such as the Arduino Micro or Arduino Leonardo (what I'll be using)
USB cable to connect the board to your PC
Some kind of breadboard
Breadboard jumper wires
38 KHz IR receiver module for Arduino (like the IR 1838M, but most will do as long as they are the right frequency)
💽 Software you will need:
Arduino IDE
Once you are sure you have everything you need, it is time to build the circuit and program the Arduino.
🛠️ Build guide:
The actual building is fairly simple, see the diagram below for how to wire up everything (Though be careful to wire the power the right way in, your specific reviving module might have different wiring).
🖥️ Programming:
Once everything is wired up it is time to program the Arduino to receive signals, and then, hopefully, output keyboard commands!
First step is reading your specific remote's commands. Every brand and manufacturer might have slightly different output signals so we will have to do a bit of research ourselves, but hopefully this shouldn't be too hard.
Step one is uploading the code below to your Arduino and opening the Serial Monitor tool in the Arduino IDE. Once we have established a connection we press the appropriate buttons on the remote (left, right, up, down, enter/select, return) to learn all their HEX codes and write them down.
[c]#include [/c]
[c]#include [/c]
[c]#define IR_RECEIVE_PIN 7[/c]
[c]void setup()[/c]
[c]{[/c]
[c] //Serial.begin(115200); // // Establish serial communication[/c]
[c] IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver[/c]
[c] delay(500);[/c]
[c] Keyboard.begin();[/c]
[c]}[/c]
[c]void loop() {[/c]
[c] if (IrReceiver.decode()) {[/c]
[c] IrReceiver.printIRSendUsage(&Serial); // Print the statement required to send this data[/c]
[c] IrReceiver.resume(); // Enable receiving of the next value[/c]
[c] }[/c]
[c]}[/c]
So in the serial plotter this is what you should see when you press a button on the remote, "Send with: IrSender.sendNEC(0x0, 0x4C, );" or something similar. The part we care about here is the middle HEX code 0x4C in this case (which is left button on my remote).
So just go through the following buttons on your remote and write down the HEX codes.
Left arrow, Right arrow, Up arrow, Down arrow, enter/select and return/exit. These are all the buttons we need to play DVD Screensaver 2.
Next we use the HEX codes to hard code (there might be a smarter way of going about this but hey, this works) in specific keyboards commands to be triggered when the right buttons are pressed:
Left - KEY_LEFT_ARROW
Right - KEY_RIGHT_ARROW
Up - KEY_UP_ARROW
Down - KEY_DOWN_ARROW
Select/Enter - KEY_RETURN
Return - KEY_ESC
Final code:
[c]#include [/c]
[c]#include [/c]
[c]#define IR_RECEIVE_PIN 7[/c]
[c]void setup()[/c]
[c]{[/c]
[c] //Serial.begin(115200); // // Establish serial communication[/c]
[c] IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the receiver[/c]
[c] delay(500);[/c]
[c] Keyboard.begin();[/c]
[c]} [/c]
[c]void loop() {[/c]
[c] if (IrReceiver.decode()) {[/c]
[c] byte code = IrReceiver.decodedIRData.command & 0xFF;[/c]
[c] PressButtonBasedOnHex(code);[/c]
[c] IrReceiver.resume(); // Enable receiving of the next value[/c]
[c] }[/c]
[c]}[/c]
[c]void PressButtonBasedOnHex(byte hexCode)[/c]
[c]{[/c]
[c] bool pressedSwitch= false;[/c]
[c] switch(hexCode){[/c]
[c] case 0x44: // Replace with your up arrow hex code here![/c]
[c] Keyboard.press(KEY_UP_ARROW);[/c]
[c] pressedSwitch = true;[/c]
[c] break;[/c]
[c] case 0x40: // Replace with your right arrow hex code here![/c]
[c] Keyboard.press(KEY_RIGHT_ARROW);[/c]
[c] pressedSwitch = true;[/c]
[c] break;[/c]
[c] case 0x48: // Replace with your down arrow hex code here![/c]
[c] Keyboard.press(KEY_DOWN_ARROW);[/c]
[c] pressedSwitch=true;[/c]
[c] break;[/c]
[c] case 0x4c: // Replace with your left arrow hex code here![/c]
[c] Keyboard.press(KEY_LEFT_ARROW);[/c]
[c] pressedSwitch=true;[/c]
[c] break;[/c]
[c] case 0x6: // Replace with your select/enter hex code here![/c]
[c] Keyboard.press(KEY_RETURN);[/c]
[c] pressedSwitch = true;[/c]
[c] break;[/c]
[c] case 0x7: // Replace with your return/exit hex code here![/c]
[c] Keyboard.press(KEY_ESC);[/c]
[c] pressedSwitch = true;[/c]
[c] break;[/c]
[c] default:[/c]
[c] return;[/c]
[c] break;[/c]
[c] }[/c]
[c] if(pressedSwitch)[/c]
[c] delay(50);[/c]
[c] Keyboard.releaseAll();[/c]
[c]}[/c]
Just upload your edited sketch that matches your remote's HEX codes.
And with that, it should be done! Enjoy your brand new (old) way of enjoying our game! Hope this works out if you do decide to try it, good luck and have fun! 👨🔬
💀 Troubleshooting 💀
If you're not getting a signal from the remote there could be a number of things wrong.
The remote doesn't emit 38khz IR signals - This one is hard to fix, as the remote and the receiver needs to be compatible. I found my remote for very cheap at a thrift shop, so if everything is connected correctly and the code has been uploaded to the Arduino correctly then I recommend trying to find a new remote.
Incorrect Arduino board - The board needs a 32u4 processor to emulate an actual keyboard connected to your PC. Without this it will not work.
PS: Since we've basically been making a custom keyboard here, you can of course tweak the code to support playing other games than DVD Screensaver 2. If you find a game that benefits from this new way of playing, please do share them with us!
Source
Changelog.gg summarizes and formats this update. How we read updates.
