-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtriggers.asm
146 lines (123 loc) · 4.47 KB
/
triggers.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
;; +----------------------------------+
;; | |
;; | TRIGGER HANDLING |
;; | |
;; +----------------------------------+
var_triggerType_AUTO_EXIT__COORD = #$01
var_triggerType_AUTO_EXIT__INDEX = #$02
var_triggerType_ACTIVATE_EXIT__COORD = #$03
var_triggerType_ACTIVATE_EXIT__INDEX = #$04
var_triggerAction_WALK_ON = #$01
var_triggerAction_MAN_ACTIVATE = #$02
resp_trigger_NO_TRIGGER = #$00
resp_trigger_EXIT_TRIGGERED = #$01
trAction .byte $00
trTargetIndex .byte $ff
;; +----------------------------------+
;; | TRIGGER EVALUATION |
;; +----------------------------------+
;
; Input - playerX - Trigger location X
; playerY - Trigger location Y
; trAction - Trigger Action
; Response - resp_trigger value in A
;
cTriggerType .byte $00
evaluateTriggerAt:
ldy #$00
triggerIterLoop cpy triggerTableSize
beq noTriggerResponse
sty num1
lda triggerTableRowSize
sta num2
jsr multiply
tax
lda triggerTable, x
cmp playerX
bne nextTrigger
inx
lda triggerTable, x
cmp playerY
bne nextTrigger
executeTrigger inx
lda triggerTable, x ; Trigger type. Ignore for now
sta cTriggerType
cmp #$01
bne etEv2
jmp executeExitAutoCoordTrigger
etEv2 cmp #$02
bne etEv3
jmp executeExitActivateCoordTrigger
etEv3 cmp #$03
bne etEv4
jmp executeExitAutoIndexTrigger
etEv4 jmp executeExitActivateIndexTrigger
nextTrigger iny
jmp triggerIterLoop
noTriggerResponse lda resp_trigger_NO_TRIGGER
rts
executeExitAutoCoordTrigger:
lda trAction
cmp var_triggerAction_WALK_ON
bne noTriggerResponse
jsr evalTriggerTarget
jmp finalizeExitCoordTrigger
executeExitActivateCoordTrigger:
lda trAction
cmp var_triggerAction_MAN_ACTIVATE
bne noTriggerResponse
jsr evalTriggerTarget
jmp finalizeExitCoordTrigger
executeExitAutoIndexTrigger:
lda trAction
cmp var_triggerAction_WALK_ON
bne noTriggerResponse
jsr evalTriggerTarget
jmp finalizeExitIndexTrigger
executeExitActivateIndexTrigger:
lda trAction
cmp var_triggerAction_MAN_ACTIVATE
bne noTriggerResponse
jsr evalTriggerTarget
jmp finalizeExitIndexTrigger
evalTriggerTarget:
inx
lda triggerTable, x ; Area addr lo-byte
sta $20
inx
lda triggerTable, x ; Area addr hi-byte
sta $21
lda playerX
sta prevPlayerX
lda playerY
sta prevPlayerY
rts
finalizeExitCoordTrigger:
inx
lda triggerTable, x ; Target X coord
sta playerX
inx
lda triggerTable, x ; Target Y coord
sta playerY
lda #$ff
sta trTargetIndex
lda resp_trigger_EXIT_TRIGGERED
rts
finalizeExitIndexTrigger:
inx
lda triggerTable, x ; Target Index
sta trTargetIndex
lda resp_trigger_EXIT_TRIGGERED
;; +----------------------------------+
;; | TRIGGER LOOKUP |
;; +----------------------------------+
forwardTriggerTableToIndexA:
sta rollIterations
lda #<triggerTable
sta $22
lda #>triggerTable
sta $23
lda triggerTableRowSize
sta inc22ModVal
jsr roll22Ptr
rts