error-message
success-message
saving-message
warning-message
JavaScript must be enabled.
There was an error retrieving this content.
The content could not be found.
JavaScript must be enabled.
There was an error retrieving this content.
The content could not be found.
August 19, 2020
# Upsidetown
Created conveniently for "GAMES MADE QUICK??? FOUR+" by Dr. Dos
Requires [ZZT v3.2](https://museumofzzt.com/file/z/zzt.zip) and
[Zeta](http://zeta.asie.pl/) to run.
Windows users can run UPTOWN.BAT with Zeta and ZZT installed to load the font
and Zeta automatically.
Linux users should run `zeta86 -e UPSIDE.COM -e ZZT.EXE`
To play without the font, just run Zeta directly.
## Description
"Upsidetown" is simply Tim Sweeney's 1991 ZZT world "Town of ZZT" flipped
vertically. It was done mostly as a goof. Something simple (so I thought) that
could be finished quickly enough during a jam in which I was more invested in
watching speedruns more than anything else.
Originally, I was going to mirror the world horizontally but then I realized
Upsidetown is a good pun.
## Guidance for non-ZZTers
If you've never played ZZT before, simply choose keyboard and color on the main
screen and hit "P" on the game's title to begin playing. If you're using the
font the text will be a bit hard to read.
Arrow keys move. Shift + arrow keys shoot. "T" lights a torch. "S" saves. Town is
most people's first ZZT game so it shouldn't be too hard to learn what things
do. It does however have a few possible softlocks, some of which won't be
immediately obvious. (Save before you do anything in the bank.)
You can use "?" to open a cheat prompt where you can use the following cheats:
* "HEALTH"
* "AMMO"
* "TORCHES"
* "GEMS"
* "KEYS"
* "ZAP"
The cheats are not case sensitive. "?ZAP" can be used to erase the tiles
adjacent to the player.
## Development
The process for turning Town upsidedown begins with a script for Zookeeper
that takes an input world and flips the board layout and stats. I actually wrote
the script a few days prior to the jam as just a silly idea I had, then realized
there was more effort needed to actually get a fully playable game out of the
script and shelved it like most things I start.
But then the jam happened and I didn't have any better ideas so I went back to
it.
The script only properly handled the most obvious of things which meant that
after it was done generating a new world, I had to manually make several changes
by hand including:
* Replacing all directions in ZZT-OOP (so /n/n/n became /s/s/s)
* Changing the direction of transporters
* Changing the direction of blinkwalls
* Changing the direction of duplicators
* Changing the direction of conveyors[1]
In reality, modifying the script to do everything but ZZT-OOP should have been
trivial, but I already had flipped the OOP first and didn't want to have to
merge my work with a better script output.
Also in reality, the code in Town at least is simple enough that I probably
could have rigged up ZZT-OOP flipping as well.
Even as I wrote the script for flipping, I knew that a smarter idea would be to
use the Reconstruction of ZZT's source code to straight up draw the board
upsidedown and not have to modify the ZZT world whatsoever, but then I'd have
to write Pascal instead of Python, and let's be real this is a novelty at best.
With the project mostly completed I realized that actually the easiest way to
play some upsidedown ZZT is to use a web browser build of Zeta and just apply
the CSS `transform: rotate(180deg);` to the canvas.
Also I made a font that turns code page 437 upsidedown as well. I tried doing
my final full run test of the game with it, and promptly quit as it was totally
messing with my mind and I was struggling to cross the three lakes board.
Also also my script had a few bugs in it which meant more hand-fixing things
than I would have liked, such as corrupting the last board, or breaking horribly
when the player was located on the very top or very bottom row. This is one
reason why I didn't release the script. The other reason is that it requires a
yet unfinished updated version of the Zookeeper library for manipulating ZZT
worlds that I'd also have to distribute for anybody to be able to use it.
## Cool Links
* [Museum of ZZT](https://museumofzzt.com) - A modern archive of 2000+ ZZT
worlds which can be downloaded, explored, or played in a browser
* [Worlds of ZZT on Twitter](https://twitter.com/worldsofzzt) - A Twitter bot
which posts screenshots of random ZZT boards every three hours and serves as
the main source of news about ZZT
* [Worlds of ZZT on Patreon](https://patreon.com/worldsofzzt) - I work on the
Museum and write about ZZT games. This is patron supported if you'd like to
offer financial support.
* [Worlds of ZZT on Discord](https://museumofzzt.com/discord) - Come hang out
with us and talk about ZZT games and make ZZT games. We'd love to have chill
people who enjoy creating.
[1] Depending on the way they're used, you might not have to change them at all.
Boards like the mixer play just fine, and you can use the boulders in the armory
to still get the guardian's key, but the final challenege needs them to be
flipped in order for the player to be able to exit the room with the tigers
unless the player wants to abuse ZZT's pause mechanics.
This section tracks other objects or external resources.
The external resources, such as tarballs or Git repositories, are then available as part of the object. Their files can be considered local to the object and usable in scripts or as part of a build process.
For resources that are only to be used as part of the build or runtime of the object, it is best to describe those local to those sections.
JavaScript must be enabled.
There was an error retrieving this content.
The content could not be found.
JavaScript must be enabled.
There was an error retrieving this content.
The content could not be found.
Confirm message?