c $7D00 b $7D03 B $7D03 something c $7D04 c $7D52 b $7D60 Spells table D $7D60 5 bytes of spell data followed by address of spell routine B $7D60,$1C7,B5:B2 b $7F27 S cursor sprite data B $7F27,$20,8 S cursor b $7F47 320 byte table b $8087 b $80B0 Modified wizard sprites data B $80B0,$20 modwizard 0 B $80D0,$20 modwizard 1 B $80F0,$20 modwizard 2 B $8110,$20 modwizard 3 B $8130,$20 modwizard 4 B $8150,$20 modwizard 5 B $8170,$20 modwizard 6 B $8190,$20 modwizard 7 B $81B0,$20 modwizard 8 B $81D0,$20 modwizard 9 B $81F0,$20 modwizard A B $8210,$20 modwizard B B $8230,$20 modwizard C B $8250,$20 modwizard D B $8270,$20 modwizard E b $8290 ? B $8290,8 ? B $8298,8 ? B $82A0,8 ? B $82A8,8 ? B $82B0,8 ? B $82B8,8 ? b $82C0 table of pointers to character sprite data B $82C0,8 ? B $82C8,8 ? B $82D0,8 ? B $82D8,8 ? B $82E0,8 ? B $82E8,8 ? B $82F0,8 ? B $82F8,8 ? c $8300 get address of the wizard object data of the current player b $831F W $831F address in table of pointers to character sprite data for current character W $8321 temporary variable used when copying things around B $8323 flag that prevents entering a number less than 2 c $8324 C $8324 get address of first sprite pointer in wizard object data of current player C $8327 set B to four as a loop counter and push to stack C $832A set B to two as another counter and push to stack C $832D get pointer to table of character sprite data pointers in HL C $8330 read low byte of sprite data pointer to A first time, high byte on second time around loop C $8331 increment HL and store back in $831F C $8335 store the low byte of sprite data pointer in wizard data object at the address held in $8321. Second time around loop high byte is stored C $8339 increment HL and store back in $8321 C $833D pop loop counter and repeat inner loop. C $8340 increment address in $8321 because there is a byte gap between each sprite pointer in wizard object data C $8347 pop loop counter and repeat outer loop three times before returning c $834B c $8357 # spell names from comments on chaos c $836A MagicArmour spell c $839C MagicSword spell c $83D0 MagicKnife spell c $8404 MagicShield spell c $8438 MagicWings spell c $846A MagicBow spell c $84B0 ChaosOrLawSpell c $84C0 ShadowForm spell c $84F7 Subversion spell c $8557 BART_L c $8567 OK_SUB c $859C SUB_DO c $85A5 BALSU2 c $85CA TOFAIL # spell name from comments on chaos c $85F6 RaiseDead spell c $85D3 YESSUB c $8604 RAILOO c $861A RAI_CH c $8639 RASART c $8647 RASLOO c $8676 RASBAK c $868D LOORA5 c $869A OK_RAS c $86C3 RAISDO c $86EB ENDRAS # spell name from comments on chaos c $86EF Turmoil spell c $86F9 TURART c $871A LOOTUR c $872B ADD_ON b $873C CRE000 b $873D FLA481 b $873E HID641 b $873F BOD801 b $8740 FRA321 c $8741 TUR_DO c $8756 MOLLOO c $8784 RANMOL c $87DF MOLEND c $87EB FUCKIT c $87EF M2PRIN b $8809 M2ESAG D $8809 address,length W $8809,$50,4 t $8859 game message strings 1 T $8859 M_1 T $8875 M_2 T $8885 M_3 T $8897 M_4 T $88A6 M_5 T $88AD M_6 T $88C2 M_7 T $88C5 M_8 T $88C7 M_9 T $88E2 M_10 T $88FE M_11 T $890C M_12 T $891A M_13 T $892B M_14 T $8941 M_15 T $894F M_16 T $895D M_17 T $8979 M_18 B $8987 M_19 B $8997 M_20 b $89A7 B $89A7,1 LEVEL B $89A8,1 NUM B $89A9,1 GAMTUN W $89AA,2 player name string pointer W $89AC,2 POSPRI B $89AE,1 string length B $89AF,1 KEY_P c $89B0 CHONUM c $89B1 KEYIT c $89CF NOADD b $89EF S60 D $89EF key bloop sound effect c $89F9 initialise routine C $89F9 set border to black C $89FC set ATTR-T to black C $89FF set ATTR-P to black C $8A02 set MASK-P to all transparent C $8A07 set P-FLAGS to three C $8A0C disable the rom interrupt C $8A0D call CLS C $8A10 zero out 32 bytes at $AC16 C $8A1D zero out 320 bytes at $7F47 C $8A2A zero out 160 bytes at $E01F C $8A37 zero out 800 bytes at $E0C0. These tables hold the data for what object are on the screen and their state C $8A44 set CH_LAW to zero C $8A49 set ATTR T to $5A (bright red on magenta) and call ZRDR_P C $8A51 set ATTR-T to $43 (bright magenta on black) C $8A56 call M2PRIN with coordinates 2,2 and message M_1 ("CHAOS -THE BATTLE OF WIZARDS") C $8A5E set ATTR-T to $42 (bright red on black) C $8A63 call M2PRIN with coordinates 8,4 and message M_2 ("By Julian Gollop") C $8A6B set ATTR-T to $46 (bright yellow on black) C $8A70 call M2PRIN with coordinates 2,9 and message M_3 ("How many wizards? ") C $8A78 set ATTR-T to $44 (bright green on black) C $8A7D call M2PRIN with coordinates 2,11 and message string $0E ("(Press 2 to 8)") C $8A85 set BC to coordinates 20,9 C $8A88 set the flag variable to prevent numbers less than 2 in input C $8A8D call CHONUM C $8A90 increment the number input and store in NO_PLA C $8A94 set ATTR-T to $46 (bright yellow on black) C $8A99 call M2PRIN with coordinates 2,14 and message M_9 ("Level of computer wizards? ") C $8AA1 set ATTR-T to $43 (bright magenta on black) C $8AA6 call M2PRIN with coordinates 2,16 and message M_4 ("(Press 1 to 8) ") C $8AAE call CHONUM with coordinates 29,14 C $8AB4 store input in LEVEL C $8AB7 multiply level by 4 and add 15 C $8ABD store the result in GAMTUN C $8AC0 set B to ten as a loop counter ; @label:$8AC2=REPWAT C $8AC2 stack BC and call PAUSE4 then restore BC C $8AC7 repeat nine times C $8AC9 set $AC0E to zero (current player number 0-7) C $8ACE get NO_PLA into B, and store INBUF in BUFPNT ; @label:$8AD8=STALOO D $8AD8 input all player names and settings C $8AD8 stack BC C $8AD9 call CLS C $8ADC set ATTR-T to $69 (bright cyan on black) and call ZRDR_P C $8AE4 set ATTR-T to $46 (bright yellow on black) and call M2PRIN with coordinates 2,2 and message M_5 ("PLAYER ") C $8AF1 get current player number variable, add $31 to convert to char value and call DH_P C $8AF9 set ATTR-T to $43 (bright magenta on black) and call M2PRIN with coordinates 2,4 and message M_10 ("Enter name (12 letters max.)") C $8B06 get address of wizard object data for current player C $8B09 set string length variable at $89AE to zero C $8B0E set POSPRI to coordinates 2,6 and set ATTR-T to $45 (bright cyan on black) ; @label:$8B19=INPLOO D $8B19 text input loop C $8B19 call KEYBOARD in Spectrum ROM C $8B1C store keypress in KEY_P C $8B1F if key is 'enter' jump to ENTER C $8B24 if key is not 'delete' jump to NO_DEL C $8B28 test string length variable from $89AE if zero jump back to INPLOO C $8B2E load POSPRI into BC and decrement (move cursor left over letter to delete) C $8B33 call DH_P with A set to $20 (space) to blank out letter under cursor C $8B38 decrement POSPRI again ready for next letter. C $8B3F decrement string length variable C $8B43 decrement player name string pointer (move back over last character) C $8B4A set HL to S60 (key bloop sound) and call sound routine at $C2F9 C $8B50 call PAUSE4 then jump back to INPLOO ; @label:$8B56=NO_DEL D $8B56 jump here if keypress is not 'delete'. C $8B56 if string length equals 11 jump back to INPLOO C $8B5E if KEY_P is 'space' jump to SPACE C $8B65 if KEY_P is less than 'A' or greater than 'z' jump back to INPLOO ; @label:$8B6F=SPACE D $8B6F jump here if keypress is space, with $20 (space) in A C $8B6F store space character at the position given by the player name string pointer C $8B73 advance the string pointer and store C $8B77 increment string length C $8B7B load POSPRI into BC and call DH_P to print character still in A (space) at those coordinates C $8B82 increment POSPRI C $8B89 set HL to S60 (key bloop sound) and call sound routine at $C2F9 C $8B8F call NKEY2 then jump back to INPLOO ; @label:$8B95=ENTER D $8B95 jump here if keypress is enter C $8B95 read string length into A. If zero jump back to INPLOO C $8B9C set HL = current player number + $29 C $8BA4 multiply result by four C $8BA6 add result to $CDD3 (start of game messages table 2) to point at offset to relevant wizard data C $8BAA move past address word in table to wizard name length C $8BAC read string length variable again and write into table C $8BB0 call NKEY2 C $8BB3 set ATTR-T to $43 (bright magenta on black) and call M2PRIN with coordinates 2,9 and message M_6 ("Computer controlled? ") C $8BC0 set ATTR-T to $46 (bright yellow on black) C $8BC5 set $AC2E to zero (current player is human) ; @label:$8BCA=Y_OR_N C $8BCA call KEYBOARD in Spectrum ROM C $8BCD if keypress is 'Y' jump to YES_CC C $8BD1 if keypress is not 'N' jump back to Y_OR_N C $8BD5 call M2PRIN with coordinates 23,9 and message M_8 ("NO") C $8BDD jump to NOT_CC ; @label:$8BDF=YES_CC C $8BDF call M2PRIN with coordinates 23,9 and message M_7 ("YES") C $8BE7 set HL to WIZCON + current player number C $8BF1 write $01 to WIZCON + current player number C $8BF3 set $AC2E to $01 (current player is computer controlled) ; @label:$8BF8=NOT_CC C $8BF8 set HL to S60 (key bloop sound) and call sound routine at $C2F9 C $8BFE call NKEY2 C $8C01 set ATTR-T to $43 (bright magenta on black) and call M2PRIN with coordinates 2,11 and message M_13 ("Which character? ") C $8C0E set ATTR-T to $45 (bright cyan on black) and call M2PRIN with coordinates 2,13 and message M_14 ("1 2 3 4 5 6 7 8") C $8C1B set POSPRI to coordinates 3,13 C $8C22 set NUM to zero C $8C27 set B to 8 as a loop counter ; @label:$8C29=P_WIZL C $8C29 stack the loop counter C $8C2A copy NUM to ROMP C $8C30 increment NUM C $8C34 call PR_CHR (print character sprite) C $8C37 add three to POSPRI C $8C42 pop loop counter back C $8C43 loop back to P_WIZL seven times C $8C45 call CHONUM with coordinates 19,11 C $8C4B store number returned in ROMP C $8C4E set POSPRI to coordinates 20,11 and call PR_CHR C $8C58 set HL to unknown data block at $82C0 C $8C5B multiply ROMP by eight and add to $82C0 (table of pointers to character sprite data) to give address of pointer to sprite data for selected character C $8C68 store result in variable at $831F C $8C6B copy pointers to sprite data of chosen character to wizard object data for current player C $8C6E set ATTR-T to $43 (bright magenta on black) and call M2PRIN with coordinates 2,16 and message M_12 ("Which colour? ") C $8C7B set ATTR-T to $46 (bright yellow on black) and call M2PRIN with coordinates 2,18 and message M_14 ("1 2 3 4 5 6 7 8") C $8C88 set POSPRI to coordinates 3,18 C $8C8F set variable at $8321 to address of ATTAB (attribute table) C $8C95 set B to eight as loop counter ; @label:$8C97=COLOO C $8C97 stack the loop counter C $8C98 read byte from address held in $8321 C $8C9C store in ATTR-T C $8C9F increment HL and store back in $8321 C $8CA3 call PR_CHR (print character sprite) C $8CA6 add three to POSPRI C $8CB0 restore loop counter from stack C $8CB1 loop back to COLOO seven times C $8CB3 call CHONUM with coordinates 16,16 C $8CB9 add number returned to address of ATTAB giving address of byte in attribute table corresponding to chosen colour C $8CC0 read attribute byte from attribute table and set ATTR-T C $8CC4 set POSPRI to coordinates 17,16 and call PR_CHR C $8CCE call $8300 (get address of first sprite pointer in wizard object data of the current player) C $8CD1 load address of first sprite pointer in wizard object data from $8321 into HL and decrement (HL = address of first sprite pointer - 1) C $8CD5 set DE to three C $8CD8 read ATTR-T onto A C $8CDB set B to four as a loop counter ; @label:$8CDD=PUTATL D $8CDD loop around four times writing value of ATTR-T to every third byte (after each pointer to sprite data in the wizard object data) C $8CDD add three to HL to point at next attr byte in wizard data C $8CDE write attribute byte to wizard data C $8CDF loop back to PUTATL three times C $8CE1 set COMPAR to zero C $8CE6 read variable $AC2E (current player is computer controlled flag) C $8CE9 if player is not computer controlled jump to MAKCHR C $8CEC else copy LEVEL to COMPAR ; @label:$8CF2=MAKCHR C $8CF2 get address of first sprite pointer in wizard object data of the current player C $8CF5 read player name string pointer C $8CF8 move past player name string to player stats C $8CFD call RANDY C $8D00 halve value in A and add one, add COMPAR divided by two C $8D0A store calculated value in first byte of wizard stats (combat) C $8D0B set second and third bytes of wizard stats to zero (ranged combat and range) C $8D11 call RANDY C $8D14 halve value, add one, add to COMPAR divided by two C $8D1E store in fourth byte of wizard stats (defence) C $8D20 set fifth byte of wizard stats to one (movement allowance) C $8D23 call RANDY C $8D26 halve value, add three, add to COMPAR divided by four C $8D33 store in sixth byte of wizard stats (manouvre rating) C $8D35 call RANDY C $8D38 divide value by four, add six and store in seventh byte of wizard stats (magic resistance) C $8D40 call RANDY C $8D43 halve value, add eleven, add COMPAR C $8D4C if result is less than twenty one jump to NOTMOR else set A to twenty. In other words limit the value to twenty ; @label:$8D53=NOTMOR C $8D53 store value in SPELNO and in eighth byte of wizard stats (spells) C $8D58 set ninth byte in wizard stats to zero (ability) C $8D5B halve COMPAR and subtract from five C $8D64 store result in STRENG C $8D67 call RANDY C $8D6A compare returned value with STRENG C $8D6F if random value is less than STRENG jump to NOABIL C $8D72 call RANDY C $8D75 halve value and store in ninth byte of wizard stats (ability) ; @label:$8D7A=NOABIL C $8D7A call GETHIS C $8D7D decrement HISPEL C $8D84 call RANDY C $8D87 add twelve to value and store at address in HISPEL C $8D8D set following byte to one C $8D90 set HISPEL to next address C $8D94 set BUFPNT to INBUF C $8D9A get SPELNO into B ; @label:$8D9E=INSPLO C $8D9E stack BC ; @label:$8D9F=RIND C $8D9F copy R register into A C $8DA1 mask lowest three bits C $8DA3 copy to H C $8DA4 get R register into L C $8DA7 read byte at address in HL C $8DA8 add byte at address held in BUFPNT C $8DAC mask lowest six bits C $8DAE jump back to RIND unless 1 < A < 66 C $8DB8 increment BUFPNT C $8DB9 store A in CURSP C $8DBF call CHAN_C C $8DC2 read fourth value from spell table at address in IX C $8DC5 store A at address held in HISPEL C $8DC9 increment address and copy CURSP there C $8DCE increment address and update pointer in HISPEL C $8DD2 pop loop counter back into BC C $8DD3 loop back to INSPLO SPELNO-1 times C $8DD5 if "current player is computer controlled" flag is zero jump to DONSOR C $8DDB call GETHIS C $8DDE set HL to address held in HISPEL and decrement C $8DE2 set B to nineteen as outer loop counter ; @label:$8DE4=OUTL_ C $8DE4 stack outer loop counter and address (HISPEL)-1 C $8DE6 set B to nineteen as inner loop counter ; @label:$8DE8=INL_ C $8DE8 stack inner loop counter C $8DE9 read four bytes from address in HL into E, D, C, and B C $8DF0 move pointer back to the third byte C $8DF1 if byte in E (first byte read) is greater than or equal to C (third byte read) jump to NOBIGA C $8DF7 move pointer forwards again and write D to memory at pointer (fourth byte) C $8DF9 move pointer back and write E to third byte, B to second byte, and C to first byte C $8DFF move pointer back to the third byte read ; @label:$8E01=NOBIGA C $8E01 ; @label:$8E08=DONSOR ; @label:$8E32=PUTIBO ; @label:$8E62=TURLOO C $8E7F Set B to ten as loop counter ; @label:$8E81=PAUS_L C $8E81 Stack BC, call PAUSE4, Restore BC C $8E86 loop back to PAUSE_L nine times C $8E88 Call $FE60 (set IM 1 mode) C $8E8B read "something" into A and add 1 C $8E8F Compare "something"+1 with NO_PLA ; @label:$8E93=GO_END C $8E93 Pop BC and jump to ENDGAM if A == NO_PLA C $8E96 Point HL at "something" and add 1 to it C $8E9A Loop back to TURLOO B times (how many times?) C $8E9C Call CLS C $8E9F Store 1 in ATTR T c $8EA4 LOOPY c $8EC8 ZAPEM c $8EE2 DEDED c $8F04 ENDGAM c $8F0C LOPY2 c $8F50 GRONK c $8F57 FOUDIM c $8F8B ATTRDO c $8F9A TREPUT c $8FA2 TRFILO c $8FE2 WAYLOO c $8FEA RUNDY c $9007 PRILOO c $900F INITGO c $9031 N_HERE b $903E S61 b $9046 LOW b $9047 HIGH b $9048 TO_VAL b $9049 COMPAR b $904A SPELNO c $904B RANDY c $904C DANDO c $9055 PODER c $9058 PODEI b $907A RANUM c $907B NKEY2 c $907E WAIT1 b $909F B $909F STAPOS b $90D7 B $90D7 ATTAB B $90DF ROMP w $90E0 W $90E0 W_TAB c $90F0 PR_CHR C $90F0 read ROMP into A C $90F3 set HL to W_TAB C $90F6 get address of desired entry in table of pointers to character sprite data by doubling A to and adding to address of table C $90FC read the table entry and store in C_DATA C $9103 copy POSPRI to LC_POS C $9109 call P_CHAR then return b $910D ? B $9153,1 current chaos/law* B $9154,1 HISPEL B $9165,1 spell success flag* B $9167,1 something c $9168 CAST_S c $92AA GETHIS c $92F9 CHAN_C b $937B B $937B CURSP W $937C something B $937E something B $937F something W $9380 something W $9382 something W $9382 something B $9384 something c $9385 c $96E6 PAUSE4 c $96F3 ? b $975F B $975F something c $9760 c $9786 c $97A3 b $97CE B $97CE something W $97CF something c $97D1 c $980E OFBORD c $981A ? # spell names from comments on chaos c $9975 CreatureCast spell c $99F1 Disbelieve spell c $9ADD Trees&Castles spell c $9B76 Wall spell c $9C59 Lightning spell c $9DE0 DarkPowerEtc spell c $9F50 INTERO B $A172 STRENG c $A173 WALKYS c $A17E GETPLA s $A188 c $A18A b $A1E6 b $A20C sprite data for casting twirl B $A20C,$20 twirl 0 B $A22C,$20 twirl 1 B $A24C,$20 twirl 2 B $A26C,$20 twirl 3 B $A28C,$20 twirl 4 B $A2AC,$20 twirl 5 B $A2CC,$20 twirl 6 B $A2EC,$20 twirl 7 B $A30C,$20 twirl 8 s $A32C b $A345 sprite data for explosion B $A345,$20 explosion 0 B $A365,$20 explosion 1 B $A385,$20 explosion 2 B $A3A5,$20 explosion 3 B $A3C5,$20 explosion 4 B $A3E5,$20 explosion 5 B $A405,$20 explosion 6 b $A425 data left behind by editor/assembler D $A425 contains original names of functions and variables b $ABE2 B $ABFC something B $ABFD something B $ABFE B $ABFF B $ABFF something B $AC00 something B $AC01 something B $AC02 ? B $AC03 something W $AC04 something B $AC06 something B $AC07 something B $AC08 something B $AC09 something W $AC0A something B $AC0C something B $AC0D something B $AC0E current player (0-7) B $AC0F NO_PLA B $AC10 something B $AC11 something W $AC12 position of cursor* W $AC14 D_ADD B $AC16 16 byte table B $AC26 WIZCON B $AC2E,1 current player is computer controlled flag B $AC30 something B $AC31 something B $AC32 something W $AC33 something B $AC35 something c $AC36 c $AC51 c $ACC6 c $ACED c $AECC COUNTL c $B0A8 b $B161 B $B161 something B $B162 something B $B163 something B $B164 something B $B165 something W $B166 something c $B168 b $B374 B $B374 something c $B375 b $B3C3 B $B3C3 something B $B3C4 something B $B3C5 something B $B3C6 something B $B3C7 something B $B3C8 something c $B3C9 b $B60B B $B60B something B $B60C something c $B60D c $B626 c $B746 b $B754 B $B754 LOF_D c $B755 b $B769 B $B769 something B $B76A something W $B76B something W $B76D something b $B76F ? c $B7D4 c $B7FD c $B81C b $B844 B $B844 something c $B845 c $B8BD c $B8DD w $BA75 W $BA75 something c $BA77 TEMP_C c $BABE c $BAD6 DH_P c $BAEE c $BAFB MPRINT b $BB15 border graphic data B $BB15,$40,8 w $BB55 address of border graphics table c $BB57 ZRDR_P c $BBB0 c $BBCC c $BBE7 c $BC6C c $BC72 c $BC7D c $BC83 c $BC8D GET_LC c $BC94 c $BDA5 c $BDD1 c $BDE7 c $BE0A GETCH4 c $BE21 c $BE52 c $BE94 c $BEB2 c $BED7 c $BEE8 b $BF37 sprite data for attack effect B $BF37,$20 Frame 0 B $BF57,$20 Frame 1 B $BF77,$20 Frame 2 B $BF97,$20 Frame 3 b $BFB7 WOOP_D B $BFB7,$20 Frame 0 B $BFD7,$20 Frame 1 B $BFF7,$20 Frame 2 B $C017,$20 Frame 3 B $C037,$20 Frame 4 B $C057,$20 Frame 5 B $C077,$20 Frame 6 B $C097,$20 Frame 7 B $C0B7,$20 Frame 8 b $C0D7 B $C0D7 something c $C0D8 b $C123 sprite data for dragon breath B $C123,$20 Frame 0 B $C143,$20 Frame 1 B $C163,$20 Frame 2 B $C183,$20 Frame 3 B $C1A3,$20 Frame 4 B $C1C3,$20 Frame 5 B $C1E3,$20 Frame 6 B $C203,$20 Frame 7 B $C223,$20 Frame 8 b $C243 ? b $C29D S10 B $C29D,$0A B $C2A7,$0A B $C2B1,$0A B $C2BB,$0A B $C2C5,$0A B $C2CF,$0A B $C2D9,$0A b $C2E3 b $C2E8 B $C2E8 b $C2F2 B $C2F2,1 something W $C2F3,2 something c $C2F6 c $C2F9 c $C33A b $C33D sprite data for cursors b $C39D ? b $C3A4 B $C3A4 CH_LAW c $C3A5 c $C5EE CLS c $C5FC c $C612 c $C63D b $C649 W $C649 X_ADD B $C64B something c $C64C SQRT c $C679 b $C6D4 THRTAB c $C75E b $C78B W $C78B TEMADD c $C78D b $C7BB B $C7BB SRTCNT c $C7BC EN_AN c $C825 b $C858 B $C858 something c $C859 b $C8B7 W $C8B7 AIM c $C8B9 c $C8C7 c $C955 c $C9D4 c $C9DC b $CA16 W $CA16 something B $CA18 something c $CA19 c $CA7C c $CA92 b $CBB8 B $CBB8 something c $CBB9 c $CBC7 b $CC55 B $CC55 something c $CC56 FIREON c $CCC3 b $CD2A B $CD2A SPATAB W $CD3A SPADAT c $CD3C ADSPA b $CD86 W $CD86 BUFPNT T $CD88 string containing the direction keys W $CD90 something c $CD92 c $CDAA c $CDB8 c $CDC0 b $CDD3 game messages table 2 D $CDD3 address,length W $CDD3,$1F8,4 t $CFCB game message strings 2 T $CFCB,$3C6,$28,$07,$20,$20,$20,$0E,$07,$15,$19,1,$0F,$14,$10,$20,$05,$05,$06,$06,$06,$06,$05,$06,$07,$05,$07,$0E,$06,$08,$13,$11,$11,$0F,$02,$07,$08,$09,$0B,$0E,$0D,$20,$20,$10,$0E,$0F,$14,$0A,$18,$0C,$0A,$0A,$09,$09,$0A,$06,$07,$05,$05,$07,$07,$0C,$0C,$0B,$0B,$09,$05,$0A,$07,$0A,$08,$0A,$07,$0C,$0C,$06,$0D,$0B,$0B,$0B b $D391 ? B $D3F2 INBUF c $D52E c $D588 c $D5EC c $D602 s $D651 c $D652 c $D686 c $D702 c $D732 c $D763 c $D7A6 c $D7EE c $D82D c $D887 b $D8DE b $D908 font data b $DF08 ? c $DF0F print 8x8 char graphic for char in A to C,B using rom b $DF47 ? w $DF4A C_DATA w $DF4C LC_POS c $DF4E P_CHAR C $DF4E set CHARS variable to address in C_DATA minus 256 C $DF55 read LC_POS into BC C $DF59 call $DF0F to print character $20 (top left block of sprite) C $DF5E move one character position right C $DF5F call $DF0F to print character $21 (top right block of sprite) C $DF64 move one character position left and one character row down C $DF66 call $DF0F to print character $22 (bottom left block of sprite) C $DF6B move one character position right C $DF6C call $DF0F to print character $23 (bottom right block of sprite) then return c $DF72 b $E005 W $E005 something c $E007 b $E01F 160 byte table B $E01F,$A0 map object codes ? b $E0BF b $E0C0 800 byte table B $E0C0,$A0 map values ? B $E160,$A0 map animation values ? B $E200,$A0 map values ??? B $E2A0,$A0 map values ??? B $E340,$A0 map values ??? b $E3E0 object address table W $E3E0,$50,2 object addresses W $E430,$10,2 wizard addresses b $E440 object data table B $E440,$23,T13,d10,2,1,2,1,2,1,2,1,2,1 nothing B $E463,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 king cobra B $E489,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 bat B $E4AF,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 blob B $E4D5,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 dire wolf B $E4FB,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 spectre B $E521,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 goblin B $E547,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 crocodile B $E56D,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 green dragon B $E593,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 vampire B $E5B9,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 faun B $E5DF,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 lion B $E605,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 gryphon B $E62B,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 elf B $E651,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 horse B $E677,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 orc B $E69D,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 red dragon B $E6C3,$23,T13,d10,2,1,2,1,2,1,2,1 fire B $E6E6,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 manticore B $E70D,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 troll B $E733,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 unicorn B $E759,$23,T13,d10,2,1,2,1,2,1,2,1 ghost B $E77C,$23,T13,d10,2,1,2,1,2,1,2,1 wraith B $E79F,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 bear B $E7C5,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 gorilla B $E7EB,$23,T13,d10,2,1,2,1,2,1,2,1 skeleton B $E80E,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 ogre B $E834,$23,T13,d10,2,1,2,1,2,1,2,1 zombie B $E857,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 harpy B $E87D,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 pegasus B $E8A3,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 eagle B $E8C9,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 hydra B $E8EF,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 giant rat B $E915,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 centaur B $E93B,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 giant B $E961,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 golden dragon B $E987,$26,T13,d10,2,1,2,1,2,1,2,1,2,1 dark citadel B $E9AD,$23,T13,d10,2,1,2,1,2,1,2,1 magic castle B $E9D0,$23,T13,d10,2,1,2,1,2,1,2,1 shadow wood B $E9F3,$23,T13,d10,2,1,2,1,2,1,2,1 magic wood B $EA16,$23,T13,d10,2,1,2,1,2,1,2,1 wall b $EA39 wizard data D $EA39 name, combat, ranged combat, range, defence, movement allowance, manouvre rating, magic resistance, spells, ability, ? B $EA39,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 0 B $EA5C,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 1 B $EA7F,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 2 B $EAA2,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 3 B $EAC5,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 4 B $EAE8,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 5 B $EB0B,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 6 B $EB2E,$23,T13,d10,2,1,2,1,2,1,2,1 wizard 7 b $EB51 sprite data for creatures and objects B $EB51,$20 nothing B $EB71,$20 king cobra 0 B $EB91,$20 king cobra 1 B $EBB1,2 unused B $EBB3,$20 king cobra 2 B $EBD3,$20 dead bat B $EBF3,$20 bat 0 B $EC13,$20 bat 1 B $EC33,$20 bat 2 B $EC53,$20 dead cobra B $EC73,$20 blob 0 B $EC93,$20 blob 1 B $ECB3,$20 blob 2 B $ECD3,$20 dead blob B $ECF3,$20 wolf 0 B $ED13,$20 wolf 1 B $ED33,$20 wolf 2 B $ED53,$20 dead wolf B $ED73,$20 spectre B $ED93,$20 dead spectre B $EDB3,$20 goblin 0 B $EDD3,$20 goblin 1 B $EDF3,$20 goblin 2 B $EE13,$20 dead goblin B $EE33,$20 crocodile 0 B $EE53,$20 crocodile 1 B $EE73,$20 crocodile 2 B $EE93,$20 dead crocodile B $EEB3,$20 green dragon 0 B $EED3,$20 green dragon 1 B $EEF3,$20 green dragon 2 B $EF13,$20 dead dragon B $EF33,$20 vampire 0 B $EF53,$20 vampire 1 B $EF73,$20 vampire 2 B $EF93,$20 dead vampire B $EFB3,$20 faun 0 B $EFD3,$20 faun 1 B $EFF3,$20 faun 2 B $F013,$20 dead faun B $F033,$20 lion 0 B $F053,$20 lion 1 B $F073,$20 lion 2 B $F093,$20 dead lion B $F0B3,$20 gryphon 0 B $F0D3,$20 gryphon 1 B $F0F3,$20 gryphon 2 B $F113,$20 dead gryphon B $F133,$20 elf 0 B $F153,$20 elf 1 B $F173,$20 elf 2 B $F193,$20 elf 3 B $F1B3,$20 dead elf B $F1D3,$20 horse 0 B $F1F3,$20 horse 1 B $F213,$20 horse 2 B $F233,$20 dead horse B $F253,$20 orc 0 B $F273,$20 orc 1 B $F293,$20 orc 2 B $F2B3,$20 dead orc B $F2D3,$20 red dragon 0 B $F2F3,$20 red dragon 1 B $F313,$20 red dragon 2 B $F333,$20 fire 0 B $F353,$20 fire 1 B $F373,$20 fire 2 B $F393,$20 fire 3 B $F3B3,$20 manticore 0 B $F3D3,$20 manticore 1 B $F3F3,$20 manticore 2 B $F413,$20 dead manticore B $F433,$20 troll 0 B $F453,$20 troll 1 B $F473,$20 troll 2 B $F493,$20 dead troll B $F4B3,$20 unicorn 0 B $F4D3,$20 unicorn 1 B $F4F3,$20 unicorn 2 B $F513,$20 dead unicorn B $F533,$20 ghost 0 B $F553,$20 ghost 1 B $F573,$20 ghost 2 B $F593,$20 ghost 3 B $F5B3,$20 wraith 0 B $F5D3,$20 wraith 1 B $F5F3,$20 wraith 2 B $F613,$20 wraith 3 B $F633,$20 bear 0 B $F653,$20 bear 1 B $F673 unusued B $F674,$20 bear 2 B $F694,$20 dead bear B $F6B4,$20 gorilla 0 B $F6D4,$20 gorilla 1 B $F6F4,$20 gorilla 2 B $F714,$20 dead gorilla B $F734,$20 skeleton 0 B $F754,$20 skeleton 1 B $F774,$20 skeleton 2 B $F794,$20 ogre 0 B $F7B4,$20 ogre 1 B $F7D4,$20 ogre 2 B $F7F4,$20 dead ogre B $F814,$20 zombie 0 B $F834,$20 zombie 1 B $F854,$20 zombie 2 B $F874,$20 zombie 3 B $F894,$20 harpy 0 B $F8B4,$20 harpy 1 B $F8D4,$20 harpy 2 B $F8F4,$20 dead harpy B $F914,$20 pegasus 0 B $F934,$20 pegasus 1 B $F954,$20 pegasus 2 B $F974,$20 dead pegasus B $F994,$20 eagle 0 B $F9B4,$20 eagle 1 B $F9D4,$20 eagle 2 B $F9F4,$20 dead eagle B $FA14,$20 hydra 0 B $FA34,$20 hydra 1 B $FA54,$20 hydra 2 B $FA74,$20 dead hydra B $FA94,$20 giant rat 0 B $FAB4,$20 giant rat 1 B $FAD4,$20 giant rat 2 B $FAF4,$20 dead giant rat B $FB14,$20 centaur 0 B $FB34,$20 centaur 1 B $FB54,$20 centaur 2 B $FB74,$20 dead centaur B $FB94,$20 giant 0 B $FBB4,$20 giant 1 B $FBD4,$20 giant 2 B $FBF4,$20 dead giant B $FC14,$20 golden dragon 0 B $FC34,$20 golden dragon 1 B $FC54,$20 golden dragon 2 B $FC74,$20 dead golden dragon B $FC94,$20 dark citadel B $FCB4,$20 magic castle B $FCD4,$20 shadow wood B $FCF4,$20 magic wood B $FD14,$20 wall b $FD34 sprite data for wizard characters B $FD34,$20 character 1 B $FD54,$20 character 2 B $FD74,$20 character 3 B $FD94,$20 character 4 B $FDB4,$20 character 5 B $FDD4,$20 character 6 B $FDF4,$20 character 7 B $FE14,$20 character 8 b $FE34 ? c $FE56 s $FE5D c $FE60 s $FE67 c $FE69 b $FE71 b $FFFF B $FFFF something