From 84d470c71bc010be9174adf5563738cfa0782cfe Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 19 Aug 2019 10:32:10 -0400 Subject: [PATCH] ootw: c1: more beast fine-tuning runs slightly faster than physicist now also enters rooms closer if left room closer --- ootw/TODO | 5 +- ootw/ootw_c1.s | 4 +- ootw/ootw_c1_beast.s | 42 +++++- ootw/ootw_graphics/sprites/beast.inc | 208 ++++++++++++++------------- 4 files changed, 153 insertions(+), 106 deletions(-) diff --git a/ootw/TODO b/ootw/TODO index b3fe37e1..6a140b17 100644 --- a/ootw/TODO +++ b/ootw/TODO @@ -11,7 +11,6 @@ Before release: when calculating room calcs, take Y position into account L1 -- fix beast ending - L1 -- have beast death scene L1 -- have beast collapse L1 -- fix slugs @@ -56,8 +55,10 @@ door behavior: - beast on hill and 2nd screen -- complex, only appears if you happen to leave same time beast does? then movement depends on xposition? - - earthquake can happen while on rope? + - earthquake should happen while on rope - sometimes falling rocks can follow you to next screen + - beast can/should trip and fall if it gets close in the pool + room while running? + L2 - gun movement: gun is held by head when running diff --git a/ootw/ootw_c1.s b/ootw/ootw_c1.s index 8368883e..8950ba61 100644 --- a/ootw/ootw_c1.s +++ b/ootw/ootw_c1.s @@ -73,7 +73,9 @@ ootw: ; Enter the game ;======================= - jsr ootw_pool +; jsr ootw_pool + + jsr ootw_mesa ;=========================== diff --git a/ootw/ootw_c1_beast.s b/ootw/ootw_c1_beast.s index 7f706dcd..2f68ec2b 100644 --- a/ootw/ootw_c1_beast.s +++ b/ootw/ootw_c1_beast.s @@ -1,24 +1,32 @@ + + ; FIXME, if beast close on screen #2, have it fall? + ;======================================= ;======================================= ; Setup Beast Running -- for each room ;======================================= ;======================================= - ; FIXME: distance for count should be related - ; to X distance behind on previous screen - setup_beast: + ; only move beast if out + lda BEAST_OUT beq setup_no_beast + ; have the beast wait standing offscreen a bit?? + ; what were you thinking, 6-months-ago Vince? + lda #30 sta BEAST_COUNT lda #B_STANDING sta BEAST_STATE + ; set Y position lda #26 sta BEAST_Y + + ; what we do is based on direction lda BEAST_DIRECTION beq setup_beast_left @@ -42,14 +50,30 @@ beast_right_rope: lda #240 jmp beast_right_set_x + ; adjust for distance beast_right_set_normal: - lda #246 ; -8 = 248 + sec + lda #40 + sbc BEAST_X + lsr + lsr + adc #240 ; beast_right_set_x: sta BEAST_X jmp setup_no_beast + ;============================== + ; running left setup_beast_left: - lda #41 + + ; adjust for how far was on last screen + ; /4 + lda BEAST_X + lsr + lsr + + clc + adc #40 sta BEAST_X setup_no_beast: @@ -62,6 +86,7 @@ setup_no_beast: ;======================================= ; stop if catch physicist ; also stop if swinging + ; run just every slightly faster than physicist move_beast: lda BEAST_STATE @@ -119,10 +144,13 @@ beast_no_stop: inc BEAST_GAIT ; cycle through animation lda BEAST_GAIT - and #$3 - cmp #$2 ; only run roughly 1/4 of time + and #$7 + cmp #5 + beq b_run + and #$3 ; only run roughly 3/8 of time bne b_no_move_run +b_run: lda BEAST_DIRECTION beq b_run_left diff --git a/ootw/ootw_graphics/sprites/beast.inc b/ootw/ootw_graphics/sprites/beast.inc index e3b05ed8..07aa2956 100644 --- a/ootw/ootw_graphics/sprites/beast.inc +++ b/ootw/ootw_graphics/sprites/beast.inc @@ -1,6 +1,118 @@ ;========================= +;========================= ; Beast +;========================= +;========================= +; FIXME: add tripping+falling sprites +; FIXME: add background beast for first cavern room +; FIXME: better running sprites + + +;============================= +; big beast sprites +;============================= + +beast_standing: + .byte $9,$6 + .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa + .byte $aa,$00,$00,$00,$00,$00,$00,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$aa,$00,$a0,$aa,$a0,$00,$00,$aa + .byte $aa,$aa,$00,$aa,$aa,$aa,$00,$aa,$00 + + +beast_run_progression: + .word beast_running1 + .word beast_running2 + .word beast_running3 + .word beast_running4 + .word beast_running5 + .word beast_running6 + .word beast_running7 + .word beast_running8 + .word beast_standing + + +beast_running1: ; piskel2 + .byte $9,$6 + .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $a0,$a0,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$0a,$00,$aa,$aa,$a0,$00,$00,$00 + .byte $a0,$a0,$aa,$aa,$aa,$aa,$a0,$0a,$00 + +beast_running2: ; piskel3 + .byte $9,$6 + .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$aa,$00,$00,$00,$00,$00,$00,$aa + .byte $a0,$a0,$a0,$aa,$aa,$a0,$00,$00,$0a + .byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$00,$00 + +beast_running3: ; piskel4 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$0a,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$00,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $a0,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$0a,$00,$aa,$aa,$a0,$a0,$00,$00 + .byte $a0,$a0,$aa,$aa,$aa,$aa,$aa,$aa,$aa + +beast_running4: ; piskel5 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$0a,$aa,$aa,$aa,$aa + .byte $aa,$00,$00,$00,$00,$00,$00,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$0a,$00,$aa,$aa,$a0,$a0,$00,$0a + .byte $aa,$00,$aa,$aa,$aa,$aa,$aa,$a0,$a0 + +beast_running5: ; piskel6 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$aa,$00,$aa,$aa,$a0,$00,$00,$aa + .byte $aa,$aa,$00,$aa,$aa,$aa,$00,$a0,$00 + +beast_running6: ; piskel7 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $a0,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$aa,$00,$0a,$aa,$00,$00,$00,$aa + .byte $aa,$aa,$aa,$00,$aa,$00,$a0,$aa,$aa + +beast_running7: ; piskel8 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$a0,$a0,$00,$aa,$00,$00,$a0,$aa + .byte $aa,$aa,$aa,$00,$00,$00,$aa,$aa,$aa + +beast_running8: ; piskel9 + .byte $9,$6 + .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa + .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa + .byte $aa,$a0,$00,$aa,$aa,$aa,$00,$a0,$aa + .byte $aa,$aa,$00,$a0,$aa,$aa,$00,$aa,$aa + + +;======================== +;======================== +; Beast in background +;======================== +;======================== beast_incoming: .word beast_bg2 ; 2 @@ -110,99 +222,3 @@ beast_bg13: ; going left .byte $AA,$A0,$AA,$A0,$A0 - - - -beast_standing: - .byte $9,$6 - .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa - .byte $aa,$00,$00,$00,$00,$00,$00,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$aa,$00,$a0,$aa,$a0,$00,$00,$aa - .byte $aa,$aa,$00,$aa,$aa,$aa,$00,$aa,$00 - - -beast_run_progression: - .word beast_running1 - .word beast_running2 - .word beast_running3 - .word beast_running4 - .word beast_running5 - .word beast_running6 - .word beast_running7 - .word beast_running8 - .word beast_standing - - -beast_running1: ; piskel2 - .byte $9,$6 - .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $a0,$a0,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$0a,$00,$aa,$aa,$a0,$00,$00,$00 - .byte $a0,$a0,$aa,$aa,$aa,$aa,$a0,$0a,$00 - -beast_running2: ; piskel3 - .byte $9,$6 - .byte $aa,$0a,$00,$00,$0a,$aa,$aa,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$aa,$00,$00,$00,$00,$00,$00,$aa - .byte $a0,$a0,$a0,$aa,$aa,$a0,$00,$00,$0a - .byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$00,$00 - -beast_running3: ; piskel4 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$0a,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$00,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $a0,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$0a,$00,$aa,$aa,$a0,$a0,$00,$00 - .byte $a0,$a0,$aa,$aa,$aa,$aa,$aa,$aa,$aa - -beast_running4: ; piskel5 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$0a,$aa,$aa,$aa,$aa - .byte $aa,$00,$00,$00,$00,$00,$00,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$0a,$00,$aa,$aa,$a0,$a0,$00,$0a - .byte $aa,$00,$aa,$aa,$aa,$aa,$aa,$a0,$a0 - -beast_running5: ; piskel6 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$aa,$00,$aa,$aa,$a0,$00,$00,$aa - .byte $aa,$aa,$00,$aa,$aa,$aa,$00,$a0,$00 - -beast_running6: ; piskel7 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $a0,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$aa,$00,$0a,$aa,$00,$00,$00,$aa - .byte $aa,$aa,$aa,$00,$aa,$00,$a0,$aa,$aa - -beast_running7: ; piskel8 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$a0,$a0,$00,$aa,$00,$00,$a0,$aa - .byte $aa,$aa,$aa,$00,$00,$00,$aa,$aa,$aa - -beast_running8: ; piskel9 - .byte $9,$6 - .byte $aa,$aa,$0a,$0a,$aa,$aa,$aa,$aa,$aa - .byte $0a,$00,$00,$00,$00,$0a,$0a,$aa,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $00,$00,$00,$00,$00,$00,$00,$00,$aa - .byte $aa,$a0,$00,$aa,$aa,$aa,$00,$a0,$aa - .byte $aa,$aa,$00,$a0,$aa,$aa,$00,$aa,$aa