-
Notifications
You must be signed in to change notification settings - Fork 0
/
DYOM_Addon_Base.txt
227 lines (188 loc) · 7.38 KB
/
DYOM_Addon_Base.txt
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
// DYOM Addon Base framework
// by Miran
// ver 1.0
{$INCLUDE DYOM_Globals.txt}
//{$USE CLEO}
const
_OnMission = 100 // processed on mission state
_ObjectiveIndex = 101 // processed objective idx
_ObjectiveStartTime = 102 // timestamp of current objective start in ms
end
0000: NOP
wait 1000 ms // give other things time to start
if
not cleo_call @CHECK_FOR_DYOM args 0
then
0A93: terminate_this_custom_script // not DYOM game mode
end
:DYOM_ADDON_MAIN
// init variables
0@ = _OnMission
1@ = false
VAR_SET()
0@ = _ObjectiveIndex
1@ = -1
VAR_SET()
DYOM_INIT()
// run
while true
wait 0 ms
0@ = _OnMission
VAR_GET()
if or
$ONMISSION == true
0@ == true // _OnMission
then
// on mission changed
if
803C: $ONMISSION <> 0@ // _OnMission
then
0@ = _OnMission
008B: 1@ = $ONMISSION // int
VAR_SET()
if
$ONMISSION == true
then
DYOM_MISSION_STARTED()
else
if
dyom_objective_index == dyom_objective_count
then
0@ = true // mission passed
else
0@ = false // mission failed
end
DYOM_MISSION_ENDED()
end
end
0@ = _ObjectiveIndex
VAR_GET()
if or
not 0@ == -1
dyom_objective_index == 0 // after mission start wait for objective zero, as there may be leftover index from previous mission run
then
if
003B: 0@ == dyom_objective_index // (int) current DYOM objective index just changed
then
else
if
0@ > -1
then
DYOM_OBJECTIVE_ENDED()
end
if
$ONMISSION == true // still on mission
then
0@ = _ObjectiveIndex
008B: 1@ = dyom_objective_index // int
VAR_SET()
0@ = _ObjectiveStartTime
01BD: 1@ = current_time_in_ms
VAR_SET()
008B: 0@ = dyom_objective_index // int
DYOM_OBJECTIVE_STARTED()
end
end
if
$ONMISSION == true
then
0@ = dyom_objective_count
0@ -= 1
if
dyom_objective_index <= 0@ // mission not passed yet
then
DYOM_MISSION_RUN()
end
else
0@ = _ObjectiveIndex
1@ = -1 // not on mission
VAR_SET()
end
end
end
DYOM_RUN()
end
0A93: terminate_this_custom_script
// Get time elapsed since current objective started. Does not relay on TimerA or TimerB
// return 0@ - elapsed time in ms
:CURR_OBJECTIVE_TIME
0@ = _ObjectiveStartTime
VAR_GET()
01BD: 1@ = current_time_in_ms
0062: 1@ -= 0@
0085: 0@ = 1@
return
// Get pointer to specified objective text
// arg 0@ - objective index (zero based)
// return 0@ - memory address
:OBJECTIVE_TEXT
0@ *= dyom_objective_text_len_max // objective idx * objective text max length
0058: 0@ += dyom_objective_texts_ptr // (int) add text buffer start address
return
// Get pointer current objective text
// return 0@ - memory address
:CURR_OBJECTIVE_TEXT
008B: 0@ = dyom_objective_index
0@ *= dyom_objective_text_len_max // objective idx * objective text max length
0058: 0@ += dyom_objective_texts_ptr // (int) add text buffer start address
return
// Check if current objective text starts with given prefix (case sensitive)
// arg 0@ - prefix text
// arg 1@ - reserved (occupied by prefix text too)
// arg 2@ - reserved (occupied by prefix text too)
// arg 3@ - prefix length 0-12 characters
// return 0@ - true or false
:CURR_OBJECTIVE_TEXT_STARTS_WITH
008B: 4@ = dyom_objective_index
4@ *= dyom_objective_text_len_max // objective idx * objective text max length
0058: 4@ += dyom_objective_texts_ptr // (int) add text buffer start address
TEXT_STARTS_WITH()
return
// Check if specified DYOM objective text starts with given prefix (case sensitive)
// arg 0@ - prefix text
// arg 1@ - reserved (occupied by prefix text too)
// arg 2@ - reserved (occupied by prefix text too)
// arg 3@ - prefix length 0-12 characters
// arg 4@ - objective index (zero based)
// return 0@ - true or false
:OBJECTIVE_TEXT_STARTS_WITH
// calculate pointer to objective text
4@ *= dyom_objective_text_len_max // objective idx * objective text max length
0058: 4@ += dyom_objective_texts_ptr // (int) add text buffer start address
TEXT_STARTS_WITH()
return
// DYOM Addon custom variables support
// alternative to using global variables, as they can interfere with DYOM itself or other DYOM Addons
// read variable by index
// arg 0@ - variable index 0 - 99 general purpose, 100+ reserved for Addon_Base
// return 0@ - variable value
:VAR_GET
0@ *= 4 // 4 bytes peer variable
0AC6: 1@ = get_label_pointer @DYOM_ADDON_VARIABLES
005A: 0@ += 1@ // int
read_memory 0@ = read_memory 0@ size 4 virtual_protect 0
return 1 0@
// store variable by index
// arg 0@ - variable index 0 - 99 general purpose, 100+ reserved for Addon_Base
// arg 1@ - value to set
:VAR_SET
0@ *= 4 // 4 bytes peer variable
0AC6: 2@ = get_label_pointer @DYOM_ADDON_VARIABLES
005A: 0@ += 2@ // int
write_memory 0@ size 4 value 1@ virtual_protect 0
return
:DYOM_ADDON_VARIABLES
hex // 100 variables for user use
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 10
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 20
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 30
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 40
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 50
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 60
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 70
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 80
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 90
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 100
// internal DYOM Addon variables
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 110
end