This is a result of me learning bump shaders with also implemented reflection and refraction (just from cube skybox). There wasn’t really a goal here, just to learn and show what could be achieved with my GPU (ATI Radeon 9800 I think) at the time.
🔍Implementation
My code was using WinAPI for window creation and messages. Then Direct3D9 calls for rendering and HLSL 2.0 for vertex and pixel shaders. Also D3DX for anything else like 3D matrix and vector operations, compiling shaders, and loading 3D models (meshes) from X files. Lastly a sprite font, for screen texts (with parameters to adjust by keys) using my bitmap fonts.
To get mouse and keyboard events I was using DirectInput. I made a camera system to move around the scene, rotate and zoom. There was also 1 point light here. I wrote a Timer (based on precise QueryPerformanceCounter) for checking intervals and computing current frame rate (Fps).
I think I made most of the basic models. I would use Blender for this now. The skull model and all textures were gathered from other demos and games.
⏳Conclusions
Professional made textures made the demos look quite good, already with simple 3D objects. But those were just demos. In a bad looking, low level written code.
I continued using just C++ and Direct3D9 for a while in next project’s forks with terrain and water. And after that moved to using OGRE 3D engine. All that was too tied to DirectX and would need major rewrites every time I wanted to use new DirectX interface. Another good reason for using an engine, it can have different rendering systems also OpenGL based.
Still, this experience was good learning for future, as I was developing shaders in Stunt Rally too, years later.
This is one of my oldest Windows programs in C++. It can generate colorized bitmap fonts from true type fonts with glow effect.
Done on college as hobby around 2005-2006. I used bitmap fonts from it in most of my programs, until about 2010. Additionally it made the text for my logo, and lastly the speed and gear digits in our game for which I also added exporting to Ogre.
It is a very old program written in low level DirectX and WinAPI calls and only runs on Windows so nothing good today.
📜History
I had a small font tool without GUI, earlier when I was programming in Delphi. This one evolved to be a full featured program with medium size code.
I presented the program at college, during scientific circles session, for 15 minutes. The presentation was also a good experience to have.
It was a nice, useful program for me. Probably difficult to use for others due to only keyboard navigation and value changing. It had a help screen with shortcuts though.
Later I’ve uploaded it to Source Forge and thus it became my first FOSS program in 2009. Then I moved to Google Code and when it shut down, moved to GitHub. After years, I recently moved it to codeberg, because of those reasons. So yeah it’s been already on 4 platforms😁.
There were several programs done called bitmap font creator, maker or editor. It was (or still is) a popular thing to do. Both using bitmap fonts and making a program for it.
📊Features
Among other features it allowed quick loading and saving project files and coloring schemes. Also browsing them in its own lists with previews. One could easily pick a scheme for font color and quickly match another for glow.
Glow was computed on CPU and thus rather slow, especially for big font sizes and large textures. I didn’t develop it further after realizing that all this could probably be done with a GPU shader in real time, even with animations, at least for small to medium fonts.
This is an older topic with less information, just for history purpose. If you’re interested see my newer keyboards or the newest ones, with more explanation, own controller and display.
These were my first modifications for keyboards.
They were both done on a Logitech Ultra X Flat, a well done, solid keyboard. Surprisingly different for same model made after 1 year.
✍️Motivation
Originally most keyboards have about 50 gram force needed to press keys, and probably 4 mm distance. After first step of cutting rubber domes the distance is about 1-2mm, the force was about 22 gram for CK1 (bottom) and 33g for CK2 (top). This can also be varied per key.
📊Features
The second step was removing the middle part with arrows. Which I find unnecessary and worse (less keys) than the same from numpad. In CK1 I’ve bent the foil and hid it under. It was risky, but the foil survived. The CK2 was different, it was made from two identical keyboards, thus no need to bend, only cut the metal and foil. That too was risky since the foil could have connections around the cut off part. It was only for numpad, the bigger part had whole foil under.
Years later I modified CK2 further and bent the foil to create CK4 keyboard. And that’s 11 years already, so this would answer any doubts for longevity of such modifications. The number of times I disassembled it, changed something, and put it together is also quite high.
The third step was adding extra keys. Using my oldest program for showing pressed keys and their codes, I figured out that there are more possible keys in keyboard matrix, that are just not connected. So I added them with wires and glued on keyboards. First as regular switches with metal domes, small and hard to press. Later using rubber switches, lighter to press. But turned out to be an even bigger fail since they wear out and stop connecting. They have some resistance too (like maybe 300 ohm) in addition to the resistance of foil traces (maybe 150 ohm). So finally I ended with the smallest metal dome switch I found, with force 0.5 N (50gf). It feels different than other keys but otherwise is good.
This is a guide about my modification of reducing rubberdomes in keyboards to achieve a light press effect. After this procedure keyboards can have much less actuation force (needed to press keys). It is separated from my other projects which describe my keyboard controllers.
✍️Motivation
My motive is pretty straightforward: I want my keyboards to require as little effort to type as possible. And I don’t want any injuries from using my keyboards. These come from fatigue, which comes from more effort to press keys. I found once a pdf writing about this in detail, but don’t have a link. Fatigue also comes from lots of repeated pressing, but this is another thing. I can’t change it (much) if my hobby or work needs it. I do have helpers on display in my controllers (K.C. and K.C.4) showing: total/daily key press count, rate of key presses per minute, a graph with rate over time, and time I’m active typing without a break. So back in 2005 I saw those rubberdomes and thought: “how about I reduce them”. Then there was immediately this problem that they need to be glued back. Well after I did all that, it actually took like 2 weeks to get used to my modified keyboard. I wasn’t sure if this mod will last, but it did. After a while of using, it was easy to understand, that keyboards are really badly and cheaply made and I think it’s just a history thing (just like the thing about this idiotic Qwerty layout), surely not a sum of only intelligent decisions. I’m glad I did this process, and just before writing over 120 pages of my master thesis on this modded keyboard, which now was nice to use and wasn’t meant to injure me. I did a second one for work at some point. I remember once on a keyboard back there was a warning about possible injuries, seemed unreal to me back then, yet it is true, I even once made such mod for a person, who paid and even later thanked me numerous times, because he is suffering from that injury and such keyboard makes less pain to use.
ℹ️Information
Originally most keyboards need about 50 gram force to press keys, and probably 4 mm distance. After cutting, the distance is about 1-2mm, the force gets lower (and depends more on keyboard foil), e.g. 9 to 18 gram for CK5 (but 23 g for CK3, 33 g for CK4 etc). This can also be varied per key (more detail can be seen on pictures (galleries below), but ultimately the lowest 9 g value comes from keyboard’s foil thickness (and those 23 and 33 g values are higher because the foil was thicker in those keyboards).
🛠️Modifications
The first operation I do, is cutting off most of all rubber domes. I aim at minimized key pressing (actuation) force and also travel distance. This makes the keys much softer to press. If pressing needs less effort then it will cause less fatigue. It is simply more pleasant and comfortable. Also healthier, since the risk of keyboard injuries decreases.
The second is glueing them back to keys. It’s required because they are glued to foil (mostly always).
Everytime (except once in 2020) after doing the process, I am using the keyboard myself constantly. Thus if done right, there is no risk of any key failure.
📜History
I already did this first on my two oldest keyboards in 2005 and 2006. Then in 2015 for this keyboard (originally A4 Tech KV-300H) named CK5, and again later in 2020 (another same keyboard) making the process the video. Next for CK3 and CK4 in 2016, which later became CK6 and CK7, and CK6 became CK9 with KC4 in 2020.
▶️Videos
Video guide showing the process here, for just a few keys. Another video of testing force with weights after.
🪛Steps, guide
Steps needed, shown in video:
Getting keys off from keyboard, using a tiny flat screwdriver. Pushing gently (but firmly) and leveraging tiny screwdriver in 1 corner, to pop the key’s scissor lift (white) out of its “half socket” from keyboard (not from top of key).
Getting rubberdomes off from foil, using just fingers, pinching with force. In laptop keyboards, the rubberdomes are separate and small. But on old very cheap keyboards there is 1 big rubber piece with them all. I didn’t try modding them.
Cutting off rubberdomes, using small side cutters. The more you cut off the less force and travel. But caution for bigger keys, especially Spacebar, they need a bit more rubber width left (or in 2 places) for same force, because they are heavier. I did reduce modifiers (Shift, Ctrl, Alf) keys and arrows completely, without that short supporting width, they’re just resting on keyboard foil, this gives only 9 g force. Value depends on foil, and not at all on rubber because there is none left. For most keys usually few mm width and height (3-5 mm or so) is holding it above foil.
Removing scissor plastic (white) from key (black), using a tiny flat screwdriver.
Optionally (if present) scraping that (stupid) star * pattern made on keys, to be flat. Can be scratched with cutters or screwdriver, may be even better so for glue.
Glueing (reduced rubberdomes) back to keys, using any superglue (cyanoacrylate based). Holding with tweezers or smallest pliers for a few seconds.
Waiting (best about 1 minute) until glue gets solid and ready. On video I’m actually making this too fast. Depends also on how good or fresh (after opening) the glue is.
Lastly mounting keys back, rather easy after knowing how the scissor keys work
Repeating for each key. Unfortunately it is really boring and tedious. Took me about 2 days for 1 keyboard.
Delay (i.e. Length: short would do Reverb and long did Echo, at reduced bandwidth)
Feedback (how much from output was summed back to input)
Volume (output mix between Reverb and clean)
Switch to turn on/off, white LED
Equalizers were used only one at once. By default the Narrow one (9 bands) was for Clean mode and Wide (18 bands) was for Distorted, thus allowing more customization. Narrow had violet LED on left, and Wide had orange, on right.
It also had 2 switched, one would exchange Narrow with Wide (so the opposite to default, Narrow for Distorted). And other switch was to turn equalization off, mainly just to check the difference, most left, red-orange LED.
For a moment it had also the short Reverb / Flanger board with knobs, visible on pictures. But I didn’t use it. Power supply for it was different (not symmetrical) and that added more noise.
📜History
I was developing analog effects for electric guitar since we started playing in 2001. There were several versions of it. The 1st was just a distortion. The 5th had one 9 band equalizer and I think also a Reverb / Flanger on short delay line MN3007. The 8th was similar but had 18 band equalizer and long Reverb / Echo.
Since I was playing backgrounds and my friend solos, we needed 2 effects. The 5th and 8th were separate and best combination. I was naming them using Roman numerals, so this one, X was the 10th and last version.
⏳Conclusions
In 2004 I bought a digital effect, Digitech RP 200A, and first realized the huge difference between analog and digital effects. It was very feature rich and the sound quality was much better (probably like 20dB more, I guess my analog could be about 70dB SNR at best). Digital had many more effects like Chorus, Detune, realistic Reverb, high quality Echo, Cabinet models etc, and was stereo. But that model was very poor in regulations, there was only one parameter for each effect that could be changed (whole effect had only 3 nobs).
So even though it was higher quality and had more features (but less regulations), I still used my Distortion for some time. Also since the digital sound and because we started college we stopped playing together so often and then at all. Also we had the digital one so I could just put all equalizers and reverbs in one. Then I finished it with a better case (from an Audio CD Recorder, which internals I moved to a worse case).
➡️End
I sold it recently. For a ridiculous price, maybe just summing up to what parts had cost me. But there was a lot of time dedicated to developing it and making PCBs. But still, I’m glad I freed up cabinet space and didn’t have to throw it out (too sentimental to do that). Also got some money for it and somebody could find it useful or maybe even educational. I sold my guitars that year too. They were just gathering dust for too many years.
It was great for what it was. It was the best I could make of what was possible at the time. Recently I thought a few times already, about how much easier and more advanced a digital effect processor could be made. For example Teensy 4.0 has a lot of power, ADC and DAC are available nowadays as codec chips rather cheaply and Teesny seems to be popular for music devices and similar projects. Maybe even slower MCUs could that earlier. Earlier I have even searched and found an already open source guitar effect, I forgot which was it, but searchin now gives even more results.
It was 800×600 on a 17″ CRT back then, so already 4 screens fit now.
✍️Motivation
I was having fun with Scream Tracker on DOS before, so it felt best for creating music and using only keyboard for that.
I called my program simply the same way, but started with version 6 and increased until 14. Then shorted it to just S and used Roman numerals XIV.
This was such an awesome program to use and look at. Mainly because keyboard shortcuts were customized to what I wanted, and also I implemented many quite useful operations in it, e.g. in patterns editor.
🔍Implementation
It was using GLScene package for Delphi and my colored bitmap fonts from another program (it was the predecessor to Crystal Font), hence so varying and colorful texts everywhere.
By default I also used colored image backgrounds, since pages felt really empty. It even had animated text transitions for title pages text and a toggleable fire animation in corner 🔥.
But it was complete garbage at the way sound creation was done. It simply relied on a system timer event and triggered sound playing from DirectSound buffers. I know, nobody does that for music. I didn’t know any other way to code this then.
Timer was more or less stable, but I had to render very little while playing, mostly empty screen and 1 bottom line of info.
🎵Music
I made about 5 songs with it, more here. Also used it for percussion patterns when we were both playing electric guitars.
Later I was checking out Renoise, but eventually my interest faded away from creating music.
Recently I found Furnace tracker (for chiptune music) to be very cool and FOSS, sources here.
Those are definitely more polished and feature right. But look way worse compared to my awesome tracker.
These are decorative texts, drawn on paper. I was using (up to) about 26 colorful gel pens and few regular ballpoint pens too. The text in above picture is Experience (my favorite one).
✍️Motivation
Back in technical high school I was very disappointed at the level of education there (mainly stuff from 1980). And also extremely bored, especially on history and Polish (literature) lessons 🥱.
After all, that stuff was already in the elementary school, and I thought I will get rid of those crappy non technical subjects.
So yeah, this was my sudden and creative outcome at the time, which (at least partially) fixed the boredom and made something cool with the time. I didn’t expect it would happen.
📖Education
Few off topic rants in own chapter here. I never accepted the garbage I had to learn and did only bare minimum. There was no chemistry at all and history was for 4 (of 5) years? Now that was serious bullshit 😡. Religion was also at schools, when I started moving to atheism, I wrote about religions here. I’m pretty sure it’s just this government’s way of shoving patriotism and Christianity into people’s minds. They didn’t teach basic laws at all or anything useful either from non-technical subjects.
The CPU they were teaching was mainly crappy Z80 and 8086 (was in my 1st PC, 10 years ago), MCU was 8051. But fortunately we had some cool visits to college from high school, with practical lab exercises on hardware. Yeah mainly still Z80 and 8086 with peripheral devices (e.g. DMA controller), ugh. But there was some theory from 80386, and just one very cool ADSP2104 DSP lab exercise. I remember we borrowed some catalogs for it and ADSP 21065L. Those were heavy and cool to read/watch, we didn’t have internet back then. Sadly such DSP CPUs were out of reach for us to use anyway, so just an unreal fantasy to make own digital effects back then.
🔍Details
The words in pictures from gallery are as follows:
Cathedral, Catedral (t upside down), Experience, Revolution, Reality. The rest is easy to tell.
The green crystal hammer style is quite different and funny, normal one is the violet. There is also the eye gem symbol, a simpler version from my later painting. I only drew 2D things.
Here I will gather 2 last games I made in DOS. Each of them also featured an editor, for creating (drawing) maps. Still in resolution 320×200 (256 colors) and in Turbo Pascal 7.0 with parts in Assembler. This was on PC with Pentium 120MHz. I tried 640×400 later, but it was too slow.
🚗Car game
📜History
The first game I just called Porsche. Poor name, it’s a brand name, so it can’t be used. But I was a kid and had a model and a poster of such car. On the most bottom left screenshot there is a first, starting version of this game. This is what’s left. Very sadly, I have lost the final version (had no others) about 1 or 2 years after. But I won’t forget how we played it, in the summer of 1997 with elementary school colleague(s).
📊Features
Game was for 2 players only and had split screen. Cars were in center, map moved below. Similar way to my earlier 2 Planes game here. Maps had 3 sizes (square, in pixels): small (250 x 250), medium (450) and big (700). Due to only 640kB memory big maps didn’t start in IDE, so I could only test the game on medium.
It was a simple, rally type driving with lots of sliding (especially in winter and autumn).
The final game had 87 tracks in 7 sceneries: Forest, Jungle, Desert, Winter, Australia, Autumn, City (latest new: Mountain). About 18 of them were actually just circles, ellipses and rounded rectangles. These were real fun to play with many laps. I still have all our track prototypes drawn on paper. They lasted way longer than any of my PCs.
There was an editor for creating tracks, where I would draw road:
straights and turns,
bridges or dips
jumps (car flew for a while without control, longer with more speed at start)
Then place trees (also all of 9 types of vegetation at once), water, etc.
There were also few graphic attractions like:
staying tire trails
dust behind cars (on deserts)
screen blur effect in autumn (with more speed), kind of like rain.
Next, gameplay features were areas, with:
water
mud (slowing down)
grease (less control and random turning)
ice (no control)
These were already present in my earlier game from 1996. Water puddles in autumn were even more slippery than the wet road.
Then were some funny things:
stacks of tires – didn’t damage car, but bounced it back and sounded funny
blocks of hay – helping on road, or side, by slowing car down, e.g. before sharp turns
hedges – were along road, safe, didn’t bounce or damage car
sharp bushes damaging car (possible on road)
city tracks could have crosswalks with people (few pixels), you could smash
Game featured sounds of course. The collision detection was quite basic (bad) but worked. The car just bounced back after hitting anything (trees and such), in the opposite direction it hit. We had simple damage slowing down cars. Tracks had repairing areas, car didn’t need to stop just drive over them.
So the screenshots on left, with car in center, show actually the next version Porsche II, which was started later but never finished.
🚁Shooter
The second game, a top view scrolling shooter, again I poorly named Rambo II. Was meant to have similar jungle style to that movie.
I did the basic start of game, 2 enemy planes, 3 weapons for player’s helicopter, animating water (palette), sparks on hit, and explosions. And the editor for map was quite good. I was drawing terrain levels, then few algorithms were adding noise, blurring few times to make it look like foliage (grassy hills). Then I could put rivers, with increasing width, starting from tiny streams. Rivers had auto added rocks on sides. On screen there are 2 types visible, clear blue and olive. There was also a separate tool, visible in the middle, just for putting enemy ships and picking their paths in places on the map. It was possible to move the map (in time) to show where ships will be.
Once I showed this project in class (technical high school), I didn’t have to do anything, besides attending. It was very cool.
⏳Conclusions
Since the loss (of Porsche with 87 tracks) was a result of my stupidity, I’ll gather the faults that led to it, with what I learned to do below:
HDD fail (the worst failing Seagate 1GB). I then even bought a second of same type (was cheaper) and it failed later too. Well today I’m checking for fail rates of HDDs before I buy and I don’t go just for the cheapest. For some time I made backups on CD/DVD/BR, some lasted more than HDDs. But now I don’t, recorders cost the same as HDDs. Eventually all HDDs fail, and I think I had maybe 2 every 5, lasting longer than I needed it. Now I have one HDD more, just for backup (of important data).
I made just one backup copy, on floppy disks, using a freaking self extracting RAR (binary exe). Without the 1st I can’t extract any later. I never used self extracting type after, and also forgot about RAR after I found out 7zip, which is also supported in DoubleCommander.
I have overwritten the backup, the first 8 of 23 parts. I shouldn’t ever do that. There were several ways to avoid this. Worst is that it was actually a suggestion from, well the stupidest teacher I had. The one who also said “you can overclock your CPU, no problems” and my motherboard died after. Later he even ended in jail for stealing huge money sums, also some from students. So yeah, as the saying goes: “never follow advice from people who you wouldn’t trade places with”.
I never made any copy of the source code during. It was 65kB for game and 68kB for editor. This is so small, that I should have copied it every day. Later I started just making archives often, from just my sources. And since I started with git and github, now codeberg, I have repositories for my main projects there.
I would even loose everything from DOS (my projects in Turbo Pascal) with that stupid HDD, if I didn’t copy it all to my friend. I think it was my idea, so he could learn from it. He kept it and then I could restore it back.
Finally, I used few concepts of this car game and many actual tracks in our 3D game (started 13 yeas later) Stunt Rally. And since Stunt Rally was really well made and its track count reached 176, I don’t miss my 1997 game so much (which took 2 or 3 weeks to make). While Stunt Rally had (over) 5 years of development, and I wouldn’t make it so only by myself.