dev, computing and games

Finished Donkey Kong Country 2: Diddy's Kong Quest. This was a co-operative gameplay I finished with a couple friends as a follow up to our completion of Donkey Kong Country 1.

Completion time: about a year, since we played in small increments once in a while.

Game is longer and a lot spicier than 1. Some levels gave us a very hard time. Yeah I am a big fan of the minecart autoscroller.

Time and time again I am really impressed by how much graphics can be fit on a SNES cart. The levels are all full of lush, irregularly-shaped (non-tiled-looking) elements without a lot of repetition; sprites are big with lots of animations, lots of frames in each one; backgrounds have a lot of variety. At the same time, it also doesn't appear they got too fancy with storage of graphics. I looked at the ROM and could spot at least some 4bpp graphics data stored plain, uncompressed. They just used a big cartridge-- 32mb, big for this console.

The technical high points for this game are offline rather than online of course. These are pre-rendered 3D models rendered with Silicon Graphics software, likely on CPU, baked into a bunch of 2D sprites. Everyone likes this. I can't think of a single fourth-console-generation game which does this and looks bad. More games would have surely done it if it wasn't so expensive back then, in terms of money.

Only criticism is I was disappointed with the final boss fight. The fight from DKC1 established a pretty high bar, to be fair- it had that cool "fake credits then surprise there's more". Not saying DKC2 had to replicate that, but maybe the final boss could have had something else cool. Nope. You fight King K Rool on a pirate ship. He throws projectiles. Pretty standard stuff. Maybe they thought no one would get far enough to see that, due to Windy H̶e̶l̶l̶ Well.

February 8th, 2020 at 6:23 am | Comments & Trackbacks (0) | Permalink

You know, tetris?

Computers can be used for many things. Reading books, watching sports games, communicating with others. In your life, you may even come to play some games on your computer. Some of those games may have been good. Some may have been fun. This is not one of those.

This is the game as usual with one thing changed: the camera is locked to the current piece in flight. It moves along with the piece, and rotates too. Suggestion: appreciate the concept but do yourself a favor and don't play it

https://github.com/clandrew/sirtet/

January 16th, 2020 at 9:38 pm | Comments & Trackbacks (0) | Permalink

One of my favorite retro sports games is Ice Hockey for the NES. This game gets overlooked because it's on the simplistic side and not tied to a real-life franchise, but it's still a good time.

I started getting into watching hockey streaming so I've been playing this game as something to do during intermission or when waiting for the game to start. One thing led to another and I ended up making a romhack to change the sprites over to be female looking.

Before:

After:

Some more gameplay

Here's a demo of using the tool for simple task of crossing-out the puck sprite

Instead of crossing out the puck I made other changes to the sprites of course, and used this tool to import them back into the ROM.

Ultimately it may have been possible to use someone's already-made tool in lieu of making a new one. I tried one, YY-CHR since it's popular. But, I had problems getting it to understand externally-pasted or externally-imported images, and YY-CHR's built-in image editor was not sufficient for my workflow. If that one didn't pan out, it may not bode well for the others. Since I was familiar with the image formats it was not too much to simply make a new thing.

About this game's mechanic, if you aren't familiar- this is 4-on-4 hockey. Skater players come in three varieties: light, medium and heavy.

  • The light skater is fast but has a weak shot and can be knocked over easily.
  • The heavy skater is slow but has a strong shot and tends not to get knocked over.
  • And, the medium skater is in the middle.

You pick what type your 4 players should be. A typical game involves a balance of skaters, although ultimately it's up to you.

The players, ref, goalie and zamboni driver are edited. 👍

To play it you don't need to use the tool, of course. I'm posting a patch so you can just patch your ROM.

Click here to download the patch (IPS). Patch was created using LunarIPS. LunarIPS is also recommended for applying patches. Apply the patch to an unzipped, NA release ROM, size 40976 bytes. Don't hesitate to contact me if you want to play but don't know how any of this works, I'll set you up.

And click here to download the source spritesheets if you want them for some reason.

If you want to change the sprites to fit your own creative inspiration, you too can use the tool I made, posted to GitHub here.

Update (1/15/2020): Fixed missing bun in one frame of heavy player animation, fixed back-of-ref's-head-during-penalty animation

January 13th, 2020 at 8:25 am | Comments & Trackbacks (0) | Permalink

Finished Code Vein (PS4)

Visual style: modern JRPG
Gameplay: Souls-like

The game takes place in a dystopic future where vampires were created to fight in a war against an evil force. Bad news #1 The government is trying to get ways to harvest blood to sustain the vampires, but it's not going as smoothly as they hoped. Bad news #2 the evil force is not really gone.

One innovation they added is a 'companion' system where an AI-controlled NPC accompanies you basically at all times. The AI is competent and not a liability like in some games.

The game improves on Souls in some areas.
- Online matching system. Match with anyone! Your and their levels are scaled to match so it's fair.
- The class system makes it so you can't irreparably screw yourself through uninformed decisions.
- A map
- Healing item cooldown makes it harder to accidentally waste heals
- AI is 'smart', doesn't randomly jump off ledges.

I was nervous they might have strategically put the best environment in the demo I played. But, no, the demo was representative. The environments were consistently good. Big complicated areas, detailed rooms without copypaste, interesting stuff to look at far into the horizon.

Although the game is not perfect (nothing is, right?), no one in the art team seems to care about CLIPPING, as far as I'm concerned it's a 'perfect score' game. It doesn't happen every day there something which takes so many interesting risks, turns, stylistic decisions.

Although I did 4 playthroughs I still want to do some more things. A bunch of the replay-ability comes from the multitude of classes ('blood codes') and multiple endings, which range from 'uplifting' to 'stomp your heart into a zillion pieces'.

The game is a bit violent and sleazy so maybe not appropriate for all audiences. But it is really good. I hope there will be a sequel or DLC.

December 8th, 2019 at 10:15 pm | Comments & Trackbacks (0) | Permalink

I made a tool for converting a spritesheet into an animated GIF.

This program was borne out of a similar situation as the text editor one. I needed some functionality that was super simple but couldn't find exactly the right thing in an existing program.

I used to use a web application for doing work like this, but I don't like depending on web apps where it's not strictly necessary. Why, because when you upload your files or data somewhere, you're putting a lot of trust in that other party. They probably wouldn't mis-use your data, and the data isn't anything sensitive anyway, but the principle of it is undesirable.

There's also the fact that a web application is so much overkill for the task at hand. Think about it. Why do I need a full web stack, javascript interpreter, communication across text protocols, etc for something so simple like resizing an image, or changing the encoding? It boggles the mind. It's like SHOUTCLOUD but not ironic. I have nothing against web applications, but I don't think everything needs to be a web application. That stack is too thick.

As for the whole world heading to web applications, maybe that's inevitable. This idea could become feasible as internet infrastructure improves- in many countries it is not all that fast or always-on-and-everywhere, right now. The principle of a thin client with a smart server and a good internet connection seems interesting.

But why do these this future "web app" need to run in a browser? Why does it need to be built on HTTP, of all things? Remember, there's a difference between "internet" and "web pages". There was internet before web pages. There might well be internet after them. What is so holy about HTTP? It's hard to see anything good or holy about it, other than it's a standard (ish!) borne out of 2 decades of blood and tears. If you've had to do any work on a web browser, you'd know. I did a little. I've seen enough.

Indeed, a thin client can't even be all that thin if it can parse and display web page content. HTML5+Canvas, CSS, JS, SVG, weird extensions and back compat... there are a lot of sub-technologies required to get a competent web browser and light up even basic, typical scenarios. A lot of things could work via a simple page but in practice they do not. In the late 2010s it's not uncommon to see >10MB payloads for viewing a single site, and for pages where that payload isn't all images or video- pretty common- you can imagine the CPU necessary for unpacking some of that.

Put it all together with the fact that local computation, device battery life and internet connectivity haven't really kept up with rising web site complexities. If they did, none of this would even be a problem. I wanted to hold some optimism for here for phone apps but I highly suspect they're usually coded as web applications, hosted in web browser containers anyway.

It's nice, the idea of side-stepping that entire stack and running a program natively on your computer. If the program was written competently, it has a good chance of not being flaky. At least, it is not likely to be screwed by tech on which it is built.

Web pages are good for some things, things based around displaying text and images which are updated remotely. Maybe some light games. But you should probably not run your traffic lights, your pacemaker in a web app.

Anyway, as for this program- it runs natively, and includes some features that are useful for what I needed out of it.

Find it here on GitHub.

November 20th, 2019 at 12:22 am | Comments & Trackbacks (0) | Permalink

A cool (and hot!) boss fight in Code Vein. Guest appearances from Louis and random internet person.

November 4th, 2019 at 10:40 pm | Comments & Trackbacks (0) | Permalink

Am I the only one annoyed by the phrase "buttery smooth UI"? It has this tendency to mean "unnecessary transitions, 2D graphics with surprisingly high cost"

September 24th, 2019 at 7:35 pm | Comments & Trackbacks (0) | Permalink

Total play time = 2 years, 156 days, 20 hours, 36 minutes, 39 seconds

Couple friends and I started playing back in April 2017. The progress isn't deliberately slow, it's just that we playing a half-hour or an hour here and there, once in a while and it's a proper full-length RPG. Furthermore we made a best effort to play it spoiler-free with as minimal outside help as possible.

I never beat this game before. SoM is in the category of "played as a child by repeated rental, wanted to own, couldn't get a copy".

It is hard nowadays imagining "not being able to purchase something" but was the situation here. If no video or toy store in our city had it then out of luck. There were also toy catalogs where you can phone or mail in an order, but they weren't a whole lot better in terms of the video game selection. The one place I could find that had Secret of Mana had it for rent. So I rented it repeatedly. I still had to take it back at certain intervals and some jerkface wiped my save. After that I became demoralized and moved on to playing something else (Uncharted Waters 2)

Fast-forward to today and I have every game in the world. This one has a lot of critical acclaim, and still has some love today (it got a remake last year), it deserves playthough to the end.

Originally I thought I'd move onto the remake after finishing this, but after reading some reviews, maybe not 🙁 It's just as well, initially I was kind of turned off by the graphics. When early gameplay came out I recall telling people it looked Bad. Like some free-to-play MMO from ~2006. It reminded me of Audition Online. I don't know what's up with the art direction. Apparently there are problems with the soundtrack and gameplay also... How did they mess this up? I may someday play it anyway but give it a while.

This game had a lot of positive qualities, it deserves to be on all those top-10 lists. 
- The soundtrack is very strong
- Large sprites with nice animations
- Many cool concepts for bosses, large enemy artworks
- Willingness to make a three-player SNES game represents a lot of technical initiative

The one thing that was almost a problem- it is borderline on the "turn based games disguised as action games" genre. 
You know. Practically very MMORPG does this. The combat works like: you and the enemy can both be freely positioned in the world, and can attach each other, but the attacks always land regardless of how you are positioned. Why have the positioning mechanic at all, then? Why not just have a menu? If they shoot an arrow or something it's not like you can move out of the way. I know why they do it in MMOs, but I'm less on board in any locally-played action game.
I suppose this bothers me because it encourages you to waste brain cells in combat trying to move around the map when you might as well just stand there.
Fortunately, this game doesn't 100% do that, it's only for certain attacks. Some experimenting helped figure this out. For other ones, you can move out of the way, sometimes outside of a hitbox that seems rather big.

On a whole I loved playing this game, and getting the chance to play it co-operatively even though it's long after the fact.

September 16th, 2019 at 11:30 pm | Comments & Trackbacks (2) | Permalink

Finished 7 Billion Humans (PC) + all size+speed optimizations, all achievements

This is a programming-themed game, similar to Human Resource Machine, where you have a drag-and-drop interface to program in a pseudo-assembly type thing.

The big difference is 7 Billion Humans is "multithreaded". You program the actions of not just one worker, but many (sometimes, dozens) that all run the same program concurrently. There are some instructions "tell" and "listen" which help synchronize. For example one worker can tell another "Coffee time!", unblocking another worker that has stopped, and is listening for Coffee Time. Workers can be in eachothers' way, and you may want to avoid them taking paths where they collide with each other. Certain workers have resources dedicated to them, that others cannot use or else BOOM they explode (literally).

Compared to HRM and most computer assembly languages, 7BH has some conspicuously powerful instructions.

When optimizing for speed you come to learn about how the game computes "performance cost" since it is not totally intuitive.

For example,
if (X == 5 and Y == 3) or Z == 12342
is the exact same cost as
if (X == 5)

Also,
"Take two steps to the left"
can (in, at least some circumstances) be the exact same cost as
"Find out where in the room the nearest printer is- it might be around a maze of hazards, obstacles, whatever- and go to it"

The latter, you'd think would be an expensive and complicated path-finding operation but the game gives that one to you for free. Maybe, with the idea that you've got enough other things to deal with and it is probably right about that.

My solutions are in this GitHub repo
https://github.com/clandrew/7bh

September 7th, 2019 at 6:27 pm | Comments & Trackbacks (0) | Permalink

Finished J.R.R. Tolkien's Lord of the Rings (SNES)

This is an action-RPG based on the book series, pre-Peter Jackson movie IP.

This game has some cool moments and good atmosphere and potential to be good. Still, it was held back by many technical problems. This game ended up being a rabbit hole into something else.

A couple weeks ago, I cleared the last boss, the Balrog using the full party (minus Gandalf, since having him in your party prevents you from beating the boss; also Boromir is E_NOTIMPL) and finished the game but didn't get such a good ending because Merry and Pippin died in the boss fight. They die really easily.
So last Saturday, I booted up the game with the intention to resume at the boss fight, attempt it again and keep them alive.

However the password I had written down was rejected by the game. I swear to goodness I wrote it down correctly. I went upstairs to my computer, reproduced the situation with an emulator. It turns out, the game will indeed give you invalid passwords and that's what happened here. So I went about trying to figure out how to "fix" my password.

The password system itself involves encoding a bunch of the game state in a certain way with a checksum. This game is a bit unusual in that there are no saves to the cartridge, it hashes together literally all the state into a 48-character-long password. It took a bit of effort, but I figured out how to derive the password. From there, how to un-glitch my password and preserve the progress I had (items, character stats, door open+close state) while letting it be accepted by the game. With this, I was able to re-attempt the boss fight and get the good ending!

After trying many different passwords looking for patterns, I cracked the password algorithm. It was not too much more work to put it into a program in case other people run into the same issues.

I posted the program to Github https://github.com/clandrew/lotrpwcheck/ .

As for the ending itself it was pretty cool, there is a scene where you meet Galadriel and she shows you the mirror. Although they never released a Vol II for SNES, I can see the next one picking up where this one left off.

September 5th, 2019 at 1:49 am | Comments & Trackbacks (4) | Permalink