Five things take the life force down, and each has its own code: hunger in
PLAYER_TICK, a small creature's touch in LOSE_FOOD_THIRTY_TWO, the four big
hunters' in LOSE_FOOD_EIGHT, the humpback's in LOSE_FOOD_SIXTEEN and a mushroom in MUSHROOM_DRAIN.
The line below is the four pokes that follow put together -- no hunger,
harmless creatures, the big five harmless and harmless mushrooms -- and with
all of them the roast never shrinks. Tested: the devil, the humpback and a
mushroom put on the player in the first room, with creatures free to come,
killed him in 37 frames without the pokes; with them the life force read 240
at every one of 600 frames, and three creatures burst on touching him for
465 points.
The roast runs down on its own in PLAYER_TICK: on the passes when
TICKS AND 15 is zero, the JR NZ at $8E80 falls through to a DEC
of the life force. Make it an unconditional JR and the drain is always
skipped. Nothing else is: creatures, the big five and mushrooms still bite.
(The clock on the scroll counts up and costs nothing; it only goes on the
end screen.) Tested: standing still in the first room for 500 frames took
the life force from 240 to 176 without the poke -- 32 to hunger and 32 to
the one creature that reached him -- and to 208 with it, the creature's 32
alone.
POKE 36480,24
Harmless creatures
A small creature that catches the player costs 32 units through
LOSE_FOOD_THIRTY_TWO and is destroyed for 155 points (MONSTER_CAUGHT_PLAYER). Make its SUB $20 at
$8EDA a SUB 0: the touch still kills the creature and still
scores, but costs nothing, so walking into creatures becomes the easy way to
clear a room. Tested: the same 500 frames standing in the first room left
the life force at 207 with the poke, hunger's share, against 176 without;
one creature reached the player, burst and scored 155 both times.
POKE 36571,0
No creatures
Every small creature comes from SPAWN_MONSTER_INTO_ROOM, called once a frame while the player
is in play. A RET as its first instruction stops them all: the rooms stay
empty except for the big five, whose records are not spawned. Tested: in the
same 500 frames in the first room, four creatures materialised without the
poke and one reached the player (155 points, 32 units); with it none
appeared, the score stayed 0, and the life force went down only to hunger,
240 to 208.
POKE 33770,201
The big five harmless
The mummy, Dracula, Frankenstein's monster and the devil cost eight units a
pass in contact through LOSE_FOOD_EIGHT; the humpback sixteen through LOSE_FOOD_SIXTEEN. Make
both SUBs subtract nothing ($8A22 and $8A19
are their operands) and they can stand on the player all day. The spanner
still kills Frankenstein's monster.
Tested: the devil put on top of the player killed him in 49 frames without
the poke; with it he was alive 200 frames later, 240 down to 230 by hunger.
The humpback: dead in 24 frames without, 228 after 200 frames with.
POKE 35362,0: POKE 35353,0
Harmless mushrooms
Standing within 12 pixels of a mushroom takes a unit a pass in MUSHROOM_DRAIN, and a
mushroom that finds the life force at zero kills (see the bug about one death
costing two lives). Turn its DEC A at $98B4 into AND A: the
value is stored back unchanged, and the zero test after it still sees the
life force as it was. The warning noise still plays. Tested: a mushroom put
under the player took the life force from 240 to 48 in 400 frames without
the poke; with it, 221 -- hunger's share.
POKE 39092,167
Infinite lives
LOSE_LIFE takes a life with DEC A at $8EA7, after checking for none
left; make it a NOP and LIVES stays at 3. PLACE_PLAYER, which starts each new
life, treats LIVES = 3 as the first life of the game and skips a redraw, so
with the poke it always skips it; that makes no difference that could be
seen: the play area after each death was compared pixel for pixel with the
unpoked game's, and they were the same. Tested: starving four times in a row
left 2, 1 and 0 lives and then GAME OVER at the fourth death without the
poke; with it, 3 after every death, and a fifth life after the fourth.
POKE 36519,0
Every locked door open
A locked door asks DOOR_NEEDS_KEY each pass whether a key of its colour is carried,
and the JP NZ at $9233 sends it off to be drawn shut when not.
Three NOPs, and every red, green, cyan and yellow door behaves as if its key
were in the inventory: it opens, and once walked through becomes an ordinary
door for the rest of the game, as it would with the key. Tested: walking up
into the first room's cyan door with no key stopped at y $32; with the cyan
key staged in the inventory the player went through in 33 frames; with the
poke and no key, the same 33 frames.
POKE 37427,0: POKE 37428,0: POKE 37429,0
The A.C.G. door always open
ACG_DOOR wants the three pieces of the key in the three inventory slots, in
order. Replace its first instruction with a jump to the "all three" branch at
$9632 and the great door in the first room opens for anyone -- the
game can be won by walking east from the start. Tested: walking right from
the start with nothing carried stopped at x $8E against the shut door;
with the poke the player went through in 28 frames, into room $8E, and the
end screen followed.
POKE 38427,195: POKE 38428,50: POKE 38429,150
Every secret passage for every character
The clocks are doors for the knight, the bookcases for the wizard and the
barrels for the serf: each handler subtracts its character's first sprite
code from the player's and lets him through if the answer is under 16
(DOOR_SERF and the two entry points after it). NOP the JR NC at $9435 that
turns everyone else away, and all three kinds work for all three characters.
Tested: the knight, moved to room $0A and walking up into its bookcase,
stopped at y $52 without the poke; with it he went through in 12 frames.
POKE 37941,0: POKE 37942,0
Spell CONGRATULATIONS correctly
One byte, and nothing else moves: the string is the same length.