Add arrow/button images
[fim-ctu.git] / inject.h
blob18b20b5f2b756e8493357c645a6a3d8d13617902
1 /*
2 * The contents of this file originally come from LunaPort and MTSP
4 * Since header files and interfaces et al are not copyrightable,
5 * this file has no copyright nor license.
6 */
8 #ifndef CTU_INJECT_H
9 #define CTU_INJECT_H
11 /* an int3 taking up 6 bytes */
12 static unsigned char INT3_6[] = {0xCC,0x90,0x90,0x90,0x90,0x90};
13 static unsigned char INT3_5[] = {0xCC,0x90,0x90,0x90,0x90};
14 static unsigned char INT3_2[] = {0xCC,0x90};
15 static unsigned char INT3_1[] = {0xCC};
17 #define STAGE_SELECT_CADDR ((void*)0x00408756UL)
18 #define STAGE_SELECT_BREAK (0x00408756UL)
19 #define STAGE_SELECT_CODE INT3_5
21 #define VS_P1_KEY_CADDR ((void*)0x0041474AUL)
22 #define VS_P1_KEY_BREAK (0x0041474AUL)
23 #define VS_P1_KEY_CODE INT3_5
25 #define VS_P2_KEY_CADDR ((void*)0x00414764UL)
26 #define VS_P2_KEY_BREAK (0x00414764UL)
27 #define VS_P2_KEY_CODE INT3_5
29 #define ROUND_END_CADDR ((void*)0x00409715UL)
30 #define ROUND_END_BREAK (0x00409715UL)
31 #define ROUND_END_CODE INT3_6
33 #define ROUND_ESI_VADDR ((void*)0x004EDCACUL)
35 #define ROUND_START_CADDR ((void*)0x0040897FUL)
36 #define ROUND_START_BREAK (0x0040897FUL)
37 #define ROUND_START_CODE INT3_1
39 #define FRAME_CADDR ((void*)0x00404C37UL)
40 #define FRAME_BREAK (0x00404C37UL)
41 #define FRAME_CODE INT3_2
43 /* in general, P2 stuff seems to be stored from P1 stuff at an offset of 0xE03F */
45 /* where the current input for P1 is stored */
46 #define P1_INPUT_VADDR ((void*)0x004259C0)
47 #define P2_INPUT_VADDR ((void*)0x004259C4)
49 #define P1_HP_VADDR ((void*)0x004DFC85UL)
50 #define P1_MAX_HP_VADDR ((void*)0x004DFC91UL)
51 #define P1_STATE_VADDR ((void*)0x0047033EUL)
53 #define P2_HP_VADDR ((void*)0x004EDCC4UL)
54 #define P2_MAX_HP_VADDR ((void*)0x004EDCD0UL)
55 #define P2_STATE_VADDR ((void*)0x004704BCUL)
57 /* what is our current / last attack? */
58 /* 1 byte, unsigned; this is the last attack we performed */
59 /* mids and lows are not differentiated between (this can be determined by
60 * looking at char state, and seeing if we're ducking). but low c, for example
61 * _is_ different than launcher (low forward c) */
62 #define P1_ATK_VADDR ((void*)0x4dfcd5UL)
63 #define P2_ATK_VADDR ((void*)0x4edd14UL)
65 /* number of bars; 1 for 1 bar, 2 for 2 bars, etc
66 * doesn't indicate a partially-full bar */
67 /* all of these are 1 byte wide */
68 #define P1_SUPER_BARS_VADDR ((void*)0x4dfc95UL)
69 /* partial super bar; 1 byte wide */
70 /* smallest increment seems to be 0x5, but I'm not sure if that's universal */
71 #define P1_SUPER_PARTIAL_VADDR ((void*)0x4dfc9dUL)
72 #define P1_SUPER_BARS_MAX_VADDR ((void*)0x4dfc99UL)
73 #define P1_SUPER_PARTIAL_MAX_VADDR ((void*)0x4dfca1UL)
74 /* just define the max bars to be the constant 3; no reason to read it all the time */
75 #define CTU_BARS_MAX (3)
77 #define P2_SUPER_BARS_VADDR ((void*)0x4edcd4UL)
78 #define P2_SUPER_PARTIAL_VADDR ((void*)0x4edcdcUL)
79 #define P2_SUPER_BARS_MAX_VADDR ((void*)0x4edcd8UL)
80 #define P2_SUPER_PARTIAL_MAX_VADDR ((void*)0x4edce0UL)
82 /* 'magic' is a signed, 2-byte-wide value */
83 /* 0 -> no magic
85 for characters that have max 3 magic (twi/aj):
86 -1 -> 1 magic
87 -2 -> 2 magic
88 -3 -> 3 magic
90 for characters that have max 6 magic (rarity/pinkie):
91 1 -> 1 magic
92 ...
93 6 -> 6 magic
95 #define P1_MAGIC_VADDR ((void*)0x4dfd1bUL)
96 #define P2_MAGIC_VADDR ((void*)0x4edd5aUL)
98 /* character name; a string */
99 /* I assume this is string used to load the *.player files */
100 #define P1_CHARNAME_VADDR ((void*)0x4d1d90UL)
101 #define P2_CHARNAME_VADDR ((void*)0x4dfdcfUL)
103 /* character index/id; 4 byte signed integer */
104 /* for FiM:
105 0: Applejack
106 1: Twilight Sparkle
107 2: Rarity
108 3: Pinkie Pie
109 -1: No character selected
111 #define P1_CHAR_VADDR ((void*)0x470020UL)
112 #define P2_CHAR_VADDR ((void*)0x470024UL)
114 #define FIM_CHAR_APPLEJACK (0)
115 #define FIM_CHAR_TWILIGHT (1)
116 #define FIM_CHAR_RARITY (2)
117 #define FIM_CHAR_PINKIE (3)
119 /* array of character names, 256 bytes per character */
120 #define CHAR_NAMES_VADDR ((void*)0x435474UL)
121 /* array of stage names, 256 bytes per stage */
122 #define STAGE_NAMES_VADDR ((void*)0x43A29CUL)
124 /* 4 bytes, in network-byte-order, it looks like, for some reason? */
125 #define P1_POS_VADDR ((void*)0x4dfcc1UL)
126 #define P2_POS_VADDR ((void*)0x4edd00UL)
127 /* 1 byte */
128 /* if 0x1, our controls are 'reversed'; that is, left is towards, right is back */
129 #define P1_REVERSE_VADDR ((void*)0x4dfcd1UL)
130 #define P2_REVERSE_VADDR ((void*)0x4edd10UL)
132 /* 4 bytes; signed integer. -1 means the player hasn't chosen yet */
133 #define P1_CHAR_COLOR_VADDR ((void*)0x4dfd8bUL)
134 #define P2_CHAR_COLOR_VADDR ((void*)0x4eddcaUL)
136 /* these are NOT CURRENTLY USEFUL (I don't think). They have something to do
137 * with air-teching, possibly they represent something with the blue flashing.
138 * This is usually not useful to know, since for some cases, we need to be
139 * holding 'up' _before_ the flash actually starts */
140 #define P1_AIRTECH_VADDR ((void*)0x4728f8UL)
141 #define P2_AIRTECH_VADDR ((void*)0x4703aaUL)
143 /* these represent how high in the air the player is, either via jumping or
144 * getting hit in the air. these are 32-bit unsigned integers. a value of
145 * 0x3980000 means we are on the ground, and the values get smaller as we go
146 * higher in the air. */
147 #define P1_HEIGHT_VADDR ((void*)0x4dfcc5UL)
148 #define P2_HEIGHT_VADDR ((void*)0x4edd04UL)
149 #define HEIGHT_GROUNDED (0x3980000UL)
151 #define CTRL_BACK (0x0001)
152 #define CTRL_FWD (0x0002)
153 #define CTRL_UP (0x0004)
154 #define CTRL_DOWN (0x0008)
155 #define CTRL_A (0x0010)
156 #define CTRL_B (0x0020)
157 #define CTRL_C (0x0040)
158 #define CTRL_D (0x0080)
159 #define CTRL_HEALTH (0x0100)
160 #define CTRL_METER (0x0200)
161 #define CTRL_PAUSE (0x0400)
163 #define STATE_POS_MASK (0x3)
164 #define STATE_POS_DUCK (0x1)
165 #define STATE_POS_AIR (0x2)
167 #define STATE_STUN_MASK (0xC)
168 #define STATE_STUN_ATTACK (0x4)
169 #define STATE_STUN_GBOUNCE (0x4)
170 #define STATE_STUN_HIT (0x8)
171 #define STATE_STUN_BLOCK (0xC)
173 #define STATE_HITTING_MASK (0x10)
174 #define STATE_HITTING (0x10)
176 /* this volume stuff comes from MTSP */
177 #define BGM_VOLUME_BREAK (0x0040347EUL)
178 #define SE_VOLUME_BREAK (0x0040348CUL)
180 #define VOLUME_SET_1_CADDR ((void*)0x00403401UL)
181 static BYTE VOLUME_SET_1_CODE[] = {0x58,0x8B,0x08,0x6A,0x01,0xEB,0x0D,0x58,
182 0x8B,0x08,0x6A,0x00,0xEB,0x06,0x90,0xE9,
183 0xEB,0x21,0x01,0x00,0x6A,0x00,0x6A,0x00,
184 0x50,0xFF,0x51,0x30,0x5B,0xC3};
185 #define VOLUME_SET_2_CADDR ((void*)0x0040347BUL)
186 static BYTE VOLUME_SET_2_CODE[] = {0x50,0x8B,0x08,0xCC,0x52,0x50,0xFF,0x51,
187 0x3C,0xE9,0x78,0xFF,0xFF,0xFF,0x50,0x8B,
188 0x08,0xCC,0x52,0x50,0xFF,0x51,0x3C,0xE9,
189 0x71,0xFF,0xFF,0xFF};
191 #if 0
192 /* old lunaport-based stuff */
193 #define RANDOM_SEED_VADDR ((void*)0x0041fb1cUL)
195 #define STAGE_SELECT_FADDR ((void*)0x00408756UL)
196 #define STAGE_SELECT_BREAK (0x00408756UL)
197 static unsigned char stage_select_func[] = {0xCC,0x90,0x90,0x90,0x90};
199 #define CONTROL_CHANGE_BREAK (0x0041B588UL)
200 #define CONTROL_CHANGE_FADDR ((void*)0x0041B588UL)
202 #define P1_KBD_CONTROLS_VADDR ((void*)0x00425980UL)
203 #define P2_KBD_CONTROLS_VADDR ((void*)0x00425991UL)
204 #define KBD_CONTROLS_SIZE (10U)
205 static unsigned char kbd_control_buffer[KBD_CONTROLS_SIZE];
207 #define P1_JOY_CONTROLS_VADDR ((void*)0x00445710UL)
208 #define P2_JOY_CONTROLS_VADDR ((void*)0x00445717UL)
209 #define JOY_CONTROLS_SIZE (7U)
210 static unsigned char joy_control_buffer[JOY_CONTROLS_SIZE];
212 #define KBD_WRITEBACK_FADDR ((void*)0x00414FCAUL)
213 static unsigned char kbd_writeback_func[] = {
214 0x90,0x8B,0x15,0x7C,0x1F,0x54,0x00,0x90,
215 0x90,0x90,0x90,0x90
218 #define JOY_WRITEBACK_FADDR ((void*)0x0041502CUL)
219 static unsigned char joy_writeback_func[] = {
220 0x90,0x8B,0x15,0x7C,0x1F,0x54,0x00,0x90,
221 0x90,0x90,0x90,0x90
224 #define STICK_SELECTION_FADDR ((void*)0x004144CBUL)
225 static unsigned char stick_selection_func[] = {0x6A,0x00};
227 #define LOCAL_INPUT_FADDR ((void*)0x0041B588UL)
228 #define LOCAL_INPUT_BREAK (0x0041B591UL)
229 static unsigned char local_input_func[] = {
230 0xCC,0x90,0x90,0x90,0xE8,0xAF,0x8D,0xFF,
231 0xFF,0xCC,0x90,0x90,0x90,0x90,0x90,0x90,
232 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
233 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
234 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
235 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
236 0x90
238 #define LOCAL_INPUT_JMPBACK ((void*)0x0041B5B9UL)
239 static unsigned char local_input_jmpback[2][5] = {
241 0xE9,0x82,0x91,0xFF,0xFF
244 0xE9,0x9D,0x91,0xFF,0xFF
248 #define REMOTE_INPUT_FADDR ((void*)0x0041B5BEUL)
249 #define REMOTE_INPUT_BREAK (0x0041B5C0UL)
250 static unsigned remote_input_func[] = {
251 0x90,0x90,0xCC,0x90,0x90,0x90,0x90,0x90,
252 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
253 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
254 0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,
255 0x90,0x90,0x90,0x90,0x90
257 #define REMOTE_INPUT_JMPBACK ((void*)0x0041B5E3UL)
258 static unsigned char remote_input_jmpback[2][5] = {
260 0xE9,0x58,0x91,0xFF,0xFF
263 0xE9,0x73,0x91,0xFF,0xFF
267 #define P1_JUMP_FADDR ((void*)0x0041473bUL)
268 static unsigned char p1_jump_func[2][5] = {
270 0xE9,0x48,0x6E,0x00,0x00
273 0xE9,0x7E,0x6E,0x00,0x00
277 #define P2_JUMP_FADDR ((void*)0x00414756UL)
278 static unsigned char p2_jump_func[2][5] = {
280 0xE9,0x2D,0x6E,0x00,0x00
283 0xE9,0x63,0x6E,0x00,0x00
287 #define REPLAY_HOOKS_FADDR ((void*)0x0041B760UL)
288 static unsigned char replay_hooks_func[] = {
289 0xE8,0xDB,0x8B,0xFF,0xFF,0xCC,0xE9,0xD5,
290 0x8F,0xFF,0xFF,0xE8,0xD0,0x8B,0xFF,0xFF,
291 0xCC,0xE9,0xE5,0x8F,0xFF,0xFF
293 #define REPLAY_P1_BREAK (0x0041B765UL)
294 #define REPLAY_P2_BREAK (0x0041B770UL)
296 #define REPLAY_P1_JUMP_FADDR ((void*)0x0041473BUL)
297 static unsigned char replay_p1_jump_func[] = {0xE9,0x20,0x70,0x00,0x00};
299 #define REPLAY_P2_JUMP_FADDR ((void*)0x00414756UL)
300 static unsigned char replay_p2_jump_func[] = {0xE9,0x10,0x70,0x00,0x00};
302 #define SINGLEP_HOOKS_FADDR ((void*)0x0041B776UL)
303 #define SINGLEP_CONTROL_BREAK (0x0041B776UL)
304 #define SINGLEP_INPUT_BREAK (0x0041B77CUL)
305 static unsigned char singlep_hooks_func[] = {
306 0xCC,0xE8,0xC4,0x8B,0xFF,0xFF,0xCC,0xE9,
307 0x9E,0x8F,0xFF,0xFF
309 #define SINGLEP_JUMP_FADDR ((void*)0x0041471BUL)
310 static unsigned char singlep_jump_func[] = {0xE9,0x56,0x70,0x00,0x00};
312 #define FRAME_FADDR ((void*)0x0041B782UL)
313 #define FRAME_BREAK (0x0041B782UL)
314 static unsigned char frame_func[] = {
315 0xCC,0xA1,0x6C,0x47,0x42,0x00,0xE9,0x88,
316 0x94,0xFE,0xFF
319 #define FRAME_JUMP ((void*)0x00404C10UL)
320 static unsigned char frame_jump_func[] = {0xE9,0x6D,0x6B,0x01,0x00};
322 #define TITLE_FADDR ((void*)0x00403F4EUL)
323 #define TITLE_BREAK (0x00403F4EUL)
324 static unsigned char title_break_func[] = {0xCC};
325 static unsigned char title_break_func_bak[] = {0x52};
327 #define GAME_SPEED_VADDR ((void*)0x0041E2F0UL)
328 #define KEYSTATES_VADDR ((void*)0x00424D20UL)
329 #define WAITSKIP 100
330 #define SPEED_MOD 3
332 #define EXTRA_INPUT_JUMP_FADDR ((void*)0x00405B45UL)
333 static unsigned char extra_input_jump_func[] = {0xE9,0x56,0x5C,0x01,0x00,0x90};
335 #define IMPORT_KBD_FADDR ((void*)0x004146D9UL)
336 #define EXPORT_KBD_FADDR ((void*)0x0041B7B1UL)
337 static unsigned char getkeyboardstate_func[6];
339 #define EXTRA_INPUT_FADDR ((void*)0x0041B7A0UL)
340 #define EXTRA_INPUT_WAIT_BREAK (0x0041B7A6UL)
341 #define EXTRA_INPUT_BREAK (0x0041B7B7UL)
342 #define EXTRA_INPUT_GO ((void*)0x0041B7ACUL)
343 #define EXTRA_INPUT_BACK ((void*)0x00405B4AUL)
344 static unsigned char extra_input_func[] = {
345 0x8B,0x35,0xF0,0xE2,0x41,0x00,0xCC,0xE9,
346 0x9E,0xA3,0xFE,0xFF,0x68,0x20,0x4D,0x42,
347 0x00,0x90,0x90,0x90,0x90,0x90,0x90,0xCC
350 #define P1_CHAR_NUM_VADDR ((void*)0x00470020UL)
351 #define P2_CHAR_NUM_VADDR ((void*)0x00470024UL)
352 #define STAGE_NUM_VADDR ((void*)0x00470040UL)
353 #define CHAR_NAMES_VADDR ((void*)0x00435474UL)
354 #define STAGE_NAMES_VADDR ((void*)0x0043A29CUL)
356 #define LOAD_STAGE_BREAK (0x004041E0UL)
357 #define DOUBLE_KO_BREAK (0x00408FCFUL)
358 #define DRAW_BREAK (0x00408FF7UL)
359 #define P1_WIN_BREAK (0x0040901FUL)
360 #define P2_WIN_BREAK (0x00409043UL)
361 unsigned int simple_int3[] = {
362 LOAD_STAGE_BREAK,
363 DOUBLE_KO_BREAK,
364 DRAW_BREAK,
365 P1_WIN_BREAK,
366 P2_WIN_BREAK,
369 unsigned char simple_int3_bak[] = {
378 #define FPS_HACK_FADDR ((void*)0x00405B45UL)
379 #define MAX_INPUTS_PER_FRAME_VADDR ((void*)0x00405BC7UL)
380 #endif
382 #endif /* CTU_INJECT_H */