Marsport | Routines |
Prev: AE42 | Up: Map | Next: AFDB |
Used by the routine at _87c9.
|
||||
See lockers for types.
|
||||
Obj_Drop | AEDA | LD A,(Hero_Select) | Using selection index... | |
AEDD | AND A | |||
AEDE | RET Z | |||
AEDF | LD L,A | Calculate address of selected pocket. | ||
AEE0 | LD H,$00 | |||
AEE2 | LD DE,$BD3A | |||
AEE5 | ADD HL,DE | |||
AEE6 | LD A,(HL) | Get index of object being selected to drop. | ||
AEE7 | AND A | Ignore if selected empty pocket. | ||
AEE8 | RET Z | |||
AEE9 | CP $3C | Check the object aren't the plans. | ||
AEEB | JR NZ,Obj_Drop_0 | |||
AEED | CALL Print_WarningCentered | Tell user about the plans, end. | ||
AEF0 | DEFM "plans can't be dropped!",$5E | |||
AF08 | RET | Scan the background for a locker... | ||
Obj_Drop_0 | AF09 | EX DE,HL | ||
AF0A | XOR A | |||
AF0B | LD HL,$5E57 | |||
AF0E | LD BC,$0002 | |||
AF11 | CPDR | |||
AF13 | RET Z | |||
AF14 | CPDR | |||
AF16 | INC HL | |||
AF17 | INC HL | |||
AF18 | LD A,(HL) | Get locker index from background info. | ||
AF19 | LD ($BD1E),A | |||
AF1C | LD C,A | |||
AF1D | LD B,$00 | |||
AF1F | INC HL | Get locker type from background info. | ||
AF20 | LD A,(HL) | |||
AF21 | LD HL,(Handle_Lockers) | Calculate address of locker using index. | ||
AF24 | ADD HL,BC | |||
AF25 | LD C,A | If locker is a supply, the ignore any drop. | ||
AF26 | AND $7F | |||
AF28 | CP $03 | |||
AF2A | RET Z | |||
AF2B | CP C | See if upper bit is not set. | ||
AF2C | JR Z,Obj_Drop_1 | |||
AF2E | LD C,A | |||
AF2F | DEC HL | |||
AF30 | LD A,(HL) | |||
AF31 | DEC HL | |||
AF32 | CP (HL) | |||
AF33 | RET NZ | |||
AF34 | INC HL | |||
AF35 | INC HL | |||
Refuse Gun Check
|
||||
Obj_Drop_1 | AF36 | LD A,C | Check if locker is a refuse. | |
AF37 | CP $05 | |||
AF39 | JR NZ,Obj_Drop_3 | |||
AF3B | LD A,(DE) | If it is check player is not trying to drop a gun. | ||
AF3C | CP $13 | |||
AF3E | JR Z,Obj_Drop_2 | |||
AF40 | CP $01 | |||
AF42 | JR NZ,Obj_Drop_3 | |||
Obj_Drop_2 | AF44 | CALL Print_WarningCentered | Warn user, they can;t drop a gun in the refuse. | |
AF47 | DEFM "power weapons not accepted",$5E | |||
AF62 | RET | |||
Locker Full Check
|
||||
Obj_Drop_3 | AF63 | LD A,C | Get locker type. | |
AF64 | CP $02 | Check for 'factor' | ||
AF66 | LD A,$FF | Mask to check for item in the locker. | ||
AF68 | JR NZ,Obj_Drop_4 | If not a factor then use the mask | ||
AF6A | LD A,$80 | Else set mask to only check for a factor flag. | ||
Obj_Drop_4 | AF6C | AND (HL) | Use mask to see if locker is full. | |
AF6D | JR Z,Obj_Drop_7 | |||
Locker Full
|
||||
Obj_Drop_5 | AF6F | PUSH BC | Display message... | |
AF70 | CALL Print_WarningMessageAt6 | |||
AF73 | DEFM "no room in ",$5E | |||
AF7F | POP BC | |||
AF80 | LD A,C | Calculate which word to use to describe the locker. | ||
AF81 | ADD A,A | |||
AF82 | ADD A,C | |||
AF83 | ADD A,A | |||
AF84 | SUB $06 | |||
AF86 | LD E,A | |||
AF87 | LD D,$00 | |||
AF89 | LD HL,(Word_TableLen06) | |||
AF8C | ADD HL,DE | |||
AF8D | LD B,$06 | |||
Obj_Drop_6 | AF8F | LD A,(HL) | and display the type. | |
AF90 | CALL Print_Character | |||
AF93 | INC HL | |||
AF94 | DJNZ Obj_Drop_6 | |||
AF96 | CALL Print_StringOnStack | |||
AF99 | DEFM " unit",$5E | |||
AF9F | RET | |||
Locker available
|
||||
Obj_Drop_7 | AFA0 | LD A,(HL) | Confirm locker is empty | |
AFA1 | AND A | |||
AFA2 | JR Z,Obj_Drop_8 | |||
AFA4 | LD A,C | Only apply to a factor. | ||
AFA5 | CP $02 | |||
AFA7 | RET NZ | |||
AFA8 | LD BC,$0004 | Check if end slot in factor is empty. | ||
AFAB | ADD HL,BC | |||
AFAC | LD A,(HL) | |||
AFAD | AND A | |||
AFAE | LD C,$02 | If not all slot must be full. Force type to a factor and display message. | ||
AFB0 | JR NZ,Obj_Drop_5 | |||
AFB2 | LD C,$04 | Shift all of the objects in the factor slots along. | ||
AFB4 | PUSH DE | |||
AFB5 | LD E,L | |||
AFB6 | LD D,H | |||
AFB7 | DEC HL | |||
AFB8 | LDDR | |||
AFBA | EX DE,HL | |||
AFBB | INC HL | |||
AFBC | RES 7,(HL) | |||
AFBE | DEC HL | |||
AFBF | POP DE | |||
Obj_Drop_8 | AFC0 | EX DE,HL | Drop object into locker. | |
AFC1 | LD A,(HL) | |||
AFC2 | LD (DE),A | |||
AFC3 | OR $80 | |||
AFC5 | LD ($BD1D),A | |||
AFC8 | LD (HL),$00 | Clear pocket. | ||
AFCA | LD A,$01 | Reset selection to first pocket. | ||
AFCC | LD (Hero_Select),A | |||
AFCF | LD DE,$0005 | Make a beep. | ||
AFD2 | LD HL,$0190 | |||
AFD5 | CALL $03B5 | |||
AFD8 | JP Pockets_UpdateInv | Update inventory displayed. |
Prev: AE42 | Up: Map | Next: AFDB |