Skip to content

High-stakes strategy game about solving alignment without accidentally destroying the world. Mobile-first design, React -> PWA.

Notifications You must be signed in to change notification settings

mmKALLL/the-final-decade

Repository files navigation

The Final Decade

The Final Decade is a high-stakes resource management strategy game about leading an AI safety research team. It addresses a bone I have with mobile strategy games: they tend to be consistently clearable with simple heuristics.

This game on the other hand is designed to hone into the core of what makes strategic decisions interesting: they should affect things without being obvious, be asymmetric to prevent heuristics, input-random to prevent memorization, simple enough to understand at a glance, yet layered enough to make first-order optimization obviously bad.

It is a spiritual successor for an earlier prototype I made called Alignment is Hard, but written as a PWA using TS+Node instead of Dart+Flutter. The former setup brings me joy while the latter feels like a misstep at every juncture.

Play now at https://studioesagames.com/tfd/

How to play

The game begins by selecting three team members and two breakthroughs.

Each action takes one turn and represents one month. Between actions, your team produces resources and costs money.

You can find more details about resources and terminology from the info icons on the right side of each section. (Yes I know the positioning is off on desktop.)

At the top of the screen, actions are divided into three categories:

  • First-order actions: Directly generate resources
  • Second-order actions: Generate things that generate resources
  • Third-order actions: Apply multipliers to resource generation or help fulfill win conditions

Victory and loss conditions

  1. Primary goal: End each year with the yearly goal (at the top of the screen) completed.

    • Red text = cost
    • Blue text = requirement
  2. Secondary goal: Avoid running out of money.

    • Use contracts (middle section) to convert resources into money
  3. Ternary goal: Keep your ASI outcome above zero.

    • It increases/decreases by the value of public unity each turn
    • Public unity itself decreases by 1 at the end of every year
    • You also lose if trust or influence reach zero, but that is very rare

Other advice

If you're not sure what to do, one starting point is to use first-order actions to generate the resources required by the first yearly goal.

Once you consistently pass the first year, you can start optimizing for the next one ahead of time. You win the game by making it to 2030. Good luck!

Deployment

For PWA, use the PWABuilder extension in VS Code to package the app for Android. Follow these steps:

  • Delete the package zip file if it exists (yes, this is mandatory)

  • Copy the URL for the manifest to clipboard: https://studioesagames.com/tfd/manifest.json

  • cmd + shift + p -> "PWABuilder Studio: Choose existing web manifest", select ./public/manifest.json

  • cmd + shift + p -> "PWABuilder Studio: Package your PWA" and input each of the following -> android -> https://studioesagames.com/tfd/ -> https://studioesagames.com/tfd/manifest.json -> com.studioesagames.the_final_decade -> version can be incremented -> No advanced settings -> No need to open URL

  • After receiving the zip file, save it into the project root and extract -> If you get a "not valid zip file" error, it is actually ASCII with an error message. Open the .ZIP in VS Code instead.

  • Follow https://docs.pwabuilder.com/#/builder/android?id=publish . The steps are: -> Create a new internal/closed release at https://play.google.com/console/u/5/developers/7434546168421707608/app/4972302199314095122/tracks/4700274036132830062/releases/1/prepare ---> Play Console > Project > Test and Release > Internal/Closed testing > Create new release -> Upload the AAB file from the extracted zip ---> Name it like 1.0.0.0-initial-release -> If necessary, update the signing key. Use the Play Console's "update signing key" > "Java keystore" and follow instructions. pepk.jar is already installed in ./key-signing/pepk.jar ---> for the signing key instructions step 3, run this in the project root: ( cd key-signing && JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-25.jdk/Contents/Home java -jar pepk.jar --keystore=../com.studioesagames.the_final_decade/signing.keystore --alias=my-key-alias --output=tfd-keystore.zip --include-cert --rsa-aes-encryption --encryption-key-path=encryption_public_key.pem ) ---> for the passwords, check the details at com.studioesagames.the_final_decade/signing-key-info.txt -> Confirm that the upload finishes and validation starts -> Enjoy well-deserved rest!

  • (TODO) Upload the assetlinks.json to studioesagames.com/tfd/.well-known/assetlinks.json for Play App Signing; hasn't been needed for keeping account alive yet. Follow https://docs.pwabuilder.com/#/builder/android?id=publish

About

High-stakes strategy game about solving alignment without accidentally destroying the world. Mobile-first design, React -> PWA.

Resources

Stars

Watchers

Forks

Packages

No packages published