5kits
Vintage computing, old video games

Project– Porting a Tetris game I wrote a long time ago in X86 to run on modern 64-bit Windows

The game was written in about 1000 lines of X86, and assembled with the A86 assembler tools. This was 12 years ago, in 2006.

It is extremely low tech and not super complicated or flashy, it was meant to be a personal effort back then to learn about it and becoming more comfortable debugging it. It was built as a 16-bit DOS COM executable. Although it ran on Windows at the time, the binary format was not very current even back then. Sadly time passed, the binary rotted and it does not run anymore.

There are three reasons why it does not run anymore
1. It’s a .COM executable. Running these requires an MS-DOS emulation subsystem of Windows which is not present on 64 bit windows
2. It’s a 16-bit executable, which does not have support on 64 bit Windows
3. It uses DOS interrupts in order to work. These interrupts are not supported in modern OS. Modern Windows behavior is that they just crash the app

In addition to the broken binary, I had the source code still. So I decided to resurrect it by porting it so that it can be run natively now on a modern 64 bit Windows OS (where ‘natively’ here means ‘not with an emulator’). Yeah you can run it in DOSBox, but where’s the fun in that?

Although the program was originally assembled with A86, I ported it to use MASM (a Microsoft product). I want to say using MASM is not necessary for fixing the above problems. It would actually be possible to fix the above problems while still using A86. As it turns out, building Win32 programs with A86 is easier than ever because the author has (since 2006) created a new set of convenience tools for that, just barely too late for me to have taken advantage of. Looks promising.

The thing is, if I’m going to set out to make it work on Win32 anyway, it is almost certainly going to be easier with MASM. It has easy-to-set-up integration with Visual Studio, it’s basically automatic setting up my project to link against the right libraries, and there are built-in conveniences which make the Win32 APIs (or anything) syntactically nicer to call for the purposes of doing this. MASM has different syntax than A86 but switching over to its syntax wasn’t such a bad price to pay. Mnemonics themselves and the syntax for the addressing modes are basically the same. I thought I’d have to change over some things on this front, but as it turned out I didn’t. In general I don’t think the compatibility of mnemonics is standardized or guaranteed, but I didn’t run into problems in this area.

The annoyance– which would been there for MASM or A86 regardless– was graphics, because this part had to be changed the most. I decided to go with GDI which is not going to be anything like mode 13h (If you haven’t had to ever program with mode 13h it basically gives you a pointer to video memory and writing to it draws indexed-color pixels on the screen) For GDI on Win32 the program needs to be structured a lot differently. It needs to create a window and window resources, the code for drawing the grid needed to be moved to a paint message handler, needs to update with a timer, it should be scaled up too since a 320×200 resolution 1:1 is not a great time on a modern display, etc.

Coming at this I had wanted to be able to treat the game as a black box. Change a few things to get it working in Windows and that’s it. But in the end, I needed to understand nearly all parts of it to do what I wanted to do. There were all these long stretches of code organized horribly where I’d long forgotten how they work. Doing this was a gigantic hassle

Still, It works. It is still extremely low tech but that’s kind of the point, and to just get it working. I got to add a couple new things too:
– Different colors for the different pieces
– Fixed a bug where rows would sometimes not get cleared correctly
– Added a ‘next piece’ UI
– When you get game over instead of crashing it displays a message and you can press Escape to start again

I wonder… when it will rot again?? (As a GDI Win32 app) maybe it’s good for a while

May 14th, 2018 at 10:43 pm | Comments & Trackbacks (0) | Permalink

“We do not play out the catastrophe”

https://medium.com/@balehman/the-tragedy-of-gj237b-928cfeae460b

Some commentary:

https://www.metafilter.com/172626/We-do-not-play-out-the-catastrophe

February 27th, 2018 at 4:13 pm | Comments & Trackbacks (0) | Permalink

If something seems too good to be true, it probably is.

Don’t use tool-assisted gameplay as a sole reference for good non-tool-assisted strategies.

Look online to find a good assortment of Super Ghouls N Ghosts videos and gameplay footage. Great! Find one. Looks good. All levels. They take no damage. A very skilled player, for sure. As I looked more closely, something was off.

1) The player had a very inconsistent level of skill.

They could always handle dense ‘bullet hell’ situations, but took many tries to jump onto a ledge. Ledge is simple and flat and not hazardous.

2) The player was unfazed with many serious ‘close calls’.

Close calls’ are a part of this genre of game, as well as some understanding of hitboxes, but these are extreme cases. In most circumstances, a typical human player* will react to ‘close calls’ by slowing down, leaving more space and using more caution.

3) The player performs normally-very-dangerous maneuvers, with some knowledge from the future that those maneuvers are safe.

For example, jumping straight into collision with a boss while attacking it. Normally that would be lethal. But if you know that your attack will be the finishing blow to kill the boss, and death disables its hitboxes, then it’s fine.
Since this game has no health bars, a human player cannot exploit the last-hit-to-kill-the-boss without keeping a mental count of hits. A boss fight is a stressful situation. It’s hard for a human to keep a mental count during it. And think of cost versus benefit. If the player is skilled enough to last the whole fight landing attacks safely, what’s one more? Is the opportunity of that suicide jump worth the mental tax that it takes? Not really.

After digging through Youtube comments a little, I found out that the run was indeed tool assisted. I’ve been burned by this before. They don’t put ‘tool assisted’ in the title or description or anywhere obvious before posting it, so you don’t know. Don’t be tricked! I would play better too, if I could rewind and replay parts…

February 26th, 2018 at 1:29 pm | Comments & Trackbacks (0) | Permalink

Finished Wonder Project J (SNES)

What it is- Pinocchio: the anime game

The scientist Geppetto has constructed a robot named Pino, part of a special family of robots called Gijin. In a tragic and sudden surprise, Geppetto was captured by the evil rulers of the kingdom before he was able to finish Pino’s programming. You play as Tinker, a magical fairy who guides Pino toward being able to rescue the kingdom and his creator Geppetto.

You don’t control Pino directly, but Tinker. Tinker can direct Pino left or right, or tell him to stop; signal to him “right!” or “wrong!” She can tell him to interact with an object, she can pick up and move objects.

Interactions with Tinker comprise the building blocks with which Pino learns language, combat, good manners, sports, musical instruments. And how not to eat the cat. (In my 1st playthrough he hoisted the cat up into the air and into his mouth and it disappeared. I think it’s a glitch, but he gained a bunch of health from it, so… I dunno…)

Another game never released in the west. It turns out there is not much of a market for these sorts of simulators. It was tantalizing reading about this in Nintendo Power magazine but there was no typical way to play it.

Playing it in the late 90s / early 2000s was difficult because it was only available in Japanese and there didn’t yet exist any English-language guides. Fortunately the gameplay is very all-ages friendly and visually explanatory, so it worked well as a learning tool for some words and vocabulary at that time.

Graphically it was all about really layered, complicated backgrounds and big smoothly-animated characters. Oh, and voice acting. In an SNES game. When Pino learns something, he actually says “Wakatte wa!” (Got it! / I understand it). There’s a poignant moment where he says “Arigatou… minna”. There were maybe 5 or 6 voice clips like that. I really want to know what percent of the cartridge was dedicated to storing wave file sound. Voice acting in SNES games exists but it’s very rare.

Today there is a 100% complete fan translation. A superb one at that. It’s been worth the wait.

February 23rd, 2018 at 12:07 am | Comments & Trackbacks (0) | Permalink

Time to set up your Nintendo Switch!

>perform hookup to TV.

>”Please log in with your Nintendo Account”

>okay

>”No account found”

> It turns out what I have is a Nintendo Network ID, not a Nintendo Account.

>They are different things.

>Use “External Sign-in” option to sign in with the Nintendo Network ID, presumably so that it can be linked to a Nintendo Account.

>”You can’t log in with your Nintendo Network ID on this device.
By default, that type of ID is intended to be used on the Wii U console and Nintendo 3DS family.
To enable it to be used on other devices, go to your settings and select this option”

>okay

> Wii U is not hooked up, also I don’t think I had used that sign-in with the Wii U
But I did for the 3DS

> Find the 3DS

> Battery dead

> Find AC adapter
Plug in

> Open “Settings” -> “Nintendo Network ID”

> “You must perform a System Update in order to access the settings”

> Go to the option for System Update

> System update can’t be performed until the battery has more charge
Even if it’s plugged into AC power

Currently waiting for it to charge.

Really digging this Nintendo exclusive. It’s not the easiest game I’ve picked up over the last couple years, but the puzzles rival Layton and the graphics include so many different styles of progress bars all of them delightful! The music, I’d describe as very ‘chill’.

February 21st, 2018 at 10:44 pm | Comments & Trackbacks (0) | Permalink

Finished Super Ghouls ‘N Ghosts (SNES)

This one, I streamed it live on Twitch. Thanks to those who joined in! The playthrough consisted of going through all levels of the game, beating the last boss, then doing all levels AGAIN and beating the new final boss to get the “real” ending. Completion time: about 2 hours 16 minutes.

This game was released by Capcom in ’91, making it very early-gen. It is notorious for being a finicky oldschool 2D platformer. It is all about double-jumping and its unique flavor of double-jumping is hard to get used to. It is easy to take damage and taking two damages kills you.

Something I like about this game is how it’s easy to just dive in and play without much time commitment. No long, annoying cutscenes, no tutorial, you just sort of blast right through. I practiced this game a bit while listening to an audio-book and it was a nice way to keep myself occupied. As some telegraphing is sound-based it’s not super mute friendly but you can do it.

It has some things going for it: the art direction is good for the time at which it came out, and the early and midgame levels are creatively designed.

The game is severely held back by the amount of content recycling. Enemies, bosses, level progression. The hardest-to-forgive is how it forces you to effectively play through the same content twice to get to the ending.

I don’t recommend this game. If you want a sense of what its art direction has to offer, play a different but related game Demon’s Crest.

February 14th, 2018 at 1:11 am | Comments & Trackbacks (0) | Permalink

Finished Minion (PC)

This is an indie game developed by a friend of mine. This game follows the visual novel genre, where gameplay consists of dialogue choices that branch out into many story possibilities.

For all games of this genre, sometimes the story outcomes and narrative flow are predictable based on your decisions; sometimes they aren’t. Seeing how it unfolds is a lot of what makes it fun, though.

In this game you play the role of a minion, the title character- the lowly servant to the sorcerer-queen Althea who rules over a medieval fantasy-type kingdom. Althea is powerful but so is her ego and her potential for cruelty. She doesn’t, as a default, consider the needs of her subjects. As her minion, you have the opportunity to step in and help the subjects of her kingdom! Or not. There are a lot of different choices.

The game doesn’t transparently show its statistics to you and it keeps things interesting. You draw conclusions about what actions cause what chages if any. For example, the ‘Exercise’ action appears to improve your combat ability. Also, ‘Reading’ will improve how sensitive or artistically inclined your character is. You don’t readily see the effects of your stats, but they will affect certain events such as the annual harvest festival competitions.

Playthrough #1: A neutral-good, middle-of-the-road strategy for all my decisions. BAD IDEA. I ended up battling the dragon and getting annihilated. Since I hadn’t developed my combat skill enough, I couldn’t fight the dragon. Since I hadn’t done anything selfish, I didn’t have combat items. Since I hadn’t unlocked the relevant events, I couldn’t enlist another’s help to fight the dragon for me. This game does NOT favor the ‘balanced build’.

Playthrough #2: Be completely useless. Do nothing all the time, read books if I have no other option. Don’t help Althea. Don’t help the townspeople. Don’t go to festivals or do much of anything. Althea ended up killing me for my insolence. I don’t know what I expected!

Playthrough #3: Kiss up to Althea. She is a sorceress-queen, so this should be a valuable relationship, right? I got her gifts, went to events with her, and chose dialogue options that made her happy. I *think* this unlocked some options where she can fight battles instead of me. This mostly worked out well, except for the battle at the end against the wizard. Whatever I did, I wasn’t able to ensure she or I or the kingdom’s army were powerful enough. I have a feeling there is a special ending involving Althea but I wasn’t able to get past this part.

Playthrough #4: Lawful-good warrior. Choose decisions that benefit the townsfolk, AND exercise all the time, AND get magic items (sword, armor, shield) even if it means hiding them from Althea and getting her mad at me. This ended up working out well. I was able to kill the dragon, AND the Wichaea guards, AND the wizard himself, and get a good ending!

Overall, I loved playing this game particularly because of the writing. The culmination of how your decisions affect later outcomes was interesting to discover and the writing was the vehicle for that. Dialogue was at times serious, and silly, and breaking the 4th wall and involving pop culture references. There is considerable depth you may or may not even get to see, depending on what story branch you take.

Still need to find out what happens if you don’t throw the One Ring into the volcano. Or how to improve my dancing ability. So many unanswered questions!

February 7th, 2018 at 1:39 am | Comments & Trackbacks (0) | Permalink

Source

January 23rd, 2018 at 2:37 pm | Comments & Trackbacks (0) | Permalink

Became Immortal in Deathwish (PC, Telnet)

MUD, MUSH, MUCK, and MOO, or MU*/ M** are classes of text-based multiplayer game which tend to be played over Telnet protocol. Originating from a time where there was Internet but no web browsers, many MUDs were popular in the 80s and 90s and some are still played today.

Deathwish has been continuously online since ’94, making it one of the oldest MUDs still in continuous operation.

Once called “Aaezure Odyssey”, I played it in the late 90s and early 2000s. The idea of playing a game over the Internet was really appealing, and graphical online games– while some existed– were a bad experience over the local dial-up. To describe this experience accurately, I didn’t have an Internet-capable computer at home for most of this, but it was a nice treat getting to play this game at my friend’s house, free computer hour at school or at the library. I had a friend in grade school where we’d sit down at her computer and play this game together and it was overall a good time.

In the game’s early days, the name Aaezure Odyssey was adapted because Deathwish was off-putting for some people. Since then the game has reverted back to its original name.

In 2001ish our family “upgraded” from a modem-less Apple II/c to a Windows 98 computer with working dial-up so I got a lot more opportunities to play these sorts of games. I tried out a lot of different MU*s of many different genres. But I never found one I liked as much as Deathwish.

My old character was definitely purged for idleness since it had not been logged on for about 20 years. I wasn’t sweating that too much, especially since I wanted a new toon so that I could re-experience the whole game. The purging policy used to exist to save server space. It’s not necessary now.

There were some artifacts of older times in the MUD documentation and in the MUD itself. It’s a remnant of a very different Internet. I swear somewhere there was at least one :₋). In the connected documentation to the MUD there was a helpful page explaining terms such as “lag”, “flame”, and “newbie”.

Fast forward to the current year. Log in, get past character creation and… there were actual other people playing this game. Not a ton, but… enough for it to shock me when I saw it. At odd hours, there would only be a few characters. On, say, a Saturday night, there would be 10-20 characters, with about 1-3 characters per human person. Seeing people playing and conversing with each other- this is on a MUD, in what is now the late 2010s. How? What is this? I’d type some ‘about’ command, and alongside the link to the normal hosted page, there was a Facebook link. What universe is this?

I rolled a mage as my main, and a paladin alt, partied them together and multi-played them in two side-by-side Telnet clients. The client I used had good support for scriptability so I was able to brush off my Lua, automate a lot of common actions and make the experience less grind-y and save myself some typing. Eventually, I had a cleric too, multi-playing three toons at once which is the limit.

There were moments in this game that were funny, fascinating, strange, surprising, and emotionally engaging. In some of the room descriptions and zone design you feel like there is entire world behind them even though it’s just text. It was such an adventure playing through the mortal playthrough. See, I thought I experienced a good amount of it the first time I played way back. But the game is deeper than I ever could have imagined.

Since I had reached the level cap I was given the option to “remort” my character- meaning, reset to level 1 except with some interesting improvements- or become immortal. Becoming immortal revealed a new game. That game is basically a meta-game. It is something awesome and really overwhelming.

January 6th, 2018 at 12:18 am | Comments & Trackbacks (0) | Permalink

From a shields-only play of Dark Souls I did with a friend.

We got past the first area, and it was was my turn to face off against the Taurus Demon. I was nervous since would the bash be prohibitively short range? How much damage would it do?

Ultimately it didn’t matter.

November 19th, 2017 at 9:16 pm | Comments & Trackbacks (0) | Permalink