If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Chip 'n Dale Rescue Rangers/ROM map
Jump to navigation
Jump to search
PRG
Page 06
Function 06:8000
Cycles through & executes the action script for each non-player object.
8000: LDX #$02 8002: STX $4D ; Set current object to 02 (skipping over Chip/Dale)
8004: LDA $04D0,X 8007: BPL $8082 ; Skip slot if unoccupied (if status flag 80 is not set)
8009: LDY $04E0,X ; 800C: LDA $80A7,Y 800F: STA $00 8011: LDA $810C,Y 8014: STA $01 ; Retrieve address of object's action script from pointer table 8016: LDA #$80 8018: PHA 8019: LDA #$1E 801B: PHA ; Set return address 801C: JMP ($00) ; Execute action script 801F: LDA $0570,X 8022: AND #$40 8024: BEQ $8029 ; Skip ahead if object can't be damaged
8026: JSR $8E15 ; Check for collision damage against enemy
8029: LDA $04D0,X 802C: AND #$40 802E: BEQ $8082 ; Skip ahead if object doesn't cause damage
8030: JSR $F92B ; Check for collision with player 8033: BCS $8082 ; Skip ahead if no collision
8035: LDA $5E,Y ; Check if player has i-frames 8038: BNE $8082 ; Skip ahead if so
803A: LDA $54,Y 803D: CMP #$03 803F: BCS $8082 ; Can't be damaged while picking up item
8041: LDA $0420,Y 8044: BEQ $804D
8046: LDA #$09 8048: STA $54,Y ; Set phase to "damaged" 804B: BNE $8082 ; Jump ahead (always true)
804D: JSR $808E 8050: LDA $56,Y 8053: BPL $8082
8055: AND #$0F 8057: PHA 8058: LDA #$00 805A: STA $56,Y 805D: PLA 805E: TAY 805F: LDA #$80 8061: STA $04D0,Y 8064: LDA #$3E 8066: STA $04E0,Y 8069: LDA #$00 806B: STA $0410,Y 806E: STA $0430,Y 8071: LDA $0420,Y 8074: CMP #$22 8076: BEQ $8082
8078: CMP #$23 807A: BEQ $8082
807C: SEC 807D: SBC #$09 807F: STA $0420,Y
8082: INC $4D ; Tick up to next object slot 8084: LDX $4D 8086: CPX #$10 8088: BEQ $808D ; Exit if at end of list
808A: JMP $8004 ; Repeat
808D: RTS ; Exit function
Function 06:8F38
Action Script 02 - Robot Dog
8F38: LDA $04D0,X 8F3B: AND #$0F ; Check current phase 8F3D: BNE $8F55
Phase 0:
8F3F: LDA #$33 8F41: STA $0530,X 8F44: LDA #$01 8F46: STA $0540,X ; Set x-speed to ~1.2 pixels/frame 8F49: JSR $F328 8F4C: LDA #$1E 8F4E: STA $0490,X ; Set counter to 30 frames 8F51: INC $04D0,X ; Advance to Phase 1
8F54: RTS ; Exit function
8F55: LDA $04D0,X 8F58: AND #$02 8F5A: BNE $8F71
Phase 1:
8F5C: DEC $0490,X ; Tick down timer 8F5F: BNE $8F54 ; End if timer not at zero
8F61: LDA #$1C 8F63: STA $0420,X ; Switch to walking animation 8F66: LDA #$00 8F68: STA $0430,X 8F6B: STA $0410,X ; Go to beginning of animation 8F6E: INC $04D0,X ; Advance to Phase 2
Phase 2:
8F71: LDA $95 8F73: AND #$0F 8F75: BNE $8F7C
8F77: LDA #$1A 8F79: JSR $F379
8F7C: LDY #$02 8F7E: LDA #$10 8F80: JSR $F0FB 8F83: PHP 8F84: LDY #$02 8F86: LDA $0580,X 8F89: AND #$01 8F8B: BEQ $8F95
8F8D: LDA #$0A 8F8F: JSR $F000 8F92: JMP $8F9A
8F95: LDA #$0D 8F97: JSR $F066
8F9A: PLP 8F9B: BCC $8FC5
8F9D: LDA $10 8F9F: CMP #$03 8FA1: BCC $8FC0
8FA3: INC $0480,X ; Tick up jump counter 8FA6: LDA $0480,X 8FA9: CMP #$04 ; After 3 jump attempts in a row, 8FAB: BEQ $8FB8 ; turn around instead
Jump:
8FAD: LDA #$9E 8FAF: STA $0550,X 8FB2: LDA #$04 8FB4: STA $0560,X ; Set y-speed to ~4.6 pixels/frame 8FB7: RTS
Turn Around:
8FB8: LDA $0580,X 8FBB: EOR #$03 8FBD: STA $0580,X
Reset jump counter:
8FC0: LDA #$00 8FC2: STA $0480,X
8FC5: RTS