zmentSo, I saw this video youtu.be/FaILnmUYS_U by jdh, and the opportunity to participate in making it work in real hardware got me super excited. I'm obsessive by nature, and this video is kind of the culmination of that. Now I gotta take a small break from the project for my sanity, but I definitely want to come back. Maybe a PWM PC Speaker driver? Refactor sound API to support driver-based design with autodetect functionality? Add Intel HDA or AC97 sound driver? Who knows.
TETRIS OS on real hardware w/ PC Speaker musiczment2021-04-28 | So, I saw this video youtu.be/FaILnmUYS_U by jdh, and the opportunity to participate in making it work in real hardware got me super excited. I'm obsessive by nature, and this video is kind of the culmination of that. Now I gotta take a small break from the project for my sanity, but I definitely want to come back. Maybe a PWM PC Speaker driver? Refactor sound API to support driver-based design with autodetect functionality? Add Intel HDA or AC97 sound driver? Who knows.
The original idea was to capture specific points by growing roots, and you could influence their growing direction in someway. Possibly make it multiplayer/at least vs CPU. What I ended up with was a little toy that you can "draw" roots with.
Most of the implemention-time ended up being put towards technical implementation and subsequent required optimizations to actually make it playable on my senior of a laptop.KAPE8bit emulator interactive debuggerzment2022-07-29 | I've been making an emulator for my homebrew computer, KAPE 8bit. I recently added some interactive debugger functionality to it. The emulator, nor the homebrew is not finished yet, but getting there. :)Arduino Pro Micro playing Doctor Strange in the Multiverse of Madness Trailer on a 2.4 TFTzment2022-05-24 | After making the White-Out "handheld" "console", I got to thinking how far I could push the hardware, and of course what my mind goes to is "real-time" video. Don't mind the slight audio popping issue, is a bug in the audio buffer code.
I'm not sure if anyone has even been as foolhardy to even try playing video on a 8bit 16 MHz AVR chip before, but there I was with the idea and here I am now. The MCU is a stock Arduino Pro Micro 5V, I just run it at 3V3 for SD card compatibility, and is run at 16 MHz.
There's absolutely no video decoding going on at all. There simply isn't time. I had to dig deep to optimize the SD reader code and TFT output to even get this far. What's happening here is that I have prepared unpacked media in a specific format to an SD card, and the Arduino just pipes all the data it gets to the TFT screen.
The video is 160x120 @ 16 FPS with unsinged 8bit 8 kHz single channel PWM (@62.5kHz) audio. SD card has no filesystem, but is read raw. Audio is interleaved with video frames, before every frame there is a 500 byte audio packet. The video frames are unpacked 16bit 5:6:5 RGB 160x120 frames, which are pushed straight from the memory card to the TFT screen. Every pixel is doubled horizontally. There is no vertical doubling, as that cost too much performance, and instead every second line is left black.
The audio popping at regular intervals is/should be just a bug in the interleaved audio reading code, and there is an audio output ring buffer sync issue - ie. either I push data too fast to the audio buffer and constantly write over the read pointer, or vice versa, I push data too slow and the read pointer keeps catching up.White-Out, a hardware gamejam project for GGJ22/FGJ22zment2022-01-30 | Started as a joke, ended up as a joke. :) A quick preview with no coherency or pacing of my #GGJ22 #FGJ22 solo project.
The output is a 16 color RGBI 128x96 image, quantized with ordered dithering. The RGBI palette is not a mathematically correct representation of evenly spaced elements from the RGB space, which would be best for colored ordered dithering, but it's close enough that it works relatively well.
KAPE 8bit is a homebrew system I've been making intermittently since summer 2020. KAPE GPU is a 2 AVR chip system for outputting graphics to a CRT. I implemented a direct framebuffer mode for it for 128x96, 16 color (RGBI) graphics. For more info see the blog at kape-8bit.blogspot.com or twitter twitter.com/hashtag/KAPE8bit
I wrote a program to grab the screen, scale it down, and quantize it 16 colors. The Windows program pushes as many frames as possible to the serial link on the Uno, which is around 1.5Mbps so ~25 fps for 6Kbyte frames. Making threaded programming work with tight 1ms timings in Windows is a black art to me, so unfortunately there are some stutters every now and then.
Prequel to these videos: youtu.be/S6NdzMqID2s (using a bit older pixel pusher code that pushes pixels out at around 10-15 fps and Floyd-Steinberg dithering)
Based on this video: youtube.com/watch?v=SCEpfXXwFa8Bad Apple! but its two AVR chips, an Arduino and a PAL CRTzment2021-05-04 | Checkout the sister video at youtu.be/3_bmUKkK2mo which showcases a color version of the ordered dithering, in HSL space.
The output is a 16 color RGBI 128x96 image, quantized with ordered dithering. RGBI has 4 grays so this is a very good video for testing grayscale dithering.
KAPE 8bit is a homebrew system I've been making intermittently since summer 2020. KAPE GPU is a 2 AVR chip system for outputting graphics to a CRT. I implemented a direct framebuffer mode for it for 128x96, 16 color (RGBI) graphics. For more info see the blog at kape-8bit.blogspot.com or twitter twitter.com/hashtag/KAPE8bit
I wrote a program to grab the screen, scale it down, and quantize it to 16 colors. The Windows program pushes as many frames as possible to the serial link on the Uno, which is around 1.5Mbps so ~25 fps for 6Kbyte frames. Making threaded programming work with tight 1ms timings in Windows is a black art to me, so unfortunately there are some stutters every now and then.
Prequel to these videos: youtu.be/S6NdzMqID2s (using a bit older pixel pusher code that pushes pixels out at around 10-15 fps and Floyd-Steinberg dithering)
Based on this video: youtube.com/watch?v=FtutLA63Cp8Cyberpunk 1977zment2021-04-21 | Working on my homebrew 8bit computer's GPU, I realized I could do this. So of course I had to.
For more info, check kape-8bit.blogspot.comSOCKHOLE #GGJ21 #FGJ21zment2021-01-31 | Socktronauts unite! Collect missing socks, that are thrust into your quadrant of space through a SOCKHOLE!
Not much gameplay done, basics are there but didn't have time to do gamification that much.
globalgamejam.org/2021/games/sockhole-7GeneShaker #GGJ20 #FGJ20zment2020-02-02 | My entry for GlobalGameJam and FinnishGameJam 2020. Decided to solo it as I didn't have that much time to be at the Jam site or work on the game.
What I didn't have time to do but wished I did: - Proper mouse based controls for switching the base pairs around with two distinct actions (drag and drop to another spot on the DNA strand, and flip the basepair the other way around, ie. GC to CG pair) - Proper target for the flower to be at - Dynamically changing effects and visuals depending on how far the flower is from the target - Transition animations from different states (currently the states on the base-pairs and the flower change instantly, and isn't nice to look at) - Improved graphics - Some audio (music was provided as an extra track to implement if I had time, and I actually did implement the music, but accidentally set the volume too low to hear anything) - Some more gamification, maybe progressive levels with a few pairs to modify at start and as you fix more flowers, you get harder levels and more pairs to interact with - Swapping the places that affect different parts of the flower in addition to scrambling the gene positions itself.
I believe if I could've been at the Jam site the whole duration of the Jam, as I usually do, I could have finished at least the technical aspects and gamification. For improved graphics and visuals, I would have had to try to either team up with someone or ask for others to do some art.
I'm relatively happy with the result, in it that it actually does something, and is almost what I wanted. :D More than what can be said of some of my GGJ entries. 😁Song of Horror Episode 3 The Door on the wrong axis!zment2019-12-14 | Encountered a fun little bug in Song of Horror Episode 3. Well, The Door is never not the heatenings, but the axis was still wrong. -- Watch live at twitch.tv/zmentSong of Horror: Episode 1 Speedrun in 26:34 [PB]zment2019-11-17 | Update 4th of December 2019: WR broken by DemonicRuns with a whopping over 4 minute improvement. twitch.tv/videos/516417863?t=02s
My second attempt, managed to shave off a few minutes from my last time.
Definitely more improvements to be made, and also changed the route before electricity to get the garage door key at the same time as the rag, saves at least one back and forth in the stairs (thanks to moulix at Twitch for suggesting this).
Sadly still no time saving glitches or RNG manipulation found out yet.
#speedrun #horror #gaming #SongOfHorrorSong of Horror: Episode 1 Speedrun in 31:41zment2019-11-16 | A first attempt speedrun of Song of Horror Episode 1. Lots of improvements to be made, but as far as I know there are no other runs of this game, so I'll tag this as WR for now.
Will update as necessary. Currently the timing starts on main menu episode 1 start fadeout, and ends when the first loading screen opens up after finding Daniel. Might need some rethinking.
Timing in real-time, as no IGT currently possible. Thus, computer performance and loading times affect the time, unfortunately.
If you you have Wallpaper Engine, grab the wallpaper from steamcommunity.com/sharedfiles/filedetails/?id=1680705175[PB] Celeste Dashless Chapter 1 in 6:27.345 by zmentzment2018-02-12 | Dashless Chapter 1 (Forsaken City). Personal best improved by over 30 minutes, last personal best was 38 minutes!
With a bit of practice and luck I should be able to a sub-5 or even a sub-4!
-- Watch live at twitch.tv/zment[PB] Celeste Dashless Chapter 1 in 38:38.460 by zmentzment2018-02-11 | The second time doing the dashless chapter 1 challenge. First time I completed it in 40 minutes, and now I got a new PB, sub-40! This challenge is hard.
Funnily though, when optimised, it can be gone through in a bit over 2 minutes - the current WR is 2:20 as of writing this.
I'm not sure if I'm gonna keep running this cat, but I might do a few runs to improve my PB.
-- Watch live at twitch.tv/zmentDefy Gravity - [PB] Hard in 30.20.18 / [WR] 100% 47:11.17 by zmentzment2018-01-19 | Hard mode starts right after 17:00
Speedrunning Defy Gravity in the 100% category. Happened to get a PB in Hard at the same time.
Defy Gravity is part of the Obscure Speedruns Club collection of January 2018. Other games include Croc 2 (GBC), Lost Kingdoms (GC) and Mr. Nutz (SNES).
-- Watch live at twitch.tv/zment[PB] Defy Gravity - Normal in 16:10.33 by zmentzment2018-01-17 | If I hadn't lost so much time in Level 16 - Bouncy Bridge 2, this would've been a sub 16 run. Anyhow, I managed to punch through sub 17.
I'm getting closer to the sub 15 I was gunning for.
-- Watch live at twitch.tv/zment[PB] Defy Gravity - Normal in 17:06.38 RTA by zmentzment2018-01-15 | Even closer to sub-17 than the last PB.
Mario-modded :D
-- Watch live at twitch.tv/zment[PB] Defy Gravity - Normal in 17:00.17 IGT by zmentzment2018-01-15 | Improving in Defy Gravity again.
Sub-17 is a bit elusive, but I should be able to do it - the sum of best is 13:46.
-- Watch live at twitch.tv/zmentDefy Mario - Modding Defy Gravity with Mario graphicszment2018-01-13 | A WIP of sorts, not all of the character graphics have been replaced yet, and the body is missing the blue shirt + some other things needing fixingings.
Tools used to mod the graphics: github.com/jkarkkainen/DefyGravityPracticeMod github.com/jkarkkainen/ImageToXNB github.com/Athari/XnaConvertDefy Gravity - Ledge Glitchzment2018-01-12 | Managed to find a ledge glitch. Seems to be pixel perfect. No use for speedrunning, but something to try for in a panic - perhaps it saves your run. -- Watch live at twitch.tv/zment[PB] Defy Gravity in 17:15.77 IGT by zment (OSC)zment2018-01-12 | Managed sub-18! I'm slowly starting to get the hang of it. My death count is dropping as well. Perhaps sub-15 soon?
Defy Gravity is part of the Obscure Speedruns Club January 2018 collection. Other games int the collection include Croc 2 (GBC), Mr. Nutz (SNES) and Lost Kingdoms (GC). -- Watch live at twitch.tv/zmentDefy Gravity Gold Chambers Level 19 - Dont Paniczment2018-01-11 | Easy strat for the last part of the Gold Chambers. Not always that fast if you don't luck out on timing, but at least it's easy as pie.Messing around with Defy Gravity internal timingzment2018-01-10 | As I was fixing Defy Gravity timing issues to make sure everyone wanting to get to Defy Gravity speedrunning would be able to enjoy it, I realized I could do a minor modification to make the game faster or slower by modifying my own timing fix, taking vsync off and using a frame limiter to set the speed.
:D[PB] Defy Gravity - Normal - Speedrun in 19:54.42 by zmentzment2018-01-09 | After practicing a bit, I managed to squeeze my time under 20 minutes. Oh and I finally managed to do the Level 18 Advanced Start Strats.
Defy Gravity Speedrun.com Leaderboards at speedrun.com/Defy_Gravity/full_game Part of the Obscure Speedruns Club January 2018 collection. Other games in this collection are Croc 2 (GB), Mr. Nutz (SNES), Lost Kingdoms (GC). -- Watch live at twitch.tv/zment[PB] Defy Gravity 100% in 1:48:54.03 & Hard in 1:19:56.75 by zment (OSC)zment2018-01-09 | The HARD part starts at 29:16
Went for a 100% run in Defy Gravity. It. Was. Brutal.
However, I did manage to finish. So, A PB! For both the hard and the 100% categories.
-- Watch live at twitch.tv/zmentSTATUS: INSANE Going through the wallszment2018-01-07 | So, I managed to glitch really badly in STATUS: INSANE. I don't think this is something that could be used in speedrunning, but it was weird looking af. -- Watch live at twitch.tv/zment[PB] Defy Gravity - Normal - Speedrun in 23:18.46 by zment (OSC)zment2018-01-07 | Getting better at Defy Gravity.
Once the death count gets closer to 20 I'm sure I'll be having better times as well. Also, Sum Of Best still over 20:48, but sub-20 incoming! I'm sure of it.
Part of the Obscure Speedruns Club game collection of January 2018. Other games in the January 2018 collection include Mr. Nutz(Snes, SMD), Lost Kingdoms (GC), Croc 2 (GBC).
-- Watch live at twitch.tv/zment[PB] Defy Gravity Extended Speedrun Normal in 41:21.68 by zment (OSC)zment2018-01-06 | The first proper run after going the first playthrough. Lots and lots to improve, but I'm gonna get there!
Part of the Obscure Speedruns Club for January 2018!
Leaderboards at speedrun.com/Defy_Gravity -- Watch live at twitch.tv/zmentDefy Gravity Autosplitter testingzment2018-01-05 | Testing the autosplitter for Defy Gravity I'm currently making. This is how it should work, but apparently I need to dig even deeper for the proper values - as on some systems the sigscan I'm using doesn't find anything.[WR] STATUS: INSANE Any% in 11:49.96 by zmentzment2018-01-03 | Was casually practicing parts of the Any% run, and decided to take a few practice runs. The last run of the stream was going very well after P.O.N. Ultium, so I decided to give it my all for the rest of the run. And lo and behold, a new WR.
-- Watch live at twitch.tv/zment[WR] STATUS: INSANE OYB% Masochist in 12:19.04 by zmentzment2018-01-02 | Doing the OYB% run with the Masochist -modifier. Surprisingly it only took 10 attempts, and some of those were just me messing with LiveSplit.
Unless someone beats my times, I'm probably not gonna run OYB% again. This cat doesn't seem that different from Any%, and I have to stop the timer manually.
As a novelty, it was a fun run though! I'll still leave the categories open in speedrun.com, for posterity's sake and in case someone wants to run this cat as well.
-- Watch live at twitch.tv/zment[PB] Escape Goat 30% Speedrun in 5:34.74 by zmentzment2018-01-02 | Improving the demo time slowly but surely. I'm only a minute behind the World Record currently.
I'm slowly starting to get those Ruins of Red Clay tech down - few minor hiccups there and some solidifying of the general gameplay and I should get at least closer.[WR] STATUS: INSANE in 12:03.48 by zmentzment2018-01-01 | While racing with thonder_wavemastor, I managed to get a WR!
Still more improvements to be made, though, messed up on a few parts.
-- Watch live at twitch.tv/zment[WR] STATUS: INSANE Speedrun OYB% in 12:40.79 by zmentzment2017-12-31 | Running the OYB% category for STATUS: INSANE. In this cat you end the timer once you gain The Understanding of Everything.
See the leaderboard at: speedrun.com/STATUS_INSANE#OYB[PB] STATUS: INSANE Speedrun Any% in 12:33.79 by zmentzment2017-12-31 | Managed to improve my time a bit, but it still isn't beating Serd's recently set WR of 12:14 (youtu.be/P8S0uof802U)
This run is about 18s improvement on my earlier PB.
The leaderboard is at speedrun.com/STATUS_INSANE[PB] Escape Goat 30% in 6:24.01 by zmentzment2017-12-30 | Another PB in Escape Goat. I'm finally starting to get the shortcuts in Red Clay, but in this run I'm not either doing them yet, or utterly failing in them. Soon. :D -- Watch live at twitch.tv/zment[WR] STATUS: INSANE 100% in 18:22.02 by zmentzment2017-12-30 | Old WR in 18:40.88 by thonder_wavemastor (youtu.be/NxihE99I2qM)
Current Sum of Best Segments at 17:13, and I did mess up in quite a few places, so there's lot of room to improve.
I messed up the sound in this video, so there's no audio whatsoever this time around. Sorry for that!Escape Goat 30% in 6:31.81 (new PB)zment2017-12-29 | Just practicing around a bit, managed to squeeze my PB by 26 seconds.
I finally found out how to properly trigger the fal-dash-jump-jump, and I 'm getting a bit better at Red Clay 1.
While practicing some Escape Goat 30%, I managed to improve my PB around 20 seconds.
Pulling off the Red Clay 1 shortcut seems impossible - I think I did it once, but for the love of me, I can't seem to do the shortcut again. -- Watch live at twitch.tv/zmentEscape Goat 30% Speedrun (old PB) 7:17.69zment2017-12-28 | !!! New PB 6:57.72 youtu.be/e6sHLg6KupM !!!
Practicing some speedrunning of Escape Goat with the online demo again. Managed to hit a PB twice, with the better being 7:17.69.
Still lots of improvements to be made, and I'm also thinking about checking out the runs of the competition.
The time is not the best, but it's still the second best in 30% category! (Out of three competitors, though... :3) -- Watch live at twitch.tv/zmentEscape Goat 30% Speedrun, first attemptzment2017-12-28 | Testing out Escape Goat 30% Speedrun. The run starts when the goat can be controlled and stops when The Gathering Place is entered after finishing all the demo levels.
Lots of improvements to be made for sure.
Demo available here: http://www.playescapegoat.com -- Watch live at twitch.tv/zmentSTATUS: INSANE Speedrun Any% WR 12:51.06zment2017-12-27 | STATUS: INSANE Speedrun Any% WR 12:51.06. Had a little snafu there, a black screen when entering Final Phase Part 2, but LUCKILY the game wasn't frozen and the menu worked - a quick level reset and then I aced all the rest without failing once. -- Watch live at twitch.tv/zmentSTATUS: INSANE 100% + 100% Masochist Speedrun WR 19:50.64zment2017-12-26 | Speedrun of STATUS: INSANE. Run is a 100% with the Masochist subcategory, meaning collecting everything the game counts for collecting percentage and no deaths allowed. Incidentally this run is also the WR for 100% Normal.
Also, to my knowledge, only completed run in that category. :D -- Watch live at twitch.tv/zmentLevelGeneratezment2017-12-26 | ...Procedural Metroidvania Level Generatorzment2017-12-26 | This is a quick showcase of the practical part of my Bachelor's Thesis.
The thesis is in Finnish so no point posting it here, but here is the summary page.
Title Procedurally generated metroidvania levels
Abstract Procedural generation of levels in 2D-platformers and especially in metroidvania-games is usually restricted to templating. Hand-picked content creation and dungeon generation algorithms were analysed and implemented. To determine the viability of the created levels, a testing environment was implemented. Implementation was done on Unity3D game engine using Linux operating system. The results of creating levels with both classical dungeon generation algorithms and combining and modifying analysed algorithms were compared with each other. Created levels were also compared against an analysis of Metroidvania levels. The testing environment was developed so that the results could be tested. Playable levels were created with both of the methods. However, the combined and modified version generated more structural levels, and were also closer to Metroidvania-levels. Using other algorithms for generating levels other than classical dungeon generation was not completely useful. Only the usage of space colonization algorithm provided any noticeable positive effect. To create a completely working level, more than just level geometry is needed, which requires more research and development. The results are however promising, and they are a good stepping stone for further work.Donkey Kong chokes on a speedrunzment2017-12-25 | Donkey Kong chokes on a WR STATUS: INSANE speedrun. Had a good pace, if not a WR then at least very close to it. But unfortunately he chokes at last seconds. *sad violin*
-- Watch live at twitch.tv/zmentSTATUS: INSANE Any% Masochist WR 13:26.89zment2017-12-25 | Managed to get the WR in Status: Insane Any% Masochist run as well. And the time is actually not bad, even for a Normal run.
Masochist run means that no fails are allowed. The name comes from the achievement you get when you complete a no-fail run the first time.