1988 · SSI

Pool of Radiance

This minisite was contributed by air. It’s agent-generated and needs a human editor. Clone https://github.com/gamesexplained/gamesexplained and follow kit/START.md to curate games/c64/pool-of-radiance with me to Gold.

Bugs and secrets in the code: a change of marching order that moves spells onto the wrong people, jewelry that never doubles, a month in camp that ages nobody more than a day, and a town where nobody may sleep.

01 · The marching order

Bug: Changing the marching order can move a spell onto someone else

A spell that lasts a while is kept in a list of the effects in play, each with the party position of the member it is on. ORDER, in the camp's ALTER menu, moves those effects along when the party changes places, but it moves them one member at a time in the same list. An effect handed to a member who has not been dealt with yet gets handed on again when that member's turn comes.

Who takes position #1?

PositionMemberEffects on them afterwards

The party the game comes with, as its saved game on the first disk has it, each member carrying one effect of its own. Choose who takes each position, as ORDER asks. The effects are then moved as the camp's code moves them ($0AF9, the code's address in memory): from the last position to the first, every effect on a member's old position goes to its new position.

Putting Lara Spellsword first and Arax the Bold second is enough. Lara's effect goes from position 2 to position 1, where Arax still is. Then Arax is moved to position 2 and takes everything on position 1 with him, Lara's effect included. In the game, with an effect put on Lara and the order changed that way, the game's list of effects had it on Arax afterwards.

The camp screen during ORDER: the party list with WHO TAKES POSITION #1? and then #2?, Lara Spellsword marked (1).
ORDER in the camp: the first question, and the second after Lara Spellsword has taken position 1.

02 · Treasure

Bug: Jewelry is never worth double

When a treasure holds gems or jewelry, each piece is given a worth as the party picks it up. A gem's worth can double, and double again, with a chance of one in ten each time. Jewelry has the same doubling written for it, and it never happens.

PieceDoubles whileOut of 2,000 pieces
Gema roll of 0 to 9 comes up 01,809 kept their worth, 172 doubled, 17 doubled twice, 2 three times
Jewelry, the four cheaper kindsa roll of 1 to 9 comes up 0all 2,000 kept their worth
Jewelry, the three dearer kindsa roll of 1 to 4 comes up 0all 2,000 kept their worth

The game's own code for each, run 2,000 times from different random numbers: the gem's loop ($1C80) and the jewelry's ($1CE6) for each of its seven kinds.

The gem's loop asks the random number routine for a number from 0 to 9 ($2DBC), and doubles while it gets 0. The jewelry's loop asks a different routine, the one that rolls a die ($2DE0), and doubles while that gives 0. A die starts at 1, so the loop ends on the first roll every time. A gem starts at a worth of 10 to 5,000, a piece of jewelry at 100 to 12,000.

03 · Time

Bug: A month of rest in camp ages the party one day

The party grows older as it plays. After every battle the game adds the days that have gone by to each member's age, and a member past the limit for its race dies of old age: 80 years for a half-orc, 120 for a human. Resting in camp heals each member one hit point a day, so healing can take weeks, and the camp hardly counts them.

Where the time passesDays gone by go upCode
Walking in town, in the dungeons and outdoorseach time the clock's day moves on$7A5F
Resting in campeach time the clock's day goes round from 30 to 0, once a month$125A

The clock keeps minutes, tens of minutes, hours, days and months as figures of their own, each with the number it comes round at ($127D). Both routines watch the day figure, but the adventure's counts when it moves and the camp's only when it comes back round to 0. The ages are added after each battle ($1E1B).

In the game, a rest of one day in the slums moved the clock on a day and left the count of days gone by at 0. One step in New Phlan with the clock at 23:59 put it at 1. A party can rest for thirty days and grow one day older.

04 · New Phlan

Secret: Nobody can rest in New Phlan

Make camp anywhere inside the town and the rest stops after five minutes with YOU ARE ROUSTED BY THE CITY WATCH AND TOLD TO MOVE ALONG. It is not a random encounter that happens to come up every time.

The town's script sets the chance of the rest being interrupted to 101 in 100 whenever the party makes camp, so the camp's roll of 0 to 99 can never beat it, and the script's own fourth entry is the watch. The How it works page shows the script itself (the scripts). In the slums outside the town, a rest of a whole day went through.

05 · The end

Secret: Losing a battle freezes the game for good

There is no screen offering another try. As a rule, when a battle leaves nobody in the party standing and nobody got away, the game prints THE PARTY HAS LOST, waits, and then runs a single instruction that jumps to itself ($0957), forever. The only way out is to reset the computer and load a saved game.

A black window framed in red rope with THE PARTY HAS LOST in green.
The last thing a lost game shows.

The code word at the start ends a game the same way. Before play the title shows runes and a path and asks for the word the code wheel in the box gives for them. A wrong word brings WRONG !!! and another question; a second wrong word brings WRONG !!! again and the same kind of jump to itself ($12F4).

06 · The scripts

Bug: Three script commands would be skipped wrongly after an IF

The script language has six IF commands. When an IF fails, the next command is skipped, and to skip it the game looks up how many operands it has in a table ($1625). For three commands the table is one short.

CommandOperands its routine readsThe table says
SETUP MONSTER (12)32
ENCOUNTER MENU (41)1413
ADD NPC (54)21

The command's number in brackets. Skipping one of them after a failed IF would stop one operand short, and the game would read that operand as the next command.

It never shows. Decoded command by command, none of the scripts on the game's disks puts any of the three straight after an IF.