Combat
Table of contents
Initialize
Print **** COMBAT ****
6FB0    20 21 08    JSR $0821       ; PRINT
6FB3    8D 8D                                                   ^M^M
6FB5    AA AA AA AA A0 C3 CF CD C2 C1 D4 A0 AA AA AA AA         **** COMBAT ****
6FC5    8D 8D 00                                                ^M^M^@
Store the value of $C0 in $E6 (we’ll come back later to work out what these are)
6FC8    A5 C0       LDA $C0
6FCA    85 E6       STA $E6
Zero out the $EFXX page (the onscreen map?)
6FCC    A2 00       LDX #$00
6FCE    8A          TXA
6FCF    9D 00 EF    STA $EF00,X
6FD2    CA          DEX
6FD3    D0 FA       BNE $6FCF
Work Out Which Combat Map to Load
if $0E >= 0x14 and $C8 is NOT a ship (0x10 - 0x13), go to $7004
otherwise continue
6FD5    A5 0E       LDA $0E
6FD7    C9 14       CMP #$14
6FD9    90 0A       BCC $6FE5
6FDB    A5 C8       LDA $C8
6FDD    C9 14       CMP #$14
6FDF    B0 23       BCS $7004
6FE1    C9 10       CMP #$10
6FE3    90 1F       BCC $7004
So, $0E is less than 0x14 OR $C8 is a ship.
If $C0 == 0x80, set $E6 to be 0xC8 and load combat map CONT (two ships)
otherwise continue
6FE5    A5 C0       LDA $C0
6FE7    C9 80       CMP #$80
6FE9    D0 09       BNE $6FF4
6FEB    A9 C8       LDA #$C8
6FED    85 E6       STA $E6
6FEF    A9 D4       LDA #$D4        ; 'T'
6FF1    4C 6D 70    JMP $706D
($0E is less than 0x14 OR $C8 is a ship) ($C0 is NOT 0x80)
If $C3 is less than 0x03 (i.e. it’s water), load combat map CONP (ship at sea)
otherwise load combat map CONE (ship with land to north).
6FF4    A5 C3       LDA $C3
6FF6    C9 03       CMP #$03
6FF8    90 05       BCC $6FFF
6FFA    A9 C5       LDA #$C5        ; 'E'
6FFC    4C 6D 70    JMP $706D
6FFF    A9 D0       LDA #$D0        ; 'P'
7001    4C 6D 70    JMP $706D
We get to $7004 if $0E >= 0x14 and $C8 is NOT a ship (0x10 - 0x13).
If $C0 is 0x80, set $E6 to 0xC8 and load combat map CONI (ship with land to south) otherwise (if $C0 is NOT 0x80) if $C3 is less than 0x03 (i.e. it’s water), load combat map CONO (coastal) otherwise ($C3 is NOT water) go to next section and choose map based on $C8.
7004    A5 C0       LDA $C0
7006    C9 80       CMP #$80
7008    D0 09       BNE $7013
700A    A9 C8       LDA #$C8
700C    85 E6       STA $E6
700E    A9 C9       LDA #$C9        ; 'I'
7010    4C 6D 70    JMP $706D
7013    A5 C3       LDA $C3
7015    C9 03       CMP #$03
7017    B0 05       BCS $701E
7019    A9 CF       LDA #$CF        ; 'O'
701B    4C 6D 70    JMP $706D
To summarize the above
| $0E < 0x14 OR $C8 is a ship | $C0 == 0x80 | $C3 < 0x03 | CON_ | map | 
|---|---|---|---|---|
| y | y | T | two ships | |
| y | n | y | P | ship at sea | 
| y | n | n | E | ship with land to north | 
| n | y | I | ship with land to south | |
| n | n | y | O | coastal | 
| n | n | n | see next table | 
Choose map based on value in $C8
| $C8 | tile | CON_ | map | 
|---|---|---|---|
| 0x03 | swamp | S | swamp | 
| 0x05 | light forest | B | grass 1 | 
| 0x06 | heavy forest | F | forest | 
| 0x07 | hills | H | hills | 
| 0x16 | cobblestone | D | cobblestone | 
| 0x3E | brick paving | C | brick | 
| 0x17 | bridge 1 | R | bridge | 
| 0x19 | bridge 2 | R | bridge | 
| 0x1A | bridge 3 | R | bridge | 
| 0x3F | bridge 4 | R | bridge | 
| otherwise | G | grass 2 | 
701E    A5 C8       LDA $C8
7020    C9 03       CMP #$03        ; if == 0x03
7022    D0 05       BNE $7029
7024    A9 D3       LDA #$D3        ; 'S'
7026    4C 6D 70    JMP $706D
7029    C9 05       CMP #$05        ; if == 0x05
702B    D0 05       BNE $7032
702D    A9 C2       LDA #$C2        ; 'B'
702F    4C 6D 70    JMP $706D
7032    C9 06       CMP #$06        ; if == 0x06
7034    D0 05       BNE $703B
7036    A9 C6       LDA #$C6        ; 'F'
7038    4C 6D 70    JMP $706D
703B    C9 07       CMP #$07        ; if == 0x07
703D    D0 05       BNE $7044
703F    A9 C8       LDA #$C8        ; 'H'
7041    4C 6D 70    JMP $706D
7044    C9 16       CMP #$16        ; if == 0x16
7046    D0 05       BNE $704D
7048    A9 C4       LDA #$C4        ; 'D'
704A    4C 6D 70    JMP $706D
704D    C9 3E       CMP #$3E        ; if == 0x3E
704F    D0 05       BNE $7056       ;
7051    A9 C3       LDA #$C3        ; 'C'
7053    4C 6D 70    JMP $706D
7056    C9 17       CMP #$17        ; if == 0x17
7058    F0 0C       BEQ $7066
705A    C9 19       CMP #$19        ; if == 0x19
705C    F0 08       BEQ $7066
705E    C9 1A       CMP #$1A        ; if == 0x1A
7060    F0 04       BEQ $7066
7062    C9 3F       CMP #$3F        ; if == 0x3F
7064    D0 05       BNE $706B
7066    A9 D2       LDA #$D2        ; 'R'
7068    4C 6D 70    JMP $706D
706B    A9 C7       LDA #$C7        ; otherwise 'G'