| TirNaNog | Routines | 
| Prev: 6F19 | Up: Map | Next: 751C | 
| 
 
Used by the routine at Vector_Main.
 
  | 
||||||||||
| Screen_DrawColumn | 6F22 | LD (OffScrColPtr_6F14),HL | Store draw to address on the offscreen. | |||||||
| 6F25 | LD DE,$0022 | Clear a column down at that address. | ||||||||
| 6F28 | LD B,$40 | |||||||||
| 6F2A | XOR A | |||||||||
| Screen_DrawColumn_0 | 6F2B | LD (HL),A | ||||||||
| 6F2C | ADD HL,DE | |||||||||
| 6F2D | DJNZ Screen_DrawColumn_0 | |||||||||
| 6F2F | CALL ExitAreaCheck | See if hero is leaving area. | ||||||||
| 6F32 | LD A,(CamDirection_DFD2) | Workout a rectangle which is on the edge of the screen and the hero is walking towards. | ||||||||
| 6F35 | AND A | |||||||||
| 6F36 | RLA | |||||||||
| 6F37 | RLA | |||||||||
| 6F38 | RLA | |||||||||
| 6F39 | LD C,A | |||||||||
| 6F3A | LD B,$00 | |||||||||
| 6F3C | ADD IX,BC | |||||||||
| 6F3E | LD HL,(ManData_PosPrimary_dfc3) | |||||||||
| 6F41 | LD C,(IX+$00) | |||||||||
| 6F44 | LD B,(IX+$01) | |||||||||
| 6F47 | AND A | |||||||||
| 6F48 | ADC HL,BC | |||||||||
| 6F4A | JP P,Screen_DrawColumn_1 | |||||||||
| 6F4D | LD HL,$0000 | |||||||||
| Screen_DrawColumn_1 | 6F50 | LD (Rectangle_x1),HL | ||||||||
| 6F53 | LD HL,(ManData_PosPrimary_dfc3) | |||||||||
| 6F56 | LD C,(IX+$04) | |||||||||
| 6F59 | LD B,(IX+$05) | |||||||||
| 6F5C | AND A | |||||||||
| 6F5D | ADC HL,BC | |||||||||
| 6F5F | RET M | |||||||||
| 6F60 | RET Z | |||||||||
| 6F61 | LD (Rectangle_x2),HL | |||||||||
| 6F64 | LD HL,(ManData_PosSecondary_dfc5) | |||||||||
| 6F67 | LD C,(IX+$02) | |||||||||
| 6F6A | LD B,(IX+$03) | |||||||||
| 6F6D | AND A | |||||||||
| 6F6E | ADC HL,BC | |||||||||
| 6F70 | JP P,Screen_DrawColumn_2 | |||||||||
| 6F73 | LD HL,$0000 | |||||||||
| Screen_DrawColumn_2 | 6F76 | LD (Rectangle_y1),HL | ||||||||
| 6F79 | LD HL,(ManData_PosSecondary_dfc5) | |||||||||
| 6F7C | LD C,(IX+$06) | |||||||||
| 6F7F | LD B,(IX+$07) | |||||||||
| 6F82 | AND A | |||||||||
| 6F83 | ADC HL,BC | |||||||||
| 6F85 | RET M | |||||||||
| 6F86 | RET Z | |||||||||
| 6F87 | LD (Rectangle_y2),HL | |||||||||
| 
 
Scan through the locations furniture.
 
 | 
||||||||||
| 6F8A | LD IX,(AreaDataCurrent_SceneryPrimary) | |||||||||
| Screen_DrawColumn_3 | 6F8E | LD A,(IX+$00) | If both positions are zero, end of list | |||||||
| 6F91 | OR (IX+$01) | |||||||||
| 6F94 | JR Z,Screen_DrawColumn_8 | |||||||||
| 6F96 | LD A,(IX+$03) | |||||||||
| 6F99 | AND $3F | |||||||||
| 6F9B | JR Z,Screen_DrawColumn_4 | |||||||||
| 6F9D | LD HL,(AreaDataCurrent_Index) | |||||||||
| 6FA0 | CP L | |||||||||
| 6FA1 | JR NZ,DrawScenery_NextItem | |||||||||
| Screen_DrawColumn_4 | 6FA3 | LD (T1),A | ||||||||
| 6FA6 | LD L,(IX+$02) | Workout bitmap data address from index. | ||||||||
| 6FA9 | LD H,$00 | |||||||||
| 6FAB | ADD HL,HL | |||||||||
| 6FAC | ADD HL,HL | |||||||||
| 6FAD | LD DE,BitmapData_Width | |||||||||
| 6FB0 | ADD HL,DE | |||||||||
| 6FB1 | LD A,(HL) | Get width of bitmap. | ||||||||
| 6FB2 | AND $7F | |||||||||
| 6FB4 | CALL RectIntersection | |||||||||
| 6FB7 | JR C,DrawScenery_NextItem | |||||||||
| 6FB9 | LD A,(IX+$02) | See if an alternate bitmap is required and store back into item data. | ||||||||
| 6FBC | PUSH AF | |||||||||
| 6FBD | CALL AltBitmapSearch | |||||||||
| 6FC0 | LD (IX+$02),A | |||||||||
| 6FC3 | LD L,A | Get bitmap data address from item.BitmapIndex | ||||||||
| 6FC4 | LD H,$00 | |||||||||
| 6FC6 | ADD HL,HL | |||||||||
| 6FC7 | ADD HL,HL | |||||||||
| 6FC8 | LD DE,BitmapData_Width | |||||||||
| 6FCB | ADD HL,DE | |||||||||
| 6FCC | LD A,(IX+$03) | See if bitmap need flipping. | ||||||||
| 6FCF | AND $20 | |||||||||
| 6FD1 | DEC A | |||||||||
| 6FD2 | XOR (HL) | |||||||||
| 6FD3 | AND $80 | |||||||||
| 6FD5 | JR NZ,Screen_DrawColumn_5 | |||||||||
| 6FD7 | LD L,(IX+$02) | |||||||||
| 6FDA | LD H,$00 | |||||||||
| 6FDC | CALL BitmapMirror | |||||||||
| Screen_DrawColumn_5 | 6FDF | BIT 6,(IX+$03) | ||||||||
| 6FE3 | JR NZ,Screen_DrawColumn_6 | |||||||||
| 6FE5 | LD HL,$0005 | Blit next column of bitmap onto edge of offscreen. | ||||||||
| 6FE8 | CALL BlitBmpColumn | |||||||||
| 6FEB | JR Screen_DrawColumn_7 | |||||||||
| 
 
Create an action for this scenery object.
 
 | 
||||||||||
| Screen_DrawColumn_6 | 6FED | CALL Actions_CreateObj | ||||||||
| Screen_DrawColumn_7 | 6FF0 | POP AF | ||||||||
| 6FF1 | LD (IX+$02),A | |||||||||
| DrawScenery_NextItem | 6FF4 | LD BC,$0004 | ||||||||
| 6FF7 | ADD IX,BC | |||||||||
| 6FF9 | JR Screen_DrawColumn_3 | |||||||||
| 
 
Variables
 
 | 
||||||||||
| V1 | 6FFB | DEFW $FFFC | ||||||||
| V2 | 6FFD | DEFW $0004 | ||||||||
| V3 | 6FFF | DEFW $0000 | ||||||||
| 
 
Handle path junctions.
 
 | 
||||||||||
| Screen_DrawColumn_8 | 7001 | XOR A | ||||||||
| 7002 | LD (PathBottomJunction),A | |||||||||
| 7005 | LD A,$CA | Index for the small path junction '/..\' | ||||||||
| 7007 | LD (TempBlitItem_I),A | |||||||||
| 700A | LD HL,$0004 | |||||||||
| 700D | LD DE,$0002 | |||||||||
| 7010 | LD BC,$0010 | |||||||||
| 7013 | LD A,$02 | |||||||||
| 
 
Loop for top and bottom edges of path.
 
 | 
||||||||||
| Screen_DrawColumn_9 | 7015 | PUSH AF | ||||||||
| 7016 | LD (V1),HL | |||||||||
| 7019 | LD (V2),DE | |||||||||
| 701D | LD (V3),BC | |||||||||
| 7021 | LD A,(PathBottomJunction) | |||||||||
| 7024 | LD (PathTopJunction),A | |||||||||
| 7027 | XOR A | |||||||||
| 7028 | LD (PathBottomJunction),A | |||||||||
| 702B | LD A,(CamDirection_DFD2) | |||||||||
| 702E | BIT 0,A | |||||||||
| 7030 | JR Z,Screen_DrawColumn_10 | |||||||||
| 7032 | LD IX,(AreaDataCurrent_Path_H) | |||||||||
| 7036 | LD BC,(Rectangle_x1) | |||||||||
| 703A | LD DE,(ManData_PosSecondary_dfc5) | |||||||||
| 703E | JR Screen_DrawColumn_11 | |||||||||
| Screen_DrawColumn_10 | 7040 | LD IX,(AreaDataCurrent_Path_V) | ||||||||
| 7044 | LD BC,(Rectangle_y1) | |||||||||
| 7048 | LD DE,(ManData_PosPrimary_dfc3) | |||||||||
| Screen_DrawColumn_11 | 704C | INC BC | ||||||||
| 704D | INC BC | |||||||||
| 704E | LD HL,(V1) | |||||||||
| 7051 | CP $01 | |||||||||
| 7053 | JR Z,Screen_DrawColumn_12 | |||||||||
| 7055 | CP $02 | |||||||||
| 7057 | JR Z,Screen_DrawColumn_12 | |||||||||
| 7059 | EX DE,HL | |||||||||
| 705A | AND A | |||||||||
| 705B | SBC HL,DE | |||||||||
| 705D | JR Screen_DrawColumn_13 | |||||||||
| Screen_DrawColumn_12 | 705F | ADD HL,DE | ||||||||
| Screen_DrawColumn_13 | 7060 | EX DE,HL | ||||||||
| 
 
Iterate throught the list of paths.
 
 | 
||||||||||
| Screen_DrawColumn_14 | 7061 | PUSH BC | ||||||||
| 7062 | PUSH DE | |||||||||
| 7063 | LD A,(IX+$00) | Check to see if path is for current area. | ||||||||
| 7066 | AND A | |||||||||
| 7067 | JR Z,Screen_DrawColumn_15 | |||||||||
| 7069 | LD HL,AreaDataCurrent_Index | |||||||||
| 706C | CP (HL) | |||||||||
| 706D | JR NZ,Screen_DrawColumn_19 | |||||||||
| Screen_DrawColumn_15 | 706F | LD L,(IX+$01) | See if path intersects, at right angles, the test rectangle. | |||||||
| 7072 | LD H,$00 | |||||||||
| 7074 | ADD HL,HL | |||||||||
| 7075 | AND A | |||||||||
| 7076 | SBC HL,BC | |||||||||
| 7078 | LD BC,(V2) | |||||||||
| 707C | JR NC,Screen_DrawColumn_16 | |||||||||
| 707E | AND A | |||||||||
| 707F | ADC HL,BC | |||||||||
| 7081 | JP M,Screen_DrawColumn_19 | It doesn't so move onto the next path in the list. | ||||||||
| 7084 | JR Screen_DrawColumn_17 | |||||||||
| Screen_DrawColumn_16 | 7086 | AND A | If the rectangle position is before the current path, no need to check the rest as all paths are in order. | |||||||
| 7087 | SBC HL,BC | |||||||||
| 7089 | JR NC,Screen_DrawColumn_20 | |||||||||
| Screen_DrawColumn_17 | 708B | LD L,(IX+$02) | ||||||||
| 708E | LD H,$00 | |||||||||
| 7090 | ADD HL,HL | |||||||||
| 7091 | AND A | |||||||||
| 7092 | SBC HL,DE | |||||||||
| 7094 | JR NC,Screen_DrawColumn_19 | |||||||||
| 7096 | LD L,(IX+$03) | |||||||||
| 7099 | LD H,$00 | |||||||||
| 709B | ADD HL,HL | |||||||||
| 709C | SCF | |||||||||
| 709D | SBC HL,DE | |||||||||
| 709F | JR C,Screen_DrawColumn_19 | |||||||||
| 70A1 | LD L,(IX+$01) | |||||||||
| 70A4 | LD H,$00 | |||||||||
| 70A6 | ADD HL,HL | |||||||||
| 70A7 | LD A,(CamDirection_DFD2) | |||||||||
| 70AA | AND $01 | |||||||||
| 70AC | JR NZ,Screen_DrawColumn_18 | |||||||||
| 70AE | EX DE,HL | |||||||||
| Screen_DrawColumn_18 | 70AF | SRL H | ||||||||
| 70B1 | RR L | |||||||||
| 70B3 | LD A,L | |||||||||
| 70B4 | LD (TempBlitItem_P),A | |||||||||
| 70B7 | SRL D | |||||||||
| 70B9 | RR E | |||||||||
| 70BB | LD A,E | |||||||||
| 70BC | LD (TempBlitItem_S),A | |||||||||
| 70BF | LD A,$01 | |||||||||
| 70C1 | LD (PathBottomJunction),A | |||||||||
| 70C4 | LD IX,TempBlitItem_P | |||||||||
| 70C8 | LD HL,(V3) | |||||||||
| 70CB | CALL BlitBmpColumn | For path junctions. | ||||||||
| 70CE | JR Screen_DrawColumn_20 | |||||||||
| 
 
Next path.
 
 | 
||||||||||
| Screen_DrawColumn_19 | 70D0 | LD BC,$0004 | ||||||||
| 70D3 | ADD IX,BC | |||||||||
| 70D5 | POP DE | |||||||||
| 70D6 | POP BC | |||||||||
| 70D7 | JR Screen_DrawColumn_14 | |||||||||
| 
 
Loop again to do bottom edge of path.
 
 | 
||||||||||
| Screen_DrawColumn_20 | 70D9 | POP DE | ||||||||
| 70DA | POP BC | |||||||||
| 70DB | LD A,$CC | Index for the large path junction '/....\' | ||||||||
| 70DD | LD (TempBlitItem_I),A | |||||||||
| 70E0 | LD HL,$FFFC | |||||||||
| 70E3 | LD DE,$0004 | |||||||||
| 70E6 | LD BC,$0000 | |||||||||
| 70E9 | POP AF | |||||||||
| 70EA | DEC A | |||||||||
| 70EB | JP NZ,Screen_DrawColumn_9 | |||||||||
| 
 
See which path edges need to be drawn.
 
 | 
||||||||||
| 70EE | LD A,(CamDirection_DFD2) | |||||||||
| 70F1 | BIT 0,A | |||||||||
| 70F3 | JR NZ,Screen_DrawColumn_21 | |||||||||
| 70F5 | LD DE,(ManData_PosPrimary_dfc3) | |||||||||
| 70F9 | LD IX,(AreaDataCurrent_Path_H) | |||||||||
| 70FD | JR Screen_DrawColumn_22 | |||||||||
| Screen_DrawColumn_21 | 70FF | LD DE,(ManData_PosSecondary_dfc5) | ||||||||
| 7103 | LD IX,(AreaDataCurrent_Path_V) | |||||||||
| Screen_DrawColumn_22 | 7107 | LD A,(IX+$00) | Check path is allowed for current area. | |||||||
| 710A | AND A | |||||||||
| 710B | JR Z,Screen_DrawColumn_23 | |||||||||
| 710D | LD HL,AreaDataCurrent_Index | |||||||||
| 7110 | CP (HL) | |||||||||
| 7111 | JR NZ,Screen_DrawColumn_24 | |||||||||
| Screen_DrawColumn_23 | 7113 | LD L,(IX+$01) | Get the axis of the next path. ( Always double for true position on map.) | |||||||
| 7116 | LD H,$00 | |||||||||
| 7118 | ADD HL,HL | |||||||||
| 7119 | AND A | |||||||||
| 711A | SBC HL,DE | Check to see if man's position is same as path. | ||||||||
| 711C | JR Z,Screen_DrawColumn_25 | |||||||||
| 711E | JP NC,Screen_DrawColumn_31 | If it is less then no edges to draw. | ||||||||
| 
 
Loop for next path on list.
 
 | 
||||||||||
| Screen_DrawColumn_24 | 7121 | LD BC,$0004 | ||||||||
| 7124 | ADD IX,BC | |||||||||
| 7126 | JR Screen_DrawColumn_22 | |||||||||
| 
 
TODO
 
 | 
||||||||||
| Screen_DrawColumn_25 | 7128 | LD A,(CamDirection_DFD2) | ||||||||
| 712B | BIT 0,A | |||||||||
| 712D | JR NZ,Screen_DrawColumn_26 | |||||||||
| 712F | LD BC,(Rectangle_y1) | |||||||||
| 7133 | JR Screen_DrawColumn_27 | |||||||||
| Screen_DrawColumn_26 | 7135 | LD BC,(Rectangle_x1) | ||||||||
| Screen_DrawColumn_27 | 7139 | INC BC | ||||||||
| 713A | LD L,(IX+$02) | |||||||||
| 713D | LD H,$00 | |||||||||
| 713F | ADD HL,HL | |||||||||
| 7140 | AND A | |||||||||
| 7141 | SBC HL,BC | |||||||||
| 7143 | JR NC,Screen_DrawColumn_24 | |||||||||
| 7145 | LD A,L | |||||||||
| 7146 | CPL | |||||||||
| 7147 | LD L,A | |||||||||
| 7148 | LD A,H | |||||||||
| 7149 | CPL | |||||||||
| 714A | LD H,A | |||||||||
| 714B | INC HL | |||||||||
| 714C | LD ( s0),HL | |||||||||
| 714F | LD L,(IX+$03) | |||||||||
| 7152 | LD H,$00 | |||||||||
| 7154 | ADD HL,HL | |||||||||
| 7155 | AND A | |||||||||
| 7156 | SBC HL,BC | |||||||||
| 7158 | JR C,Screen_DrawColumn_24 | |||||||||
| 
 
Blit the bottom edge of the path if required.
 
 | 
||||||||||
| 715A | LD ( s2),HL | |||||||||
| 715D | LD A,C | Work out which half of the 16 pixel bitmap to blit. | ||||||||
| 715E | RRA | |||||||||
| 715F | AND $01 | |||||||||
| 7161 | LD C,A | |||||||||
| 7162 | LD B,$00 | |||||||||
| 7164 | LD A,(PathBottomJunction) | |||||||||
| 7167 | AND A | |||||||||
| 7168 | JR NZ,Screen_DrawColumn_29 | |||||||||
| 716A | PUSH BC | |||||||||
| 716B | LD HL,( BitmapData_cf77) | workout the address of the path edge bitmap from the bitmap data, offsetting to start from the half that needs to be blitted. | ||||||||
| 716E | LD DE,BmpStart_E | |||||||||
| 7171 | ADD HL,DE | |||||||||
| 7172 | ADD HL,BC | |||||||||
| 7173 | EX DE,HL | |||||||||
| 7174 | LD HL,(OffScrColPtr_6F14) | |||||||||
| 7177 | LD BC,$0770 | |||||||||
| 717A | ADD HL,BC | |||||||||
| 717B | LD BC,$0022 | |||||||||
| 717E | LD A,$08 | |||||||||
| Screen_DrawColumn_28 | 7180 | EX AF,AF' | Blit one 8 pixel column of the path edge. | |||||||
| 7181 | LD A,(DE) | |||||||||
| 7182 | XOR (HL) | |||||||||
| 7183 | LD (HL),A | |||||||||
| 7184 | ADD HL,BC | |||||||||
| 7185 | INC DE | |||||||||
| 7186 | INC DE | |||||||||
| 7187 | EX AF,AF' | |||||||||
| 7188 | DEC A | |||||||||
| 7189 | JR NZ,Screen_DrawColumn_28 | |||||||||
| 718B | POP BC | |||||||||
| 
 
Draw top edge of path if required.
 
 | 
||||||||||
| Screen_DrawColumn_29 | 718C | LD A,(PathTopJunction) | ||||||||
| 718F | AND A | |||||||||
| 7190 | JR NZ,Screen_DrawColumn_32 | |||||||||
| 7192 | LD HL,( s2) | |||||||||
| 7195 | LD DE,$0002 | |||||||||
| 7198 | SBC HL,DE | |||||||||
| 719A | JR C,Screen_DrawColumn_32 | |||||||||
| 719C | LD HL,( s0) | |||||||||
| 719F | SBC HL,DE | |||||||||
| 71A1 | JR C,Screen_DrawColumn_32 | |||||||||
| 71A3 | LD HL,( BitmapData_cf67) | |||||||||
| 71A6 | LD DE,BmpStart_E | |||||||||
| 71A9 | ADD HL,DE | |||||||||
| 71AA | ADD HL,BC | |||||||||
| 71AB | EX DE,HL | |||||||||
| 71AC | LD HL,(OffScrColPtr_6F14) | |||||||||
| 71AF | LD BC,$0550 | |||||||||
| 71B2 | ADD HL,BC | |||||||||
| 71B3 | LD BC,$0022 | |||||||||
| 71B6 | LD A,$08 | |||||||||
| Screen_DrawColumn_30 | 71B8 | EX AF,AF' | ||||||||
| 71B9 | LD A,(DE) | |||||||||
| 71BA | XOR (HL) | |||||||||
| 71BB | LD (HL),A | |||||||||
| 71BC | ADD HL,BC | |||||||||
| 71BD | INC DE | |||||||||
| 71BE | INC DE | |||||||||
| 71BF | EX AF,AF' | |||||||||
| 71C0 | DEC A | |||||||||
| 71C1 | JR NZ,Screen_DrawColumn_30 | |||||||||
| 71C3 | JR Screen_DrawColumn_32 | |||||||||
| 
 
Draw middle path leading in, if needed. '/...\'
 
 | 
||||||||||
| Screen_DrawColumn_31 | 71C5 | LD A,(PathBottomJunction) | ||||||||
| 71C8 | AND A | |||||||||
| 71C9 | JR NZ,Screen_DrawColumn_36 | |||||||||
| 71CB | LD A,(PathTopJunction) | |||||||||
| 71CE | AND A | |||||||||
| 71CF | JR NZ,Screen_DrawColumn_36 | |||||||||
| 71D1 | JR S_DC_ItemDraw | |||||||||
| Screen_DrawColumn_32 | 71D3 | LD HL,( s2) | ||||||||
| 71D6 | LD DE,$0004 | |||||||||
| 71D9 | AND A | |||||||||
| 71DA | SBC HL,DE | |||||||||
| 71DC | JR C,Screen_DrawColumn_33 | |||||||||
| 71DE | LD DE,( s0) | |||||||||
| 71E2 | LD HL,$0004 | |||||||||
| 71E5 | SBC HL,DE | |||||||||
| 71E7 | JR C,S_DC_ItemDraw | |||||||||
| Screen_DrawColumn_33 | 71E9 | LD DE,(Rectangle_y1) | ||||||||
| 71ED | LD BC,(ManData_PosPrimary_dfc3) | |||||||||
| 71F1 | LD A,(CamDirection_DFD2) | |||||||||
| 71F4 | BIT 0,A | |||||||||
| 71F6 | JR Z,Screen_DrawColumn_34 | |||||||||
| 71F8 | LD DE,(Rectangle_x1) | |||||||||
| 71FC | LD BC,(ManData_PosSecondary_dfc5) | |||||||||
| Screen_DrawColumn_34 | 7200 | INC DE | ||||||||
| 7201 | ADD HL,DE | |||||||||
| 7202 | SRL B | |||||||||
| 7204 | RR C | |||||||||
| 7206 | LD A,C | |||||||||
| 7207 | EX AF,AF' | |||||||||
| 7208 | SRL H | |||||||||
| 720A | RR L | |||||||||
| 720C | LD A,L | |||||||||
| 720D | LD HL,CamDirection_DFD2 | |||||||||
| 7210 | BIT 0,(HL) | |||||||||
| 7212 | JR NZ,Screen_DrawColumn_35 | |||||||||
| 7214 | EX AF,AF' | |||||||||
| Screen_DrawColumn_35 | 7215 | LD (TempBlitItem_P),A | ||||||||
| 7218 | EX AF,AF' | |||||||||
| 7219 | LD (TempBlitItem_S),A | |||||||||
| Screen_DrawColumn_36 | 721C | LD IX,TempBlitItem_P | ||||||||
| 7220 | LD (IX+$02),$CB | |||||||||
| 7224 | LD HL,$0008 | |||||||||
| 7227 | CALL BlitBmpColumn | For path ends and bends. | ||||||||
| 
 
Draw Scenery Items
 
 | 
||||||||||
| S_DC_ItemDraw | 722A | LD IX,(AreaDataCurrent_ScenerySecondary) | ||||||||
| S_DC_ItemForEach | 722E | LD A,(IX+$00) | Check for end of the list. | |||||||
| 7231 | OR (IX+$01) | |||||||||
| 7234 | JP Z,Screen_DrawColumn_70 | |||||||||
| 7237 | LD A,(IX+$03) | Get area index, 0 means ignore. | ||||||||
| 723A | AND $3F | |||||||||
| 723C | JR Z,Screen_DrawColumn_37 | |||||||||
| 723E | LD HL,(AreaDataCurrent_Index) | If it doesn't match, next item. | ||||||||
| 7241 | CP L | |||||||||
| 7242 | JP NZ,S_DC_NextItem | |||||||||
| Screen_DrawColumn_37 | 7245 | LD (T1),A | Store index of area value. | |||||||
| 7248 | LD A,(IX+$02) | Object width | ||||||||
| 724B | CALL RectIntersection | Is object with draw rect (column). | ||||||||
| 724E | JP C,S_DC_NextItem | |||||||||
| 7251 | LD L,(IX+$01) | Get positions of object and man and work out which is the path position and the axis position. | ||||||||
| 7254 | LD H,$00 | |||||||||
| 7256 | LD A,(IX+$02) | |||||||||
| 7259 | RRCA | |||||||||
| 725A | ADC HL,HL | |||||||||
| 725C | EX DE,HL | |||||||||
| 725D | LD HL,(ManData_PosSecondary_dfc5) | |||||||||
| 7260 | EXX | |||||||||
| 7261 | LD L,(IX+$00) | |||||||||
| 7264 | LD H,$00 | |||||||||
| 7266 | RLCA | |||||||||
| 7267 | ADC HL,HL | |||||||||
| 7269 | EX DE,HL | |||||||||
| 726A | LD HL,(ManData_PosPrimary_dfc3) | |||||||||
| 726D | LD A,(CamDirection_DFD2) | |||||||||
| 7270 | AND $01 | |||||||||
| 7272 | JR Z,Screen_DrawColumn_38 | |||||||||
| 7274 | EXX | |||||||||
| Screen_DrawColumn_38 | 7275 | CALL abs(hl_minus_de) | Using the axis position to see how close object is to man | |||||||
| 7278 | LD E,(IX+$02) | |||||||||
| 727B | LD D,$00 | |||||||||
| 727D | AND A | |||||||||
| 727E | SBC HL,DE | |||||||||
| 7280 | JR C,Screen_DrawColumn_39 | |||||||||
| 7282 | LD A,L | If farther than 8 units we do not draw. | ||||||||
| 7283 | CP $08 | |||||||||
| 7285 | JP NC,S_DC_NextItem | |||||||||
| 7288 | CP $06 | |||||||||
| 728A | JR NC,Screen_DrawColumn_40 | |||||||||
| Screen_DrawColumn_39 | 728C | LD HL,$0005 | If less than 6 we force to 5 uints. | |||||||
| 728F | JR Screen_DrawColumn_41 | |||||||||
| Screen_DrawColumn_40 | 7291 | DEC HL | Calculate position on offscreen from this. | |||||||
| 7292 | DEC HL | |||||||||
| 7293 | ADD HL,HL | |||||||||
| 7294 | ADD HL,HL | |||||||||
| Screen_DrawColumn_41 | 7295 | EX DE,HL | ||||||||
| 7296 | LD HL,$0040 | |||||||||
| 7299 | AND A | |||||||||
| 729A | SBC HL,DE | |||||||||
| 729C | ADD HL,HL | |||||||||
| 729D | LD E,L | |||||||||
| 729E | LD D,H | |||||||||
| 729F | ADD HL,HL | |||||||||
| 72A0 | ADD HL,HL | |||||||||
| 72A1 | ADD HL,HL | |||||||||
| 72A2 | ADD HL,HL | |||||||||
| 72A3 | ADD HL,DE | |||||||||
| 72A4 | LD DE,(OffScrColPtr_6F14) | |||||||||
| 72A8 | ADD HL,DE | |||||||||
| 72A9 | LD (OffScrTempPtr_6F16),HL | |||||||||
| 72AC | EXX | Get path positions. | ||||||||
| 72AD | LD A,(CamDirection_DFD2) | |||||||||
| 72B0 | BIT 1,A | |||||||||
| 72B2 | JR Z,Screen_DrawColumn_42 | |||||||||
| 72B4 | EX DE,HL | |||||||||
| Screen_DrawColumn_42 | 72B5 | LD A,(ManWalkDirection_DFD4) | ||||||||
| 72B8 | CP $01 | |||||||||
| 72BA | JR NZ,Screen_DrawColumn_43 | |||||||||
| 72BC | EX DE,HL | |||||||||
| Screen_DrawColumn_43 | 72BD | AND A | ||||||||
| 72BE | SBC HL,DE | |||||||||
| 72C0 | LD E,(IX+$02) | |||||||||
| 72C3 | LD D,$00 | |||||||||
| 72C5 | LD A,(ManWalkDirection_DFD4) | |||||||||
| 72C8 | CP $02 | |||||||||
| 72CA | JR Z,Screen_DrawColumn_44 | |||||||||
| 72CC | AND A | |||||||||
| 72CD | SBC HL,DE | |||||||||
| 72CF | EX DE,HL | |||||||||
| 72D0 | LD HL,$0020 | |||||||||
| 72D3 | AND A | |||||||||
| 72D4 | SBC HL,DE | |||||||||
| 72D6 | JR Screen_DrawColumn_45 | |||||||||
| Screen_DrawColumn_44 | 72D8 | ADD HL,DE | ||||||||
| 72D9 | LD DE,$0022 | |||||||||
| 72DC | AND A | |||||||||
| 72DD | SBC HL,DE | |||||||||
| Screen_DrawColumn_45 | 72DF | SRL H | ||||||||
| 72E1 | RR L | |||||||||
| 72E3 | EX DE,HL | |||||||||
| 72E4 | PUSH IX | Remember the start address of the area data. | ||||||||
| 72E6 | XOR A | |||||||||
| Screen_DrawColumn_46 | 72E7 | EX AF,AF' | Store | |||||||
| 72E8 | LD L,(IX+$05) | Get each item in the scenery data and workout which one is next to draw. | ||||||||
| 72EB | ADD HL,HL | |||||||||
| 72EC | LD H,$00 | |||||||||
| 72EE | ADD HL,HL | |||||||||
| 72EF | LD BC,BitmapData_Width | |||||||||
| 72F2 | ADD HL,BC | |||||||||
| 72F3 | LD A,(HL) | |||||||||
| 72F4 | AND $7F | |||||||||
| 72F6 | LD C,A | |||||||||
| 72F7 | LD B,$00 | |||||||||
| 72F9 | LD L,E | |||||||||
| 72FA | LD H,D | |||||||||
| 72FB | SBC HL,BC | |||||||||
| 72FD | JR C,Screen_DrawColumn_47 | |||||||||
| 72FF | EX DE,HL | |||||||||
| 7300 | INC IX | |||||||||
| 7302 | EX AF,AF' | |||||||||
| 7303 | INC A | |||||||||
| 7304 | JR Screen_DrawColumn_46 | |||||||||
| Screen_DrawColumn_47 | 7306 | LD A,(IX+$05) | Get index of item and store it. | |||||||
| 7309 | LD ( s0),A | |||||||||
| 730C | POP IX | Get back start address of area data. | ||||||||
| 730E | PUSH IX | |||||||||
| 7310 | PUSH DE | |||||||||
| 7311 | LD C,(IX+$04) | |||||||||
| 7314 | LD B,$00 | |||||||||
| 7316 | ADD IX,BC | |||||||||
| 7318 | LD DE,$0006 | |||||||||
| 731B | ADD IX,DE | |||||||||
| 731D | LD A,(IX-$01) | |||||||||
| 7320 | AND A | |||||||||
| 7321 | JP Z,Screen_DrawColumn_66 | |||||||||
| 7324 | EX AF,AF' | Is item index the first one in list? | ||||||||
| 7325 | AND A | |||||||||
| 7326 | JP Z,Screen_DrawColumn_55 | |||||||||
| 7329 | DEC C | Is item last in the list. | ||||||||
| 732A | CP C | |||||||||
| 732B | JP Z,Screen_DrawColumn_56 | |||||||||
| 732E | LD B,A | Get index of item in list of items. | ||||||||
| 732F | LD A,(CamDirection_DFD2) | Put the camera direction into the upper nibble. | ||||||||
| 7332 | AND A | |||||||||
| 7333 | RLA | |||||||||
| 7334 | RLA | |||||||||
| 7335 | RLA | Onto the next data set. | ||||||||
| 7336 | RLA | |||||||||
| 7337 | OR B | with the item index in the lower nibble. | ||||||||
| 7338 | LD C,A | |||||||||
| 7339 | LD B,(IX-$01) | Get number of data sets. | ||||||||
| 733C | LD DE,$000C | Size of each data set. | ||||||||
| Screen_DrawColumn_48 | 733F | CP (IX+$03) | See if camera / item index is the same as the one in the data set. | |||||||
| 7342 | JR NZ,Screen_DrawColumn_49 | Same area index OR area index is 0. | ||||||||
| 7344 | LD A,(AreaDataCurrent_Index) | |||||||||
| 7347 | CP (IX+$06) | |||||||||
| 734A | JR Z,Screen_DrawColumn_50 | |||||||||
| 734C | LD A,(IX+$06) | |||||||||
| 734F | AND A | |||||||||
| 7350 | JR Z,Screen_DrawColumn_50 | |||||||||
| 7352 | LD A,C | |||||||||
| Screen_DrawColumn_49 | 7353 | ADD IX,DE | ||||||||
| 7355 | DJNZ Screen_DrawColumn_48 | |||||||||
| 7357 | JP Screen_DrawColumn_66 | |||||||||
| Screen_DrawColumn_50 | 735A | BIT 7,(IX+$04) | ||||||||
| 735E | JR Z,Screen_DrawColumn_51 | |||||||||
| 7360 | LD A,($DFCE) | |||||||||
| 7363 | BIT 7,A | |||||||||
| 7365 | JP Z,Screen_DrawColumn_66 | |||||||||
| Screen_DrawColumn_51 | 7368 | LD A,(IX+$02) | ||||||||
| 736B | LD ( s0),A | |||||||||
| 736E | LD HL,( BitmapData_DoorLarge) | Offset address of door bitmap. | ||||||||
| 7371 | LD DE,$9477 | |||||||||
| 7374 | LD BC,$0004 | |||||||||
| 7377 | CP $40 | |||||||||
| 7379 | JR Z,Screen_DrawColumn_52 | |||||||||
| 737B | LD HL,( BitmapData_DoorThin) | Offset address of slim door bitmap. | ||||||||
| 737E | LD DE,$9456 | |||||||||
| 7381 | LD BC,$0002 | |||||||||
| 7384 | CP $38 | |||||||||
| 7386 | JP NZ,Screen_DrawColumn_67 | |||||||||
| 
 
Door Icon
 
 | 
||||||||||
| Screen_DrawColumn_52 | 7389 | LD A,(IX+$05) | Decide if door needs an icon character to be drawn on it. | |||||||
| 738C | SUB $8C | |||||||||
| 738E | JR C,Screen_DrawColumn_53 | |||||||||
| 7390 | CP $1F | |||||||||
| 7392 | JR NC,Screen_DrawColumn_53 | |||||||||
| 7394 | ADD A,$60 | |||||||||
| 7396 | JR Screen_DrawColumn_54 | |||||||||
| Screen_DrawColumn_53 | 7398 | LD A,$20 | Use 'space' if not. | |||||||
| Screen_DrawColumn_54 | 739A | CALL Char_InsertIntoBitmap | Insert graphic character into door bitmap. | |||||||
| 739D | JP Screen_DrawColumn_67 | |||||||||
| 
 
Check for perpendicular exits
 
 | 
||||||||||
| Screen_DrawColumn_55 | 73A0 | LD A,(CamDirection_DFD2) | ||||||||
| 73A3 | INC A | |||||||||
| 73A4 | JR Screen_DrawColumn_57 | |||||||||
| Screen_DrawColumn_56 | 73A6 | LD A,(CamDirection_DFD2) | ||||||||
| 73A9 | DEC A | |||||||||
| Screen_DrawColumn_57 | 73AA | AND $03 | ||||||||
| 73AC | RLA | |||||||||
| 73AD | RLA | |||||||||
| 73AE | RLA | |||||||||
| 73AF | RLA | |||||||||
| 73B0 | LD C,A | |||||||||
| 73B1 | LD B,(IX-$01) | |||||||||
| Screen_DrawColumn_58 | 73B4 | LD A,(IX+$06) | ||||||||
| 73B7 | AND A | |||||||||
| 73B8 | JR Z,Screen_DrawColumn_59 | |||||||||
| 73BA | LD A,(AreaDataCurrent_Index) | |||||||||
| 73BD | CP (IX+$06) | |||||||||
| 73C0 | JR NZ,Screen_DrawColumn_62 | |||||||||
| Screen_DrawColumn_59 | 73C2 | LD A,(IX+$03) | ||||||||
| 73C5 | AND $F0 | |||||||||
| 73C7 | CP C | |||||||||
| 73C8 | JR NZ,Screen_DrawColumn_62 | |||||||||
| 73CA | BIT 4,C | |||||||||
| 73CC | JR Z,Screen_DrawColumn_60 | |||||||||
| 73CE | LD DE,(ManData_PosPrimary_dfc3) | |||||||||
| 73D2 | LD L,(IX+$00) | |||||||||
| 73D5 | LD H,$00 | |||||||||
| 73D7 | ADD HL,HL | |||||||||
| 73D8 | JR Screen_DrawColumn_61 | |||||||||
| Screen_DrawColumn_60 | 73DA | LD DE,(ManData_PosSecondary_dfc5) | ||||||||
| 73DE | LD L,(IX+$01) | |||||||||
| 73E1 | LD H,$00 | |||||||||
| 73E3 | ADD HL,HL | |||||||||
| Screen_DrawColumn_61 | 73E4 | CALL abs(hl_minus_de) | ||||||||
| 73E7 | LD DE,$0004 | |||||||||
| 73EA | AND A | |||||||||
| 73EB | SBC HL,DE | |||||||||
| 73ED | JR C,Screen_DrawColumn_63 | |||||||||
| Screen_DrawColumn_62 | 73EF | LD DE,$000C | ||||||||
| 73F2 | ADD IX,DE | |||||||||
| 73F4 | DJNZ Screen_DrawColumn_58 | |||||||||
| 73F6 | JR Screen_DrawColumn_66 | |||||||||
| Screen_DrawColumn_63 | 73F8 | PUSH IX | ||||||||
| 73FA | POP DE | |||||||||
| 73FB | LD HL,(Exits) | |||||||||
| 73FE | AND A | |||||||||
| 73FF | SBC HL,DE | |||||||||
| 7401 | JR Z,Screen_DrawColumn_64 | |||||||||
| 7403 | LD HL,($DFFB) | |||||||||
| 7406 | AND A | |||||||||
| 7407 | SBC HL,DE | |||||||||
| 7409 | JR Z,Screen_DrawColumn_64 | |||||||||
| 740B | LD HL,$DFFA | |||||||||
| 740E | LD DE,$DFFC | |||||||||
| 7411 | LD BC,$0002 | |||||||||
| 7414 | LDDR | |||||||||
| 7416 | LD (Exits),IX | |||||||||
| Screen_DrawColumn_64 | 741A | BIT 7,(IX+$04) | ||||||||
| 741E | JR Z,Screen_DrawColumn_65 | |||||||||
| 7420 | LD A,($DFCE) | |||||||||
| 7423 | BIT 7,A | |||||||||
| 7425 | JR Z,Screen_DrawColumn_66 | |||||||||
| Screen_DrawColumn_65 | 7427 | LD A,(IX+$02) | Get bitmap index, add one to get sideways version. | |||||||
| 742A | AND $7F | |||||||||
| 742C | INC A | |||||||||
| 742D | LD B,A | |||||||||
| 742E | LD A,( s0) | Use mirror state of stored bitmap. | ||||||||
| 7431 | AND $80 | |||||||||
| 7433 | OR B | |||||||||
| 7434 | LD ( s0),A | |||||||||
| 7437 | JR Screen_DrawColumn_67 | |||||||||
| Screen_DrawColumn_66 | 7439 | LD A,( s0) | ||||||||
| 743C | AND $7F | |||||||||
| 743E | CALL AltBitmapSearch | |||||||||
| 7441 | LD L,A | |||||||||
| 7442 | LD A,( s0) | |||||||||
| 7445 | AND $80 | |||||||||
| 7447 | OR L | |||||||||
| 7448 | LD ( s0),A | |||||||||
| Screen_DrawColumn_67 | 744B | LD HL,( s0) | ||||||||
| 744E | ADD HL,HL | |||||||||
| 744F | LD H,$00 | |||||||||
| 7451 | ADD HL,HL | |||||||||
| 7452 | LD BC,BitmapData_Width | |||||||||
| 7455 | ADD HL,BC | |||||||||
| 7456 | PUSH HL | |||||||||
| 7457 | LD A,( s0) | |||||||||
| 745A | XOR (HL) | |||||||||
| 745B | AND $80 | |||||||||
| 745D | JR Z,Screen_DrawColumn_68 | |||||||||
| 745F | LD A,( s0) | |||||||||
| 7462 | AND $7F | |||||||||
| 7464 | LD L,A | |||||||||
| 7465 | LD H,$00 | |||||||||
| 7467 | CALL BitmapMirror | |||||||||
| Screen_DrawColumn_68 | 746A | POP HL | ||||||||
| 746B | DEC HL | |||||||||
| 746C | LD A,(HL) | |||||||||
| 746D | AND $7F | |||||||||
| 746F | LD BC,$0110 | |||||||||
| 7472 | LD HL,(OffScrTempPtr_6F16) | |||||||||
| Screen_DrawColumn_69 | 7475 | AND A | ||||||||
| 7476 | SBC HL,BC | |||||||||
| 7478 | DEC A | |||||||||
| 7479 | JR NZ,Screen_DrawColumn_69 | |||||||||
| 747B | LD (OffScrTempPtr_6F16),HL | |||||||||
| 747E | POP DE | |||||||||
| 747F | LD A,( s0) | |||||||||
| 7482 | AND $7F | |||||||||
| 7484 | LD L,A | |||||||||
| 7485 | LD H,$00 | |||||||||
| 7487 | CALL Blit_BmpColumn_Main | For scenery items. | ||||||||
| 748A | POP IX | |||||||||
| S_DC_NextItem | 748C | LD E,(IX+$04) | ||||||||
| 748F | LD D,$00 | |||||||||
| 7491 | ADD IX,DE | |||||||||
| 7493 | LD L,(IX+$05) | |||||||||
| 7496 | LD H,$00 | |||||||||
| 7498 | ADD HL,HL | |||||||||
| 7499 | ADD HL,HL | |||||||||
| 749A | LD E,L | |||||||||
| 749B | LD D,H | |||||||||
| 749C | ADD HL,HL | |||||||||
| 749D | ADD HL,DE | |||||||||
| 749E | LD BC,$0006 | |||||||||
| 74A1 | ADD HL,BC | |||||||||
| 74A2 | EX DE,HL | |||||||||
| 74A3 | ADD IX,DE | |||||||||
| 74A5 | JP S_DC_ItemForEach | |||||||||
| 
 
_
 
 | 
||||||||||
| Screen_DrawColumn_70 | 74A8 | LD IX,(AreaDataCurrent_ObjectsPtr) | ||||||||
| 74AC | LD DE,$FFFC | |||||||||
| 74AF | ADD IX,DE | |||||||||
| Screen_DrawColumn_71 | 74B1 | LD L,(IX+$04) | ||||||||
| 74B4 | LD H,(IX+$05) | |||||||||
| 74B7 | LD A,L | |||||||||
| 74B8 | OR H | |||||||||
| 74B9 | JR Z,Screen_DrawColumn_75 | |||||||||
| 
 
Draw an object if required.
 
 | 
||||||||||
| 74BB | PUSH HL | |||||||||
| 74BC | POP IX | |||||||||
| 74BE | LD L,(IX+$02) | |||||||||
| 74C1 | LD H,$00 | |||||||||
| 74C3 | ADD HL,HL | |||||||||
| 74C4 | ADD HL,HL | |||||||||
| 74C5 | LD DE,BitmapData_Width | |||||||||
| 74C8 | ADD HL,DE | |||||||||
| 74C9 | LD A,(HL) | |||||||||
| 74CA | LD ($6F18),A | |||||||||
| 74CD | AND $7F | |||||||||
| 74CF | CALL RectIntersection | |||||||||
| 74D2 | JR C,Screen_DrawColumn_71 | |||||||||
| 74D4 | LD A,(CamDirection_DFD2) | |||||||||
| 74D7 | BIT 0,A | |||||||||
| 74D9 | JR NZ,Screen_DrawColumn_72 | |||||||||
| 74DB | LD DE,(ManData_PosPrimary_dfc3) | |||||||||
| 74DF | LD L,(IX+$00) | |||||||||
| 74E2 | JR Screen_DrawColumn_73 | |||||||||
| Screen_DrawColumn_72 | 74E4 | LD DE,(ManData_PosSecondary_dfc5) | ||||||||
| 74E8 | LD L,(IX+$01) | |||||||||
| Screen_DrawColumn_73 | 74EB | LD H,$00 | ||||||||
| 74ED | LD A,($6F18) | |||||||||
| 74F0 | RRCA | |||||||||
| 74F1 | ADC HL,HL | |||||||||
| 74F3 | CALL abs(hl_minus_de) | |||||||||
| 74F6 | LD DE,$0004 | |||||||||
| 74F9 | AND A | |||||||||
| 74FA | SBC HL,DE | |||||||||
| 74FC | JR NC,Screen_DrawColumn_71 | |||||||||
| 74FE | LD A,(CamDirection_DFD2) | |||||||||
| 7501 | RRCA | |||||||||
| 7502 | RRCA | |||||||||
| 7503 | LD HL,($6F18) | |||||||||
| 7506 | XOR L | |||||||||
| 7507 | AND $80 | |||||||||
| 7509 | JR Z,Screen_DrawColumn_74 | |||||||||
| 750B | LD L,(IX+$02) | |||||||||
| 750E | LD H,$00 | |||||||||
| 7510 | CALL BitmapMirror | |||||||||
| Screen_DrawColumn_74 | 7513 | LD HL,$0005 | ||||||||
| 7516 | CALL BlitBmpColumn | |||||||||
| 7519 | JR Screen_DrawColumn_71 | |||||||||
| Screen_DrawColumn_75 | 751B | RET | ||||||||
| Prev: 6F19 | Up: Map | Next: 751C |