Last Harvest
Contents
  1. Playing
    1. Starting a run
    2. The two screens
    3. Controls
    4. A night
    5. Difficulties
    6. Powerups
    7. The title menu
    8. Saving screenshots
    9. Photo mode
  2. Weapons, passives and zombies
    1. Weapons
    2. Passives
    3. Zombies
  3. Making things
    1. Where files go
    2. Enemy cards
    3. Player cards
    4. Props
    5. Maps
    6. Mod packs
    7. Data files
  4. The card editor
    1. Buttons
    2. Making a card
    3. The Stats page
    4. The Data pages
    5. Props and maps
    6. Game data
    7. Offline use
    8. On an iPad or phone
  5. The sprite editor
    1. Tools
    2. Stands
    3. The previews
    4. History
    5. Cards
    6. Props
    7. Maps
    8. The Data pages
    9. On an iPad

Last Harvest manual#

Last Harvest is a zombie survivors-like for the ANBERNIC RG DS Plus, and it also plays in a browser. You walk a farm through one night while your weapons fire on their own, then run home at dawn. This manual covers how to play first. It then shows how to make your own zombies, looks, props, maps and mod packs with the two editors. Build setup, device notes and developer tools live in the README.

Playing#

Starting a run#

Choose Play on the title's bottom screen to start a run. Each run takes place on a newly generated farm, or on the map the title's Map row picks. A generated farm has a road with a gas station, and a farmhouse and barn joined to the road by dirt paths. Fenced crop and corn fields, a windmill and a graveyard lie around them. Trees, wrecks and barrels lie scattered across the farm.

The two screens#

The top screen is the main view, in 2.5D. Every sprite's silhouette stands extruded into depth, lit by your lantern and fading into fog. You see the farm from just behind yourself.

The bottom screen shows the same farm from above at twice the art's size. Dots mark what the main view faces. Tap it to throw a grenade.

In a browser, pick One screen or Two screens as the game starts. One screen, the default, fills the window: menus show both screens side by side, and a run plays on one screen with on-screen controls (see On a phone). Two screens share the window, the top screen above the bottom, as on the handheld. The button at the top left fills the whole screen, and a second press, or Esc, leaves it.

Controls#

Your weapons fire on their own. You move, turn, throw grenades and pick upgrades.

ActionDevicemacOS and browser
Walk forward and backUp and Down, or the stickUp and Down arrows
StrafeLeft and Right, or the stickLeft and Right arrows
TurnY and AA and X
Turn aroundBZ
Aim at barrelsHold XHold S
Throw a grenadeTap the mapClick the bottom screen
Pick an upgradeTap it, or Up, Down and XClick it, or the arrows and S
Show the whole mapHold L1Hold 1
PauseStartEnter, or Esc
Choose a difficultyLeft and Right on PlayLeft and Right arrows on Play
ScreenshotR1W
VolumeV+ and V-= and -
Back to the menuBack, or B after a runTab, or Z after a run
Back out of a menuBZ, or Esc
QuitHold Home for one secondCmd+Q, or close a window

One screen#

Settings > Screens set to One plays a run on the top screen alone; the bottom screen goes dark. The map is still there, but looking at it means losing sight of the 3D view.

ActionDevicemacOS and browser
Show the map, liveHold L1Hold 1
Aim a grenade, in slowed timeHold L2, then the d-pad or stickHold Q, then the arrows
Throw itLet go of L2Let go of Q
Cancel the throwBZ
Show the whole map, pausedHold R2Hold 2

Your grenade count shows only on the map; a grenade on your belt means one is ready. With none ready, L2 shows the map at full speed and clicks. While you aim, you keep walking the way you were going, and after 3 seconds the grenade throws itself. The cursor starts where your last throw went, relative to your view, if that was under 5 seconds ago, else straight ahead.

On a phone#

A run plays on one screen with controls beside it, or under it when the phone is upright.

ActionTouch
Walk and strafePut a thumb down left of the picture and drag; the stick follows it
TurnSlide a thumb sideways on the strip under Around; further turns faster
Turn aroundAround
Show the mapTap Grenade; tap it again to put the 3D view back. You keep moving
Throw a grenadeWhile the map is up, tap where it should land
See the whole map, pausedHold Map, above the stick
Pick an upgrade, or a pause choiceTap it
PausePause

Putting the map away never throws, and nothing slows down. That is the Touch style; Settings > Grenades set to Pad makes Grenade (and L2 on a gamepad) aim with a cursor in slowed time instead, held and let go, as on one screen, which suits a handheld with buttons. Settings > Touch controls picks when the controls show. Auto, the default, hides them when you use a gamepad or keyboard and brings them back at your next touch; On keeps them up; Off leaves them out for good, as on a handheld with buttons and a touch screen: menus show the bottom screen, the title shows the menu over its picture, and L2 aims grenades. Until you press a button or move a stick, a touch turns Off back to Auto, so a phone without buttons never loses its controls.

In a browser, Esc and Home do nothing, and neither do screenshots, brightness or rumble. Sound starts with your first click or key. A gamepad in the browser's standard layout maps by its labels, as on an Xbox pad:

The browser keeps your save in its local storage. To add a mod pack, press Add mod… on the start screen and pick a .pak; × removes one. The browser keeps them for next time. On the game's site, everything you've saved in the card editor plays too, with no Export needed. For the full key map, see Controls in the README.

A night#

A night lasts ten minutes, from dusk to dawn. A bell rings each minute.

Start pauses a run. The pause menu offers Resume, Settings, Photo mode, New farm and Quit to title.

Difficulties#

Pick a difficulty under Play with Left and Right, or tap its arrows. A new save starts on Easy, and the game remembers your choice.

DifficultyBitesHealth dropsYou start with
EasyGentleOftenA pistol, a knife and two grenades
NormalThey hurtScarceA pistol, a knife and a grenade
HardEvery bite countsRarer stillA pistol, a knife and a grenade

A player card can change what each difficulty starts you with. See Player cards.

Powerups#

Powerups are the weapons and passives that level-up cards offer. Each level-up offers three cards, drawn from 17 weapons and 17 passives. A run carries at most six weapons and six passives. Once both are full, the cards only offer levels for what you already carry. When nothing is left to level, the cards offer a snack, an ammo crate or pocket change.

The first level-up takes just 2 money. Each one after costs more.

Zones#

Each weapon covers a zone, shown on its card:

Finds and unlocks#

Eight powerups are open from the first night. Each of the rest has a condition: a number of kills, a long enough night, a level reached, nights played or dawns survived. Kills and nights add up over every run. Night length and level count your best single run.

Meeting a condition only makes the powerup findable. From then on, a level-up may offer it on a green FOUND card. Taking that card unlocks it for good.

The title screen shows how many powerups are unlocked, how many wait to be found, and the condition you are closest to. The game-over screen names what the run found.

Chests#

The biggest finds appear only in the chest a horde's leader drops. Picking up a chest gives you a free level-up. That level-up holds a find whenever one is waiting.

The title menu#

The title's bottom screen lists Play, Map, Settings, Stats and Credits. Up and Down choose a row, A or a tap opens it, and B goes back. The top screen shows the game's version in its top-left corner.

Saving screenshots#

R1 saves both screens, the top above the bottom, as screenshots/shot-NNNN.png beside the save.

Photo mode#

Choose Photo mode from the pause menu to frame a shot of the run, horde and all. Nothing moves until you leave.

ActionPadKeyboard
Turn the camera around youLeft / Right, or the stickLeft / Right arrows
ZoomUp / DownUp / Down arrows
Raise or lower the cameraHold L1 with Up / DownHold 1 with Up / Down
Choose a setting: Time, Fog, Lantern, Pose, Props or PlaceL2Q
Change it; on Pose, pick the next zombie; on Props or Place, drop the chosen prop on the crossR22
On Pose, turn the picked zombieLeft / Right, or the stickLeft / Right arrows
On Pose, step its frameUp / DownUp / Down arrows
On Props, choose a propLeft / Right, or the stickLeft / Right arrows
On Props, turn the last prop droppedUp / DownUp / Down arrows
On Place, move the cross where props dropD-pad, or the stickArrows
On Place, put the cross back where the camera looksXS
On Props or Place, take back the last prop droppedYA
Take a photoR1, or tapW
Back to the pause menuB or StartZ, Enter or Esc

The settings change only the picture, never the run, and go back to the run's own when you leave. Time steps through Midnight, Small hours, First light, Daybreak and Dawn, then back to Now. Fog goes from Clear through Thin, Usual and Thick to Pea soup. Lantern goes from Out through Dim, Usual and Bright to Blazing. The help shows each value and puts the chosen setting in brackets.

Pose lets you set up the zombies in the shot. R2 picks the zombie in the picture nearest where the camera looks, and each press after picks the next of the eight nearest, then back round to the first. A marker points at the one picked. Left and Right then turn it instead of the camera, and Up and Down step its frame forward or back, through its walk and then its hurt, flash and dead frames; the turn strip on a phone still turns the camera, and L1 with Up / Down still raises it. Dead, it lies on the ground as the game lays its corpses, on its card's dead frame or else its front hurt frame, and Left and Right turn it where it lies. A posed zombie starts in its walk, and goes back to how the run left it, standing, when you leave.

Props lets you dress the shot. Left and Right choose a prop: a barrier, barrel, tank, hay bale, haystack, scarecrow, tombstone, sign, mailbox, skull fence, dead or tall tree, stump, log, bush, corpse, gas pump, tractor, truck, car or wreck, then any props of your own loaded from mod packs or the props folder, by name. R2 drops it on the cross on the ground, its front to the camera, and a marker points at it; Up and Down turn the last one dropped. Y takes the last one back, and so does R2 on Take back, the choice after the last prop and before Barrier. The help counts how many are in. Props stand only in the picture: zombies don't see them, and they go when you leave.

The cross starts where the camera looks. After each drop it steps aside to the right of the prop, so props dropped one after another stand in a row; where the edge of the map or the cross's reach stops the row, it grows from its left end instead. To put one somewhere else, choose Place: Left, Right, Up and Down slide the cross across the ground as the camera sees it, Up away from you, up to 12 tiles from you and never off the map, and R2 drops the chosen prop there. X puts the cross back where the camera looks. The help says how far out the cross is; when it is out of the picture, it waits at the edge nearest it, along the bottom when it is behind the camera. On Props and Place the map on the bottom screen shows the cross too. On Take back, R2 on Place takes back the last prop, as on Props.

A photo leaves out the HUD, the guides and the help. It saves the top screen as screenshots/photo-NNNN.png beside the save, and its middle square, the one the guide outlines, as photo-NNNN-square.png. On a phone the touch stick and turn strip move the camera, the Grenade key chooses a setting and the Map key changes it (on Place the stick moves the cross; on Props, choose Take back to remove one), and a tap on the picture takes the photo. Where the game can't save a file, in a browser, on Android and on muOS, R1 or a tap hides the guides instead, so your device's own screenshot comes out clean.

Weapons, passives and zombies#

These tables list what the game ships with. A mod pack can change any of them, and a card can add zombies.

Weapons#

Weapons attack on their own, each in its zone. Each weapon levels up to its highest level, and every level changes its numbers.

WeaponZoneUnlocksLevelsOn its card
PistolAheadFrom the start8Shoots whatever's in front of you, else the nearest
ShotgunAheadFrom the start8A spread of pellets at close range
Hunting rifleAhead500 kills over every run8A slow, heavy round straight down your heading
Lantern beamAheadSurvive 2:00 of one night8Your light burns and slows what it falls on
Weed burnerAhead1500 kills over every run8A short cone of flame that sets them burning
PitchforkAhead3000 kills over every run8Skewers everything in a line in front of you
KnifeAroundFrom the start8Slashes everything close by
ScytheAround100 kills over every run8A full sweep all the way around you
CrowsAroundSurvive 4:00 of one night8Birds circle you and peck at what they touch
Bug zapperAround2000 kills over every run, then found from minute 28Lightning that jumps from one zombie to the next
Farm dogAround1 dawn survived8A good dog that runs down whatever comes close
TacksBehind250 kills over every run8Scattered behind you; they hurt and slow
Gas trailBehindSurvive 7:00 of one night8Leaves a line of burning fuel where you walk
Back holsterBehindSurvive 5:00 of one night8A sawn-off that fires behind you
Scarecrow decoyBehind4000 kills over every run, then found only in a leader's chest8Dropped behind you; draws them in, then bursts
MolotovMap1000 kills over every run8Lobbed into a crowd, leaving a pool of fire
Flare gunMapSurvive 9:00 of one night, then found from minute 48Lights up a far crowd, and burns it

Passives#

Passives change you or every weapon at once. Their effects add together, and each level raises the total. A passive with a percentage scales the matching stat on every weapon.

PassiveUnlocksLevelsOn its card
Hollow pointsFrom the start5More damage for every weapon
Quick handsFrom the start5Every weapon attacks faster
Running shoesFrom the start5Move faster
Canned peachesFrom the start5More max health, and a bite to eat now
Deep pocketsFrom the start5Pick up money from further away
Work jacketLevel 5 in one run5Takes the edge off every bite
Garden tea2 nights played5Slowly heals you
Sharp eyeLevel 8 in one run5A better chance of a critical hit
Bigger blastLevel 12 in one run5Wider sweeps, pools and explosions
Long barrelLevel 10 in one run5Weapons reach further
Lucky penny5 nights played5Rare cards turn up more often
Pawn shopLevel 14 in one run5Money is worth more
Heavy rounds2 dawns survived, then found from minute 35Hits shove harder, and bullets go through
Brighter lantern5000 kills over every run5See wider and further ahead
Vaccine5 dawns survived, then found only in a leader's chest2When you start to turn, you come back as yourself
Grenade belt3 nights played5More grenades, sooner, and they scatter bomblets
Fuel drums3 dawns survived, then found only in a leader's chest5Blown barrels come back, and blow bigger

Zombies#

Zombies rise through the night in a mix that shifts minute by minute. Some kinds arrive only after a set minute. Big leads the hordes and dresses dawn's Harvester, and a hard hit roots it for a moment.

ZombieHealthSpeedBiteMoneyComes from minuteWhat to expect
Big90123252Slow and huge; it bites hard, shrugs off knockback and leads the hordes.
Kid10321011Small and quick; it falls to a slap, but it reaches you first.
Skinny20201510The common dead: slow, frail, and never alone for long.

Making things#

You can add to the game without its source. Cards change zombies and your look. Props and maps add your own sprites and farms. Mod packs change anything in the game's data.

Where files go#

The game reads your files from its data/ folder, beside game_data.pak, when it starts:

FolderHolds
data/enemies/Enemy cards, <id>.enemy.png
data/players/Player cards, <id>.player.png
data/props/Props, <id>.prop.png
data/maps/Maps, <id>.map.txt
data/mods/Mod packs, <name>.pak

A file that cannot load is left out. The title screen shows the first reason. The browser game has no folders: add mod packs on its start screen instead.

Enemy cards#

An enemy card adds a kind of zombie, or replaces one. It is a single PNG named <id>.enemy.png. It previews anywhere as an image, and the game and the editors know it as a card by its name.

The image holds the enemy's frames in five rows:

1. Walking front. 2. Walking side. 3. Walking back. 4. A flash frame for each facing. 5. A hurt frame for each facing.

Each walking row holds as many frames as the card's walk line says, 1 to 8. Without a walk line, it holds 3. Every frame is the same size, up to 64 pixels. The sheet is as wide as its longest row.

A card can be drawn at detail 2 or 4: that many of its pixels make one game pixel across and down, so the figure keeps its size in the game with finer pixels, and frames run to 128 pixels: 64 game pixels at detail 2, 32 at detail 4. Use it sparingly, since the rest of the game is drawn at 1.

A flash or hurt frame left fully clear is drawn by the game from that facing's first walking frame. The flash becomes the figure's shape in one pale color. The hurt frame becomes the figure in reds with its outline kept.

An optional sixth row holds dead frames, one per facing. A corpse tips its dead frame over. A card without dead frames tips its front hurt frame instead.

The card's numbers live in the PNG as its enemies.txt section, without look. See enemies.txt for every key. The about line is one sentence on what to expect, up to 80 printable ASCII characters. Settings > Enemies shows it above the kind.

A card with the id of an existing kind replaces that kind. A new kind joins just before the last one. Its death sound is kill-<id> unless its sound line names another cue. A mod pack can carry that sound, as the card editor's Sound button does.

Some apps strip a PNG's text when they save it again, and the card's numbers go with it. Share the file itself.

Player cards#

A player card changes how you look, and can change what you start with. It is a PNG named <id>.player.png. It uses the same five-row sheet, with three walking frames a facing.

Its text holds these lines:

Settings > Player picks a card, and the save keeps the choice by id.

Props#

A prop is your own sprite for maps, named <id>.prop.png. Its frames sit side by side in one row, each up to 256 pixels a side. A map places it as PROP_<ID>, in upper case. A weapon's icon, an effect's art and the random farm's scatter can also name it.

The prop's text holds its [id] and any of these lines that differ from the defaults:

LineWhat it sets
frames NFrames across the sheet, 1 to 16. One when left out.
fps NHow fast the frames animate. Still when left out.
open NTop rows a figure walks through.
stand prop N, fold N, slab N, slab N float N, figure, ground, carve or turned [N]How it stands in 3D. See Stands.
views NHow tall its south and east views are, for a prop that carves or turns.
footprint yesA carving's outline from above comes from a footprint drawing.
roof yesA carving's top takes its colors from a top drawing.
north yes, west yesA carving's north or west side takes its colors from a drawing of its own.
clear 5A6E3C ...Colors the 3D view leaves out, which the 2D view keeps.
paint 917662 726650 ...Its colors that are paint, light to dark. See Coats.
coat 4A6FA5One coat each frame comes in: one color, or a color for each paint color.
cover noIt lets shots through. It stops them when left out.
hp NHit points before zombies or shots break it, 0 to 1000. It never breaks when left out.
broken yesIts last frame shows once it breaks, and the rest animate. It vanishes when left out.

A prop that carves or turns keeps its south and east views under its frames, views pixels tall. Any north and west views follow them, in that order. A carving's footprint and then its top sit after its last frame.

A prop can be drawn at detail 2 or 4, as a card can. Its frames and views are then drawn that many times finer and keep their size in the game, so a prop at detail 2 is up to 128 game pixels a side. It blocks the same tiles, carves the same solid and folds at the same row as a plain one. Its stand numbers stay in game pixels, while views counts the sheet's pixels.

Maps#

A map is a hand-made farm for a run, named <id>.map.txt. The id is 1 to 24 lowercase letters, digits and _. The title's Map row picks one.

A map reads as a header, then its ground, then its props:

``text name Old Farm size 40 30 # 16x12 to 160x120 tiles spawn 12 17 # the player's tile home 9 16 # the tile they run back to at dawn scatter # optional: trees, bushes and wrecks over the rest of the open ground, new each run ground # size rows of one code per tile ..........vvv...........,,,......ccccc.. props HOUSE 6 9 open 1 # a sprite and its top-left tile, then optional open, frame and fps SIGN 14 3 hp 60 # optional hp (0 to 1000, 0 for never breaks) and cover yes or no fence rail 25 4 10 8 gate 4 cover yes ``

A map that does not read is left out, and the title screen shows its first mistake.

Mod packs#

A mod pack is a .pak file in data/mods/. It changes any file in the game's data: a sound in sounds/, a card in enemies/, or one of the data files.

The game lays each pack over game_data.pak in file-name order. A pack's file replaces the base file at the same path. A card in data/enemies/ or data/players/ replaces a pack's card of the same file name.

A pack lets a card bring its own death sound. Put enemies/ghoul.enemy.png and sounds/kill-ghoul.ogg in one pack. The card editor's Export all builds packs like this for you.

The game checks a pack's files as it reads them, and leaves out a pack that would break the game. A pack with an atlas must be built for this version of the game. For the command-line packer, see Cards and mods in the README.

Data files#

The game reads its rules from seven text files. A mod pack can replace any of them, and both editors edit them. Each file's header comments list every key.

FileWhat it sets
tuning.txtNumbers no card sets: your base health and speed, each difficulty, zombies, the Harvester, the night, grenades, barrels, blasts and weapon reach
props.txtThe game's own props a map can place, and the defaults for fences and other sprites
ground.txtEach ground code a map paints
farm.txtHow the random farm lays itself out
effects.txtThe sprite and speed of each effect, swing, bullet, thrown item, pickup and animal, and the particle colors
powerups.txtEvery weapon and passive
enemies.txtEvery kind of zombie

A pack's tuning.txt, and the [colors] of its effects.txt, need only the lines they change. The other files replace the game's whole file. Distances are in pixels, and a tile is 16 pixels. Times are in seconds.

tuning.txt#

tuning.txt holds key number lines in these sections:

props.txt#

Each [NAME] section is a sprite from the game's art. It takes the same lines as one of your props:

[fence] sets these for every fence piece, and [other] for any other sprite a map places.

ground.txt#

Each [c] section is one ground code, a single character. The editors' paint buttons follow the file's order, and the first code is a new map's ground.

farm.txt#

farm.txt lays out the random farm around its road, gas station, house, barn, windmill and graveyard. A count N means one for each N cells of the map.

effects.txt#

Each section names what an effect, swing or animal plays:

A sprite that stands as a slab lies flat and turns with the swing. Anything else faces the camera. A section with a name of your own is a new effect a weapon can use. A mod's file may leave out [spit], [mound] and [mound_breaks], added later, and keep the game's.

The [colors] section sets the particle colors: blood, dark_blood, dirt, spark, ember, gold and firefly. Each is red, green and blue from 0 to 1. A zombie with its own blood bleeds that instead, and its dark_blood is as much darker.

powerups.txt#

The file opens with lines for the whole run:

Each [id] section is one powerup:

Weapon stats are cooldown, damage, count, range, area, pierce, speed, duration, spread, knockback and slow. Passive stats are totals that add together. The header lists every passive stat and which ones take a percentage.

Making a weapon from data#

A new weapon needs no code. Copy a weapon's section under a new id and change its lines. does picks the behavior it fires with. It defaults to the id, so does scythe under a new id is a second scythe with its own numbers.

Three behaviors take their shape from data:

Any weapon can also take these lines:

enemies.txt#

Each [id] section is one kind of zombie:

KeyWhat it sets
nameWhat the Enemies page calls it
aboutOne sentence on what to expect, up to 80 printable ASCII characters
lookIts sprites from the game's art. A card leaves this out.
walkOn a card, its walking frames a facing, 1 to 8. Three when left out.
hpHealth at dusk. It grows through the night.
speedPixels a second
damageA bite
xpThe money it drops
massDivides knockback
gibsBlood specks when it dies
soundIts death sound, kill-<id> when left out
afterThe earliest minute it arrives in a night
chanceThe share of arrivals it takes, 1 when left out
per_minuteAdded to chance for each minute of the night
chargeTimes its speed once it gets near you. 1 when left out.
rangedHow near it stops to spit at you, in pixels, up to 160. 0, a biter, when left out.
burrowSeconds it stays up before it tunnels again, up to 60. 0, never, when left out.
bloodThe color it bleeds, as RRGGBB such as 7AA062. effects.txt's blood when left out.
heavyA crit or hard hit roots it for a moment, and its death shakes the screen
leaderA horde's leader, carrying the chest, is one of these
harvesterDawn's Harvester wears its sprites

Each arriving zombie rolls a number from 0 to 1. It becomes the first kind, top to bottom, whose chance is above the roll. Put the rarest kinds first, and end on one with no chance. A lost night's player rises as the last kind.

A charge speeds a zombie up once it comes within tuning.txt's charge_reach of you. charge 2 doubles its speed there.

A ranged zombie walks in until it is that near and has a clear shot, then stands and spits. Each spit does its damage, flies slower than you walk, and splashes on cover as a bullet would. tuning.txt sets spit_speed and spit_every, and effects.txt's [spit] sets its look; a mod's effects.txt without one keeps the game's. It plays the spit sound as it spits and splat where it lands. A mod pack replaces either with sounds/spit.ogg or sounds/splat.ogg.

A burrow zombie breaks ground into a tunnel. Underground it shows as a moving dirt mound, and nothing can hit it. Within tuning.txt's burrow_reach of you, it breaks out in a puff of dirt with the rising sound, and nothing can hit it until it has climbed all the way out, which takes rise seconds. After burrow seconds up, it digs back under, unless it is that near you. effects.txt's [mound] sets the mound's look and [mound_breaks] the puff; a mod's effects.txt without them keeps the game's.

The card editor#

The card editor makes enemy cards, player cards, props and maps in a browser, and edits the data files. It is public, and it runs from the game's GitHub Pages site. It keeps your work in the browser until you delete it. It has Undo, but no History.

The palette is PICO-8's 32 colors. The previews show your card on a plain floor, or on the farm when game data is loaded.

Buttons#

Making a card#

1. Press New and type the card's id. 2. Draw its parts from the list: walking front, side and back, then the flash, hurt and dead frames. An enemy's walk can have 1 to 8 frames. Compare shows the parts side by side. 3. Open the Stats page with T to set the card's name and numbers. 4. Press Save, then Export. 5. Copy the PNG into the game's data/enemies or data/players folder, and start the game. Settings > Enemies or Settings > Player shows it.

Hurt and Kill play a hit or the game's death on the figure in the previews.

Detail - and + redraw a card's or prop's frames 2x finer or coarser, so it keeps its size in the game. A prop's views, footprint, top and north and west drawings go finer or coarser with them. Going finer copies each pixel into a block to paint over; going coarser keeps each block's most common color, and Undo brings the detail back.

On a player card's walking parts, Grenade (W) places where the player wears a ready grenade. The first click sets every frame; later clicks set the frame on show, and Shift-click sets every frame again. Hide leaves it off that facing. Grenade: shown in the 3D view hides it in the previews only.

The Stats page#

The Stats page sets what the game reads from the card. Rename and About type the name and the about line.

For an enemy card, it steps each number with - and +, ten times as far with Shift:

Three toggles set Heavy, Leads hordes and Harvester. The page also shows the card's death sound. Drop own, beside it, removes the card's own sound.

Blood's < and > step the card's blood color through the game's palette. A step before the first color goes back to the game's blood.

Under the numbers, a chart shows how a night's spawns split between the game's kinds and your cards, minute by minute from dusk to dawn. Its legend gives each kind's share, and flags any kind that never comes.

For a player card, the Stats page sets the name, the about line, and the weapons each difficulty starts with. Default keeps the game's own.

The Data pages#

Each data file lists under Data, in a folder of its own. Each section of the file is one page, such as tuning.txt's [player] under Data > tuning. The random farm's farm.txt lists as Data > random farm.

A page shows one line a row, with its comment under it:

A weapon's section in powerups.txt opens as a weapon page:

Each change rewrites only its own line, so comments and other lines stay as written, and Undo takes it back.

The card editor keeps a changed file in the browser, and Export all carries it into the mod pack. A sprite that props.txt or effects.txt names shows a Data button that opens its section.

Props and maps#

Props list under Props as PROP_<ID>, and maps under Maps as MAP_<ID>. They edit as in the sprite editor. See Props and Maps there.

Game data#

On the Pages site, the editor fetches the site's own game_data.pak and previews your card on the farm. Served without one, it falls back to the plain floor.

Press Game data to pick your own game_data.pak. It takes precedence over the site's. The page keeps it in the browser and never sends it anywhere. From then on, the previews show the farm with the tileset's palette. The editor refuses a pack built for a different version of the game.

Offline use#

Once opened, the page keeps an offline copy, so it works with no connection. It still loads a new release first whenever it can.

On an iPad or phone#

Add the page to an iPad's home screen to use it offline with the whole screen. Draw with the Apple Pencil or a finger. The toolbar under the panes stands in for the keyboard.

On a phone held upright, the editing pane spans the screen with the previews under it.

The sprite editor#

The sprite editor is the developer's pixel editor for the game's own sprites. It runs on macOS, or in a browser on an iPad served from the Mac. It needs the private tileset, so it is never published. To set it up, see Sprite editor in the README.

The left pane lists every sprite. The pixel canvas, tools, color and frames sit around it. The right panes show the sprite as the game draws it, in the 2.5D view and on the map. The 2.5D view counts the quads the sprite is drawn with in 3D, four vertices each, so you can compare stands and drawings by cost. About half of them face the camera at any moment. It starts with nothing open: pick a sprite from the list, or press N for a new one.

Tools#

ActionInput
Draw, erase, fillB, E, G, or the tool buttons
Swap the pencil and the eraserB again
Swap back to the color beforeX
Draw a line, box or ovalThe Line, Box and Oval buttons, then drag. Hold Shift as the drag starts to fill a box or oval, or keep a line straight.
Draw a straight lineShift-click with the pencil or eraser, from the last pixel drawn
Pick a colorHold I or Option and click. Right-click always picks.
Search the sprite list/, then type. Enter opens the first match, and Esc clears the filter.
Mirror strokes left to rightM
See the previous frame faintlyO, or Onion
Draw finer pixels at the same size in the gameDetail - and +
Place a player's ready grenadeW, or Grenade, on a player's walking part, then click. Shift-click sets every frame.
Compare a sprite with its family side by sideC, or Compare
Draw flash, hurt or dead frames from the walkGenerate, on a _FLASH, _HURT or _DEAD sprite
Select, then move by dragging insideS, then drag. The arrows nudge 1 pixel, or 8 with Shift.
Copy, cut and pasteCmd+C, Cmd+X, Cmd+V
Delete the selected pixelsDelete or Backspace
Undo and redoCmd+Z, Cmd+Shift+Z
Next and previous spriteJ and K
Previous and next frameH and L
Play the animationSpace
New sprite, or a copy of this oneNew, Copy
Resize every frameW and H - and +, 8 at a time with Shift
Browse earlier versionsR, or History
SaveCmd+S

Stands#

A stand sets how a sprite stands in the 3D view. Pick one under "Stands in 3D as":

Carving#

A carved sprite gets two more drawings beside its frames. The south view shows it from the south, west on the left. The east view shows it from the east, south on the left. Choosing Carve starts both as a plain block in the sprite's colors, for you to erase into shape. The height buttons set how tall they are.

The solid is every voxel all three views agree on. Each face takes its color from the view that looks at it.

When the sprite's own outline is not its outline from above, add a footprint. A footprint is a copy of the sprite to erase into the true outline. Only whether its pixels are clear counts, and the sprite still colors the top. Delete on the footprint tile removes it.

Three more drawings are optional, each added with its + tile and removed with Delete. They change colors only, never the shape.

North and West start as the south and east views seen from behind. A clear pixel in Top, North or West leaves the color the side would have without that drawing.

No 3D colors#

No 3D leaves the current color out of the 3D view, while the 2D map keeps it. Press it again to bring the color back. Use it for a backdrop color that should not extrude.

Coats#

Coats repaint a sprite, so one drawing comes in several colors, like the wrecked cars. Paint, beside the color, marks the current color as paint. Mark each shade of the part that changes, such as a car's body, and leave the rest, such as tires and lights, unmarked.

Coats opens the Coats page. Add coat adds a coat of the current color, its darker shades following the drawing's. Click a shade to give it the current color instead. Click a coat's picture to show it in the previews, or As drawn for the drawing's own colors.

Each frame comes once in each coat: every frame in the first coat, then every frame in the next. A map's frame N picks one, and the random farm picks among them. The carving views, footprint and top strip are repainted to match.

Palette#

The palette under the color is the game's own: the tileset's 22 colors and the few added for what it lacks, listed in crates/game/palette.txt. A color the palette lacks shows its code in yellow. The game's own art keeps to this palette. A test fails on any color in its drawings or coats that the file doesn't list, so add a color there, with what it's for, before drawing with it. A new coat's darker shades come from the palette too.

Lospec draws from a palette on Lospec instead. Type its name from its address, such as endesga-32, or leave it blank to go back to the game's. The sprite editor fetches it from Lospec. In the card editor online, download the palette's .hex file from Lospec and pick it with Palette file. A mod's art can use any palette.

The previews#

The 2.5D preview shows the sprite as the top screen draws it. Drag it to walk around, and scroll to move closer. The map preview shows it from above, and scroll zooms it. For a map, the previews show the map around the last tile touched.

History#

R, or History, browses earlier versions of the open sprite, newest first. It lists the commits that touched the sprite in the assets repository. For a card's part or a prop, it lists the commits that touched its PNG.

The editor only reads from git.

Cards#

Enemy cards list under Enemy cards as six sprites: CARD_<ID>_FRONT, _SIDE and _BACK walking, then _FLASH, _HURT and _DEAD. Player cards list under Player cards as PLAYER_CARD_<ID>_FRONT and so on.

Props#

A prop lists under Props as PROP_<ID> and edits like any sprite. Its stand, fps, Cover, Broken frame and HP buttons set what its text says. New with a name starting PROP_ starts one.

Maps#

Maps list under Maps as MAP_<ID>. New with a name starting MAP_ starts a map of dirt. The canvas shows the map from above as the game draws it.

A line under the canvas says whether the game would load the map, or why not. Scroll or pinch to zoom, and right-drag or use the arrows to move.

The Data pages#

Each data file is a folder under one Data heading, as in the card editor. See The Data pages. Save writes the file into the game's source only when the game would read it.

On an iPad#

The sprite editor also runs in a browser on an iPad on the same network as the Mac. Saves land on the Mac, and History reads the same git log. A hardware keyboard keeps the macOS shortcuts. Safari's Add to Home Screen gives the editor the whole screen.

ActionTouch
DrawApple Pencil, or a finger on the canvas
Zoom and pan the canvasPinch with two fingers. Fit sets it back.
Turn the 2.5D view, move closerDrag it, pinch it
Zoom the mapPinch it
Scroll the sprite listDrag it, and tap a name to open it
Keyboard shortcutsThe toolbar under the panes
Shift for the next pencil pressTap a Shift pad in a bottom corner. It lights until the pencil uses it, and a second tap turns it off.
Name a sprite or searchType in the field that appears

To serve it, see Sprite editor on an iPad in the README.