Routines |
Prev: 39224 | Up: Map | Next: 40140 |
Used by the routine at 39224.
|
||||
39989 | PUSH IX | Store IX | ||
39991 | PUSH BC | Store BC | ||
39992 | PUSH DE | Store DE | ||
39993 | LD A,(23331) | Load Magic Knight's predicted x-coordinate into A | ||
39996 | RRCA | Divide by eight, rounding down to nearest integer... | ||
39997 | RRCA | ... | ||
39998 | RRCA | ... | ||
39999 | AND 31 | ... | ||
40001 | LD (23333),A | ...and store at 23333 | ||
40004 | LD A,(23331) | Load three least significant bits of predicted x-coordinate into 23335... | ||
40007 | AND 7 | ... | ||
40009 | LD (23335),A | ... | ||
40012 | LD A,(23332) | Load Magic Knight's predicted x-coordinate into A | ||
40015 | RRCA | Divide by eight, rounding down to nearest integer... | ||
40016 | RRCA | ... | ||
40017 | RRCA | ... | ||
40018 | AND 31 | ... | ||
40020 | LD (23334),A | ...and store at 23333 | ||
40023 | LD A,(23332) | Load three least significant bits of predicted x-coordinate into 23336... | ||
40026 | AND 7 | ... | ||
40028 | LD (23336),A | ... | ||
40031 | LD A,(23334) | Load predicted y-coordinate in characters into A | ||
40034 | ADD A,A | Multiply by 8... | ||
40035 | ADD A,A | ... | ||
40036 | ADD A,A | ... | ||
40037 | LD H,0 | Load into HL... | ||
40039 | LD L,A | ... | ||
40040 | ADD HL,HL | Multiply by 4 (i.e. 32 times original value)... | ||
40041 | ADD HL,HL | ... | ||
40042 | LD A,(23333) | Load predicted x-coordinate in characters into A | ||
40045 | LD D,0 | Load into DE... | ||
40047 | LD E,A | ... | ||
40048 | ADD HL,DE | Add x-coordinate to 32 times y-coordinate (to get offset from, for example, start of attribute file) | ||
40049 | PUSH HL | Store HL (x + 32 × y offset value) | ||
40050 | LD DE,22528 | Point DE at start of attribute file | ||
40053 | ADD HL,DE | Add HL to address of start of attribute file as offset | ||
40054 | PUSH HL | Transfer updated display file address (predicted attribute display file address of Magic Knight) from HL to IX... | ||
40055 | POP IX | ... | ||
40057 | POP HL | Restore HL (x + 32 × y offset value) | ||
40058 | LD DE,24539 | Point DE at start of terrain interaction data | ||
40061 | ADD HL,DE | Add HL to DE as offset (in HL) | ||
40062 | LD B,0 | Load BC with 30, as 30 characters have to be skipped when moving from right side of Magic Knight on one character row to left side on next row | ||
40064 | LD C,30 | |||
40066 | LD A,(23335) | Load pixel-within-character predicted x-coordinate of Magic Knight into A | ||
40069 | OR A | If this is zero... | ||
40070 | JR Z,40074 | ...then skip ahead to 40074... | ||
40072 | LD C,29 | ...else load BC with 29, as Magic Knight is spans three characters rather than two | ||
40074 | LD DE,(23337) | Load Magic Knight's attribute and update-attributes-at-Magic-Knight's-predicted-position flag into DE | ||
40078 | EXX | Switch registers | ||
40079 | LD C,4 | Load C with 4 (as Magic Knight is 4 characters tall) | ||
40081 | LD A,(23336) | Load predicted pixel-within-character y-coordinate | ||
40084 | OR A | If this is zero... | ||
40085 | JR Z,40089 | ...then skip ahead to 40089... | ||
40087 | LD C,5 | ...else add one, as Magic Knight is "between" characters, and therefore spans 5 characters tall | ||
40089 | LD B,2 | Load B with 2 (as Magic Knight is 2 characters wide) | ||
40091 | LD A,(23335) | Load predicted pixel-within-character x-coordinate | ||
40094 | OR A | If this is zero... | ||
40095 | JR Z,40099 | ...then skip ahead to 40099... | ||
40097 | LD B,3 | ...else add one, as Magic Knight is "between" characters, and therefore spans 3 characters wide | ||
40099 | LD A,B | Load number of characters spanned by Magic Knight into A... | ||
40100 | LD (40104),A | ...and into instruction at 40103 | ||
The operand of the instruction at 40103 represents the number of characters spanned by Magic Knight horizontally. This is modified by the instruction at 40100.
|
||||
40103 | LD B,0 | Load B with number of characters spanned by Magic Knight horizontally | ||
40105 | EXX | Switch registers | ||
40106 | BIT 6,(HL) | If bit 6 (i.e. preserve-attribute) is set in terrain interaction data for Magic Knight's predicted x- and y-coordinates... | ||
40108 | JP NZ,40120 | ...then skip ahead to 40120 | ||
40111 | LD A,(IX+0) | Load attribute at Magic Knight's predicted x- and y-coordinates into A | ||
40114 | XOR E | XOR with Magic Knight's current attribute | ||
40115 | AND D | Reset INK and BRIGHT bits, preserving only PAPER and FLASH | ||
40116 | XOR E | XOR with Magic Knight's current attribute (Magic Knight's INK and BRIGHT bits override whatever was there before) | ||
40117 | LD (IX+0),A | Load processed attribute value at Magic Knight's predicted x- and y-coordinates back into display file | ||
40120 | INC HL | Advance by one byte in terrain interaction data | ||
40121 | INC IX | Advance by one byte in display file | ||
40123 | EXX | Switch registers | ||
40124 | DJNZ 40105 | Loop back to 40105 for next character in Magic Knight's spanned characters | ||
40126 | EXX | Switch registers | ||
40127 | ADD HL,BC | Advance pointer in terrain interaction data by 29/30 bytes (down to next row, depending on how many characters Magic Knight spans) | ||
40128 | ADD IX,BC | Advance pointer in attribute file by 29/30 bytes (down to next row, depending on how many characters Magic Knight spans) | ||
40130 | EXX | Switch registers | ||
40131 | DEC C | Decrease number of characters spanned by Magic Knight vertically... | ||
40132 | JR NZ,40103 | ...and if not zero (i.e. more to go) then loop back to 40103 | ||
40134 | EXX | Switch registers | ||
40135 | POP DE | Restore DE | ||
40136 | POP BC | Restore BC | ||
40137 | POP IX | Restore IX | ||
40139 | RET | Return |
Prev: 39224 | Up: Map | Next: 40140 |