-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path2-st_ladd.asm
66 lines (58 loc) · 1.23 KB
/
2-st_ladd.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
; vi: syntax=asm68k
; { 2/com_17 2/com_18 2/com_35 }
;:1612 2/com_18()
st_ladd:
cmpi.w #U_LDDO, _TL(a2,d4.W)
bne.s .ladd2
orb move #GETORB, _ST(a6)
clr _VLOW(a6)
jmp com_35
ladd2 tst.w _VAUT(a6)
bne.s .climb
btst #LOW, _FLG(a6)
bne.s .still
tst _JOYY(a6)
bne.s .climb
;(crouch || !climb)
still jmp 2/st_default(pc)
climb bpl.s .descend
;[auto]/climb UP (-dY)
ascend move #U_LDD, d3
cmp.w _TL(a2,d4.w),d3
bne.s .ascend2
;already at ladder top
attop jmp 2/st_default(pc)
ascend2 cmpi.w #L_LDDS, _TL(a2,d4.W)
beq.s .laddon
clr _VAUT(a6)
;at #L_LDD[s] (bottom)
laddon move.w #LADDON, _ST(A6)
move d4, _VLOW(a6)
move _LX(a2,d4.w),d0
;get (U_LDD->tlp)
move _F0(a2,d4.w),d4
move d4, _TLP(a6)
move d0, _X(a6)
addq #1, _X(a6)
clr _FR(a6)
clr _VSND(a6)
bra 2/st_laddon(pc)
;[auto]/climb DOWN (+dY)
descend move.w #L_LDD, d3
cmp.w _TL(a2,d4.w),d3
bne.s .descen2
;already @bottom
atbtm jmp 2/st_default(pc)
descen2 cmpi.w #U_LDDN, _TL(a2,d4.W)
beq.s .laddtd
;at #U_LDD (ladder top)
clr _VAUT(a6)
laddtd move.w #LADDTD, _ST(A6)
move d4, _TLP(a6)
;get (#L_LDD->tlp)
move _F1(a2,d4.w), _VLOW(a6)
move _LX(a2,d4.w), d0
move d0, _X(a6)
addq #1, _X(a6)
move #3, _FR(a6)
bra 2/st_laddtd(pc)