Zero Zero: Perfect Stop (Train Sim)

It does look nicer indeed! Can't wait to try this one out. I can already feel the vibes of the game.

Much improved! A disadvantage is that the thick lines make the bar look solid at a distance.

Are you using lines thicker than 1px? Then I suggest the following:

  • determine the distance at which the individual lines become visible. This is the near threshold.
  • before the near threshold is reached, use a line width of 1. After the near threshold, use the current line width.

This produces a single switch in line width, hopefully not as noticeable because it happens when the bar is still small on screen.

2 Likes

It's been a minute since I made an update! I'm still working on it.

In terms of new gameplay features, the biggest things I have updated are adding a parallax background layer, and migrating the game to use framerate independent logic.

I was previously using 30FPS fixed frame logic, but I've been wrestling with keeping a steady 30FPS while adding graphics features. This was making the game feel sluggish whenever the framerate would fluctuate, and also meant the in-game clock was drifting quite a bit.

Ultimately, I decided to unlock the frame rate and implement deltaTime and use that across the game logic. The result was a smoother and more consistent game feel, and since the train motion was so gradual already, FPS dips became less noticeable when playing on the device. This also had the side effect of letting the game run at full 50FPS in simulator! (You can read more about this technique in this thread)

Here's some footage of the game running on the device with these changes:

After getting over that hump, I was stuck for a while about how to handle authoring the track data. I had a bit of a head start, because back in May I worked out how to estimate timetables given distances between stations, speed limits, etc. At the time, I used d3.js to help me because it was an easy way to draw custom graphs.

Here's a look at my Timetable tool back in May:

The trouble with the pseudo 3D presentation style is that it is tough to visualize a course layout in other modalities. Really, you need an authoring tool that can let you preview your work in the pseudo 3D style moving forward through the course.

I also wanted to leverage work I had already done. So, if possible I wanted to build on top of the timetable tool, without having to reimplement the pseudo 3D drawing stuff and worry about maintaining parity between that and the game.

The way forward I decided upon was:

  • Turn the timetable tool into an Electron app
  • Make it a "document" centric app (New/Open/Save/Save As) which operates on track data JSON
  • Use Windows Named Pipes to communicate between the Electron app and the game DLL

When the game connects, the Electron app dumps the track data to the game in a binary format I wrote for the game-ready asset. The game loads the level and maintains a live connection, which I will be able to use to author and live preview the levels.

Here's some shots of the editor app:



And a proof of concept of the live communication:
PlannerE_Live

So yeah, this is coming along, and hopefully should enable me to build up a full course soon for a demo!

13 Likes

The live editor is amazing! Well done.

Curves AND HILLS, impressive!

Are you still working on this? It looks really great.

(And also, I can't wait to play Penny's Big Breakaway by the way.)

1 Like

Hey, yes I am still working on it! I’ve had a few folks ask me lately. Just haven’t had the chance to make major progress recently.

Had some personal stuff happen earlier in the year, and now we are indeed in the process of closing out Penny’s Big Breakaway! (So glad to hear you’re looking forward to that)

I do have strong intent to get Zero Zero to a finished state… will pick it back up in earnest soon once my schedule permits. Playing recent Playdate releases like Gun Trails got me really fired up

2 Likes

Hi all,

It's been a little while. Thanks for your patience!

Throughout 2023, I was very busy shipping Evening Star's recent 3D Platformer game Penny's Big Breakaway, which consumed most of my focus and energy.

Now that it's out the door, I've brought my attention back to Zero Zero!

I have a more detailed blog post available on itch, but I will keep it snappy here.

After a lot of wrestling with real-time drawing performance, art workflows, and asset sizes, I've decided to pivot to a FMV based approach, similar to Grand Tour Legends.

Check out this vid of some early tests! (YouTube really loves the dither patterns)

Obviously a ways to go in terms of properly decorating the environment, but I really like this workflow and the resulting in-game look. Maybe it loses a bit of the retro flair, but I think the overall impression is significantly stronger. What do you think?

3 Likes

Looking cool!

How do you encode the video, and how much storage space does it end up taking? If there's still a track editor, does that mean there's a different video for each segment? How do you transition between two different videos?

My first reaction was "nooooo!" (Luke Skywalker impression)

But after reading the more detailed dev log I can see your reasoning and it does make sense. Particularly if there are no random elements in the game. IIRC some of the Densha de Go games also used pre-rendered footage.

In addition to the questions above...is the track pattern a test?

It seems you could have quite a large map. Or even use real life topography.

Right now I am using HTeuMeuLeu's tool, since it's quick and easy https://pdv.hteumeuleu.com/

The format has also been reverse engineered playdate-reverse-engineering/formats/pdv.md at main · cranksters/playdate-reverse-engineering · GitHub

The web tool seems fine for now, but I can always right my own tool if I need more control.

The space it takes up is very dependent on the length of the course in meters, and how far the distance steps between each frame are. After playing with it for a few days, I think the sweet spot is going to be around 10km, which should hopefully land around 12k-16k frames and 30-40MB.

I'm not doing a video for each segment... just one long video that goes through the entire course. The Playdate video API actually handles large videos fairly well on device. I was able to create and test a 100MB+ video that had about 100k frames, and it worked fine on device.

2 Likes

Yes I will admit part of me died inside, especially after I put so much time into making the pseudo-3D look work! But, I got to a crossroads where... I've already put way more time into this project than I probably ought to have, and I think this route will ultimately look better and make the project easier for me to complete.

And yes, the track pattern is just a temp checkerboard because I wanted to test the sense of motion. I still need to put some work into making it a proper railroad track!

re: real life topography, I actually already used BlenderGIS to do just that!

I will probably keep the topography, but will probably do away with the satellite imagery and go for something more stylized

6 Likes

Full steam ahead!

:sweat_smile:

Updates with additional visual development!

We got some fences and power lines! And trenches cut through the terrain to keep the rail level.

YouTube really doesn't like the dither patterns, so here is a GIF too. Hopefully it's properly crisp
zzps-20240527-trim

8 Likes

How did I miss this!? Looks awesome but it breaks my heart because I'm also working on a train sim.
Mine isn't 3D though, and it will never be.

Dropping in here to say:

  1. This looks SO FUN
  2. Impeccable art style.
  3. I might need to bug you about where you got your fonts.
1 Like

re: 3, I converted some Japanese public domain bitmap fonts and made them available on GitHub! GitHub - hunterbridges/PDFontConvert: TTF -> BDF -> FNT batch font conversion utility for Playdate

1 Like

Looking great!

Youtube tip: upscale your video to 1600x960 using a scaling method that retains blocky pixels. This is usually known as "nearest", "nearest neighbour" or "none"

If video editing is not your thing, you might try running on device and then record with Mirror using the menu option capture > capture at 2x zoom.

2 Likes

Hey good shout! I can probably do a simple upscale with ffmpeg…

Hi all,

I have been making steady progress over the past few weeks! I think I am going to be ready to start playtesting starting next week (week of June 24th)

If you’re interested in testing, please fill out the form here: https://forms.gle/TbRmqPjN9uBDicQTA

I am mainly pre-screening to keep the group size manageable for me, and to have a good mix of experienced and new players with this type of game.

Thank you!

3 Likes