for england james?

This commit is contained in:
KholdFuzion
2026-08-16 17:30:25 -04:00
parent 05e8d9bf07
commit c73a8531e0
340 changed files with 86032 additions and 148406 deletions
+3 -3
View File
@@ -21,13 +21,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Bypass Cloudflare for GitHub Action
uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1
uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1
with:
cf_zone_id: ${{ secrets.CF_ZONE_ID }}
cf_api_token: ${{ secrets.CF_API_TOKEN }}
- uses: actions/checkout@v2
- name: Install Depedencies
run: |
+3 -3
View File
@@ -21,13 +21,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Bypass Cloudflare for GitHub Action
uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1
uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1
with:
cf_zone_id: ${{ secrets.CF_ZONE_ID }}
cf_api_token: ${{ secrets.CF_API_TOKEN }}
- uses: actions/checkout@v2
- name: Install Depedencies
run: |
+3 -3
View File
@@ -21,13 +21,13 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Bypass Cloudflare for GitHub Action
uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1
uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1
with:
cf_zone_id: ${{ secrets.CF_ZONE_ID }}
cf_api_token: ${{ secrets.CF_API_TOKEN }}
- uses: actions/checkout@v2
- name: Install Depedencies
run: |
+1 -1
View File
@@ -2,7 +2,7 @@ FROM ubuntu:22.04
RUN echo ">> install distro packages ..." && \
apt update && \
apt -y install bash-completion sudo binutils-mips-linux-gnu wget make git python3 libcapstone-dev pkg-config build-essential
apt -y install bash-completion sudo binutils-mips-linux-gnu wget make git python3 build-essential
# Hint: comment out qemu installation, if you're using ido recomp
RUN echo ">> install qemu ..." && \
@@ -7,7 +7,7 @@ ModelNode player_gait_pos_hdr_2 = {2, &player_gait_pos_2, &player_gait_pos_hdr_1
//D:8003C5C8
ModelNode player_gait_pos_hdr_3 = {2, &player_gait_pos_3, &player_gait_pos_hdr_2, 0, 0, 0};
//D:8003C5E0
ModelRoData_HeaderRecord player_gait_obj = {1, &player_gait_pos_hdr_1, 0, 0, 0, 0};
ModelRoData_HeaderRecord player_gait_obj = {0, 1, &player_gait_pos_hdr_1, 0, 0, 0};
//D:8003C5F0
ModelRoData_GroupRecord player_gait_pos_1 = {{0.0, 0.0, 0.0}, 0x0001, 0x0002, 0xFFFF, 0xFFFF, &player_gait_pos_hdr_2, 0};
//D:8003C60C
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -323,7 +324,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -285,7 +286,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -319,7 +320,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -217,7 +218,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -186,7 +187,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+4 -1
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -200,7 +201,9 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
+11 -2
View File
@@ -1,6 +1,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -2457,8 +2458,16 @@ PathRecord patrolpaths[] = {
{ NULL, 0x00, 0x00, 0x0000 }
};
u32 ai_0[] = {0XCD026C00, 0x00020003, 0X1000201, 0x04000000};
u32 ai_1[] = {0x20003010, 0x0040000};
u8 ai_0[] = {
goto_next(0x02)
goto_next(0x03)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x00)
if_chr_dying_or_dead(0x10, 0x00)
ai_list_end
};
AIListRecord ailists[] = {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+736 -29
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -2205,35 +2206,741 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x200305fd, 0x00070400 };
u32 ai_4[] = { 0x200405fd, 0x00070400 };
u32 ai_5[] = { 0x200505fd, 0x00070400 };
u32 ai_6[] = { 0x200605fd, 0x00070400 };
u32 ai_11[] = { 0x8fea60ab, 0x00c19d00, 0x00080002, 0x40033c33, 0x01400233, 0x1f232800, 0x1d021d03, 0x54fd2328, 0x022f2e01, 0x1d022e01, 0x33020403, 0x2f2e0104, 0x0202ad44, 0x0a009c00, 0x0100002f, 0x9c000080, 0x0001022f, 0x9c000080, 0x001c9c00, 0x0020001b, 0x9c000010, 0x00199c00, 0x00080018, 0x9c000004, 0x00179c00, 0x00020016, 0x9c000001, 0x00150214, 0xad310a00, 0x9a000001, 0x00ab00d3, 0x67196710, 0x002e0215, 0x9a000002, 0x00ab00de, 0x671a6711, 0x002e0216, 0x9a000004, 0x00ab0107, 0x671b6712, 0x002e0217, 0x9a000008, 0x00ab0110, 0x671c6713, 0x002e0218, 0xad350a00, 0x9a000010, 0x00ab0159, 0x671d6714, 0x002e0219, 0xad360a00, 0x9a000020, 0x00ab0167, 0x671e6715, 0x002e021b, 0xad370a00, 0x9a000080, 0x00ab0169, 0x67206717, 0x67246725, 0x002e021c, 0xad380a00, 0x67216718, 0xab016f00, 0x05022e01, 0x3302051d, 0x0206032f, 0x2e4dfd00, 0x0a23282e, 0x0106022e, 0x22020b03, 0x010b0201, 0xad570a00, 0x1c01689a, 0x00010000, 0x0207ad34, 0x0a00032f, 0x2e4dfd00, 0x3201682e, 0x0107022e, 0x0208ad35, 0x0a00033c, 0x2e010802, 0x2ec31c0a, 0x9a000200, 0x00ae0209, 0x033335c8, 0x2f150001, 0x00002e02, 0x2f1a2e01, 0x09022e02, 0x0a034b00, 0x640c5b22, 0x0c010202, 0x2eb40009, 0x600c2f2f, 0x010a020c, 0x03662166, 0x18002e02, 0x2e010202, 0x2f010904 };
u32 ai_7[] = { 0x02000396, 0x102e462a, 0x3a2a3b2b, 0x32223c21, 0x39203e20, 0x3f202f04, 0x0100022e, 0x01000204, 0x79002b01, 0x00020501, 0x00022033, 0x35402301, 0x00022310, 0x21010002, 0x21474022, 0x48c0224b, 0x000a2201, 0x00022233, 0x35c82645, 0x26010002, 0x264b0014, 0x2a79002b, 0x06040805, 0xfd040902, 0x2a060408, 0x05fd040a, 0x022b3335, 0x40300604, 0x0805fd04, 0x0b0230ad, 0x4966206f, 0x6e6c7920, 0x49206861, 0x64206120, 0x67756e21, 0x21210a00, 0x1a310100, 0x0231032f, 0x02013102, 0x02010004 };
u32 ai_8[] = { 0x0200032f, 0x27010002, 0x27333596, 0x28333500, 0x29000202, 0x280e0202, 0x29100202, 0x02032f04, 0x01020204, 0x3c210702, 0x21476e22, 0x4891224b, 0x000a2207, 0x02220127, 0x04000000 };
u32 ai_9[] = { 0x02000333, 0x35fd2b46, 0x2b002a02, 0x2a452c4c, 0x00c8253c, 0x2c002502, 0x2c790103, 0x21010002, 0x25002b02, 0x2b06040a, 0x05fd040b, 0x02020702, 0x0305fd00, 0x10040000 };
u32 ai_10[] = { 0x61fd0200, 0x1c017002, 0x04032f02, 0x4dfd0032, 0x01700246, 0x2a010402, 0x2aad210a, 0x0021022e, 0x033335dc, 0x2e3b2e2f, 0x2e012e02, 0x2ead496d, 0x206f6666, 0x210a0001, 0x0002024d, 0xfd003201, 0x70390702, 0x393c0522, 0x07020503, 0x07040000 };
u32 ai_14[] = { 0x02000346, 0x2e3a2e3b, 0x2e322e3c, 0x2e010002, 0x2e3335fa, 0x2f35962e, 0x14000100, 0x0004022f, 0x4b00502e, 0x4c012c2e, 0x1a04022e, 0x15000100, 0x00040204, 0x032f0201, 0x04020201, 0x00040000 };
u32 ai_13[] = { 0x04000000 };
u32 ai_12[] = { 0x04000000 };
u32 ai_23[] = { 0x021d039c, 0x00040000, 0x2f5b092e, 0x9a000400, 0x00022e9c, 0x00080000, 0x2f5b0a2e, 0x9a000800, 0x00022e9c, 0x00100000, 0x2f5b0b2e, 0x9a001000, 0x00022e9c, 0x00200000, 0x2f5b0c2e, 0x9a002000, 0x00022e5c, 0x09055c0a, 0x055c0b05, 0x5c0c0501, 0x1d022fc3, 0x1c0b0004, 0x0205c400, 0x5000c500, 0x090000ae, 0x020003b4, 0x00003c06, 0x01000206, 0xc31c0c9a, 0x00400000, 0x00040204, 0x03010404 };
u32 ai_24[] = { 0xad68656c, 0x6c6f0002, 0x00039c00, 0x0200003c, 0x0100023c, 0xae662366, 0x246625ad, 0x210a0003, 0x31592e00, 0x1e022ef3, 0x1ebd04ff, 0x01660410, 0x00000001, 0x2e021e02, 0x2e03315a, 0x2e001e02, 0x2ef31ebd, 0x04ff0124, 0x04110000, 0x00012e02, 0x1e022e03, 0x315b2e00, 0x1e022ef3, 0x1ebd04ff, 0x01330412, 0x00000001, 0x2e021e02, 0x0203b400, 0x09602e01, 0x02022e01, 0x3c040000 };
u32 ai_15[] = { 0x8e59ad68, 0x310a0005, 0xfd041304 };
u32 ai_16[] = { 0x8e5aad68, 0x320a0005, 0xfd041304 };
u32 ai_17[] = { 0x8e5bad68, 0x330a0005, 0xfd041304 };
u32 ai_18[] = { 0x3335c82e, 0x7200782e, 0x3564048f, 0x0050c000, 0xde000000, 0x00000200, 0xbf00c309, 0x80000000, 0x00020033, 0x356400bf, 0x00c30990, 0x00000000, 0x02000002, 0x02048f00, 0x78c000dd, 0x00000000, 0x000200bf, 0x00c50e80, 0x00000000, 0x02003335, 0x6400bf00, 0xc50e9000, 0x00000002, 0x00000202, 0x2e8f003c, 0xc000dc00, 0x00000000, 0x0200bf00, 0xcf100000, 0x00000002, 0x00020206, 0x000205fd, 0x00080400 };
u32 ai_19[] = { 0x0200033a, 0x333b3303, 0x46333c33, 0x03333532, 0x2e453302, 0x2e010002, 0x33060002, 0x05fd0008, 0x04000000 };
u32 ai_20[] = { 0x90005002, 0x00033a33, 0x3b333933, 0x0346333c, 0x33033335, 0x322e4533, 0x022e0100, 0x02330600, 0x0d05fd00, 0x0d040000 };
u32 ai_21[] = { 0xd9fd0171, 0x2e022ee0, 0xfd01ae02, 0x0803b400, 0x003c2e01, 0x08022e0a, 0x00650008, 0x006d0410, 0x020403b4, 0x0000702e, 0x0104022e, 0xe0fd0002, 0x0503b400, 0x00ea2e01, 0x05022e67, 0x26020703, 0x6826012e, 0x0107022e, 0xda020603, 0xdc2e0106, 0x022ed202, 0x02030102, 0x04000000 };
u32 ai_25[] = { 0x024003eb, 0x43550171, 0x2e014002, 0x2e9a0080, 0x0000ecd7, 0x00da0204, 0x03dc2e01, 0x04022ef1, 0x2e05fd00, 0x0f022edd, 0xeadf26df, 0x2759022e, 0x59032e59, 0x1a2e591b, 0x2e591c2e, 0x591d2e59, 0x182e5919, 0x2e59042e, 0x59052e59, 0x062e5907, 0x2e59082e, 0x59092e59, 0x0a2e590b, 0x2e590c2e, 0x590d2e59, 0x0e2e590f, 0x2e59102e, 0x59112e59, 0x122e5913, 0x2e59162e, 0x59142e59, 0x152ee404, 0x022eed03, 0x0303d528, 0x00020000, 0x05f80416, 0xdbf40000, 0xff020503, 0xdc2e0105, 0x022e05fd, 0x00010243, 0x05fd0001, 0x04000000 };
u32 ai_22[] = { 0xae0a0062, 0x00000001, 0x04100204, 0x03b40000, 0x002e0104, 0x022e0a00, 0x620001ff, 0xff041002, 0x02030102, 0x04000000 };
u32 ai_26[] = { 0x020403cf, 0x2e010402, 0x2e05f804, 0x17020203, 0x01020400 };
u32 ai_27[] = { 0x024003a0, 0x49001000, 0x00a04a00, 0x100000a0, 0x4b001000, 0x00a05400, 0x100000a0, 0x55001000, 0x0003021d, 0x03f7022e, 0x011d022e, 0xc31c0d9a, 0x01000000, 0x05fd0001, 0x04000000 };
u32 ai_28[] = { 0x020003cf, 0x05010002, 0x04035501, 0x701e002e, 0x021e0104, 0x022ef501, 0x02050355, 0x01702e01, 0x05022ef4, 0x0100ff01, 0x04040000 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_start_patrol(0x03)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_4[] = {
guard_start_patrol(0x04)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_5[] = {
guard_start_patrol(0x05)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_6[] = {
guard_start_patrol(0x06)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_11[] = {
guard_set_health_total(0x60ea)
guard_set_pad_preset(0xc100)
guard_flags_set_on(0x00080000)
label(0x40)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x33)
goto_first(0x40)
label(0x33)
guard_sprints_to_pad(0x2823)
goto_next(0x1d)
label(0x1d)
ai_sleep
if_chr_in_room_with_pad(0xfd, 0x2823, 0x02)
if_guard_has_stopped_moving(0x2e)
goto_first(0x1d)
label(0x2e)
goto_first(0x33)
label(0x04)
ai_sleep
if_guard_has_stopped_moving(0x2e)
goto_first(0x04)
label(0x02)
debug_log 'D', '\n', '\0',
if_objective_bitfield_is_set_on(0x00000100, 0x2f)
if_objective_bitfield_is_set_on(0x00800000, 0x01)
label(0x2f)
if_objective_bitfield_is_set_on(0x00800000, 0x1c)
if_objective_bitfield_is_set_on(0x00200000, 0x1b)
if_objective_bitfield_is_set_on(0x00100000, 0x19)
if_objective_bitfield_is_set_on(0x00080000, 0x18)
if_objective_bitfield_is_set_on(0x00040000, 0x17)
if_objective_bitfield_is_set_on(0x00020000, 0x16)
if_objective_bitfield_is_set_on(0x00010000, 0x15)
label(0x14)
debug_log '1', '\n', '\0',
objective_bitfield_set_on(0x00010000)
guard_set_pad_preset(0xd300)
door_close(0x19)
door_close(0x10)
goto_next(0x2e)
label(0x15)
objective_bitfield_set_on(0x00020000)
guard_set_pad_preset(0xde00)
door_close(0x1a)
door_close(0x11)
goto_next(0x2e)
label(0x16)
objective_bitfield_set_on(0x00040000)
guard_set_pad_preset(0x0701)
door_close(0x1b)
door_close(0x12)
goto_next(0x2e)
label(0x17)
objective_bitfield_set_on(0x00080000)
guard_set_pad_preset(0x1001)
door_close(0x1c)
door_close(0x13)
goto_next(0x2e)
label(0x18)
debug_log '5', '\n', '\0',
objective_bitfield_set_on(0x00100000)
guard_set_pad_preset(0x5901)
door_close(0x1d)
door_close(0x14)
goto_next(0x2e)
label(0x19)
debug_log '6', '\n', '\0',
objective_bitfield_set_on(0x00200000)
guard_set_pad_preset(0x6701)
door_close(0x1e)
door_close(0x15)
goto_next(0x2e)
label(0x1b)
debug_log '7', '\n', '\0',
objective_bitfield_set_on(0x00800000)
guard_set_pad_preset(0x6901)
door_close(0x20)
door_close(0x17)
door_close(0x24)
door_close(0x25)
goto_next(0x2e)
label(0x1c)
debug_log '8', '\n', '\0',
door_close(0x21)
door_close(0x18)
guard_set_pad_preset(0x6f01)
goto_next(0x05)
label(0x2e)
goto_first(0x33)
label(0x05)
guard_runs_to_pad_preset
label(0x06)
ai_sleep
if_guard_has_stopped_moving(0x2e)
if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x2e)
goto_first(0x06)
label(0x2e)
guard_remove_fade
label(0x0b)
ai_sleep
goto_first(0x0b)
label(0x01)
debug_log 'W', '\n', '\0',
guard_runs_to_pad(0x6801)
objective_bitfield_set_on(0x00000100)
label(0x07)
debug_log '4', '\n', '\0',
ai_sleep
if_guard_has_stopped_moving(0x2e)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x6801, 0x2e)
goto_first(0x07)
label(0x2e)
label(0x08)
debug_log '5', '\n', '\0',
ai_sleep
if_guard_and_bond_within_line_of_sight(0x2e)
goto_first(0x08)
label(0x2e)
text_print_top(0x0a1c)
objective_bitfield_set_on(0x00000200)
local_timer_reset_start
label(0x09)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xc8, 0x2f)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x2e)
label(0x2f)
guard_try_throwing_grenade(0x2e)
goto_first(0x09)
label(0x2e)
label(0x0a)
ai_sleep
if_guard_distance_to_bond_less_than(0x6400, 0x0c)
if_object_not_destroyed(0x22, 0x0c)
goto_first(0x02)
label(0x2e)
if_local_timer_greater_than(0x600900, 0x0c)
if_guard_has_stopped_moving(0x2f)
goto_first(0x0a)
label(0x0c)
ai_sleep
door_open(0x21)
door_open(0x18)
goto_next(0x2e)
label(0x2e)
goto_first(0x02)
label(0x2f)
goto_first(0x09)
ai_list_end
};
u8 ai_7[] = {
label(0x00)
ai_sleep
if_guard_bitfield_is_set_on(0x10, 0x2e)
if_guard_shot_from_bond_missed(0x2a)
if_guard_see_another_guard_shot(0x2a)
if_guard_see_another_guard_die(0x2b)
if_guard_sees_bond(0x22)
if_guard_and_bond_within_line_of_sight(0x21)
if_guard_heard_bond(0x20)
if_guard_was_shot_or_seen_bond_within_last_10_secs(0x20)
if_guard_heard_bond_within_last_10_secs(0x20)
if_guard_has_stopped_moving(0x04)
goto_first(0x00)
label(0x2e)
goto_first(0x00)
label(0x04)
if_guard_hits_greater_than(0x00, 0x2b)
goto_first(0x00)
label(0x05)
goto_first(0x00)
label(0x20)
random_generate_seed
if_random_seed_greater_than(0x40, 0x23)
goto_first(0x00)
label(0x23)
guard_try_running_to_side(0x21)
goto_first(0x00)
label(0x21)
if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x22)
if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x22)
if_guard_distance_to_bond_less_than(0x0a00, 0x22)
goto_first(0x00)
label(0x22)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x26)
if_guard_is_targeted_by_bond(0x26)
goto_first(0x00)
label(0x26)
if_guard_distance_to_bond_less_than(0x1400, 0x2a)
if_guard_hits_greater_than(0x00, 0x2b)
set_return_ai_list(0x0804)
jump_to_ai_list(0xfd, 0x0904)
label(0x2a)
set_return_ai_list(0x0804)
jump_to_ai_list(0xfd, 0x0a04)
label(0x2b)
random_generate_seed
if_random_seed_greater_than(0x40, 0x30)
set_return_ai_list(0x0804)
jump_to_ai_list(0xfd, 0x0b04)
label(0x30)
debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0',
guard_try_throwing_grenade(0x31)
goto_first(0x00)
label(0x31)
ai_sleep
if_guard_has_stopped_moving(0x02)
goto_first(0x31)
label(0x02)
goto_first(0x00)
ai_list_end
};
u8 ai_8[] = {
label(0x00)
ai_sleep
if_guard_has_stopped_moving(0x27)
goto_first(0x00)
label(0x27)
random_generate_seed
if_random_seed_greater_than(0x96, 0x28)
random_generate_seed
if_random_seed_greater_than(0x00, 0x29)
goto_next(0x02)
label(0x28)
guard_try_sidestepping(0x02)
label(0x29)
guard_try_running_to_side(0x02)
label(0x02)
ai_sleep
if_guard_has_stopped_moving(0x04)
goto_first(0x02)
label(0x04)
if_guard_and_bond_within_line_of_sight(0x21)
jump_to_return_ai_list
label(0x21)
if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x22)
if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x22)
if_guard_distance_to_bond_less_than(0x0a00, 0x22)
jump_to_return_ai_list
label(0x22)
goto_first(0x27)
ai_list_end
};
u8 ai_9[] = {
label(0x00)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfd, 0x2b)
if_guard_shot_from_bond_missed(0x2b)
goto_next(0x2a)
label(0x2a)
if_guard_is_targeted_by_bond(0x2c)
if_guard_distance_to_bond_greater_than(0xc800, 0x25)
if_guard_and_bond_within_line_of_sight(0x2c)
goto_next(0x25)
label(0x2c)
if_guard_hits_greater_than(0x01, 0x03)
guard_surrenders
goto_first(0x00)
label(0x25)
goto_next(0x2b)
label(0x2b)
set_return_ai_list(0x0a04)
jump_to_ai_list(0xfd, 0x0b04)
label(0x02)
jump_to_return_ai_list
label(0x03)
jump_to_ai_list(0xfd, 0x1000)
ai_list_end
};
u8 ai_10[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
guard_runs_to_pad(0x7001)
label(0x04)
ai_sleep
if_guard_has_stopped_moving(0x02)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x7001, 0x02)
if_guard_shot_from_bond_missed(0x2a)
goto_first(0x04)
label(0x2a)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x2e)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x2e)
if_guard_see_another_guard_die(0x2e)
if_guard_has_stopped_moving(0x2e)
goto_first(0x2e)
label(0x2e)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x02)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x7001, 0x39)
jump_to_return_ai_list
label(0x39)
if_guard_and_bond_within_line_of_sight(0x05)
guard_remove_fade
jump_to_return_ai_list
label(0x05)
ai_sleep
jump_to_return_ai_list
ai_list_end
};
u8 ai_14[] = {
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x2e)
if_guard_see_another_guard_shot(0x2e)
if_guard_see_another_guard_die(0x2e)
if_guard_sees_bond(0x2e)
if_guard_and_bond_within_line_of_sight(0x2e)
goto_first(0x00)
label(0x2e)
random_generate_seed
if_random_seed_greater_than(0xfa, 0x2f)
if_random_seed_greater_than(0x96, 0x2e)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04)
label(0x2f)
if_guard_distance_to_bond_less_than(0x5000, 0x2e)
if_guard_distance_to_bond_greater_than(0x2c01, 0x2e)
guard_try_throwing_grenade(0x04)
label(0x2e)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04)
label(0x04)
ai_sleep
if_guard_has_stopped_moving(0x02)
goto_first(0x04)
label(0x02)
goto_first(0x00)
ai_list_end
};
u8 ai_13[] = {
ai_list_end
};
u8 ai_12[] = {
ai_list_end
};
u8 ai_23[] = {
label(0x1d)
ai_sleep
if_objective_bitfield_is_set_on(0x00000400, 0x2f)
if_object_not_destroyed(0x09, 0x2e)
objective_bitfield_set_on(0x00000400)
label(0x2e)
if_objective_bitfield_is_set_on(0x00000800, 0x2f)
if_object_not_destroyed(0x0a, 0x2e)
objective_bitfield_set_on(0x00000800)
label(0x2e)
if_objective_bitfield_is_set_on(0x00001000, 0x2f)
if_object_not_destroyed(0x0b, 0x2e)
objective_bitfield_set_on(0x00001000)
label(0x2e)
if_objective_bitfield_is_set_on(0x00002000, 0x2f)
if_object_not_destroyed(0x0c, 0x2e)
objective_bitfield_set_on(0x00002000)
label(0x2e)
if_object_was_activated(0x09, 0x05)
if_object_was_activated(0x0a, 0x05)
if_object_was_activated(0x0b, 0x05)
if_object_was_activated(0x0c, 0x05)
goto_first(0x1d)
label(0x2f)
text_print_top(0x0b1c)
goto_next(0x04)
label(0x05)
sfx_play(0x5000, 0x00)
sfx_emit_from_object(0x00, 0x09, 0x0000)
local_timer_reset_start
label(0x00)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x06)
goto_first(0x00)
label(0x06)
text_print_top(0x0c1c)
objective_bitfield_set_on(0x00004000)
goto_next(0x04)
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_24[] = {
debug_log 'h', 'e', 'l', 'l', 'o', '\0',
label(0x00)
ai_sleep
if_objective_bitfield_is_set_on(0x00000200, 0x3c)
goto_first(0x00)
label(0x3c)
local_timer_reset_start
door_open(0x23)
door_open(0x24)
door_open(0x25)
debug_log '!', '\n', '\0',
ai_sleep
if_chr_does_not_exist(0x59, 0x2e)
goto_next(0x1e)
label(0x2e)
if_bond_damage_and_pickups_disabled(0x1e)
chr_try_spawning_at_pad(0x04, 0xff, 0x6601, 0x1004, 0x01000000, 0x2e)
label(0x1e)
label(0x2e)
ai_sleep
if_chr_does_not_exist(0x5a, 0x2e)
goto_next(0x1e)
label(0x2e)
if_bond_damage_and_pickups_disabled(0x1e)
chr_try_spawning_at_pad(0x04, 0xff, 0x2401, 0x1104, 0x01000000, 0x2e)
label(0x1e)
label(0x2e)
ai_sleep
if_chr_does_not_exist(0x5b, 0x2e)
goto_next(0x1e)
label(0x2e)
if_bond_damage_and_pickups_disabled(0x1e)
chr_try_spawning_at_pad(0x04, 0xff, 0x3301, 0x1204, 0x01000000, 0x2e)
label(0x1e)
label(0x02)
ai_sleep
if_local_timer_greater_than(0x600900, 0x2e)
goto_first(0x02)
label(0x2e)
goto_first(0x3c)
ai_list_end
};
u8 ai_15[] = {
guard_set_chr_num(0x59)
debug_log 'h', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x1304)
ai_list_end
};
u8 ai_16[] = {
guard_set_chr_num(0x5a)
debug_log 'h', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x1304)
ai_list_end
};
u8 ai_17[] = {
guard_set_chr_num(0x5b)
debug_log 'h', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x1304)
ai_list_end
};
u8 ai_18[] = {
random_generate_seed
if_random_seed_greater_than(0xc8, 0x2e)
if_mission_time_less_than(0x7800, 0x2e)
if_random_seed_greater_than(0x64, 0x04)
guard_set_health_total(0x5000)
guard_try_spawning_hat(0xde00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x00)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x64, 0x00)
guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x00)
label(0x00)
goto_next(0x02)
label(0x04)
guard_set_health_total(0x7800)
guard_try_spawning_hat(0xdd00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xc500, 0x0e, 0x00000080, 0x00)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x64, 0x00)
guard_try_spawning_item(0xc500, 0x0e, 0x00000090, 0x00)
label(0x00)
goto_next(0x02)
label(0x2e)
guard_set_health_total(0x3c00)
guard_try_spawning_hat(0xdc00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xcf00, 0x10, 0x00000000, 0x00)
label(0x00)
label(0x02)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_19[] = {
label(0x00)
ai_sleep
if_guard_see_another_guard_shot(0x33)
if_guard_see_another_guard_die(0x33)
ai_sleep
if_guard_shot_from_bond_missed(0x33)
if_guard_and_bond_within_line_of_sight(0x33)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0x32, 0x2e)
if_guard_is_targeted_by_bond(0x33)
label(0x2e)
goto_first(0x00)
label(0x33)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_20[] = {
guard_set_armour(0x5000)
label(0x00)
ai_sleep
if_guard_see_another_guard_shot(0x33)
if_guard_see_another_guard_die(0x33)
if_guard_heard_bond(0x33)
ai_sleep
if_guard_shot_from_bond_missed(0x33)
if_guard_and_bond_within_line_of_sight(0x33)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0x32, 0x2e)
if_guard_is_targeted_by_bond(0x33)
label(0x2e)
goto_first(0x00)
label(0x33)
set_return_ai_list(0x0d00)
jump_to_ai_list(0xfd, 0x0d00)
ai_list_end
};
u8 ai_21[] = {
chr_try_teleporting_to_pad(0xfd, 0x7101, 0x2e)
label(0x2e)
chr_remove_item_in_hand(0xfd, 0x01)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x2e)
goto_first(0x08)
label(0x2e)
guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10)
label(0x04)
ai_sleep
if_local_timer_greater_than(0x700000, 0x2e)
goto_first(0x04)
label(0x2e)
chr_remove_item_in_hand(0xfd, 0x00)
label(0x05)
ai_sleep
if_local_timer_greater_than(0xea0000, 0x2e)
goto_first(0x05)
label(0x2e)
door_close(0x26)
label(0x07)
ai_sleep
if_door_state_equal(0x26, 0x01, 0x2e)
goto_first(0x07)
label(0x2e)
screen_fade_to_black
label(0x06)
ai_sleep
if_screen_fade_completed(0x2e)
goto_first(0x06)
label(0x2e)
exit_level
label(0x02)
ai_sleep
goto_first(0x02)
ai_list_end
};
u8 ai_25[] = {
label(0x40)
ai_sleep
if_bond_is_dead(0x43)
if_bond_in_room_with_pad(0x7101, 0x2e)
goto_first(0x40)
label(0x2e)
objective_bitfield_set_on(0x00008000)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x04)
ai_sleep
if_screen_fade_completed(0x2e)
goto_first(0x04)
label(0x2e)
if_objective_all_completed(0x2e)
jump_to_ai_list(0xfd, 0x0f00)
label(0x2e)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
door_open_instant(0x26)
door_open_instant(0x27)
if_bond_has_item_equipped(0x02, 0x2e)
if_bond_has_item_equipped(0x03, 0x2e)
if_bond_has_item_equipped(0x1a, 0x2e)
if_bond_has_item_equipped(0x1b, 0x2e)
if_bond_has_item_equipped(0x1c, 0x2e)
if_bond_has_item_equipped(0x1d, 0x2e)
if_bond_has_item_equipped(0x18, 0x2e)
if_bond_has_item_equipped(0x19, 0x2e)
if_bond_has_item_equipped(0x04, 0x2e)
if_bond_has_item_equipped(0x05, 0x2e)
if_bond_has_item_equipped(0x06, 0x2e)
if_bond_has_item_equipped(0x07, 0x2e)
if_bond_has_item_equipped(0x08, 0x2e)
if_bond_has_item_equipped(0x09, 0x2e)
if_bond_has_item_equipped(0x0a, 0x2e)
if_bond_has_item_equipped(0x0b, 0x2e)
if_bond_has_item_equipped(0x0c, 0x2e)
if_bond_has_item_equipped(0x0d, 0x2e)
if_bond_has_item_equipped(0x0e, 0x2e)
if_bond_has_item_equipped(0x0f, 0x2e)
if_bond_has_item_equipped(0x10, 0x2e)
if_bond_has_item_equipped(0x11, 0x2e)
if_bond_has_item_equipped(0x12, 0x2e)
if_bond_has_item_equipped(0x13, 0x2e)
if_bond_has_item_equipped(0x16, 0x2e)
if_bond_has_item_equipped(0x14, 0x2e)
if_bond_has_item_equipped(0x15, 0x2e)
bond_equip_item_cinema(0x04)
label(0x2e)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x28, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x1604)
screen_fade_from_black
music_xtrack_play(0x00, 0x00, 0xff)
label(0x05)
ai_sleep
if_screen_fade_completed(0x2e)
goto_first(0x05)
label(0x2e)
jump_to_ai_list(0xfd, 0x0100)
label(0x43)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_22[] = {
local_timer_reset_start
guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10)
label(0x04)
ai_sleep
if_local_timer_greater_than(0x000000, 0x2e)
goto_first(0x04)
label(0x2e)
guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10)
label(0x02)
ai_sleep
goto_first(0x02)
ai_list_end
};
u8 ai_26[] = {
label(0x04)
ai_sleep
if_camera_is_in_bond_swirl(0x2e)
goto_first(0x04)
label(0x2e)
jump_to_ai_list(0xf8, 0x1704)
label(0x02)
ai_sleep
goto_first(0x02)
ai_list_end
};
u8 ai_27[] = {
label(0x40)
ai_sleep
chr_flags_set_on(0x49, 0x00001000)
chr_flags_set_on(0x4a, 0x00001000)
chr_flags_set_on(0x4b, 0x00001000)
chr_flags_set_on(0x54, 0x00001000)
chr_flags_set_on(0x55, 0x00001000)
ai_sleep
label(0x1d)
ai_sleep
if_killed_civilians_greater_than(0x02, 0x2e)
goto_first(0x1d)
label(0x2e)
text_print_top(0x0d1c)
objective_bitfield_set_on(0x00000001)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_28[] = {
label(0x00)
ai_sleep
if_camera_is_in_bond_swirl(0x05)
goto_first(0x00)
label(0x04)
ai_sleep
if_bond_in_room_with_pad(0x7001, 0x1e)
goto_next(0x2e)
label(0x1e)
goto_first(0x04)
label(0x2e)
music_xtrack_stop(0x01)
label(0x05)
ai_sleep
if_bond_in_room_with_pad(0x7001, 0x2e)
goto_first(0x05)
label(0x2e)
music_xtrack_play(0x01, 0x00, 0xff)
goto_first(0x04)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
+902 -26
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1014,32 +1015,907 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x90012c8f, 0x00289164, 0x93649264, 0x9d000002, 0x00020903, 0x3c2b0109, 0x022b05fd, 0x04030400 };
u32 ai_1[] = { 0x9d000008, 0x009d0000, 0x02009d00, 0x0000109c, 0x00000800, 0x419c0000, 0x04004002, 0x3f9000c8, 0x8f00c891, 0x32933292, 0x328e1402, 0x2bbf00cd, 0x06800020, 0x002b022b, 0xbf00cd06, 0x90002000, 0x07024090, 0x03e88f01, 0xf4915093, 0x5092508e, 0x159a0000, 0x1000022b, 0xbf00cd09, 0x80002000, 0x2b022bbf, 0x00cd0990, 0x00200007, 0x0241900b, 0xb88f01f4, 0x91649364, 0x92648e16, 0x9a000020, 0x00022bbf, 0x00cd1680, 0x0020002b, 0x022bbf00, 0xcd169000, 0x20000702, 0x07170001, 0x00002b02, 0x2bae0205, 0x03b40001, 0x2c2b0105, 0x022b9e00, 0x00001002, 0x0903452b, 0x3c2b0109, 0x022bc400, 0x36ff05fd, 0x04030400 };
u32 ai_24[] = { 0x02090331, 0x142b0109, 0x022b9a00, 0x000400bd, 0x0cff00ba, 0x04020000, 0x00102b02, 0x2ba40600, 0x0200005f, 0x06020503, 0x9c000010, 0x002b0105, 0x022bc400, 0x36ff020a, 0x0331152b, 0x010a022b, 0x9a000008, 0x00bd0cff, 0x00920402, 0x00000010, 0x2b022ba4, 0x07000200, 0x005f0702, 0x0603ad42, 0x3f009c00, 0x0020002b, 0x0106022b, 0xad423300, 0xfbae020c, 0x03b40000, 0x782b010c, 0x022bc400, 0x36ff020d, 0x0331162b, 0x010d022b, 0x9a000040, 0x00020e03, 0x010e0400 };
u32 ai_2[] = { 0xad58202d, 0x206d6100, 0x02030306, 0x04033335, 0x80354551, 0x02353c3c, 0x023005fd, 0x04050251, 0x05fd0406, 0x023c05fd, 0x04040400 };
u32 ai_3[] = { 0xad58202d, 0x20617400, 0x02033335, 0x802b4551, 0x7f3f3c33, 0x022b3528, 0x2b130702, 0x2b35502b, 0x1107022b, 0x35782b02, 0x3c120702, 0x2b35a02b, 0x14000100, 0x0007022b, 0x35c82b15, 0x00010000, 0x07022b35, 0xe12b1500, 0x2100002b, 0x022b1400, 0x2100002b, 0x022b0303, 0x03160001, 0x00000702, 0x07032f2b, 0x0107022b, 0x05fd0403, 0x02510604, 0x0405fd04, 0x06040000 };
u32 ai_5[] = { 0xad58202d, 0x20657600, 0x02030333, 0x022b3335, 0x3c2b0f07, 0x022b3335, 0x782b0e07, 0x022b3335, 0xb42b1007, 0x022b0a00, 0x0b001400, 0x3c001000, 0x07020703, 0x2f2b0107, 0x022b0704 };
u32 ai_4[] = { 0xad58202d, 0x20676f00, 0x0203282b, 0x022b0209, 0x032f073c, 0x07455101, 0x09025106, 0x040505fd, 0x04060207, 0x06040305, 0xfd040304, 0x02070301, 0x07040000 };
u32 ai_17[] = { 0x02036703, 0x67006601, 0xa3040040, 0x0000a304, 0x00100000, 0xa3050040, 0x0000a305, 0x00100000, 0x02050355, 0x00972b01, 0x05022b67, 0x02670102, 0x09035200, 0x0900972b, 0x52000900, 0x982b5200, 0x0900992b, 0x52000900, 0x9a2b5200, 0x09009b2b, 0x03520009, 0x009c2b52, 0x0009009d, 0x2b520009, 0x009e2b52, 0x0009009f, 0x2b520009, 0x00a02b03, 0x52000900, 0xa12b5200, 0x0900a22b, 0x52000900, 0xa32b5200, 0x0900a42b, 0x52000900, 0xa52b5200, 0x0900a72b, 0x52000900, 0xa82b0352, 0x000900a9, 0x2b520009, 0x00aa2b52, 0x000900ab, 0x2b520009, 0x00ac2b52, 0x000900ad, 0x2b520009, 0x00ae2b52, 0x000a00a6, 0x2c010902, 0x2b660000, 0x0a022c66, 0x01020b03, 0x68010e2b, 0x010b022b, 0xa4040010, 0x0000a405, 0x00100000, 0x020a0355, 0x00452b01, 0x0a022b01, 0x03040000 };
u32 ai_23[] = { 0x9a000001, 0x00020503, 0x55009152, 0x039a0000, 0x01009b00, 0x00020003, 0x5500013f, 0x55007240, 0x55001541, 0x55006842, 0x55003043, 0x03550064, 0x44550056, 0x45550058, 0x4655005f, 0x47550050, 0x4855005e, 0x49550043, 0x4a010502, 0x3f03ac00, 0x0015ac01, 0x001aac02, 0x005aac03, 0x008cac04, 0x00890105, 0x024003ac, 0x00006cac, 0x010070ac, 0x020050ac, 0x03004fac, 0x04006701, 0x05024103, 0xac00008d, 0xac010030, 0xac02002f, 0xac030058, 0xac04008b, 0x01050242, 0x03ac0000, 0x65ac0100, 0x66ac0200, 0x72ac0300, 0x79ac0400, 0x61010502, 0x4303ac00, 0x008dac01, 0x000bac02, 0x0015ac03, 0x0055ac04, 0x00400105, 0x024403ac, 0x000071ac, 0x010070ac, 0x02005fac, 0x03005eac, 0x04007201, 0x05024503, 0xac00008d, 0xac010050, 0xac020047, 0xac030027, 0xac040030, 0x01050246, 0x03ac0000, 0x15ac0100, 0x1aac0200, 0x8cac0300, 0x8bac0400, 0x50010502, 0x4703ac00, 0x0061ac01, 0x0063ac02, 0x002fac03, 0x003bac04, 0x00910105, 0x024803ac, 0x000072ac, 0x010089ac, 0x02008aac, 0x03002aac, 0x04004201, 0x05024903, 0xac00000e, 0xac010040, 0xac020043, 0xac03008b, 0xac04008a, 0x0105024a, 0x03ac0000, 0x27ac0100, 0x3bac0200, 0x47ac0300, 0x48ac0400, 0x55010502, 0x529a0000, 0x02009b00, 0x00010001, 0x05040000 };
u32 ai_18[] = { 0x8e00ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b40009, 0x602b0109, 0x022b3105, 0x2b010302, 0x2bad7370, 0x61776e31, 0x00f335bd, 0x03ff2328, 0x04070000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7331, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 };
u32 ai_19[] = { 0x8e01ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b40009, 0x602b0109, 0x022b3106, 0x2b010302, 0x2bad7370, 0x61776e32, 0x00f335bd, 0x03ff2328, 0x04080000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7332, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 };
u32 ai_20[] = { 0x8e02ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000b, 0xb82b0109, 0x022b3107, 0x2b010302, 0x2bad7370, 0x61776e33, 0x00f335bd, 0x03ff2328, 0x04090000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7333, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 };
u32 ai_21[] = { 0x8e03ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000b, 0xb82b0109, 0x022b3108, 0x2b010302, 0x2bad7370, 0x61776e34, 0x00f335bd, 0x03ff2328, 0x040a0000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7334, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 };
u32 ai_22[] = { 0x8e04ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000e, 0x102b0109, 0x022b3109, 0x2b010302, 0x2bad7370, 0x61776e35, 0x00f335bd, 0x03ff2328, 0x040b0000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7335, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 };
u32 ai_6[] = { 0x8e05ad64, 0x310a0005, 0xfd040c04 };
u32 ai_7[] = { 0x8e06ad64, 0x320a0005, 0xfd040c04 };
u32 ai_8[] = { 0x8e07ad64, 0x330a0005, 0xfd040c04 };
u32 ai_9[] = { 0x8e08ad64, 0x340a0005, 0xfd040c04 };
u32 ai_10[] = { 0x8e09ad64, 0x350a0005, 0xfd040c04 };
u32 ai_11[] = { 0x73038442, 0x73025841, 0x73012c40, 0x7300783f, 0x023f9114, 0x9314002b, 0x02409128, 0x9328002b, 0x0241913c, 0x933c002b, 0x02429150, 0x9350002b, 0x022b3335, 0xa0383550, 0x358f0028, 0x9000008d, 0xe5bf00c3, 0x09000000, 0x002b022b, 0x00070235, 0x8f002890, 0x000a8dcc, 0xbf00c309, 0x00000000, 0x2b022b02, 0x2b000702, 0x388f0028, 0x90001402, 0x2bbf00c3, 0x09800000, 0x002b022b, 0xbf00c309, 0x90000000, 0x07020705, 0xfd040d04 };
u32 ai_12[] = { 0x02399c00, 0x00020008, 0x4c019035, 0x28090235, 0x2a090209, 0x034c00c8, 0x353c3a02, 0x352f3b01, 0x09023a3c, 0x2b000702, 0x3b030139, 0x022b023c, 0x33350a2b, 0x1a07022b, 0x35322b0e, 0x07022b35, 0x3c2b1307, 0x022b3550, 0x2b130702, 0x2b35642b, 0x1107022b, 0x35962b12, 0x07022b35, 0xc82b1400, 0x01000007, 0x022b35fa, 0x08150001, 0x00000702, 0x07032f2b, 0x0107022b, 0x3c2b0009, 0x02090301, 0x39022b03, 0x013c0208, 0x05fd040e, 0x04000000 };
u32 ai_13[] = { 0xad202d3e, 0x434f5645, 0x520a0028, 0x09020903, 0x46084b00, 0xc8070109, 0x020705fd, 0x040f0208, 0x05fd040d, 0x04000000 };
u32 ai_14[] = { 0xad202d3e, 0x54524545, 0x440a0002, 0x03150021, 0x00002b46, 0x07022b02, 0x09034c01, 0x2c074607, 0x3c2b0109, 0x022b1600, 0x0100002b, 0x022b020a, 0x0346072f, 0x2b010a02, 0x2b010302, 0x0705fd04, 0x0d040000 };
u32 ai_25[] = { 0x020303f1, 0x2b010302, 0x2beb53ec, 0xd700da02, 0x0903dc2b, 0x0109022b, 0xddeae413, 0xed030303, 0xd50b0001, 0x0000a1f8, 0x00000400, 0xd9f800bb, 0x2b022b05, 0xf8041023, 0x05230623, 0x07230823, 0x09230a23, 0x0b230c23, 0x0d230e23, 0x0f231023, 0x11231203, 0xdb020a03, 0x52000a00, 0x582b010a, 0x022bbd0c, 0xff00bb04, 0x11000000, 0x102bad53, 0x210a0002, 0x2b05fd00, 0x01025305, 0xfd000104 };
u32 ai_15[] = { 0x1e00be02, 0x09030109, 0x02070301, 0x07040000 };
u32 ai_16[] = { 0xad532d3e, 0x500a001c, 0x00580209, 0x032f2b01, 0x09022b17, 0x00010000, 0x2b022b03, 0xda020a03, 0xdc2b010a, 0x022bd50c, 0x00020000, 0xdb03c400, 0x36ffae02, 0x030a00a3, 0x00aa0128, 0x0010b400, 0x02583502, 0x0b032f2b, 0x010b022b, 0xc40036ff, 0x01030235, 0xda020c03, 0xdc2b010c, 0x022bd205, 0xfd000104 };
u8 ai_0[] = {
guard_set_armour(0x2c01)
guard_set_health_total(0x2800)
guard_set_speed_rating(0x64)
guard_set_accuracy_rating(0x64)
guard_set_argh_rating(0x64)
guard_flags_set_on(0x00020000)
label(0x09)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x2b)
goto_first(0x09)
label(0x2b)
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_1[] = {
guard_flags_set_on(0x00080000)
guard_flags_set_on(0x00020000)
guard_flags_set_on(0x10000000)
if_objective_bitfield_is_set_on(0x00080000, 0x41)
if_objective_bitfield_is_set_on(0x00040000, 0x40)
label(0x3f)
guard_set_armour(0xc800)
guard_set_health_total(0xc800)
guard_set_speed_rating(0x32)
guard_set_accuracy_rating(0x32)
guard_set_argh_rating(0x32)
guard_set_chr_num(0x14)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x06, 0x00200080, 0x2b)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x06, 0x00200090, 0x07)
label(0x40)
guard_set_armour(0xe803)
guard_set_health_total(0xf401)
guard_set_speed_rating(0x50)
guard_set_accuracy_rating(0x50)
guard_set_argh_rating(0x50)
guard_set_chr_num(0x15)
objective_bitfield_set_on(0x00100000)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x09, 0x00200080, 0x2b)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x09, 0x00200090, 0x07)
label(0x41)
guard_set_armour(0xb80b)
guard_set_health_total(0xf401)
guard_set_speed_rating(0x64)
guard_set_accuracy_rating(0x64)
guard_set_argh_rating(0x64)
guard_set_chr_num(0x16)
objective_bitfield_set_on(0x00200000)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x16, 0x00200080, 0x2b)
label(0x2b)
guard_try_spawning_item(0xcd00, 0x16, 0x00200090, 0x07)
label(0x07)
guard_try_facing_target(0x0100, 0x0000, 0x2b)
label(0x2b)
local_timer_reset_start
label(0x05)
ai_sleep
if_local_timer_greater_than(0x2c0100, 0x2b)
goto_first(0x05)
label(0x2b)
guard_flags_set_off(0x10000000)
label(0x09)
ai_sleep
if_guard_is_targeted_by_bond(0x2b)
if_guard_and_bond_within_line_of_sight(0x2b)
goto_first(0x09)
label(0x2b)
sfx_play(0x3600, 0xff)
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_24[] = {
label(0x09)
ai_sleep
if_chr_does_not_exist(0x14, 0x2b)
goto_first(0x09)
label(0x2b)
objective_bitfield_set_on(0x00040000)
chr_try_spawning_at_pad(0x0c, 0xff, 0xba00, 0x0204, 0x10000000, 0x2b)
label(0x2b)
object_flags_1_set_off(0x06, 0x00000200)
object_destroy(0x06)
label(0x05)
ai_sleep
if_objective_bitfield_is_set_on(0x00100000, 0x2b)
goto_first(0x05)
label(0x2b)
sfx_play(0x3600, 0xff)
label(0x0a)
ai_sleep
if_chr_does_not_exist(0x15, 0x2b)
goto_first(0x0a)
label(0x2b)
objective_bitfield_set_on(0x00080000)
chr_try_spawning_at_pad(0x0c, 0xff, 0x9200, 0x0204, 0x10000000, 0x2b)
label(0x2b)
object_flags_1_set_off(0x07, 0x00000200)
object_destroy(0x07)
label(0x06)
ai_sleep
debug_log 'B', '?', '\0',
if_objective_bitfield_is_set_on(0x00200000, 0x2b)
goto_first(0x06)
label(0x2b)
debug_log 'B', '3', '\0',
gas_leak_and_fade_fog
local_timer_reset_start
label(0x0c)
ai_sleep
if_local_timer_greater_than(0x780000, 0x2b)
goto_first(0x0c)
label(0x2b)
sfx_play(0x3600, 0xff)
label(0x0d)
ai_sleep
if_chr_does_not_exist(0x16, 0x2b)
goto_first(0x0d)
label(0x2b)
objective_bitfield_set_on(0x00400000)
label(0x0e)
ai_sleep
goto_first(0x0e)
ai_list_end
};
u8 ai_2[] = {
debug_log 'X', ' ', '-', ' ', 'm', 'a', '\0',
label(0x03)
ai_sleep
set_return_ai_list(0x0304)
random_generate_seed
if_random_seed_greater_than(0x80, 0x35)
if_guard_is_targeted_by_bond(0x51)
label(0x35)
if_guard_and_bond_within_line_of_sight(0x3c)
label(0x30)
jump_to_ai_list(0xfd, 0x0504)
label(0x51)
jump_to_ai_list(0xfd, 0x0604)
label(0x3c)
jump_to_ai_list(0xfd, 0x0404)
ai_list_end
};
u8 ai_3[] = {
debug_log 'X', ' ', '-', ' ', 'a', 't', '\0',
label(0x03)
random_generate_seed
if_random_seed_greater_than(0x80, 0x2b)
if_guard_is_targeted_by_bond(0x51)
if_bond_health_less_than(0x3f, 0x3c)
random_generate_seed
label(0x2b)
if_random_seed_greater_than(0x28, 0x2b)
guard_try_firing_roll(0x07)
label(0x2b)
if_random_seed_greater_than(0x50, 0x2b)
guard_try_firing_walk(0x07)
label(0x2b)
if_random_seed_greater_than(0x78, 0x2b)
label(0x3c)
guard_try_firing_run(0x07)
label(0x2b)
if_random_seed_greater_than(0xa0, 0x2b)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07)
label(0x2b)
if_random_seed_greater_than(0xc8, 0x2b)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07)
label(0x2b)
if_random_seed_greater_than(0xe1, 0x2b)
guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2b)
label(0x2b)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2b)
label(0x2b)
ai_sleep
ai_sleep
ai_sleep
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x07)
label(0x07)
ai_sleep
if_guard_has_stopped_moving(0x2b)
goto_first(0x07)
label(0x2b)
jump_to_ai_list(0xfd, 0x0304)
label(0x51)
set_return_ai_list(0x0404)
jump_to_ai_list(0xfd, 0x0604)
ai_list_end
};
u8 ai_5[] = {
debug_log 'X', ' ', '-', ' ', 'e', 'v', '\0',
label(0x03)
ai_sleep
random_generate_seed
label(0x2b)
random_generate_seed
if_random_seed_greater_than(0x3c, 0x2b)
guard_try_hopping_sideways(0x07)
label(0x2b)
random_generate_seed
if_random_seed_greater_than(0x78, 0x2b)
guard_try_sidestepping(0x07)
label(0x2b)
random_generate_seed
if_random_seed_greater_than(0xb4, 0x2b)
guard_try_running_to_side(0x07)
label(0x2b)
guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x00, 0x10)
goto_next(0x07)
label(0x07)
ai_sleep
if_guard_has_stopped_moving(0x2b)
goto_first(0x07)
label(0x2b)
jump_to_return_ai_list
ai_list_end
};
u8 ai_4[] = {
debug_log 'X', ' ', '-', ' ', 'g', 'o', '\0',
label(0x03)
guard_try_running_to_bond_position(0x2b)
label(0x2b)
label(0x09)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_is_targeted_by_bond(0x51)
goto_first(0x09)
label(0x51)
set_return_ai_list(0x0504)
jump_to_ai_list(0xfd, 0x0604)
label(0x07)
set_return_ai_list(0x0304)
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
label(0x07)
ai_sleep
goto_first(0x07)
ai_list_end
};
u8 ai_17[] = {
label(0x03)
door_close(0x03)
door_close(0x00)
door_open(0x01)
object_flags_1_set_on(0x04, 0x00004000)
object_flags_1_set_on(0x04, 0x00001000)
object_flags_1_set_on(0x05, 0x00004000)
object_flags_1_set_on(0x05, 0x00001000)
label(0x05)
ai_sleep
if_bond_in_room_with_pad(0x9700, 0x2b)
goto_first(0x05)
label(0x2b)
door_close(0x02)
door_close(0x01)
label(0x09)
ai_sleep
if_bond_distance_to_pad_less_than(0x0900, 0x9700, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9800, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9900, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9a00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9b00, 0x2b)
ai_sleep
if_bond_distance_to_pad_less_than(0x0900, 0x9c00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9d00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9e00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0x9f00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa000, 0x2b)
ai_sleep
if_bond_distance_to_pad_less_than(0x0900, 0xa100, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa200, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa300, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa400, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa500, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa700, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xa800, 0x2b)
ai_sleep
if_bond_distance_to_pad_less_than(0x0900, 0xa900, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xaa00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xab00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xac00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xad00, 0x2b)
if_bond_distance_to_pad_less_than(0x0900, 0xae00, 0x2b)
if_bond_distance_to_pad_less_than(0x0a00, 0xa600, 0x2c)
goto_first(0x09)
label(0x2b)
door_open(0x00)
goto_next(0x0a)
label(0x2c)
door_open(0x01)
label(0x0b)
ai_sleep
if_door_state_equal(0x01, 0x0e, 0x2b)
goto_first(0x0b)
label(0x2b)
object_flags_1_set_off(0x04, 0x00001000)
object_flags_1_set_off(0x05, 0x00001000)
label(0x0a)
ai_sleep
if_bond_in_room_with_pad(0x4500, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_23[] = {
objective_bitfield_set_on(0x00010000)
label(0x05)
ai_sleep
if_bond_in_room_with_pad(0x9100, 0x52)
ai_sleep
objective_bitfield_set_on(0x00010000)
objective_bitfield_set_off(0x00020000)
ai_sleep
if_bond_in_room_with_pad(0x0100, 0x3f)
if_bond_in_room_with_pad(0x7200, 0x40)
if_bond_in_room_with_pad(0x1500, 0x41)
if_bond_in_room_with_pad(0x6800, 0x42)
if_bond_in_room_with_pad(0x3000, 0x43)
ai_sleep
if_bond_in_room_with_pad(0x6400, 0x44)
if_bond_in_room_with_pad(0x5600, 0x45)
if_bond_in_room_with_pad(0x5800, 0x46)
if_bond_in_room_with_pad(0x5f00, 0x47)
if_bond_in_room_with_pad(0x5000, 0x48)
if_bond_in_room_with_pad(0x5e00, 0x49)
if_bond_in_room_with_pad(0x4300, 0x4a)
goto_first(0x05)
label(0x3f)
ai_sleep
chr_set_pad_preset(0x00, 0x1500)
chr_set_pad_preset(0x01, 0x1a00)
chr_set_pad_preset(0x02, 0x5a00)
chr_set_pad_preset(0x03, 0x8c00)
chr_set_pad_preset(0x04, 0x8900)
goto_first(0x05)
label(0x40)
ai_sleep
chr_set_pad_preset(0x00, 0x6c00)
chr_set_pad_preset(0x01, 0x7000)
chr_set_pad_preset(0x02, 0x5000)
chr_set_pad_preset(0x03, 0x4f00)
chr_set_pad_preset(0x04, 0x6700)
goto_first(0x05)
label(0x41)
ai_sleep
chr_set_pad_preset(0x00, 0x8d00)
chr_set_pad_preset(0x01, 0x3000)
chr_set_pad_preset(0x02, 0x2f00)
chr_set_pad_preset(0x03, 0x5800)
chr_set_pad_preset(0x04, 0x8b00)
goto_first(0x05)
label(0x42)
ai_sleep
chr_set_pad_preset(0x00, 0x6500)
chr_set_pad_preset(0x01, 0x6600)
chr_set_pad_preset(0x02, 0x7200)
chr_set_pad_preset(0x03, 0x7900)
chr_set_pad_preset(0x04, 0x6100)
goto_first(0x05)
label(0x43)
ai_sleep
chr_set_pad_preset(0x00, 0x8d00)
chr_set_pad_preset(0x01, 0x0b00)
chr_set_pad_preset(0x02, 0x1500)
chr_set_pad_preset(0x03, 0x5500)
chr_set_pad_preset(0x04, 0x4000)
goto_first(0x05)
label(0x44)
ai_sleep
chr_set_pad_preset(0x00, 0x7100)
chr_set_pad_preset(0x01, 0x7000)
chr_set_pad_preset(0x02, 0x5f00)
chr_set_pad_preset(0x03, 0x5e00)
chr_set_pad_preset(0x04, 0x7200)
goto_first(0x05)
label(0x45)
ai_sleep
chr_set_pad_preset(0x00, 0x8d00)
chr_set_pad_preset(0x01, 0x5000)
chr_set_pad_preset(0x02, 0x4700)
chr_set_pad_preset(0x03, 0x2700)
chr_set_pad_preset(0x04, 0x3000)
goto_first(0x05)
label(0x46)
ai_sleep
chr_set_pad_preset(0x00, 0x1500)
chr_set_pad_preset(0x01, 0x1a00)
chr_set_pad_preset(0x02, 0x8c00)
chr_set_pad_preset(0x03, 0x8b00)
chr_set_pad_preset(0x04, 0x5000)
goto_first(0x05)
label(0x47)
ai_sleep
chr_set_pad_preset(0x00, 0x6100)
chr_set_pad_preset(0x01, 0x6300)
chr_set_pad_preset(0x02, 0x2f00)
chr_set_pad_preset(0x03, 0x3b00)
chr_set_pad_preset(0x04, 0x9100)
goto_first(0x05)
label(0x48)
ai_sleep
chr_set_pad_preset(0x00, 0x7200)
chr_set_pad_preset(0x01, 0x8900)
chr_set_pad_preset(0x02, 0x8a00)
chr_set_pad_preset(0x03, 0x2a00)
chr_set_pad_preset(0x04, 0x4200)
goto_first(0x05)
label(0x49)
ai_sleep
chr_set_pad_preset(0x00, 0x0e00)
chr_set_pad_preset(0x01, 0x4000)
chr_set_pad_preset(0x02, 0x4300)
chr_set_pad_preset(0x03, 0x8b00)
chr_set_pad_preset(0x04, 0x8a00)
goto_first(0x05)
label(0x4a)
ai_sleep
chr_set_pad_preset(0x00, 0x2700)
chr_set_pad_preset(0x01, 0x3b00)
chr_set_pad_preset(0x02, 0x4700)
chr_set_pad_preset(0x03, 0x4800)
chr_set_pad_preset(0x04, 0x5500)
goto_first(0x05)
label(0x52)
objective_bitfield_set_on(0x00020000)
objective_bitfield_set_off(0x00010000)
goto_first(0x05)
ai_list_end
};
u8 ai_18[] = {
guard_set_chr_num(0x00)
local_timer_reset_start
label(0x4b)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4b)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x0a)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0x600900, 0x2b)
goto_first(0x09)
label(0x2b)
if_chr_does_not_exist(0x05, 0x2b)
goto_first(0x03)
label(0x2b)
debug_log 's', 'p', 'a', 'w', 'n', '1', '\0',
if_bond_damage_and_pickups_disabled(0x35)
chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0704, 0x00000000, 0x07)
label(0x35)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x07)
debug_log 's', '1', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x0a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_19[] = {
guard_set_chr_num(0x01)
local_timer_reset_start
label(0x4b)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4b)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x0a)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0x600900, 0x2b)
goto_first(0x09)
label(0x2b)
if_chr_does_not_exist(0x06, 0x2b)
goto_first(0x03)
label(0x2b)
debug_log 's', 'p', 'a', 'w', 'n', '2', '\0',
if_bond_damage_and_pickups_disabled(0x35)
chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0804, 0x00000000, 0x07)
label(0x35)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x07)
debug_log 's', '2', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x0a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_20[] = {
guard_set_chr_num(0x02)
local_timer_reset_start
label(0x4b)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4b)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x0a)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0xb80b00, 0x2b)
goto_first(0x09)
label(0x2b)
if_chr_does_not_exist(0x07, 0x2b)
goto_first(0x03)
label(0x2b)
debug_log 's', 'p', 'a', 'w', 'n', '3', '\0',
if_bond_damage_and_pickups_disabled(0x35)
chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0904, 0x00000000, 0x07)
label(0x35)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x07)
debug_log 's', '3', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x0a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_21[] = {
guard_set_chr_num(0x03)
local_timer_reset_start
label(0x4b)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4b)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x0a)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0xb80b00, 0x2b)
goto_first(0x09)
label(0x2b)
if_chr_does_not_exist(0x08, 0x2b)
goto_first(0x03)
label(0x2b)
debug_log 's', 'p', 'a', 'w', 'n', '4', '\0',
if_bond_damage_and_pickups_disabled(0x35)
chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0a04, 0x00000000, 0x07)
label(0x35)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x07)
debug_log 's', '4', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x0a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_22[] = {
guard_set_chr_num(0x04)
local_timer_reset_start
label(0x4b)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4b)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x0a)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0x100e00, 0x2b)
goto_first(0x09)
label(0x2b)
if_chr_does_not_exist(0x09, 0x2b)
goto_first(0x03)
label(0x2b)
debug_log 's', 'p', 'a', 'w', 'n', '5', '\0',
if_bond_damage_and_pickups_disabled(0x35)
chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0b04, 0x00000000, 0x07)
label(0x35)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x07)
debug_log 's', '5', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x0a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
ai_list_end
};
u8 ai_6[] = {
guard_set_chr_num(0x05)
debug_log 'd', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_7[] = {
guard_set_chr_num(0x06)
debug_log 'd', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_8[] = {
guard_set_chr_num(0x07)
debug_log 'd', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_9[] = {
guard_set_chr_num(0x08)
debug_log 'd', '4', '\n', '\0',
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_10[] = {
guard_set_chr_num(0x09)
debug_log 'd', '5', '\n', '\0',
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_11[] = {
if_mission_time_greater_than(0x8403, 0x42)
if_mission_time_greater_than(0x5802, 0x41)
if_mission_time_greater_than(0x2c01, 0x40)
if_mission_time_greater_than(0x7800, 0x3f)
label(0x3f)
guard_set_speed_rating(0x14)
guard_set_accuracy_rating(0x14)
goto_next(0x2b)
label(0x40)
guard_set_speed_rating(0x28)
guard_set_accuracy_rating(0x28)
goto_next(0x2b)
label(0x41)
guard_set_speed_rating(0x3c)
guard_set_accuracy_rating(0x3c)
goto_next(0x2b)
label(0x42)
guard_set_speed_rating(0x50)
guard_set_accuracy_rating(0x50)
goto_next(0x2b)
label(0x2b)
random_generate_seed
if_random_seed_greater_than(0xa0, 0x38)
if_random_seed_greater_than(0x50, 0x35)
guard_set_health_total(0x2800)
guard_set_armour(0x0000)
guard_set_grenade_probability(0xe5)
guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x2b)
label(0x2b)
goto_next(0x07)
label(0x35)
guard_set_health_total(0x2800)
guard_set_armour(0x0a00)
guard_set_grenade_probability(0xcc)
guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x2b)
label(0x2b)
label(0x2b)
goto_next(0x07)
label(0x38)
guard_set_health_total(0x2800)
guard_set_armour(0x1400)
label(0x2b)
guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x2b)
label(0x2b)
guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x07)
label(0x07)
jump_to_ai_list(0xfd, 0x0d04)
ai_list_end
};
u8 ai_12[] = {
label(0x39)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
if_guard_distance_to_bond_greater_than(0x9001, 0x35)
guard_try_running_to_bond_position(0x09)
label(0x35)
guard_try_sprinting_to_bond_position(0x09)
label(0x09)
ai_sleep
if_guard_distance_to_bond_greater_than(0xc800, 0x35)
if_guard_and_bond_within_line_of_sight(0x3a)
label(0x35)
if_guard_has_stopped_moving(0x3b)
goto_first(0x09)
label(0x3a)
if_guard_and_bond_within_line_of_sight(0x2b)
goto_next(0x07)
label(0x3b)
ai_sleep
goto_first(0x39)
label(0x2b)
label(0x3c)
random_generate_seed
if_random_seed_greater_than(0x0a, 0x2b)
guard_try_throwing_grenade(0x07)
label(0x2b)
if_random_seed_greater_than(0x32, 0x2b)
guard_try_sidestepping(0x07)
label(0x2b)
if_random_seed_greater_than(0x3c, 0x2b)
guard_try_firing_roll(0x07)
label(0x2b)
if_random_seed_greater_than(0x50, 0x2b)
guard_try_firing_roll(0x07)
label(0x2b)
if_random_seed_greater_than(0x64, 0x2b)
guard_try_firing_walk(0x07)
label(0x2b)
if_random_seed_greater_than(0x96, 0x2b)
guard_try_firing_run(0x07)
label(0x2b)
if_random_seed_greater_than(0xc8, 0x2b)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07)
label(0x2b)
if_random_seed_greater_than(0xfa, 0x08)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07)
label(0x07)
ai_sleep
if_guard_has_stopped_moving(0x2b)
goto_first(0x07)
label(0x2b)
if_guard_and_bond_within_line_of_sight(0x2b)
goto_next(0x09)
label(0x09)
ai_sleep
goto_first(0x39)
label(0x2b)
ai_sleep
goto_first(0x3c)
label(0x08)
jump_to_ai_list(0xfd, 0x0e04)
ai_list_end
};
u8 ai_13[] = {
debug_log ' ', '-', '>', 'C', 'O', 'V', 'E', 'R', '\n', '\0',
guard_try_running_to_bond_position(0x09)
label(0x09)
ai_sleep
if_guard_shot_from_bond_missed(0x08)
if_guard_distance_to_bond_less_than(0xc800, 0x07)
goto_first(0x09)
label(0x07)
jump_to_ai_list(0xfd, 0x0f04)
label(0x08)
jump_to_ai_list(0xfd, 0x0d04)
ai_list_end
};
u8 ai_14[] = {
debug_log ' ', '-', '>', 'T', 'R', 'E', 'E', 'D', '\n', '\0',
label(0x03)
guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2b)
if_guard_shot_from_bond_missed(0x07)
label(0x2b)
label(0x09)
ai_sleep
if_guard_distance_to_bond_greater_than(0x2c01, 0x07)
if_guard_shot_from_bond_missed(0x07)
if_guard_and_bond_within_line_of_sight(0x2b)
goto_first(0x09)
label(0x2b)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2b)
label(0x2b)
label(0x0a)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_has_stopped_moving(0x2b)
goto_first(0x0a)
label(0x2b)
goto_first(0x03)
label(0x07)
jump_to_ai_list(0xfd, 0x0d04)
ai_list_end
};
u8 ai_25[] = {
label(0x03)
ai_sleep
if_objective_all_completed(0x2b)
goto_first(0x03)
label(0x2b)
if_bond_is_dead(0x53)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x09)
ai_sleep
if_screen_fade_completed(0x2b)
goto_first(0x09)
label(0x2b)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
bond_equip_item_cinema(0x13)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x0b, 0x0100, 0x0000)
chr_flags_set_off(0xf8, 0x00040000)
chr_try_teleporting_to_pad(0xf8, 0xbb00, 0x2b)
label(0x2b)
jump_to_ai_list(0xf8, 0x1004)
chr_remove_instant(0x05)
chr_remove_instant(0x06)
chr_remove_instant(0x07)
chr_remove_instant(0x08)
chr_remove_instant(0x09)
chr_remove_instant(0x0a)
chr_remove_instant(0x0b)
chr_remove_instant(0x0c)
chr_remove_instant(0x0d)
chr_remove_instant(0x0e)
chr_remove_instant(0x0f)
chr_remove_instant(0x10)
chr_remove_instant(0x11)
chr_remove_instant(0x12)
ai_sleep
screen_fade_from_black
label(0x0a)
ai_sleep
if_bond_distance_to_pad_less_than(0x0a00, 0x5800, 0x2b)
goto_first(0x0a)
label(0x2b)
chr_try_spawning_at_pad(0x0c, 0xff, 0xbb00, 0x1104, 0x10000000, 0x2b)
debug_log 'S', '!', '\n', '\0',
label(0x2b)
jump_to_ai_list(0xfd, 0x0100)
label(0x53)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_15[] = {
guard_walks_to_pad(0xbe00)
label(0x09)
ai_sleep
goto_first(0x09)
label(0x07)
ai_sleep
goto_first(0x07)
ai_list_end
};
u8 ai_16[] = {
debug_log 'S', '-', '>', 'P', '\n', '\0',
guard_runs_to_pad(0x5800)
label(0x09)
ai_sleep
if_guard_has_stopped_moving(0x2b)
goto_first(0x09)
label(0x2b)
guard_try_facing_target(0x0100, 0x0000, 0x2b)
label(0x2b)
ai_sleep
screen_fade_to_black
label(0x0a)
ai_sleep
if_screen_fade_completed(0x2b)
goto_first(0x0a)
label(0x2b)
camera_switch(0x0c, 0x0200, 0x0000)
screen_fade_from_black
ai_sleep
sfx_play(0x3600, 0xff)
local_timer_reset_start
label(0x03)
guard_play_animation(0xa300, 0xaa00, 0x2801, 0x00, 0x10)
if_local_timer_greater_than(0x580200, 0x35)
label(0x0b)
ai_sleep
if_guard_has_stopped_moving(0x2b)
goto_first(0x0b)
label(0x2b)
sfx_play(0x3600, 0xff)
goto_first(0x03)
label(0x35)
screen_fade_to_black
label(0x0c)
ai_sleep
if_screen_fade_completed(0x2b)
goto_first(0x0c)
label(0x2b)
exit_level
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+671 -28
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1989,34 +1990,676 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x200305fd, 0x00070400 };
u32 ai_4[] = { 0x200405fd, 0x00070400 };
u32 ai_5[] = { 0x200505fd, 0x00070400 };
u32 ai_6[] = { 0x200605fd, 0x00070400 };
u32 ai_9[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0xcb07cc02, 0x00007802, 0x00030100, 0x04000000 };
u32 ai_11[] = { 0x8f002890, 0x00140200, 0x0346073a, 0x073b0732, 0x073c0701, 0x00020733, 0x35e60b35, 0x6e071400, 0x0100000a, 0x02071500, 0x0100000a, 0x020a032f, 0x04010a02, 0x04010002, 0x0b060002, 0x05fd0008, 0x04000000 };
u32 ai_12[] = { 0x8f002890, 0x0014a0fd, 0x00000020, 0x02000346, 0x073a073b, 0x0732073c, 0x07010002, 0x073335c8, 0x07140001, 0x00000a02, 0x071a0a02, 0x0a032f04, 0x010a0204, 0x01000400 };
u32 ai_7[] = { 0x86000000, 0x0203ae02, 0x00033c09, 0x46093a09, 0x96800701, 0x000207b3, 0x00012c08, 0x87058a08, 0x00100208, 0x01000209, 0x33020735, 0x32070e04, 0x02073564, 0x07110402, 0x07359607, 0x12040207, 0x35c80714, 0x00010000, 0x04020715, 0x00010000, 0x04020402, 0x07020b03, 0x3c29000a, 0x02292f07, 0x010b0207, 0x0109020a, 0x03020c4d, 0xfd00c823, 0x2800020d, 0x87058a07, 0x00100207, 0x94800200, 0x3335c807, 0x020eae28, 0x0f020f03, 0x2f07b400, 0x00780701, 0x0f020786, 0x00010002, 0x10ad676f, 0x696e670a, 0x0095801d, 0x0211032f, 0x07011102, 0x07ad686f, 0x6d650a00, 0x010e0400 };
u32 ai_8[] = { 0xae020003, 0x3c2cb400, 0x00b42d01, 0x00022d03, 0x33359607, 0x52001e23, 0x282c0207, 0x0335dc07, 0x52003223, 0x282c0207, 0x0335f507, 0x52004b23, 0x282c0207, 0x0335fa07, 0x52006423, 0x282c0207, 0x035200c8, 0x23282cae, 0x0100022c, 0x0305fd00, 0x08040000 };
u32 ai_23[] = { 0x0200035c, 0x080a5c09, 0x0b010002, 0x0a680808, 0x29010002, 0x2968090e, 0x29010002, 0x29c22c10, 0x0100020b, 0x68090829, 0x01000229, 0x68080e29, 0x01000229, 0xc22c0f01, 0x00040000 };
u32 ai_26[] = { 0x002f0233, 0x03680804, 0x32013302, 0x36036808, 0x01306808, 0x08310136, 0x02340368, 0x08083101, 0x34023503, 0x6808022f, 0x68080432, 0x0135022f, 0xd00f0030, 0xd00f0132, 0xd0100030, 0xd0100132, 0x01330232, 0xd00f002e, 0xd00f0130, 0xd010002e, 0xd0100130, 0x01360230, 0xd00f0031, 0xd00f0130, 0xd0100031, 0xd0100130, 0x01340231, 0xd00f0030, 0xd00f012f, 0xd0100030, 0xd010012f, 0x01350400 };
u32 ai_27[] = { 0x00300233, 0x03680904, 0x32013302, 0x36036809, 0x01306809, 0x08310136, 0x02340368, 0x09083101, 0x34023503, 0x6809022f, 0x68090432, 0x0135022f, 0xd0110030, 0xd0110132, 0xd0120030, 0xd0120132, 0x01330232, 0xd011002e, 0xd0110130, 0xd012002e, 0xd0120130, 0x01360230, 0xd0110031, 0xd0110130, 0xd0120031, 0xd0120130, 0x01340231, 0xd0110030, 0xd011012f, 0xd0120030, 0xd012012f, 0x01350400 };
u32 ai_20[] = { 0x022a039c, 0x00000400, 0x045b0507, 0x000c0207, 0x5b040700, 0x0c02079c, 0x00000100, 0x079c0000, 0x20000758, 0x2f050a57, 0x2f0d0207, 0x012a020a, 0x9a000001, 0x00c32c08, 0xc400e300, 0xc5000500, 0x00012a02, 0x0d9a0000, 0x2000c32c, 0x21012a02, 0x07020bc3, 0x2c0e9a00, 0x00020000, 0x04020cc3, 0x2c0e9a00, 0x0008009a, 0x00000200, 0x00040204, 0x03010404 };
u32 ai_21[] = { 0x022a039c, 0x00000100, 0x2b5b0607, 0x5b070700, 0x0b02075c, 0x06075c07, 0x07012a02, 0x07c32c0d, 0x012a022b, 0x035b0607, 0x5b070700, 0x0b02075c, 0x06075c07, 0x07012b02, 0x079c0000, 0x020004ae, 0xb7000ab9, 0xb5c32c09, 0x020a035b, 0x06075b07, 0x07000c02, 0x07b40000, 0x3c08bb00, 0x0107010a, 0x0208c400, 0xbd01c501, 0x060000ae, 0x010a0207, 0xb6b8c32c, 0x0a9a0000, 0x04000004, 0x020cc32c, 0x0b9a0000, 0x0200b6b8, 0x0004020b, 0xc32c0c9a, 0x00000200, 0x00040204, 0x03010404 };
u32 ai_10[] = { 0xcd026c1c, 0x20020003, 0x01000400 };
u32 ai_13[] = { 0x022a0301, 0x2a040000 };
u32 ai_22[] = { 0x02000337, 0x07010002, 0x07f307bd, 0x25ff0074, 0x040f0000, 0x00000702, 0x0703f307, 0xbd25ff00, 0x74040f00, 0x00000007, 0x02070207, 0x020a0301, 0x0a040000 };
u32 ai_14[] = { 0x9000148f, 0x0028bf00, 0xb8080000, 0x00000702, 0x07020406, 0x000205fd, 0x00080400 };
u32 ai_15[] = { 0x9000148f, 0x00280200, 0x0339043a, 0x043c0437, 0x04010002, 0x04060002, 0x05fd0008, 0x04000000 };
u32 ai_16[] = { 0xae020a03, 0xb4000168, 0x07010a02, 0x070a0063, 0xffff0060, 0x04100204, 0x03010404 };
u32 ai_25[] = { 0x020a03cf, 0x07010a02, 0x0705f804, 0x11020403, 0x01040400 };
u32 ai_17[] = { 0xad776865, 0x650a00d9, 0xfd014b07, 0x02079d00, 0x002000db, 0xf400ffff, 0x0a00b1ff, 0xff000324, 0x10ae0210, 0x039d0000, 0x1000b400, 0x003c0701, 0x1002070a, 0x00b10003, 0x005a0410, 0xae020a03, 0xb4000064, 0x07010a02, 0x07da020b, 0x03dc0701, 0x0b0207d5, 0x0b000100, 0x009e0000, 0x1000d9fd, 0x014b0702, 0x07db0a00, 0xb10050ff, 0xff0410ae, 0x020c039d, 0x00001000, 0xb400012c, 0x07010c02, 0x07da020d, 0x03dc0701, 0x0d0207d5, 0x0c000100, 0x009e0000, 0x1000d9fd, 0x014b0702, 0x07db0a00, 0xb10050ff, 0xff0410ae, 0x020e039d, 0x00001000, 0xb40001c2, 0x07010e02, 0x07da020f, 0x03dc0701, 0x0f020702, 0x04d20301, 0x04040000 };
u32 ai_19[] = { 0x1e000402, 0x0a032f07, 0x010a0207, 0x05fd0408, 0x04000000 };
u32 ai_18[] = { 0xae020003, 0xb4000078, 0x07010002, 0x070a00ac, 0x00000045, 0x0010020a, 0x032f0701, 0x0a020767, 0x081e0005, 0x020b032f, 0x07010b02, 0x07170001, 0x00000702, 0x0705fd04, 0x0c040000 };
u32 ai_24[] = { 0x020303eb, 0x2e55014a, 0x07010302, 0x079a0000, 0x1000ecd7, 0x00e300e5, 0x0004ae02, 0x0a03d6bd, 0x9807b400, 0x015e0701, 0x0a0207da, 0x020b03dc, 0x07010b02, 0x07f10705, 0xfd000f02, 0x07ddeaed, 0x030303d5, 0x0a000100, 0x0005f804, 0x1205fd00, 0x01022e05, 0xfd000104 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_start_patrol(0x03)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_4[] = {
guard_start_patrol(0x04)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_5[] = {
guard_start_patrol(0x05)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_6[] = {
guard_start_patrol(0x06)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_9[] = {
debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0',
vehicle_start_path(0x07)
vehicle_speed(0x0002, 0x7800)
label(0x00)
ai_sleep
goto_first(0x00)
ai_list_end
};
u8 ai_11[] = {
guard_set_health_total(0x2800)
guard_set_armour(0x1400)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_see_another_guard_shot(0x07)
if_guard_see_another_guard_die(0x07)
if_guard_sees_bond(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
goto_first(0x00)
label(0x07)
random_generate_seed
if_random_seed_greater_than(0xe6, 0x0b)
if_random_seed_greater_than(0x6e, 0x07)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x0a)
label(0x07)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x0a)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x04)
goto_first(0x0a)
label(0x04)
goto_first(0x00)
label(0x0b)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_12[] = {
guard_set_health_total(0x2800)
guard_set_armour(0x1400)
chr_flags_set_on(0xfd, 0x20000000)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_see_another_guard_shot(0x07)
if_guard_see_another_guard_die(0x07)
if_guard_sees_bond(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
goto_first(0x00)
label(0x07)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x07)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x0a)
label(0x07)
guard_try_throwing_grenade(0x0a)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x04)
goto_first(0x0a)
label(0x04)
goto_first(0x00)
ai_list_end
};
u8 ai_7[] = {
local_byte_2_set(0x00)
goto_next(0x00)
label(0x03)
local_timer_reset_start
label(0x00)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x09)
if_guard_shot_from_bond_missed(0x09)
if_guard_see_another_guard_shot(0x09)
if_guard_bitfield_is_set_on(0x80, 0x07)
goto_first(0x00)
label(0x07)
if_local_timer_less_than(0x2c0100, 0x08)
local_byte_2_add(0x05)
if_local_byte_2_less_than_random_seed(0x08)
goto_next(0x10)
label(0x08)
goto_first(0x00)
label(0x09)
random_generate_seed
label(0x07)
if_random_seed_greater_than(0x32, 0x07)
guard_try_sidestepping(0x04)
label(0x07)
if_random_seed_greater_than(0x64, 0x07)
guard_try_firing_walk(0x04)
label(0x07)
if_random_seed_greater_than(0x96, 0x07)
guard_try_firing_run(0x04)
label(0x07)
if_random_seed_greater_than(0xc8, 0x07)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04)
label(0x07)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04)
label(0x04)
label(0x07)
label(0x0b)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x29)
goto_next(0x0a)
label(0x29)
if_guard_has_stopped_moving(0x07)
goto_first(0x0b)
label(0x07)
goto_first(0x09)
label(0x0a)
ai_sleep
label(0x0c)
if_chr_distance_to_pad_less_than(0xfd, 0xc800, 0x2823, 0x00)
label(0x0d)
local_byte_2_add(0x05)
if_local_byte_2_less_than_random_seed(0x07)
goto_next(0x10)
label(0x07)
guard_bitfield_set_on(0x80)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x07)
label(0x0e)
local_timer_reset_start
guard_try_running_to_bond_position(0x0f)
label(0x0f)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_local_timer_greater_than(0x780000, 0x07)
goto_first(0x0f)
label(0x07)
local_byte_2_set(0x00)
goto_first(0x00)
label(0x10)
debug_log 'g', 'o', 'i', 'n', 'g', '\n', '\0',
guard_bitfield_set_off(0x80)
guard_runs_to_pad_preset
label(0x11)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x11)
label(0x07)
debug_log 'h', 'o', 'm', 'e', '\n', '\0',
goto_first(0x0e)
ai_list_end
};
u8 ai_8[] = {
local_timer_reset_start
label(0x00)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x2c)
if_local_timer_greater_than(0xb40000, 0x2d)
goto_first(0x00)
label(0x2d)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0x96, 0x07)
if_bond_distance_to_pad_less_than(0x1e00, 0x2823, 0x2c)
label(0x07)
ai_sleep
if_random_seed_greater_than(0xdc, 0x07)
if_bond_distance_to_pad_less_than(0x3200, 0x2823, 0x2c)
label(0x07)
ai_sleep
if_random_seed_greater_than(0xf5, 0x07)
if_bond_distance_to_pad_less_than(0x4b00, 0x2823, 0x2c)
label(0x07)
ai_sleep
if_random_seed_greater_than(0xfa, 0x07)
if_bond_distance_to_pad_less_than(0x6400, 0x2823, 0x2c)
label(0x07)
ai_sleep
if_bond_distance_to_pad_less_than(0xc800, 0x2823, 0x2c)
local_timer_reset_start
goto_first(0x00)
label(0x2c)
ai_sleep
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_23[] = {
label(0x00)
ai_sleep
if_object_was_activated(0x08, 0x0a)
if_object_was_activated(0x09, 0x0b)
goto_first(0x00)
label(0x0a)
if_door_state_equal(0x08, 0x08, 0x29)
goto_first(0x00)
label(0x29)
if_door_state_equal(0x09, 0x0e, 0x29)
goto_first(0x00)
label(0x29)
text_print_bottom(0x102c)
goto_first(0x00)
label(0x0b)
if_door_state_equal(0x09, 0x08, 0x29)
goto_first(0x00)
label(0x29)
if_door_state_equal(0x08, 0x0e, 0x29)
goto_first(0x00)
label(0x29)
text_print_bottom(0x0f2c)
goto_first(0x00)
ai_list_end
};
u8 ai_26[] = {
goto_next(0x2f)
label(0x33)
ai_sleep
if_door_state_equal(0x08, 0x04, 0x32)
goto_first(0x33)
label(0x36)
ai_sleep
if_door_state_equal(0x08, 0x01, 0x30)
if_door_state_equal(0x08, 0x08, 0x31)
goto_first(0x36)
label(0x34)
ai_sleep
if_door_state_equal(0x08, 0x08, 0x31)
goto_first(0x34)
label(0x35)
ai_sleep
if_door_state_equal(0x08, 0x02, 0x2f)
if_door_state_equal(0x08, 0x04, 0x32)
goto_first(0x35)
label(0x2f)
tv_change_screen_bank(0x0f, 0x00, 0x30)
tv_change_screen_bank(0x0f, 0x01, 0x32)
tv_change_screen_bank(0x10, 0x00, 0x30)
tv_change_screen_bank(0x10, 0x01, 0x32)
goto_first(0x33)
label(0x32)
tv_change_screen_bank(0x0f, 0x00, 0x2e)
tv_change_screen_bank(0x0f, 0x01, 0x30)
tv_change_screen_bank(0x10, 0x00, 0x2e)
tv_change_screen_bank(0x10, 0x01, 0x30)
goto_first(0x36)
label(0x30)
tv_change_screen_bank(0x0f, 0x00, 0x31)
tv_change_screen_bank(0x0f, 0x01, 0x30)
tv_change_screen_bank(0x10, 0x00, 0x31)
tv_change_screen_bank(0x10, 0x01, 0x30)
goto_first(0x34)
label(0x31)
tv_change_screen_bank(0x0f, 0x00, 0x30)
tv_change_screen_bank(0x0f, 0x01, 0x2f)
tv_change_screen_bank(0x10, 0x00, 0x30)
tv_change_screen_bank(0x10, 0x01, 0x2f)
goto_first(0x35)
ai_list_end
};
u8 ai_27[] = {
goto_next(0x30)
label(0x33)
ai_sleep
if_door_state_equal(0x09, 0x04, 0x32)
goto_first(0x33)
label(0x36)
ai_sleep
if_door_state_equal(0x09, 0x01, 0x30)
if_door_state_equal(0x09, 0x08, 0x31)
goto_first(0x36)
label(0x34)
ai_sleep
if_door_state_equal(0x09, 0x08, 0x31)
goto_first(0x34)
label(0x35)
ai_sleep
if_door_state_equal(0x09, 0x02, 0x2f)
if_door_state_equal(0x09, 0x04, 0x32)
goto_first(0x35)
label(0x2f)
tv_change_screen_bank(0x11, 0x00, 0x30)
tv_change_screen_bank(0x11, 0x01, 0x32)
tv_change_screen_bank(0x12, 0x00, 0x30)
tv_change_screen_bank(0x12, 0x01, 0x32)
goto_first(0x33)
label(0x32)
tv_change_screen_bank(0x11, 0x00, 0x2e)
tv_change_screen_bank(0x11, 0x01, 0x30)
tv_change_screen_bank(0x12, 0x00, 0x2e)
tv_change_screen_bank(0x12, 0x01, 0x30)
goto_first(0x36)
label(0x30)
tv_change_screen_bank(0x11, 0x00, 0x31)
tv_change_screen_bank(0x11, 0x01, 0x30)
tv_change_screen_bank(0x12, 0x00, 0x31)
tv_change_screen_bank(0x12, 0x01, 0x30)
goto_first(0x34)
label(0x31)
tv_change_screen_bank(0x11, 0x00, 0x30)
tv_change_screen_bank(0x11, 0x01, 0x2f)
tv_change_screen_bank(0x12, 0x00, 0x30)
tv_change_screen_bank(0x12, 0x01, 0x2f)
goto_first(0x35)
ai_list_end
};
u8 ai_20[] = {
label(0x2a)
ai_sleep
if_objective_bitfield_is_set_on(0x00040000, 0x04)
if_object_not_destroyed(0x05, 0x07)
goto_next(0x0c)
label(0x07)
if_object_not_destroyed(0x04, 0x07)
goto_next(0x0c)
label(0x07)
if_objective_bitfield_is_set_on(0x00010000, 0x07)
if_objective_bitfield_is_set_on(0x00200000, 0x07)
if_item_is_attached_to_object(0x2f, 0x05, 0x0a)
if_item_is_stationary_within_level(0x2f, 0x0d)
label(0x07)
goto_first(0x2a)
label(0x0a)
objective_bitfield_set_on(0x00010000)
text_print_top(0x082c)
sfx_play(0xe300, 0x00)
sfx_emit_from_object(0x00, 0x05, 0x0000)
goto_first(0x2a)
label(0x0d)
objective_bitfield_set_on(0x00200000)
text_print_top(0x212c)
goto_first(0x2a)
label(0x07)
label(0x0b)
text_print_top(0x0e2c)
objective_bitfield_set_on(0x00020000)
goto_next(0x04)
label(0x0c)
text_print_top(0x0e2c)
objective_bitfield_set_on(0x00080000)
objective_bitfield_set_on(0x00020000)
goto_next(0x04)
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_21[] = {
label(0x2a)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x2b)
if_object_not_destroyed(0x06, 0x07)
if_object_not_destroyed(0x07, 0x07)
goto_next(0x0b)
label(0x07)
if_object_was_activated(0x06, 0x07)
if_object_was_activated(0x07, 0x07)
goto_first(0x2a)
label(0x07)
text_print_top(0x0d2c)
goto_first(0x2a)
label(0x2b)
ai_sleep
if_object_not_destroyed(0x06, 0x07)
if_object_not_destroyed(0x07, 0x07)
goto_next(0x0b)
label(0x07)
if_object_was_activated(0x06, 0x07)
if_object_was_activated(0x07, 0x07)
goto_first(0x2b)
label(0x07)
if_objective_bitfield_is_set_on(0x00020000, 0x04)
local_timer_reset_start
hud_countdown_set(0x0a00)
hud_countdown_start
hud_countdown_show
text_print_top(0x092c)
label(0x0a)
ai_sleep
if_object_not_destroyed(0x06, 0x07)
if_object_not_destroyed(0x07, 0x07)
goto_next(0x0c)
label(0x07)
if_local_timer_greater_than(0x3c0000, 0x08)
if_hud_countdown_less_than(0x0100, 0x07)
goto_first(0x0a)
label(0x08)
sfx_play(0xbd00, 0x01)
sfx_emit_from_object(0x01, 0x06, 0x0000)
local_timer_reset_start
goto_first(0x0a)
label(0x07)
hud_countdown_hide
hud_countdown_stop
text_print_top(0x0a2c)
objective_bitfield_set_on(0x00040000)
goto_next(0x04)
label(0x0c)
text_print_top(0x0b2c)
objective_bitfield_set_on(0x00020000)
hud_countdown_hide
hud_countdown_stop
goto_next(0x04)
label(0x0b)
text_print_top(0x0c2c)
objective_bitfield_set_on(0x00020000)
goto_next(0x04)
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_10[] = {
aircraft_rotor_speed(0x6c02, 0x201c)
label(0x00)
ai_sleep
goto_first(0x00)
ai_list_end
};
u8 ai_13[] = {
label(0x2a)
ai_sleep
goto_first(0x2a)
ai_list_end
};
u8 ai_22[] = {
label(0x00)
ai_sleep
if_alarm_is_on(0x07)
goto_first(0x00)
label(0x07)
if_bond_damage_and_pickups_disabled(0x07)
chr_try_spawning_at_pad(0x25, 0xff, 0x7400, 0x0f04, 0x00000000, 0x07)
label(0x07)
ai_sleep
if_bond_damage_and_pickups_disabled(0x07)
chr_try_spawning_at_pad(0x25, 0xff, 0x7400, 0x0f04, 0x00000000, 0x07)
label(0x07)
label(0x07)
label(0x0a)
ai_sleep
goto_first(0x0a)
ai_list_end
};
u8 ai_14[] = {
guard_set_armour(0x1400)
guard_set_health_total(0x2800)
guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x07)
label(0x07)
label(0x04)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_15[] = {
guard_set_armour(0x1400)
guard_set_health_total(0x2800)
label(0x00)
ai_sleep
if_guard_heard_bond(0x04)
if_guard_see_another_guard_shot(0x04)
if_guard_and_bond_within_line_of_sight(0x04)
if_alarm_is_on(0x04)
goto_first(0x00)
label(0x04)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
ai_list_end
};
u8 ai_16[] = {
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x680100, 0x07)
goto_first(0x0a)
label(0x07)
guard_play_animation(0x6300, 0xffff, 0x6000, 0x04, 0x10)
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_25[] = {
label(0x0a)
ai_sleep
if_camera_is_in_bond_swirl(0x07)
goto_first(0x0a)
label(0x07)
jump_to_ai_list(0xf8, 0x1104)
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_17[] = {
debug_log 'w', 'h', 'e', 'e', '\n', '\0',
chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07)
label(0x07)
guard_flags_set_on(0x00200000)
screen_fade_from_black
music_xtrack_play(0x00, 0xff, 0xff)
guard_play_animation(0xb100, 0xffff, 0x0300, 0x24, 0x10)
local_timer_reset_start
label(0x10)
ai_sleep
guard_flags_set_on(0x00100000)
if_local_timer_greater_than(0x3c0000, 0x07)
goto_first(0x10)
label(0x07)
guard_play_animation(0xb100, 0x0300, 0x5a00, 0x04, 0x10)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x640000, 0x07)
goto_first(0x0a)
label(0x07)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0b)
label(0x07)
camera_switch(0x0b, 0x0100, 0x0000)
guard_flags_set_off(0x00100000)
chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07)
label(0x07)
screen_fade_from_black
guard_play_animation(0xb100, 0x5000, 0xffff, 0x04, 0x10)
local_timer_reset_start
label(0x0c)
ai_sleep
guard_flags_set_on(0x00100000)
if_local_timer_greater_than(0x2c0100, 0x07)
goto_first(0x0c)
label(0x07)
screen_fade_to_black
label(0x0d)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0d)
label(0x07)
camera_switch(0x0c, 0x0100, 0x0000)
guard_flags_set_off(0x00100000)
chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07)
label(0x07)
screen_fade_from_black
guard_play_animation(0xb100, 0x5000, 0xffff, 0x04, 0x10)
local_timer_reset_start
label(0x0e)
ai_sleep
guard_flags_set_on(0x00100000)
if_local_timer_greater_than(0xc20100, 0x07)
goto_first(0x0e)
label(0x07)
screen_fade_to_black
label(0x0f)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0f)
label(0x07)
label(0x04)
exit_level
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_19[] = {
guard_walks_to_pad(0x0400)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0a)
label(0x07)
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_18[] = {
local_timer_reset_start
label(0x00)
ai_sleep
if_local_timer_greater_than(0x780000, 0x07)
goto_first(0x00)
label(0x07)
guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0a)
label(0x07)
door_close(0x08)
guard_walks_to_pad(0x0500)
label(0x0b)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0b)
label(0x07)
guard_try_facing_target(0x0100, 0x0000, 0x07)
label(0x07)
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_24[] = {
label(0x03)
ai_sleep
if_bond_is_dead(0x2e)
if_bond_in_room_with_pad(0x4a01, 0x07)
goto_first(0x03)
label(0x07)
objective_bitfield_set_on(0x00100000)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
bond_equip_item(0x00)
bond_set_locked_velocity(0x00, 0x04)
local_timer_reset_start
label(0x0a)
ai_sleep
if_bond_y_pos_less_than(0x98bd, 0x07)
if_local_timer_greater_than(0x5e0100, 0x07)
goto_first(0x0a)
label(0x07)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0b)
label(0x07)
if_objective_all_completed(0x07)
jump_to_ai_list(0xfd, 0x0f00)
label(0x07)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x0a, 0x0100, 0x0000)
jump_to_ai_list(0xf8, 0x1204)
jump_to_ai_list(0xfd, 0x0100)
label(0x2e)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+902 -27
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1525,33 +1526,907 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x8e00ad64, 0x310a0005, 0xfd040804 };
u32 ai_1[] = { 0x8e01ad64, 0x320a0005, 0xfd040804 };
u32 ai_2[] = { 0x8e02ad64, 0x330a0005, 0xfd040804 };
u32 ai_3[] = { 0x8e03ad64, 0x340a0005, 0xfd040804 };
u32 ai_4[] = { 0x8e04ad64, 0x350a0005, 0xfd040804 };
u32 ai_5[] = { 0x8e05ad64, 0x360a0005, 0xfd040804 };
u32 ai_6[] = { 0x8e06ad64, 0x370a0005, 0xfd040804 };
u32 ai_7[] = { 0x022d3335, 0xa03a3550, 0x378f0028, 0x9000008d, 0xe5bf00bd, 0x0a000000, 0x002d022d, 0x00060237, 0x8f002890, 0x000a8dcc, 0xbf00bd0a, 0x00000000, 0x2d022d02, 0x2d000602, 0x3a8f0028, 0x90001402, 0x2dbf00bd, 0x0a800000, 0x002d022d, 0xbf00bd0a, 0x90000000, 0x06020605, 0xfd040904 };
u32 ai_8[] = { 0x023b463e, 0x039c0000, 0x0400074c, 0x01903728, 0x0802372a, 0x08020803, 0x4c00c837, 0x3c3c0237, 0x2f3d0108, 0x023c3c2d, 0x0006023d, 0x03013b02, 0x2d023e33, 0x350a2d1a, 0x06022d35, 0x322d0e06, 0x022d353c, 0x2d130602, 0x2d35502d, 0x1306022d, 0x35642d11, 0x06022d35, 0x962d1206, 0x022d35c8, 0x2d140001, 0x00000602, 0x2d35fa07, 0x15000100, 0x00060206, 0x032f2d01, 0x06022d3c, 0x2d000802, 0x0803013b, 0x022d0301, 0x3e020705, 0xfd040a04 };
u32 ai_9[] = { 0xad202d3e, 0x434f5645, 0x520a0028, 0x08020803, 0x46074b00, 0xc8060108, 0x020605fd, 0x040b0207, 0x05fd0409, 0x04000000 };
u32 ai_10[] = { 0xad202d3e, 0x54524545, 0x440a0002, 0x03150021, 0x00002d46, 0x06022d02, 0x08034c01, 0xf4064606, 0x3c2d0108, 0x022d1600, 0x0100002d, 0x022d0209, 0x0346062f, 0x2d010902, 0x2d010302, 0x0605fd04, 0x09040000 };
u32 ai_18[] = { 0x9a000002, 0x00020403, 0x5500734d, 0x5500e64d, 0x5500ff4d, 0x5501044d, 0x5501064d, 0x5500974d, 0x5500894d, 0x5500924d, 0x5500c94d, 0x5500ce4d, 0x035500d6, 0x4d5500db, 0x4d5500e0, 0x4d5500ef, 0x4d5500f5, 0x4d5500a6, 0x4d039a00, 0x0002009b, 0x00000400, 0x03550110, 0x41550080, 0x41550079, 0x4255009a, 0x435500c0, 0x44035500, 0xba465500, 0xb2475500, 0xec485500, 0xe6495500, 0xfb4a5501, 0x014b0104, 0x024103ad, 0x494e310a, 0x00ac0700, 0x97ac0800, 0x6eac0900, 0x73ac0a00, 0x92ac0b00, 0x9aac0c00, 0xbeac0d00, 0xba010402, 0x4203ad49, 0x4e320a00, 0xac070110, 0xac0800a6, 0xac090011, 0xac0a00be, 0xac0b00c3, 0xac0c00ba, 0xac0d00b2, 0x01040243, 0x03ad494e, 0x330a00ac, 0x07006eac, 0x080073ac, 0x090110ac, 0x0a00c3ac, 0x0b00baac, 0x0c00c9ac, 0x0d00db01, 0x04024403, 0xad494e34, 0x0a00ac07, 0x0079ac08, 0x00a6ac09, 0x00ecac0a, 0x002cac0b, 0x002dac0c, 0x00b2ac0d, 0x00db0104, 0x024503ad, 0x494e350a, 0x00ac0700, 0x9aac0800, 0xc9ac0900, 0x2cac0a00, 0x2dac0b00, 0xdbac0c00, 0xb2ac0d00, 0xe0010402, 0x4603ad49, 0x4e360a00, 0xac07009a, 0xac0800f5, 0xac0900c3, 0xac0a00ec, 0xac0b00e6, 0xac0c00fb, 0xac0d00ef, 0x01040247, 0x03ad494e, 0x370a00ac, 0x07002cac, 0x0800beac, 0x0900efac, 0x0a00dbac, 0x0b00e8ac, 0x0c00fbac, 0x0d002d01, 0x04024803, 0xad494e38, 0x0a00ac07, 0x00baac08, 0x002dac09, 0x00efac0a, 0x00ffac0b, 0x00beac0c, 0x00dbac0d, 0x002c0104, 0x024903ad, 0x494e390a, 0x00ac0700, 0xfbac0800, 0xb0ac0900, 0xe0ac0a00, 0xbaac0b00, 0xfdac0c00, 0x2dac0d00, 0x2c010402, 0x4a03ad49, 0x4e31300a, 0x00ac0700, 0xe8ac0800, 0xb0ac0901, 0x0aac0a01, 0x0cac0b01, 0x0cac0c00, 0x2cac0d00, 0x2d010402, 0x4b03ad49, 0x4e31310a, 0x00ac0700, 0xfdac0800, 0xfbac0900, 0xe8ac0a00, 0xb0ac0b00, 0xb2ac0c00, 0x2cac0d00, 0x2d010402, 0x4dad4f46, 0x46210a00, 0x9a000004, 0x009b0000, 0x02000104, 0x04000000 };
u32 ai_19[] = { 0x8e07ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40004, 0xb02d0108, 0x022d3100, 0x2d010302, 0x2dad7370, 0x61776e31, 0x00f306bd, 0x11ff2328, 0x04010000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7331204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_20[] = { 0x8e08ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40005, 0xdc2d0108, 0x022d3101, 0x2d010302, 0x2dad7370, 0x61776e32, 0x00f306bd, 0x11ff2328, 0x04020000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7332204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_21[] = { 0x8e09ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40007, 0x082d0108, 0x022d3102, 0x2d010302, 0x2dad7370, 0x61776e33, 0x00f306bd, 0x11ff2328, 0x04030000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7333204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_22[] = { 0x8e0aae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40008, 0x342d0108, 0x022d3103, 0x2d010302, 0x2dad7370, 0x61776e34, 0x00f306bd, 0x11ff2328, 0x04040000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7334204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_23[] = { 0x8e0bae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b4000e, 0x102d0108, 0x022d3104, 0x2d010302, 0x2dad7370, 0x61776e35, 0x00f306bd, 0x11ff2328, 0x04050000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7335204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_24[] = { 0x8e0cae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b4001c, 0x202d0108, 0x022d3105, 0x2d010302, 0x2dad7370, 0x61776e36, 0x00f306bd, 0x11ff2328, 0x04060000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7336204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_25[] = { 0x8e0dae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40023, 0x282d0108, 0x022d3106, 0x2d010302, 0x2dad7370, 0x61776e37, 0x00f306bd, 0x11ff2328, 0x04070000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7337204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 };
u32 ai_17[] = { 0x02080368, 0x060e2d01, 0x08022d9a, 0x00000100, 0x02090301, 0x09040000 };
u32 ai_26[] = { 0x020303eb, 0x4f55010f, 0x2d010302, 0x2decd700, 0xda020803, 0xdc2d0108, 0x022df12d, 0x05fd000f, 0x022dddea, 0x59042d59, 0x052d5906, 0x2d59072d, 0x59082d59, 0x092d590a, 0x2d590b2d, 0x590c2d59, 0x0d2d590e, 0x2d590f2d, 0x59102d59, 0x112d5912, 0x2d59132d, 0x59162d59, 0x142d5915, 0x2de40402, 0x2ded0303, 0x03d50800, 0x02000005, 0xf8040d05, 0xfd000102, 0x4f05fd00, 0x01040000 };
u32 ai_12[] = { 0x95019502, 0xdf06df07, 0x310e4e30, 0x0e4e540e, 0x01112d54, 0x0e01182d, 0x540e0115, 0x2d004e02, 0x2d940102, 0x4e310f4e, 0x300f4e54, 0x0f01112d, 0x540f0118, 0x2d540f01, 0x152d004e, 0x022d9402, 0x024e9601, 0x2d96022d, 0x0006022d, 0x9d000000, 0x109d0000, 0x00409155, 0xd9fd0114, 0x2d022d96, 0x0210a10e, 0x00000400, 0x050e040e, 0x000f0210, 0xa10f0000, 0x0400050f, 0x040f9601, 0x10000f02, 0x10a10e00, 0x00040005, 0x0e041002, 0x0f0303db, 0xf400ffff, 0x96022d00, 0x4e022d02, 0x0b140024, 0x000f2d03, 0x010b022d, 0x020de72d, 0x03010d02, 0x2d160004, 0x000f2d02, 0x2d030303, 0x180f0f04, 0x0208032f, 0x2d010802, 0x2d024e96, 0x012d004e, 0x022d9a00, 0x00080002, 0x0c150024, 0x000e2d03, 0x010c022d, 0x020ee72d, 0x03010e02, 0x2d160004, 0x000e2d02, 0x2d030303, 0x180e0f04, 0x0209032f, 0x2d010902, 0x2d024eda, 0x020a03dc, 0x2d010a02, 0x2d0206dd, 0xa1f80000, 0x040005fd, 0x040c0400 };
u32 ai_13[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01132d, 0x022d0a00, 0x00ffffff, 0xff0610ae, 0x020803b4, 0x0000462d, 0x0108022d, 0x02091400, 0x2801162d, 0x03010902, 0x2d160008, 0x01162d02, 0x2d020603, 0x01060400 };
u32 ai_14[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01122d, 0x022d0a00, 0x00ffffff, 0xff0610ae, 0x020803b4, 0x00003c2d, 0x0108022d, 0x02091400, 0x2801162d, 0x03010902, 0x2d160008, 0x01162d02, 0x2d020603, 0x01060400 };
u32 ai_15[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01172d, 0x022d0a00, 0x00ffffff, 0xff4410ae, 0x0208039c, 0x00000800, 0x2d010802, 0x2d0a002a, 0xffffffff, 0x0610ae02, 0x0903b400, 0x00142d01, 0x09022d02, 0x0a140028, 0x01162d03, 0x010a022d, 0x16000801, 0x162d022d, 0x02060301, 0x06040000 };
u32 ai_11[] = { 0xd9fd0111, 0x2d022de0, 0xfd01df06, 0xdf070a00, 0x69000000, 0x1d0610db, 0x0208032f, 0x2d010802, 0x2de0fd00, 0x0a006900, 0x1d00a006, 0x10ae0209, 0x032f2db4, 0x0000782d, 0x0109022d, 0x6706ae02, 0x0a036806, 0x012db400, 0x00b42d01, 0x0a022dda, 0x020b03dc, 0x2d010b02, 0x2dd20206, 0x03010604 };
u32 ai_16[] = { 0xae0a0061, 0x00000001, 0x04100208, 0x03b40000, 0x1e2d0108, 0x022d0a00, 0x610001ff, 0xff041005, 0xfd000104, 0x020803cf, 0x2d010802, 0x2d05f804, 0x1105fd00, 0x01040000 };
u8 ai_0[] = {
guard_set_chr_num(0x00)
debug_log 'd', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_1[] = {
guard_set_chr_num(0x01)
debug_log 'd', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_2[] = {
guard_set_chr_num(0x02)
debug_log 'd', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_3[] = {
guard_set_chr_num(0x03)
debug_log 'd', '4', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_4[] = {
guard_set_chr_num(0x04)
debug_log 'd', '5', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_5[] = {
guard_set_chr_num(0x05)
debug_log 'd', '6', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_6[] = {
guard_set_chr_num(0x06)
debug_log 'd', '7', '\n', '\0',
jump_to_ai_list(0xfd, 0x0804)
ai_list_end
};
u8 ai_7[] = {
label(0x2d)
random_generate_seed
if_random_seed_greater_than(0xa0, 0x3a)
if_random_seed_greater_than(0x50, 0x37)
guard_set_health_total(0x2800)
guard_set_armour(0x0000)
guard_set_grenade_probability(0xe5)
guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x2d)
label(0x2d)
goto_next(0x06)
label(0x37)
guard_set_health_total(0x2800)
guard_set_armour(0x0a00)
guard_set_grenade_probability(0xcc)
guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x2d)
label(0x2d)
label(0x2d)
goto_next(0x06)
label(0x3a)
guard_set_health_total(0x2800)
guard_set_armour(0x1400)
label(0x2d)
guard_try_spawning_item(0xbd00, 0x0a, 0x00000080, 0x2d)
label(0x2d)
guard_try_spawning_item(0xbd00, 0x0a, 0x00000090, 0x06)
label(0x06)
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_8[] = {
label(0x3b)
if_guard_shot_from_bond_missed(0x3e)
ai_sleep
if_objective_bitfield_is_set_on(0x00040000, 0x07)
if_guard_distance_to_bond_greater_than(0x9001, 0x37)
guard_try_running_to_bond_position(0x08)
label(0x37)
guard_try_sprinting_to_bond_position(0x08)
label(0x08)
ai_sleep
if_guard_distance_to_bond_greater_than(0xc800, 0x37)
if_guard_and_bond_within_line_of_sight(0x3c)
label(0x37)
if_guard_has_stopped_moving(0x3d)
goto_first(0x08)
label(0x3c)
if_guard_and_bond_within_line_of_sight(0x2d)
goto_next(0x06)
label(0x3d)
ai_sleep
goto_first(0x3b)
label(0x2d)
label(0x3e)
random_generate_seed
if_random_seed_greater_than(0x0a, 0x2d)
guard_try_throwing_grenade(0x06)
label(0x2d)
if_random_seed_greater_than(0x32, 0x2d)
guard_try_sidestepping(0x06)
label(0x2d)
if_random_seed_greater_than(0x3c, 0x2d)
guard_try_firing_roll(0x06)
label(0x2d)
if_random_seed_greater_than(0x50, 0x2d)
guard_try_firing_roll(0x06)
label(0x2d)
if_random_seed_greater_than(0x64, 0x2d)
guard_try_firing_walk(0x06)
label(0x2d)
if_random_seed_greater_than(0x96, 0x2d)
guard_try_firing_run(0x06)
label(0x2d)
if_random_seed_greater_than(0xc8, 0x2d)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06)
label(0x2d)
if_random_seed_greater_than(0xfa, 0x07)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06)
label(0x06)
ai_sleep
if_guard_has_stopped_moving(0x2d)
goto_first(0x06)
label(0x2d)
if_guard_and_bond_within_line_of_sight(0x2d)
goto_next(0x08)
label(0x08)
ai_sleep
goto_first(0x3b)
label(0x2d)
ai_sleep
goto_first(0x3e)
label(0x07)
jump_to_ai_list(0xfd, 0x0a04)
ai_list_end
};
u8 ai_9[] = {
debug_log ' ', '-', '>', 'C', 'O', 'V', 'E', 'R', '\n', '\0',
guard_try_running_to_bond_position(0x08)
label(0x08)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_distance_to_bond_less_than(0xc800, 0x06)
goto_first(0x08)
label(0x06)
jump_to_ai_list(0xfd, 0x0b04)
label(0x07)
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_10[] = {
debug_log ' ', '-', '>', 'T', 'R', 'E', 'E', 'D', '\n', '\0',
label(0x03)
guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2d)
if_guard_shot_from_bond_missed(0x06)
label(0x2d)
label(0x08)
ai_sleep
if_guard_distance_to_bond_greater_than(0xf401, 0x06)
if_guard_shot_from_bond_missed(0x06)
if_guard_and_bond_within_line_of_sight(0x2d)
goto_first(0x08)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2d)
label(0x2d)
label(0x09)
ai_sleep
if_guard_shot_from_bond_missed(0x06)
if_guard_has_stopped_moving(0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
label(0x06)
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_18[] = {
objective_bitfield_set_on(0x00020000)
label(0x04)
ai_sleep
if_bond_in_room_with_pad(0x7300, 0x4d)
if_bond_in_room_with_pad(0xe600, 0x4d)
if_bond_in_room_with_pad(0xff00, 0x4d)
if_bond_in_room_with_pad(0x0401, 0x4d)
if_bond_in_room_with_pad(0x0601, 0x4d)
if_bond_in_room_with_pad(0x9700, 0x4d)
if_bond_in_room_with_pad(0x8900, 0x4d)
if_bond_in_room_with_pad(0x9200, 0x4d)
if_bond_in_room_with_pad(0xc900, 0x4d)
if_bond_in_room_with_pad(0xce00, 0x4d)
ai_sleep
if_bond_in_room_with_pad(0xd600, 0x4d)
if_bond_in_room_with_pad(0xdb00, 0x4d)
if_bond_in_room_with_pad(0xe000, 0x4d)
if_bond_in_room_with_pad(0xef00, 0x4d)
if_bond_in_room_with_pad(0xf500, 0x4d)
if_bond_in_room_with_pad(0xa600, 0x4d)
ai_sleep
objective_bitfield_set_on(0x00020000)
objective_bitfield_set_off(0x00040000)
ai_sleep
if_bond_in_room_with_pad(0x1001, 0x41)
if_bond_in_room_with_pad(0x8000, 0x41)
if_bond_in_room_with_pad(0x7900, 0x42)
if_bond_in_room_with_pad(0x9a00, 0x43)
if_bond_in_room_with_pad(0xc000, 0x44)
ai_sleep
if_bond_in_room_with_pad(0xba00, 0x46)
if_bond_in_room_with_pad(0xb200, 0x47)
if_bond_in_room_with_pad(0xec00, 0x48)
if_bond_in_room_with_pad(0xe600, 0x49)
if_bond_in_room_with_pad(0xfb00, 0x4a)
if_bond_in_room_with_pad(0x0101, 0x4b)
goto_first(0x04)
label(0x41)
ai_sleep
debug_log 'I', 'N', '1', '\n', '\0',
chr_set_pad_preset(0x07, 0x9700)
chr_set_pad_preset(0x08, 0x6e00)
chr_set_pad_preset(0x09, 0x7300)
chr_set_pad_preset(0x0a, 0x9200)
chr_set_pad_preset(0x0b, 0x9a00)
chr_set_pad_preset(0x0c, 0xbe00)
chr_set_pad_preset(0x0d, 0xba00)
goto_first(0x04)
label(0x42)
ai_sleep
debug_log 'I', 'N', '2', '\n', '\0',
chr_set_pad_preset(0x07, 0x1001)
chr_set_pad_preset(0x08, 0xa600)
chr_set_pad_preset(0x09, 0x1100)
chr_set_pad_preset(0x0a, 0xbe00)
chr_set_pad_preset(0x0b, 0xc300)
chr_set_pad_preset(0x0c, 0xba00)
chr_set_pad_preset(0x0d, 0xb200)
goto_first(0x04)
label(0x43)
ai_sleep
debug_log 'I', 'N', '3', '\n', '\0',
chr_set_pad_preset(0x07, 0x6e00)
chr_set_pad_preset(0x08, 0x7300)
chr_set_pad_preset(0x09, 0x1001)
chr_set_pad_preset(0x0a, 0xc300)
chr_set_pad_preset(0x0b, 0xba00)
chr_set_pad_preset(0x0c, 0xc900)
chr_set_pad_preset(0x0d, 0xdb00)
goto_first(0x04)
label(0x44)
ai_sleep
debug_log 'I', 'N', '4', '\n', '\0',
chr_set_pad_preset(0x07, 0x7900)
chr_set_pad_preset(0x08, 0xa600)
chr_set_pad_preset(0x09, 0xec00)
chr_set_pad_preset(0x0a, 0x2c00)
chr_set_pad_preset(0x0b, 0x2d00)
chr_set_pad_preset(0x0c, 0xb200)
chr_set_pad_preset(0x0d, 0xdb00)
goto_first(0x04)
label(0x45)
ai_sleep
debug_log 'I', 'N', '5', '\n', '\0',
chr_set_pad_preset(0x07, 0x9a00)
chr_set_pad_preset(0x08, 0xc900)
chr_set_pad_preset(0x09, 0x2c00)
chr_set_pad_preset(0x0a, 0x2d00)
chr_set_pad_preset(0x0b, 0xdb00)
chr_set_pad_preset(0x0c, 0xb200)
chr_set_pad_preset(0x0d, 0xe000)
goto_first(0x04)
label(0x46)
ai_sleep
debug_log 'I', 'N', '6', '\n', '\0',
chr_set_pad_preset(0x07, 0x9a00)
chr_set_pad_preset(0x08, 0xf500)
chr_set_pad_preset(0x09, 0xc300)
chr_set_pad_preset(0x0a, 0xec00)
chr_set_pad_preset(0x0b, 0xe600)
chr_set_pad_preset(0x0c, 0xfb00)
chr_set_pad_preset(0x0d, 0xef00)
goto_first(0x04)
label(0x47)
ai_sleep
debug_log 'I', 'N', '7', '\n', '\0',
chr_set_pad_preset(0x07, 0x2c00)
chr_set_pad_preset(0x08, 0xbe00)
chr_set_pad_preset(0x09, 0xef00)
chr_set_pad_preset(0x0a, 0xdb00)
chr_set_pad_preset(0x0b, 0xe800)
chr_set_pad_preset(0x0c, 0xfb00)
chr_set_pad_preset(0x0d, 0x2d00)
goto_first(0x04)
label(0x48)
ai_sleep
debug_log 'I', 'N', '8', '\n', '\0',
chr_set_pad_preset(0x07, 0xba00)
chr_set_pad_preset(0x08, 0x2d00)
chr_set_pad_preset(0x09, 0xef00)
chr_set_pad_preset(0x0a, 0xff00)
chr_set_pad_preset(0x0b, 0xbe00)
chr_set_pad_preset(0x0c, 0xdb00)
chr_set_pad_preset(0x0d, 0x2c00)
goto_first(0x04)
label(0x49)
ai_sleep
debug_log 'I', 'N', '9', '\n', '\0',
chr_set_pad_preset(0x07, 0xfb00)
chr_set_pad_preset(0x08, 0xb000)
chr_set_pad_preset(0x09, 0xe000)
chr_set_pad_preset(0x0a, 0xba00)
chr_set_pad_preset(0x0b, 0xfd00)
chr_set_pad_preset(0x0c, 0x2d00)
chr_set_pad_preset(0x0d, 0x2c00)
goto_first(0x04)
label(0x4a)
ai_sleep
debug_log 'I', 'N', '1', '0', '\n', '\0',
chr_set_pad_preset(0x07, 0xe800)
chr_set_pad_preset(0x08, 0xb000)
chr_set_pad_preset(0x09, 0x0a01)
chr_set_pad_preset(0x0a, 0x0c01)
chr_set_pad_preset(0x0b, 0x0c01)
chr_set_pad_preset(0x0c, 0x2c00)
chr_set_pad_preset(0x0d, 0x2d00)
goto_first(0x04)
label(0x4b)
ai_sleep
debug_log 'I', 'N', '1', '1', '\n', '\0',
chr_set_pad_preset(0x07, 0xfd00)
chr_set_pad_preset(0x08, 0xfb00)
chr_set_pad_preset(0x09, 0xe800)
chr_set_pad_preset(0x0a, 0xb000)
chr_set_pad_preset(0x0b, 0xb200)
chr_set_pad_preset(0x0c, 0x2c00)
chr_set_pad_preset(0x0d, 0x2d00)
goto_first(0x04)
label(0x4d)
debug_log 'O', 'F', 'F', '!', '\n', '\0',
objective_bitfield_set_on(0x00040000)
objective_bitfield_set_off(0x00020000)
goto_first(0x04)
ai_list_end
};
u8 ai_19[] = {
guard_set_chr_num(0x07)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x00, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '1', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0104, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '1', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_20[] = {
guard_set_chr_num(0x08)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0xdc0500, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x01, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '2', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0204, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '2', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_21[] = {
guard_set_chr_num(0x09)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x080700, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x02, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '3', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0304, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '3', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_22[] = {
guard_set_chr_num(0x0a)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x340800, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x03, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '4', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0404, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '4', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_23[] = {
guard_set_chr_num(0x0b)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x100e00, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x04, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '5', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0504, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '5', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_24[] = {
guard_set_chr_num(0x0c)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x201c00, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x05, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '6', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0604, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '6', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_25[] = {
guard_set_chr_num(0x0d)
local_timer_reset_start
label(0x4c)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x03)
goto_first(0x4c)
label(0x03)
if_objective_bitfield_is_set_on(0x00040000, 0x09)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x282300, 0x2d)
goto_first(0x08)
label(0x2d)
if_chr_does_not_exist(0x06, 0x2d)
goto_first(0x03)
label(0x2d)
debug_log 's', 'p', 'a', 'w', 'n', '7', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0704, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '7', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x09)
ai_sleep
if_objective_bitfield_is_set_on(0x00020000, 0x2d)
goto_first(0x09)
label(0x2d)
goto_first(0x03)
ai_list_end
};
u8 ai_17[] = {
label(0x08)
ai_sleep
if_door_state_equal(0x06, 0x0e, 0x2d)
goto_first(0x08)
label(0x2d)
objective_bitfield_set_on(0x00010000)
label(0x09)
ai_sleep
goto_first(0x09)
ai_list_end
};
u8 ai_26[] = {
label(0x03)
ai_sleep
if_bond_is_dead(0x4f)
if_bond_in_room_with_pad(0x0f01, 0x2d)
goto_first(0x03)
label(0x2d)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x2d)
goto_first(0x08)
label(0x2d)
if_objective_all_completed(0x2d)
jump_to_ai_list(0xfd, 0x0f00)
label(0x2d)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
if_bond_has_item_equipped(0x04, 0x2d)
if_bond_has_item_equipped(0x05, 0x2d)
if_bond_has_item_equipped(0x06, 0x2d)
if_bond_has_item_equipped(0x07, 0x2d)
if_bond_has_item_equipped(0x08, 0x2d)
if_bond_has_item_equipped(0x09, 0x2d)
if_bond_has_item_equipped(0x0a, 0x2d)
if_bond_has_item_equipped(0x0b, 0x2d)
if_bond_has_item_equipped(0x0c, 0x2d)
if_bond_has_item_equipped(0x0d, 0x2d)
if_bond_has_item_equipped(0x0e, 0x2d)
if_bond_has_item_equipped(0x0f, 0x2d)
if_bond_has_item_equipped(0x10, 0x2d)
if_bond_has_item_equipped(0x11, 0x2d)
if_bond_has_item_equipped(0x12, 0x2d)
if_bond_has_item_equipped(0x13, 0x2d)
if_bond_has_item_equipped(0x16, 0x2d)
if_bond_has_item_equipped(0x14, 0x2d)
if_bond_has_item_equipped(0x15, 0x2d)
bond_equip_item_cinema(0x04)
label(0x2d)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x08, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x0d04)
jump_to_ai_list(0xfd, 0x0100)
label(0x4f)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_12[] = {
guard_bitfield_set_off(0x01)
guard_bitfield_set_off(0x02)
door_open_instant(0x06)
door_open_instant(0x07)
if_chr_does_not_exist(0x0e, 0x4e)
if_chr_dying_or_dead(0x0e, 0x4e)
if_chr_in_room_with_pad(0x0e, 0x1101, 0x2d)
if_chr_in_room_with_pad(0x0e, 0x1801, 0x2d)
if_chr_in_room_with_pad(0x0e, 0x1501, 0x2d)
goto_next(0x4e)
label(0x2d)
guard_bitfield_set_on(0x01)
label(0x4e)
if_chr_does_not_exist(0x0f, 0x4e)
if_chr_dying_or_dead(0x0f, 0x4e)
if_chr_in_room_with_pad(0x0f, 0x1101, 0x2d)
if_chr_in_room_with_pad(0x0f, 0x1801, 0x2d)
if_chr_in_room_with_pad(0x0f, 0x1501, 0x2d)
goto_next(0x4e)
label(0x2d)
guard_bitfield_set_on(0x02)
label(0x4e)
if_guard_bitfield_is_set_on(0x01, 0x2d)
if_guard_bitfield_is_set_on(0x02, 0x2d)
goto_next(0x06)
label(0x2d)
guard_flags_set_on(0x10000000)
guard_flags_set_on(0x40000000)
guard_set_speed_rating(0x55)
chr_try_teleporting_to_pad(0xfd, 0x1401, 0x2d)
label(0x2d)
if_guard_bitfield_is_set_on(0x02, 0x10)
chr_flags_set_off(0x0e, 0x00040000)
jump_to_ai_list(0x0e, 0x0e04)
goto_next(0x0f)
label(0x10)
chr_flags_set_off(0x0f, 0x00040000)
jump_to_ai_list(0x0f, 0x0f04)
if_guard_bitfield_is_set_on(0x01, 0x10)
goto_next(0x0f)
label(0x10)
chr_flags_set_off(0x0e, 0x00040000)
jump_to_ai_list(0x0e, 0x1004)
label(0x0f)
ai_sleep
ai_sleep
screen_fade_from_black
music_xtrack_play(0x00, 0xff, 0xff)
if_guard_bitfield_is_set_on(0x02, 0x2d)
goto_next(0x4e)
label(0x2d)
label(0x0b)
guard_try_fire_or_aim_at_target(0x2400, 0x0f00, 0x2d)
ai_sleep
goto_first(0x0b)
label(0x2d)
label(0x0d)
if_guard_is_firing_and_using_180_range_flag(0x2d)
ai_sleep
goto_first(0x0d)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0400, 0x0f00, 0x2d)
label(0x2d)
ai_sleep
ai_sleep
ai_sleep
chr_hit_body_part_with_item_damage(0x0f, 0x0f, 0x04)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2d)
goto_first(0x08)
label(0x2d)
label(0x4e)
if_guard_bitfield_is_set_on(0x01, 0x2d)
goto_next(0x4e)
label(0x2d)
objective_bitfield_set_on(0x00080000)
label(0x0c)
guard_try_fire_or_aim_at_target_kneel(0x2400, 0x0e00, 0x2d)
ai_sleep
goto_first(0x0c)
label(0x2d)
label(0x0e)
if_guard_is_firing_and_using_180_range_flag(0x2d)
ai_sleep
goto_first(0x0e)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0400, 0x0e00, 0x2d)
label(0x2d)
ai_sleep
ai_sleep
ai_sleep
chr_hit_body_part_with_item_damage(0x0e, 0x0f, 0x04)
label(0x09)
ai_sleep
if_guard_has_stopped_moving(0x2d)
goto_first(0x09)
label(0x2d)
label(0x4e)
screen_fade_to_black
label(0x0a)
ai_sleep
if_screen_fade_completed(0x2d)
goto_first(0x0a)
label(0x2d)
label(0x06)
chr_hide_all
chr_flags_set_off(0xf8, 0x00040000)
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_13[] = {
guard_flags_set_on(0x80000000)
guard_set_health_total(0x0a00)
guard_set_armour(0x0000)
chr_try_teleporting_to_pad(0xfd, 0x1301, 0x2d)
label(0x2d)
guard_play_animation(0x0000, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x460000, 0x2d)
goto_first(0x08)
label(0x2d)
label(0x09)
guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d)
ai_sleep
goto_first(0x09)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d)
label(0x2d)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_14[] = {
guard_flags_set_on(0x80000000)
guard_set_health_total(0x0a00)
guard_set_armour(0x0000)
chr_try_teleporting_to_pad(0xfd, 0x1201, 0x2d)
label(0x2d)
guard_play_animation(0x0000, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x2d)
goto_first(0x08)
label(0x2d)
label(0x09)
guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d)
ai_sleep
goto_first(0x09)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d)
label(0x2d)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_15[] = {
guard_flags_set_on(0x80000000)
guard_set_health_total(0x0a00)
guard_set_armour(0x0000)
chr_try_teleporting_to_pad(0xfd, 0x1701, 0x2d)
label(0x2d)
guard_play_animation(0x0000, 0xffff, 0xffff, 0x44, 0x10)
local_timer_reset_start
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00080000, 0x2d)
goto_first(0x08)
label(0x2d)
guard_play_animation(0x2a00, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
label(0x09)
ai_sleep
if_local_timer_greater_than(0x140000, 0x2d)
goto_first(0x09)
label(0x2d)
label(0x0a)
guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d)
ai_sleep
goto_first(0x0a)
label(0x2d)
guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d)
label(0x2d)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_11[] = {
chr_try_teleporting_to_pad(0xfd, 0x1101, 0x2d)
label(0x2d)
chr_remove_item_in_hand(0xfd, 0x01)
door_open_instant(0x06)
door_open_instant(0x07)
guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10)
screen_fade_from_black
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2d)
goto_first(0x08)
label(0x2d)
chr_remove_item_in_hand(0xfd, 0x00)
guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10)
local_timer_reset_start
label(0x09)
ai_sleep
if_guard_has_stopped_moving(0x2d)
if_local_timer_greater_than(0x780000, 0x2d)
goto_first(0x09)
label(0x2d)
door_close(0x06)
local_timer_reset_start
label(0x0a)
ai_sleep
if_door_state_equal(0x06, 0x01, 0x2d)
if_local_timer_greater_than(0xb40000, 0x2d)
goto_first(0x0a)
label(0x2d)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x2d)
goto_first(0x0b)
label(0x2d)
exit_level
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_16[] = {
local_timer_reset_start
guard_play_animation(0x6100, 0x0000, 0x0100, 0x04, 0x10)
label(0x08)
ai_sleep
if_local_timer_greater_than(0x1e0000, 0x2d)
goto_first(0x08)
label(0x2d)
guard_play_animation(0x6100, 0x0100, 0xffff, 0x04, 0x10)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
label(0x08)
ai_sleep
if_camera_is_in_bond_swirl(0x2d)
goto_first(0x08)
label(0x2d)
jump_to_ai_list(0xf8, 0x1104)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
+619 -22
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -839,28 +840,624 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_3[] = { 0x8e19ad64, 0x310a0005, 0xfd040304 };
u32 ai_4[] = { 0x8e1aad64, 0x320a0005, 0xfd040304 };
u32 ai_5[] = { 0x8e1bad64, 0x330a0005, 0xfd040304 };
u32 ai_6[] = { 0x8e1cad64, 0x340a0005, 0xfd040304 };
u32 ai_7[] = { 0x8e1dad64, 0x350a0005, 0xfd040304 };
u32 ai_8[] = { 0x8e1ead64, 0x360a0005, 0xfd040304 };
u32 ai_9[] = { 0x8e1fad64, 0x370a0005, 0xfd040304 };
u32 ai_2[] = { 0x02293335, 0xa0363550, 0x338f0028, 0x9000008d, 0xe5bf00c1, 0x07000000, 0x00290229, 0x00060233, 0x8f002890, 0x000a8dcc, 0xbf00b808, 0x00000000, 0x29022902, 0x29000602, 0x368f0028, 0x90001402, 0x29bf00c1, 0x07800000, 0x00290229, 0xbf00c107, 0x90000000, 0x06020605, 0xfd040b04 };
u32 ai_10[] = { 0x02374c01, 0x90332807, 0x02332a07, 0x0207034c, 0x01c2333c, 0x3802332f, 0x39010702, 0x383c2900, 0x06023903, 0x01370229, 0x023a3335, 0x0a291a06, 0x02293532, 0x290e0602, 0x29353c29, 0x13060229, 0x35502913, 0x06022935, 0x64291106, 0x02293596, 0x29120602, 0x2935c829, 0x14000100, 0x00060229, 0x15000100, 0x00060206, 0x032f2901, 0x0602293c, 0x29000702, 0x07030137, 0x02290301, 0x3a040000 };
u32 ai_13[] = { 0x9a000001, 0x00020403, 0x5500a53d, 0x5500a83e, 0x5500933f, 0x55009140, 0x55008e41, 0x035500ac, 0x42550084, 0x43550068, 0x44550066, 0x45550035, 0x46010402, 0x3d03ac20, 0x001aac21, 0x001eac22, 0x006dac23, 0x00abac24, 0x008cac25, 0x00abac26, 0x008c0104, 0x023e03ac, 0x20008fac, 0x210071ac, 0x22006dac, 0x2300abac, 0x24008cac, 0x2500abac, 0x26008c01, 0x04023f03, 0xac20008f, 0xac210071, 0xac22006d, 0xac2300ab, 0xac24008e, 0xac2500ab, 0xac26008e, 0x01040240, 0x03ac2000, 0x67ac2100, 0x66ac2200, 0x71ac2300, 0x8eac2400, 0x06ac2500, 0x8eac2600, 0x06010402, 0x4103ac20, 0x001aac21, 0x001eac22, 0x0071ac23, 0x0005ac24, 0x0006ac25, 0x0005ac26, 0x00060104, 0x024203ac, 0x200067ac, 0x210005ac, 0x22001bac, 0x23001fac, 0x24001dac, 0x25001fac, 0x26001d01, 0x04024303, 0xac20001d, 0xac21001f, 0xac22001c, 0xac23008e, 0xac240066, 0xac25008e, 0xac260066, 0x01040244, 0x03ac2000, 0x8eac2100, 0x71ac2200, 0x1fac2300, 0x1bac2400, 0x1eac2500, 0x1bac2600, 0x1e010402, 0x4503ac20, 0x001cac21, 0x001dac22, 0x008eac23, 0x001aac24, 0x0071ac25, 0x001aac26, 0x00710104, 0x024603ac, 0x20001fac, 0x21001aac, 0x22008fac, 0x23001eac, 0x24008eac, 0x25001eac, 0x26008e01, 0x04040000 };
u32 ai_14[] = { 0x8e20ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x02293119, 0x29010302, 0x29ad7370, 0x61776e31, 0x00f306bd, 0x02ff2328, 0x04040000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7331204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 };
u32 ai_15[] = { 0x8e21ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311a, 0x29010302, 0x29ad7370, 0x61776e32, 0x00f306bd, 0x02ff2328, 0x04050000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7332204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000, 0x8e22ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311b, 0x29010302, 0x29ad7370, 0x61776e33, 0x00f306bd, 0x02ff2328, 0x04060000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7333204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 };
u32 ai_16[] = { 0x8e23ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311c, 0x29010302, 0x29ad7370, 0x61776e34, 0x00f306bd, 0x02ff2328, 0x04070000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7334204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 };
u32 ai_17[] = { 0x8e24ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311d, 0x29010302, 0x29ad7370, 0x61776e35, 0x00f306bd, 0x02ff2328, 0x04080000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7335204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 };
u32 ai_18[] = { 0x8e25ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311e, 0x29010302, 0x29ad7370, 0x61776e36, 0x00f306bd, 0x25ff2328, 0x04090000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7336204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000, 0x8e26ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311f, 0x29010302, 0x29ad7370, 0x61776e37, 0x00f306bd, 0x25ff2328, 0x040a0000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7337204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 };
u32 ai_19[] = { 0x0204035b, 0x03330007, 0x02335c03, 0x29010402, 0x29560208, 0xc3700801, 0x040207c3, 0x70099a00, 0x00040005, 0xfd000102, 0x08eb489a, 0x00000800, 0xa3030002, 0x0000a603, 0x04000000, 0xecd700da, 0x020903dc, 0x29010902, 0x29f12905, 0xfd000f02, 0x29ed0303, 0x03d50600, 0x020000dd, 0xeadbf400, 0x00ff6503, 0x004c9a00, 0x001000ae, 0x0303020a, 0x03dc2901, 0x0a022902, 0x0b03b400, 0x00dc2901, 0x0b0229da, 0x020c03dc, 0x29010c02, 0x29d205fd, 0x00010248, 0x05fd0001, 0x04000000 };
u32 ai_11[] = { 0x0a0063ff, 0xffffff04, 0x10020603, 0x01060400 };
u32 ai_20[] = { 0x020703cf, 0x29010702, 0x2905f804, 0x0c020603, 0x01060400 };
u32 ai_12[] = { 0xcd000000, 0x00020703, 0x9c000010, 0x00290107, 0x0229cd02, 0x6c0000ab, 0x004c0a00, 0x01ffffff, 0xff04100a, 0x0001ffff, 0xffff0410, 0x02060301, 0x06040000 };
u32 ai_21[] = { 0x0207039c, 0x00001000, 0x29010702, 0x29ae0204, 0x03b40000, 0x3c290104, 0x0229c400, 0xf8ff0206, 0x03010604 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_set_chr_num(0x19)
debug_log 'd', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_4[] = {
guard_set_chr_num(0x1a)
debug_log 'd', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_5[] = {
guard_set_chr_num(0x1b)
debug_log 'd', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_6[] = {
guard_set_chr_num(0x1c)
debug_log 'd', '4', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_7[] = {
guard_set_chr_num(0x1d)
debug_log 'd', '5', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_8[] = {
guard_set_chr_num(0x1e)
debug_log 'd', '6', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_9[] = {
guard_set_chr_num(0x1f)
debug_log 'd', '7', '\n', '\0',
jump_to_ai_list(0xfd, 0x0304)
ai_list_end
};
u8 ai_2[] = {
label(0x29)
random_generate_seed
if_random_seed_greater_than(0xa0, 0x36)
if_random_seed_greater_than(0x50, 0x33)
guard_set_health_total(0x2800)
guard_set_armour(0x0000)
guard_set_grenade_probability(0xe5)
guard_try_spawning_item(0xc100, 0x07, 0x00000000, 0x29)
label(0x29)
goto_next(0x06)
label(0x33)
guard_set_health_total(0x2800)
guard_set_armour(0x0a00)
guard_set_grenade_probability(0xcc)
guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x29)
label(0x29)
label(0x29)
goto_next(0x06)
label(0x36)
guard_set_health_total(0x2800)
guard_set_armour(0x1400)
label(0x29)
guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x29)
label(0x29)
guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x06)
label(0x06)
jump_to_ai_list(0xfd, 0x0b04)
ai_list_end
};
u8 ai_10[] = {
label(0x37)
if_guard_distance_to_bond_greater_than(0x9001, 0x33)
guard_try_running_to_bond_position(0x07)
label(0x33)
guard_try_sprinting_to_bond_position(0x07)
label(0x07)
ai_sleep
if_guard_distance_to_bond_greater_than(0xc201, 0x33)
if_guard_and_bond_within_line_of_sight(0x38)
label(0x33)
if_guard_has_stopped_moving(0x39)
goto_first(0x07)
label(0x38)
if_guard_and_bond_within_line_of_sight(0x29)
goto_next(0x06)
label(0x39)
ai_sleep
goto_first(0x37)
label(0x29)
label(0x3a)
random_generate_seed
if_random_seed_greater_than(0x0a, 0x29)
guard_try_throwing_grenade(0x06)
label(0x29)
if_random_seed_greater_than(0x32, 0x29)
guard_try_sidestepping(0x06)
label(0x29)
if_random_seed_greater_than(0x3c, 0x29)
guard_try_firing_roll(0x06)
label(0x29)
if_random_seed_greater_than(0x50, 0x29)
guard_try_firing_roll(0x06)
label(0x29)
if_random_seed_greater_than(0x64, 0x29)
guard_try_firing_walk(0x06)
label(0x29)
if_random_seed_greater_than(0x96, 0x29)
guard_try_firing_run(0x06)
label(0x29)
if_random_seed_greater_than(0xc8, 0x29)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06)
label(0x29)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06)
label(0x06)
ai_sleep
if_guard_has_stopped_moving(0x29)
goto_first(0x06)
label(0x29)
if_guard_and_bond_within_line_of_sight(0x29)
goto_next(0x07)
label(0x07)
ai_sleep
goto_first(0x37)
label(0x29)
ai_sleep
goto_first(0x3a)
ai_list_end
};
u8 ai_13[] = {
objective_bitfield_set_on(0x00010000)
label(0x04)
ai_sleep
if_bond_in_room_with_pad(0xa500, 0x3d)
if_bond_in_room_with_pad(0xa800, 0x3e)
if_bond_in_room_with_pad(0x9300, 0x3f)
if_bond_in_room_with_pad(0x9100, 0x40)
if_bond_in_room_with_pad(0x8e00, 0x41)
ai_sleep
if_bond_in_room_with_pad(0xac00, 0x42)
if_bond_in_room_with_pad(0x8400, 0x43)
if_bond_in_room_with_pad(0x6800, 0x44)
if_bond_in_room_with_pad(0x6600, 0x45)
if_bond_in_room_with_pad(0x3500, 0x46)
goto_first(0x04)
label(0x3d)
ai_sleep
chr_set_pad_preset(0x20, 0x1a00)
chr_set_pad_preset(0x21, 0x1e00)
chr_set_pad_preset(0x22, 0x6d00)
chr_set_pad_preset(0x23, 0xab00)
chr_set_pad_preset(0x24, 0x8c00)
chr_set_pad_preset(0x25, 0xab00)
chr_set_pad_preset(0x26, 0x8c00)
goto_first(0x04)
label(0x3e)
ai_sleep
chr_set_pad_preset(0x20, 0x8f00)
chr_set_pad_preset(0x21, 0x7100)
chr_set_pad_preset(0x22, 0x6d00)
chr_set_pad_preset(0x23, 0xab00)
chr_set_pad_preset(0x24, 0x8c00)
chr_set_pad_preset(0x25, 0xab00)
chr_set_pad_preset(0x26, 0x8c00)
goto_first(0x04)
label(0x3f)
ai_sleep
chr_set_pad_preset(0x20, 0x8f00)
chr_set_pad_preset(0x21, 0x7100)
chr_set_pad_preset(0x22, 0x6d00)
chr_set_pad_preset(0x23, 0xab00)
chr_set_pad_preset(0x24, 0x8e00)
chr_set_pad_preset(0x25, 0xab00)
chr_set_pad_preset(0x26, 0x8e00)
goto_first(0x04)
label(0x40)
ai_sleep
chr_set_pad_preset(0x20, 0x6700)
chr_set_pad_preset(0x21, 0x6600)
chr_set_pad_preset(0x22, 0x7100)
chr_set_pad_preset(0x23, 0x8e00)
chr_set_pad_preset(0x24, 0x0600)
chr_set_pad_preset(0x25, 0x8e00)
chr_set_pad_preset(0x26, 0x0600)
goto_first(0x04)
label(0x41)
ai_sleep
chr_set_pad_preset(0x20, 0x1a00)
chr_set_pad_preset(0x21, 0x1e00)
chr_set_pad_preset(0x22, 0x7100)
chr_set_pad_preset(0x23, 0x0500)
chr_set_pad_preset(0x24, 0x0600)
chr_set_pad_preset(0x25, 0x0500)
chr_set_pad_preset(0x26, 0x0600)
goto_first(0x04)
label(0x42)
ai_sleep
chr_set_pad_preset(0x20, 0x6700)
chr_set_pad_preset(0x21, 0x0500)
chr_set_pad_preset(0x22, 0x1b00)
chr_set_pad_preset(0x23, 0x1f00)
chr_set_pad_preset(0x24, 0x1d00)
chr_set_pad_preset(0x25, 0x1f00)
chr_set_pad_preset(0x26, 0x1d00)
goto_first(0x04)
label(0x43)
ai_sleep
chr_set_pad_preset(0x20, 0x1d00)
chr_set_pad_preset(0x21, 0x1f00)
chr_set_pad_preset(0x22, 0x1c00)
chr_set_pad_preset(0x23, 0x8e00)
chr_set_pad_preset(0x24, 0x6600)
chr_set_pad_preset(0x25, 0x8e00)
chr_set_pad_preset(0x26, 0x6600)
goto_first(0x04)
label(0x44)
ai_sleep
chr_set_pad_preset(0x20, 0x8e00)
chr_set_pad_preset(0x21, 0x7100)
chr_set_pad_preset(0x22, 0x1f00)
chr_set_pad_preset(0x23, 0x1b00)
chr_set_pad_preset(0x24, 0x1e00)
chr_set_pad_preset(0x25, 0x1b00)
chr_set_pad_preset(0x26, 0x1e00)
goto_first(0x04)
label(0x45)
ai_sleep
chr_set_pad_preset(0x20, 0x1c00)
chr_set_pad_preset(0x21, 0x1d00)
chr_set_pad_preset(0x22, 0x8e00)
chr_set_pad_preset(0x23, 0x1a00)
chr_set_pad_preset(0x24, 0x7100)
chr_set_pad_preset(0x25, 0x1a00)
chr_set_pad_preset(0x26, 0x7100)
goto_first(0x04)
label(0x46)
ai_sleep
chr_set_pad_preset(0x20, 0x1f00)
chr_set_pad_preset(0x21, 0x1a00)
chr_set_pad_preset(0x22, 0x8f00)
chr_set_pad_preset(0x23, 0x1e00)
chr_set_pad_preset(0x24, 0x8e00)
chr_set_pad_preset(0x25, 0x1e00)
chr_set_pad_preset(0x26, 0x8e00)
goto_first(0x04)
ai_list_end
};
u8 ai_14[] = {
guard_set_chr_num(0x20)
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x19, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '1', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0404, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '1', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
};
u8 ai_15[] = {
guard_set_chr_num(0x21)
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1a, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '2', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0504, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '2', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
goto_next(0x00)
goto_next(0x8e)
guard_remove_fade
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1b, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '3', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0604, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '3', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
};
u8 ai_16[] = {
guard_set_chr_num(0x23)
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1c, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '4', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0704, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '4', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
};
u8 ai_17[] = {
guard_set_chr_num(0x24)
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1d, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '5', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0804, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '5', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
};
u8 ai_18[] = {
guard_set_chr_num(0x25)
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1e, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '6', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x25, 0xff, 0x2823, 0x0904, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '6', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
goto_next(0x00)
goto_next(0x8e)
alarm_off
local_timer_reset_start
label(0x47)
ai_sleep
if_local_timer_greater_than(0x780000, 0x03)
goto_first(0x47)
label(0x03)
if_objective_bitfield_is_set_on(0x00020000, 0x08)
local_timer_reset_start
label(0x07)
ai_sleep
if_local_timer_greater_than(0x780000, 0x29)
goto_first(0x07)
label(0x29)
if_chr_does_not_exist(0x1f, 0x29)
goto_first(0x03)
label(0x29)
debug_log 's', 'p', 'a', 'w', 'n', '7', '\0',
if_bond_damage_and_pickups_disabled(0x06)
chr_try_spawning_at_pad(0x25, 0xff, 0x2823, 0x0a04, 0x10000000, 0x06)
debug_log '-', '>', 'f', 'a', 'i', 'l', '\0',
goto_first(0x03)
label(0x06)
debug_log 's', '7', ' ', 'O', 'K', '!', '\0',
goto_first(0x03)
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x29)
goto_first(0x08)
label(0x29)
goto_first(0x03)
ai_list_end
};
u8 ai_19[] = {
label(0x04)
ai_sleep
if_object_not_destroyed(0x03, 0x33)
goto_next(0x07)
label(0x33)
if_object_was_activated(0x03, 0x29)
goto_first(0x04)
label(0x29)
if_bond_collected_object(0x02, 0x08)
text_print_top(0x0870)
goto_first(0x04)
label(0x07)
text_print_top(0x0970)
objective_bitfield_set_on(0x00040000)
jump_to_ai_list(0xfd, 0x0100)
label(0x08)
if_bond_is_dead(0x48)
objective_bitfield_set_on(0x00080000)
object_flags_1_set_on(0x03, 0x00000200)
object_flags_2_set_on(0x03, 0x00000004)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x09)
ai_sleep
if_screen_fade_completed(0x29)
goto_first(0x09)
label(0x29)
if_objective_all_completed(0x29)
jump_to_ai_list(0xfd, 0x0f00)
label(0x29)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x06, 0x0200, 0x0000)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
screen_fade_from_black
music_xtrack_play(0x00, 0x00, 0xff)
object_move_to_pad(0x03, 0x4c00)
objective_bitfield_set_on(0x00100000)
local_timer_reset_start
ai_sleep
ai_sleep
label(0x0a)
ai_sleep
if_screen_fade_completed(0x29)
goto_first(0x0a)
label(0x29)
label(0x0b)
ai_sleep
if_local_timer_greater_than(0xdc0000, 0x29)
goto_first(0x0b)
label(0x29)
screen_fade_to_black
label(0x0c)
ai_sleep
if_screen_fade_completed(0x29)
goto_first(0x0c)
label(0x29)
exit_level
jump_to_ai_list(0xfd, 0x0100)
label(0x48)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_11[] = {
guard_play_animation(0x6300, 0xffff, 0xffff, 0x04, 0x10)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_20[] = {
label(0x07)
ai_sleep
if_camera_is_in_bond_swirl(0x29)
goto_first(0x07)
label(0x29)
jump_to_ai_list(0xf8, 0x0c04)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_12[] = {
aircraft_rotor_speed(0x0000, 0x0000)
label(0x07)
ai_sleep
if_objective_bitfield_is_set_on(0x00100000, 0x29)
goto_first(0x07)
label(0x29)
aircraft_rotor_speed(0x6c02, 0x0000)
guard_set_pad_preset(0x4c00)
guard_play_animation(0x0100, 0xffff, 0xffff, 0x04, 0x10)
guard_play_animation(0x0100, 0xffff, 0xffff, 0x04, 0x10)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_21[] = {
label(0x07)
ai_sleep
if_objective_bitfield_is_set_on(0x00100000, 0x29)
goto_first(0x07)
label(0x29)
local_timer_reset_start
label(0x04)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x29)
goto_first(0x04)
label(0x29)
sfx_play(0xf800, 0xff)
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+921 -29
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1307,35 +1308,926 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x02040205, 0x03333580, 0x09000802, 0x08ad310a, 0x00ab0064, 0x002f0209, 0xad320a00, 0xab006000, 0x2f022f06, 0x040405fd, 0x04050400 };
u32 ai_4[] = { 0xad670a00, 0x1e232802, 0x2f03691a, 0x0902302f, 0x074dfd00, 0x0a232807, 0x012f0207, 0x9602349c, 0x00000001, 0x2a023407, 0x022a5200, 0x1900632a, 0x022a0604, 0x0505fd04, 0x060209c3, 0x74240600, 0x0205fd04, 0x15040000 };
u32 ai_5[] = { 0x1e006302, 0x08032f2a, 0x52000a00, 0x632a0108, 0x022a9601, 0x2a060405, 0x05fd0407, 0x022a9602, 0x2a060405, 0x05fd0408, 0x022a0704 };
u32 ai_6[] = { 0xad4a310a, 0x00170001, 0x00002a02, 0x2aaec374, 0x1a020003, 0x55005e2a, 0x0007022a, 0xb40004b0, 0x18b40003, 0x8411b400, 0x012c0f01, 0x00020fb4, 0x0001682a, 0xc3741b02, 0x2a010002, 0x11b40003, 0xc02ac374, 0x1c022a01, 0x00021803, 0x00070118, 0x02079401, 0x07040000 };
u32 ai_7[] = { 0xad4a320a, 0x00170001, 0x00002a02, 0x2aaec374, 0x1d020003, 0x55005e2a, 0x0007022a, 0xb40004b0, 0x18b40003, 0x8411b400, 0x012c0f01, 0x00020fb4, 0x0001682a, 0xc3741e02, 0x2a010002, 0x11b40003, 0xc02ac374, 0x1f022a01, 0x00021803, 0x00070118, 0x02079402, 0x07040000 };
u32 ai_8[] = { 0x9d000000, 0x8002059c, 0x00000400, 0x0269032f, 0x96020603, 0x08520019, 0x005f2a01, 0x05022a1e, 0x005f0208, 0x032f2a4d, 0xfd000500, 0x5f2a0108, 0x022a9601, 0x2a060409, 0x05fd040a, 0x022a0604, 0x0905fd04, 0x0b020603, 0x08010502, 0x0206040c, 0x05fd040d, 0x022fa703, 0x20000000, 0x9a000004, 0x00010504 };
u32 ai_9[] = { 0xad4e310a, 0x0008aec3, 0x74090200, 0x0355005e, 0x2a000702, 0x2ab4000a, 0x8c18b400, 0x096017b4, 0x00083416, 0xb4000708, 0x15b40005, 0xdc14b400, 0x04b013b4, 0x00038412, 0xb4000258, 0x11b40001, 0x2c100100, 0x0210b400, 0x01682ac3, 0x740a022a, 0x01000211, 0xb4000294, 0x2ac3740b, 0x022a0100, 0x0212b400, 0x03c02ac3, 0x740c022a, 0x01000213, 0xb40004ec, 0x2ac3740d, 0x022a0100, 0x0214b400, 0x06182ac3, 0x740e022a, 0x01000215, 0xb4000744, 0x2ac3740f, 0x022a0100, 0x0216b400, 0x08702ac3, 0x7410022a, 0x01000217, 0xb400099c, 0x2ac37411, 0x022a0100, 0x021803c3, 0x74120007, 0x01180207, 0x94010704 };
u32 ai_10[] = { 0xad4e320a, 0x0008ae02, 0x00035500, 0x5e2a0007, 0x022ab400, 0x0bb818b4, 0x000a8c17, 0xb4000960, 0x16b40008, 0x3415b400, 0x070814b4, 0x0005dc13, 0xb40004b0, 0x12b40003, 0x8411b400, 0x025810b4, 0x00012c0f, 0x0100020f, 0xb4000168, 0x2ac37413, 0x022a0100, 0x0210b400, 0x02942ac3, 0x7414022a, 0x01000211, 0xb40003c0, 0x2ac37415, 0x022a0100, 0x0212b400, 0x04ec2ac3, 0x7416022a, 0x01000213, 0xb4000618, 0x2ac37417, 0x022a0100, 0x0214b400, 0x07442ac3, 0x7418022a, 0x01000215, 0xb4000870, 0x2a022a01, 0x000216b4, 0x00099c2a, 0x022a0100, 0x0217b400, 0x0ac82a02, 0x2a010002, 0x18030007, 0x01180207, 0x94029a00, 0x00000107, 0x04000000 };
u32 ai_11[] = { 0x02050308, 0x01050400 };
u32 ai_12[] = { 0x9a000008, 0x00020203, 0x96042a4d, 0xfd00fa00, 0x392f022a, 0x4b00642a, 0x2805022a, 0x29050102, 0x0205034b, 0x0019082f, 0x07010502, 0x33010202, 0x08080209, 0x034b0008, 0x1d4c0028, 0x07010902, 0x1d47401e, 0x48c01ec3, 0x74200d00, 0x0a021ec3, 0x7421022b, 0xfa000a02, 0x0a032f0b, 0x010a020b, 0x01080207, 0x0102022f, 0x05fd040e, 0x04000000 };
u32 ai_13[] = { 0xc3742602, 0x041c0039, 0x022f0355, 0x0019114d, 0xfd003c00, 0x39082f2a, 0x012f022a, 0x4dfd003c, 0x00390801, 0x0402081e, 0x00390230, 0x03550019, 0x112f2a4d, 0xfd000500, 0x392a0130, 0x022a4dfd, 0x000a0039, 0x09010802, 0x09170008, 0x272b2a02, 0x2aae9a00, 0x00200002, 0x00035500, 0x19114234, 0xd9000039, 0x34023403, 0x5b233400, 0x1102345b, 0x24340011, 0x0234022a, 0xb4000384, 0x11b40002, 0x5810b400, 0x012c0f02, 0x01032f2a, 0x0100022a, 0x3335642a, 0x0a00ac00, 0x00004500, 0x109a0000, 0x40000100, 0x022a3596, 0x2a0a00ad, 0x0000004a, 0x00109a00, 0x00400001, 0x00022a35, 0xc82a0a00, 0xae000000, 0x4f00109a, 0x00004000, 0x0100022a, 0x0a00af00, 0x00005900, 0x109a0000, 0x40000100, 0x020fb400, 0x01682ac3, 0x7427022a, 0x01000210, 0xb4000294, 0x2ac37428, 0x022a0100, 0x021103c3, 0x74290007, 0x0207ad67, 0x6f009404, 0x9a000020, 0x0005fd04, 0x16040000 };
u32 ai_28[] = { 0x0205039c, 0x00004000, 0x2a010502, 0x2aae0208, 0x03b40000, 0x3c2a0108, 0x022a3335, 0x8034c400, 0xb807c507, 0x24000002, 0x349b0000, 0x40000105, 0x020705fd, 0x00010400 };
u32 ai_21[] = { 0x0204ad47, 0x4f001c00, 0x78020803, 0x2f2a0108, 0x022a4dfd, 0x00140078, 0x2a010402, 0x2a170001, 0x00002a02, 0x2a020703, 0x01070400 };
u32 ai_25[] = { 0xad68656c, 0x6c6f0002, 0x05033736, 0x01050236, 0x0235aead, 0x210a0003, 0x31232a00, 0x34022af3, 0x34bd26ff, 0x00320410, 0x00000001, 0x2a023402, 0x2a033124, 0x2a003402, 0x2af334bd, 0x26ff0032, 0x04110000, 0x00012a02, 0x34022a03, 0x31252a00, 0x34022af3, 0x34bd26ff, 0x00320412, 0x00000001, 0x2a023402, 0x2a033126, 0x2a003402, 0x2af334bd, 0x26ff0032, 0x04130000, 0x00012a02, 0x34022a03, 0x31272a00, 0x34022af3, 0x34bd26ff, 0x00320414, 0x00000001, 0x2a023402, 0x0703b400, 0x07082a01, 0x07022a01, 0x35040000 };
u32 ai_15[] = { 0x8e23ad68, 0x310a0005, 0xfd040f04 };
u32 ai_16[] = { 0x8e24ad68, 0x320a0005, 0xfd040f04 };
u32 ai_17[] = { 0x8e25ad68, 0x330a0005, 0xfd040f04 };
u32 ai_18[] = { 0x8e26ad68, 0x340a0005, 0xfd040f04 };
u32 ai_19[] = { 0x8e27ad68, 0x350a0005, 0xfd040f04 };
u32 ai_14[] = { 0x022a3335, 0x64373532, 0x348f003c, 0x911e931e, 0x8d33bf00, 0xb8080000, 0x00002a02, 0x2ac000dc, 0x00000000, 0x07000702, 0x348f0028, 0x90003c91, 0x1e931ebf, 0x00c10780, 0x0000002a, 0x022ac000, 0xde000000, 0x002a022a, 0xbf00c107, 0x90000000, 0x07000702, 0x378f003c, 0x90005091, 0x329332c0, 0x00dd0000, 0x00002a02, 0x2abf00cd, 0x06800000, 0x002a022a, 0xbf00cd06, 0x90000000, 0x07020733, 0x35803405, 0xfd000d02, 0x3405fd04, 0x18040000 };
u32 ai_24[] = { 0x0200035b, 0x022a9a00, 0x00100002, 0x2a9c0000, 0x01002a30, 0x0009022a, 0x9c000002, 0x002a5600, 0x08022a01, 0x00020856, 0x012a0100, 0x022a9a00, 0x00020001, 0x0002099a, 0x00000100, 0xc37422c2, 0x74230100, 0x04000000 };
u32 ai_26[] = { 0x0205039c, 0x00002000, 0x2a010502, 0x2ad00500, 0x10d00600, 0x0fc400e3, 0x00c60027, 0x570000d0, 0x070003d0, 0x08000f03, 0xd0090003, 0xd00a0005, 0xc400c601, 0xc6012757, 0x0000d00b, 0x000fd00c, 0x001303d0, 0x0d0005d0, 0x0e000cc4, 0x00e302c6, 0x02275700, 0x00d00f00, 0x08d01000, 0x0d03d011, 0x000dd012, 0x000ec400, 0xe303c603, 0x27570000, 0xd013000d, 0xd0140002, 0x03d01500, 0x10d01600, 0x0dc400c6, 0x04c60427, 0x570000d0, 0x170008d0, 0x180011d0, 0x190003ae, 0xc400a205, 0xc7050000, 0x00000209, 0x03b40000, 0x782a0109, 0x022a03c7, 0x057ef407, 0x08b7003c, 0xf40000ff, 0xb9b5020a, 0x03bb000f, 0x2a010a02, 0x2ad00500, 0x2ed00600, 0x2ec400e3, 0x00c60027, 0x570000d0, 0x07002ed0, 0x08002e03, 0xd009002e, 0xd00a002e, 0xc400c601, 0xc6012757, 0x0000d00b, 0x002ed00c, 0x002e03d0, 0x0d002ed0, 0x0e002ec4, 0x00e302c6, 0x02275700, 0x00d00f00, 0x2ed01000, 0x2e03d011, 0x002ed012, 0x002ec400, 0xe303c603, 0x27570000, 0xd013002e, 0xd014002e, 0x03d01500, 0x2ed01600, 0x2ec400c6, 0x04c60427, 0x570000d0, 0x17002ed0, 0x18002ed0, 0x19002e02, 0x0b03bb00, 0x002a010b, 0x022af6b6, 0xb8020c03, 0x010c0400 };
u32 ai_27[] = { 0x020403eb, 0x3e550033, 0x2a010402, 0x2aecd700, 0xda020803, 0xdc2a0108, 0x022af12a, 0x05fd000f, 0x022addea, 0xed030303, 0xd51b0002, 0x0000a100, 0x00000400, 0x54000078, 0x2ad90000, 0x322a022a, 0x05000416, 0xa1f80000, 0x0400d9f8, 0x00772a02, 0x2a05f804, 0x1705fd00, 0x01023e05, 0xfd000104 };
u32 ai_22[] = { 0x0a0059ff, 0xffffff06, 0x10ae03db, 0x020803b4, 0x0000f02a, 0x0108022a, 0xda0209dc, 0x2a030109, 0x022ad202, 0x07030107, 0x04000000 };
u32 ai_20[] = { 0x02041500, 0x2100002a, 0x4607022a, 0x02080346, 0x073c2a01, 0x08022a16, 0x00010000, 0x2a022a02, 0x09034607, 0x2f2a0109, 0x022a0104, 0x020705fd, 0x000d0400 };
u32 ai_23[] = { 0x02382808, 0x0208034c, 0x01f4343c, 0x3902342f, 0x3a010802, 0x393c2a00, 0x07023a03, 0x0138022a, 0x023b3335, 0x0a2a1a07, 0x022a3532, 0x2a0e0702, 0x2a353c2a, 0x1307022a, 0x35502a13, 0x07022a35, 0x642a1107, 0x022a3596, 0x2a120702, 0x2a35c82a, 0x14000100, 0x0007022a, 0x15000100, 0x00070207, 0x032f2a01, 0x07022a3c, 0x2a000802, 0x08030138, 0x022a0301, 0x3b040000 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
label(0x04)
label(0x05)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0x80, 0x09)
goto_next(0x08)
label(0x08)
debug_log '1', '\n', '\0',
guard_set_pad_preset(0x6400)
goto_next(0x2f)
label(0x09)
debug_log '2', '\n', '\0',
guard_set_pad_preset(0x6000)
goto_next(0x2f)
label(0x2f)
set_return_ai_list(0x0404)
jump_to_ai_list(0xfd, 0x0504)
ai_list_end
};
u8 ai_4[] = {
debug_log 'g', '\n', '\0',
guard_walks_to_pad(0x2823)
label(0x2f)
ai_sleep
if_door_has_been_opened_before(0x1a, 0x09)
label(0x30)
if_guard_has_stopped_moving(0x07)
if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x07)
goto_first(0x2f)
label(0x07)
if_guard_bitfield_is_set_on(0x02, 0x34)
if_objective_bitfield_is_set_on(0x01000000, 0x2a)
label(0x34)
jump_to_return_ai_list
label(0x2a)
if_bond_distance_to_pad_less_than(0x1900, 0x6300, 0x2a)
label(0x2a)
set_return_ai_list(0x0504)
jump_to_ai_list(0xfd, 0x0604)
label(0x09)
text_print_top(0x2474)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x1504)
ai_list_end
};
u8 ai_5[] = {
guard_walks_to_pad(0x6300)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2a)
if_bond_distance_to_pad_less_than(0x0a00, 0x6300, 0x2a)
goto_first(0x08)
label(0x2a)
if_guard_bitfield_is_set_on(0x01, 0x2a)
set_return_ai_list(0x0504)
jump_to_ai_list(0xfd, 0x0704)
label(0x2a)
if_guard_bitfield_is_set_on(0x02, 0x2a)
set_return_ai_list(0x0504)
jump_to_ai_list(0xfd, 0x0804)
label(0x2a)
jump_to_return_ai_list
ai_list_end
};
u8 ai_6[] = {
debug_log 'J', '1', '\n', '\0',
guard_try_facing_target(0x0100, 0x0000, 0x2a)
label(0x2a)
local_timer_reset_start
text_print_top(0x1a74)
label(0x00)
ai_sleep
if_bond_in_room_with_pad(0x5e00, 0x2a)
goto_next(0x07)
label(0x2a)
if_local_timer_greater_than(0xb00400, 0x18)
if_local_timer_greater_than(0x840300, 0x11)
if_local_timer_greater_than(0x2c0100, 0x0f)
goto_first(0x00)
label(0x0f)
if_local_timer_greater_than(0x680100, 0x2a)
text_print_top(0x1b74)
label(0x2a)
goto_first(0x00)
label(0x11)
if_local_timer_greater_than(0xc00300, 0x2a)
text_print_top(0x1c74)
label(0x2a)
goto_first(0x00)
label(0x18)
ai_sleep
goto_next(0x07)
goto_first(0x18)
label(0x07)
guard_bitfield_set_on(0x01)
jump_to_return_ai_list
ai_list_end
};
u8 ai_7[] = {
debug_log 'J', '2', '\n', '\0',
guard_try_facing_target(0x0100, 0x0000, 0x2a)
label(0x2a)
local_timer_reset_start
text_print_top(0x1d74)
label(0x00)
ai_sleep
if_bond_in_room_with_pad(0x5e00, 0x2a)
goto_next(0x07)
label(0x2a)
if_local_timer_greater_than(0xb00400, 0x18)
if_local_timer_greater_than(0x840300, 0x11)
if_local_timer_greater_than(0x2c0100, 0x0f)
goto_first(0x00)
label(0x0f)
if_local_timer_greater_than(0x680100, 0x2a)
text_print_top(0x1e74)
label(0x2a)
goto_first(0x00)
label(0x11)
if_local_timer_greater_than(0xc00300, 0x2a)
text_print_top(0x1f74)
label(0x2a)
goto_first(0x00)
label(0x18)
ai_sleep
goto_next(0x07)
goto_first(0x18)
label(0x07)
guard_bitfield_set_on(0x02)
jump_to_return_ai_list
ai_list_end
};
u8 ai_8[] = {
guard_flags_set_on(0x80000000)
label(0x05)
if_objective_bitfield_is_set_on(0x00040000, 0x02)
if_door_has_been_opened_before(0x03, 0x2f)
if_guard_bitfield_is_set_on(0x02, 0x06)
ai_sleep
guard_animation_stop
if_bond_distance_to_pad_less_than(0x1900, 0x5f00, 0x2a)
goto_first(0x05)
label(0x2a)
guard_walks_to_pad(0x5f00)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0x0500, 0x5f00, 0x2a)
goto_first(0x08)
label(0x2a)
if_guard_bitfield_is_set_on(0x01, 0x2a)
set_return_ai_list(0x0904)
jump_to_ai_list(0xfd, 0x0a04)
label(0x2a)
set_return_ai_list(0x0904)
jump_to_ai_list(0xfd, 0x0b04)
label(0x06)
ai_sleep
guard_animation_stop
goto_first(0x05)
label(0x02)
set_return_ai_list(0x0c04)
jump_to_ai_list(0xfd, 0x0d04)
label(0x2f)
object_flags_2_set_off(0x03, 0x00000020)
objective_bitfield_set_on(0x00040000)
goto_first(0x05)
ai_list_end
};
u8 ai_9[] = {
debug_log 'N', '1', '\n', '\0',
guard_animation_stop
local_timer_reset_start
text_print_top(0x0974)
label(0x00)
ai_sleep
if_bond_in_room_with_pad(0x5e00, 0x2a)
goto_next(0x07)
label(0x2a)
if_local_timer_greater_than(0x8c0a00, 0x18)
if_local_timer_greater_than(0x600900, 0x17)
if_local_timer_greater_than(0x340800, 0x16)
if_local_timer_greater_than(0x080700, 0x15)
if_local_timer_greater_than(0xdc0500, 0x14)
if_local_timer_greater_than(0xb00400, 0x13)
if_local_timer_greater_than(0x840300, 0x12)
if_local_timer_greater_than(0x580200, 0x11)
if_local_timer_greater_than(0x2c0100, 0x10)
goto_first(0x00)
label(0x10)
if_local_timer_greater_than(0x680100, 0x2a)
text_print_top(0x0a74)
label(0x2a)
goto_first(0x00)
label(0x11)
if_local_timer_greater_than(0x940200, 0x2a)
text_print_top(0x0b74)
label(0x2a)
goto_first(0x00)
label(0x12)
if_local_timer_greater_than(0xc00300, 0x2a)
text_print_top(0x0c74)
label(0x2a)
goto_first(0x00)
label(0x13)
if_local_timer_greater_than(0xec0400, 0x2a)
text_print_top(0x0d74)
label(0x2a)
goto_first(0x00)
label(0x14)
if_local_timer_greater_than(0x180600, 0x2a)
text_print_top(0x0e74)
label(0x2a)
goto_first(0x00)
label(0x15)
if_local_timer_greater_than(0x440700, 0x2a)
text_print_top(0x0f74)
label(0x2a)
goto_first(0x00)
label(0x16)
if_local_timer_greater_than(0x700800, 0x2a)
text_print_top(0x1074)
label(0x2a)
goto_first(0x00)
label(0x17)
if_local_timer_greater_than(0x9c0900, 0x2a)
text_print_top(0x1174)
label(0x2a)
goto_first(0x00)
label(0x18)
ai_sleep
text_print_top(0x1274)
goto_next(0x07)
goto_first(0x18)
label(0x07)
guard_bitfield_set_on(0x01)
jump_to_return_ai_list
ai_list_end
};
u8 ai_10[] = {
debug_log 'N', '2', '\n', '\0',
guard_animation_stop
local_timer_reset_start
label(0x00)
ai_sleep
if_bond_in_room_with_pad(0x5e00, 0x2a)
goto_next(0x07)
label(0x2a)
if_local_timer_greater_than(0xb80b00, 0x18)
if_local_timer_greater_than(0x8c0a00, 0x17)
if_local_timer_greater_than(0x600900, 0x16)
if_local_timer_greater_than(0x340800, 0x15)
if_local_timer_greater_than(0x080700, 0x14)
if_local_timer_greater_than(0xdc0500, 0x13)
if_local_timer_greater_than(0xb00400, 0x12)
if_local_timer_greater_than(0x840300, 0x11)
if_local_timer_greater_than(0x580200, 0x10)
if_local_timer_greater_than(0x2c0100, 0x0f)
goto_first(0x00)
label(0x0f)
if_local_timer_greater_than(0x680100, 0x2a)
text_print_top(0x1374)
label(0x2a)
goto_first(0x00)
label(0x10)
if_local_timer_greater_than(0x940200, 0x2a)
text_print_top(0x1474)
label(0x2a)
goto_first(0x00)
label(0x11)
if_local_timer_greater_than(0xc00300, 0x2a)
text_print_top(0x1574)
label(0x2a)
goto_first(0x00)
label(0x12)
if_local_timer_greater_than(0xec0400, 0x2a)
text_print_top(0x1674)
label(0x2a)
goto_first(0x00)
label(0x13)
if_local_timer_greater_than(0x180600, 0x2a)
text_print_top(0x1774)
label(0x2a)
goto_first(0x00)
label(0x14)
if_local_timer_greater_than(0x440700, 0x2a)
text_print_top(0x1874)
label(0x2a)
goto_first(0x00)
label(0x15)
if_local_timer_greater_than(0x700800, 0x2a)
label(0x2a)
goto_first(0x00)
label(0x16)
if_local_timer_greater_than(0x9c0900, 0x2a)
label(0x2a)
goto_first(0x00)
label(0x17)
if_local_timer_greater_than(0xc80a00, 0x2a)
label(0x2a)
goto_first(0x00)
label(0x18)
ai_sleep
goto_next(0x07)
goto_first(0x18)
label(0x07)
guard_bitfield_set_on(0x02)
objective_bitfield_set_on(0x01000000)
jump_to_return_ai_list
ai_list_end
};
u8 ai_11[] = {
label(0x05)
ai_sleep
guard_animation_stop
goto_first(0x05)
ai_list_end
};
u8 ai_12[] = {
objective_bitfield_set_on(0x00080000)
label(0x02)
ai_sleep
if_guard_bitfield_is_set_on(0x04, 0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0xfa00, 0x3900, 0x2f)
label(0x2a)
if_guard_distance_to_bond_less_than(0x6400, 0x2a)
guard_try_running_to_bond_position(0x05)
label(0x2a)
guard_try_walking_to_bond_position(0x05)
goto_first(0x02)
label(0x05)
ai_sleep
if_guard_distance_to_bond_less_than(0x1900, 0x08)
if_guard_has_stopped_moving(0x07)
goto_first(0x05)
label(0x33)
goto_first(0x02)
label(0x08)
guard_animation_stop
label(0x09)
ai_sleep
if_guard_distance_to_bond_less_than(0x0800, 0x1d)
if_guard_distance_to_bond_greater_than(0x2800, 0x07)
goto_first(0x09)
label(0x1d)
if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x1e)
if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x1e)
text_print_top(0x2074)
guard_looks_around_self
goto_next(0x0a)
label(0x1e)
text_print_top(0x2174)
label(0x2b)
guard_raises_arms
goto_next(0x0a)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x0b)
goto_first(0x0a)
label(0x0b)
goto_first(0x08)
label(0x07)
goto_first(0x02)
label(0x2f)
jump_to_ai_list(0xfd, 0x0e04)
ai_list_end
};
u8 ai_13[] = {
text_print_top(0x2674)
label(0x04)
guard_runs_to_pad(0x3900)
label(0x2f)
ai_sleep
if_bond_in_room_with_pad(0x1900, 0x11)
if_chr_distance_to_pad_less_than(0xfd, 0x3c00, 0x3900, 0x08)
if_guard_has_stopped_moving(0x2a)
goto_first(0x2f)
label(0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0x3c00, 0x3900, 0x08)
goto_first(0x04)
label(0x08)
guard_walks_to_pad(0x3900)
label(0x30)
ai_sleep
if_bond_in_room_with_pad(0x1900, 0x11)
if_guard_has_stopped_moving(0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0x0500, 0x3900, 0x2a)
goto_first(0x30)
label(0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x3900, 0x09)
goto_first(0x08)
label(0x09)
guard_try_facing_target(0x0800, 0x2b27, 0x2a)
label(0x2a)
local_timer_reset_start
objective_bitfield_set_on(0x00200000)
label(0x00)
ai_sleep
if_bond_in_room_with_pad(0x1900, 0x11)
if_guard_is_on_screen(0x34)
chr_try_teleporting_to_pad(0x00, 0x3900, 0x34)
label(0x34)
ai_sleep
if_object_not_destroyed(0x23, 0x34)
goto_next(0x11)
label(0x34)
if_object_not_destroyed(0x24, 0x34)
goto_next(0x11)
label(0x34)
label(0x2a)
if_local_timer_greater_than(0x840300, 0x11)
if_local_timer_greater_than(0x580200, 0x10)
if_local_timer_greater_than(0x2c0100, 0x0f)
label(0x01)
ai_sleep
if_guard_has_stopped_moving(0x2a)
goto_first(0x00)
label(0x2a)
random_generate_seed
if_random_seed_greater_than(0x64, 0x2a)
guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10)
objective_bitfield_set_on(0x00400000)
goto_first(0x00)
label(0x2a)
if_random_seed_greater_than(0x96, 0x2a)
guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10)
objective_bitfield_set_on(0x00400000)
goto_first(0x00)
label(0x2a)
if_random_seed_greater_than(0xc8, 0x2a)
guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10)
objective_bitfield_set_on(0x00400000)
goto_first(0x00)
label(0x2a)
guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10)
objective_bitfield_set_on(0x00400000)
goto_first(0x00)
label(0x0f)
if_local_timer_greater_than(0x680100, 0x2a)
text_print_top(0x2774)
label(0x2a)
goto_first(0x00)
label(0x10)
if_local_timer_greater_than(0x940200, 0x2a)
text_print_top(0x2874)
label(0x2a)
goto_first(0x00)
label(0x11)
ai_sleep
text_print_top(0x2974)
goto_next(0x07)
label(0x07)
debug_log 'g', 'o', '\0',
guard_bitfield_set_on(0x04)
objective_bitfield_set_on(0x00200000)
jump_to_ai_list(0xfd, 0x1604)
ai_list_end
};
u8 ai_28[] = {
label(0x05)
ai_sleep
if_objective_bitfield_is_set_on(0x00400000, 0x2a)
goto_first(0x05)
label(0x2a)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x2a)
goto_first(0x08)
label(0x2a)
random_generate_seed
if_random_seed_greater_than(0x80, 0x34)
sfx_play(0xb800, 0x07)
sfx_emit_from_object(0x07, 0x24, 0x0000)
label(0x34)
objective_bitfield_set_off(0x00400000)
goto_first(0x05)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_21[] = {
label(0x04)
debug_log 'G', 'O', '\0',
guard_runs_to_pad(0x7800)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2a)
goto_first(0x08)
label(0x2a)
if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7800, 0x2a)
goto_first(0x04)
label(0x2a)
guard_try_facing_target(0x0100, 0x0000, 0x2a)
label(0x2a)
label(0x07)
ai_sleep
goto_first(0x07)
ai_list_end
};
u8 ai_25[] = {
debug_log 'h', 'e', 'l', 'l', 'o', '\0',
label(0x05)
ai_sleep
if_alarm_is_on(0x36)
goto_first(0x05)
label(0x36)
label(0x35)
local_timer_reset_start
debug_log '!', '\n', '\0',
ai_sleep
if_chr_does_not_exist(0x23, 0x2a)
goto_next(0x34)
label(0x2a)
if_bond_damage_and_pickups_disabled(0x34)
chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1004, 0x01000000, 0x2a)
label(0x34)
label(0x2a)
ai_sleep
if_chr_does_not_exist(0x24, 0x2a)
goto_next(0x34)
label(0x2a)
if_bond_damage_and_pickups_disabled(0x34)
chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1104, 0x01000000, 0x2a)
label(0x34)
label(0x2a)
ai_sleep
if_chr_does_not_exist(0x25, 0x2a)
goto_next(0x34)
label(0x2a)
if_bond_damage_and_pickups_disabled(0x34)
chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1204, 0x01000000, 0x2a)
label(0x34)
label(0x2a)
ai_sleep
if_chr_does_not_exist(0x26, 0x2a)
goto_next(0x34)
label(0x2a)
if_bond_damage_and_pickups_disabled(0x34)
chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1304, 0x01000000, 0x2a)
label(0x34)
label(0x2a)
ai_sleep
if_chr_does_not_exist(0x27, 0x2a)
goto_next(0x34)
label(0x2a)
if_bond_damage_and_pickups_disabled(0x34)
chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1404, 0x01000000, 0x2a)
label(0x34)
label(0x07)
ai_sleep
if_local_timer_greater_than(0x080700, 0x2a)
goto_first(0x07)
label(0x2a)
goto_first(0x35)
ai_list_end
};
u8 ai_15[] = {
guard_set_chr_num(0x23)
debug_log 'h', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x0f04)
ai_list_end
};
u8 ai_16[] = {
guard_set_chr_num(0x24)
debug_log 'h', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x0f04)
ai_list_end
};
u8 ai_17[] = {
guard_set_chr_num(0x25)
debug_log 'h', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x0f04)
ai_list_end
};
u8 ai_18[] = {
guard_set_chr_num(0x26)
debug_log 'h', '4', '\n', '\0',
jump_to_ai_list(0xfd, 0x0f04)
ai_list_end
};
u8 ai_19[] = {
guard_set_chr_num(0x27)
debug_log 'h', '5', '\n', '\0',
jump_to_ai_list(0xfd, 0x0f04)
ai_list_end
};
u8 ai_14[] = {
label(0x2a)
random_generate_seed
if_random_seed_greater_than(0x64, 0x37)
if_random_seed_greater_than(0x32, 0x34)
guard_set_health_total(0x3c00)
guard_set_speed_rating(0x1e)
guard_set_accuracy_rating(0x1e)
guard_set_grenade_probability(0x33)
guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x2a)
label(0x2a)
guard_try_spawning_hat(0xdc00, 0x00000000, 0x07)
goto_next(0x07)
label(0x34)
guard_set_health_total(0x2800)
guard_set_armour(0x3c00)
guard_set_speed_rating(0x1e)
guard_set_accuracy_rating(0x1e)
guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x2a)
label(0x2a)
guard_try_spawning_hat(0xde00, 0x00000000, 0x2a)
label(0x2a)
guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x07)
goto_next(0x07)
label(0x37)
guard_set_health_total(0x3c00)
guard_set_armour(0x5000)
guard_set_speed_rating(0x32)
guard_set_accuracy_rating(0x32)
guard_try_spawning_hat(0xdd00, 0x00000000, 0x2a)
label(0x2a)
guard_try_spawning_item(0xcd00, 0x06, 0x00000080, 0x2a)
label(0x2a)
guard_try_spawning_item(0xcd00, 0x06, 0x00000090, 0x07)
label(0x07)
random_generate_seed
if_random_seed_greater_than(0x80, 0x34)
jump_to_ai_list(0xfd, 0x0d00)
label(0x34)
jump_to_ai_list(0xfd, 0x1804)
ai_list_end
};
u8 ai_24[] = {
label(0x00)
ai_sleep
if_object_not_destroyed(0x02, 0x2a)
objective_bitfield_set_on(0x00100000)
label(0x2a)
if_objective_bitfield_is_set_on(0x00010000, 0x2a)
if_chr_dying_or_dead(0x00, 0x09)
label(0x2a)
if_objective_bitfield_is_set_on(0x00020000, 0x2a)
if_bond_collected_object(0x00, 0x08)
label(0x2a)
goto_first(0x00)
label(0x08)
if_bond_collected_object(0x01, 0x2a)
goto_first(0x00)
label(0x2a)
objective_bitfield_set_on(0x00020000)
goto_first(0x00)
label(0x09)
objective_bitfield_set_on(0x00010000)
text_print_top(0x2274)
text_print_bottom(0x2374)
goto_first(0x00)
ai_list_end
};
u8 ai_26[] = {
label(0x05)
ai_sleep
if_objective_bitfield_is_set_on(0x00200000, 0x2a)
goto_first(0x05)
label(0x2a)
tv_change_screen_bank(0x05, 0x00, 0x10)
tv_change_screen_bank(0x06, 0x00, 0x0f)
sfx_play(0xe300, 0x00)
sfx_emit_from_pad(0x00, 0x5727, 0x0000)
tv_change_screen_bank(0x07, 0x00, 0x03)
tv_change_screen_bank(0x08, 0x00, 0x0f)
ai_sleep
tv_change_screen_bank(0x09, 0x00, 0x03)
tv_change_screen_bank(0x0a, 0x00, 0x05)
sfx_play(0xc600, 0x01)
sfx_emit_from_pad(0x01, 0x5727, 0x0000)
tv_change_screen_bank(0x0b, 0x00, 0x0f)
tv_change_screen_bank(0x0c, 0x00, 0x13)
ai_sleep
tv_change_screen_bank(0x0d, 0x00, 0x05)
tv_change_screen_bank(0x0e, 0x00, 0x0c)
sfx_play(0xe300, 0x02)
sfx_emit_from_pad(0x02, 0x5727, 0x0000)
tv_change_screen_bank(0x0f, 0x00, 0x08)
tv_change_screen_bank(0x10, 0x00, 0x0d)
ai_sleep
tv_change_screen_bank(0x11, 0x00, 0x0d)
tv_change_screen_bank(0x12, 0x00, 0x0e)
sfx_play(0xe300, 0x03)
sfx_emit_from_pad(0x03, 0x5727, 0x0000)
tv_change_screen_bank(0x13, 0x00, 0x0d)
tv_change_screen_bank(0x14, 0x00, 0x02)
ai_sleep
tv_change_screen_bank(0x15, 0x00, 0x10)
tv_change_screen_bank(0x16, 0x00, 0x0d)
sfx_play(0xc600, 0x04)
sfx_emit_from_pad(0x04, 0x5727, 0x0000)
tv_change_screen_bank(0x17, 0x00, 0x08)
tv_change_screen_bank(0x18, 0x00, 0x11)
tv_change_screen_bank(0x19, 0x00, 0x03)
local_timer_reset_start
sfx_play(0xa200, 0x05)
sfx_set_channel_volume(0x05, 0x0000, 0x0000)
label(0x09)
ai_sleep
if_local_timer_greater_than(0x780000, 0x2a)
goto_first(0x09)
label(0x2a)
ai_sleep
sfx_set_channel_volume(0x05, 0xf47e, 0x0807)
hud_countdown_set(0x3c00)
music_xtrack_play(0x00, 0x00, 0xff)
hud_countdown_start
hud_countdown_show
label(0x0a)
ai_sleep
if_hud_countdown_less_than(0x0f00, 0x2a)
goto_first(0x0a)
label(0x2a)
tv_change_screen_bank(0x05, 0x00, 0x2e)
tv_change_screen_bank(0x06, 0x00, 0x2e)
sfx_play(0xe300, 0x00)
sfx_emit_from_pad(0x00, 0x5727, 0x0000)
tv_change_screen_bank(0x07, 0x00, 0x2e)
tv_change_screen_bank(0x08, 0x00, 0x2e)
ai_sleep
tv_change_screen_bank(0x09, 0x00, 0x2e)
tv_change_screen_bank(0x0a, 0x00, 0x2e)
sfx_play(0xc600, 0x01)
sfx_emit_from_pad(0x01, 0x5727, 0x0000)
tv_change_screen_bank(0x0b, 0x00, 0x2e)
tv_change_screen_bank(0x0c, 0x00, 0x2e)
ai_sleep
tv_change_screen_bank(0x0d, 0x00, 0x2e)
tv_change_screen_bank(0x0e, 0x00, 0x2e)
sfx_play(0xe300, 0x02)
sfx_emit_from_pad(0x02, 0x5727, 0x0000)
tv_change_screen_bank(0x0f, 0x00, 0x2e)
tv_change_screen_bank(0x10, 0x00, 0x2e)
ai_sleep
tv_change_screen_bank(0x11, 0x00, 0x2e)
tv_change_screen_bank(0x12, 0x00, 0x2e)
sfx_play(0xe300, 0x03)
sfx_emit_from_pad(0x03, 0x5727, 0x0000)
tv_change_screen_bank(0x13, 0x00, 0x2e)
tv_change_screen_bank(0x14, 0x00, 0x2e)
ai_sleep
tv_change_screen_bank(0x15, 0x00, 0x2e)
tv_change_screen_bank(0x16, 0x00, 0x2e)
sfx_play(0xc600, 0x04)
sfx_emit_from_pad(0x04, 0x5727, 0x0000)
tv_change_screen_bank(0x17, 0x00, 0x2e)
tv_change_screen_bank(0x18, 0x00, 0x2e)
tv_change_screen_bank(0x19, 0x00, 0x2e)
label(0x0b)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x2a)
goto_first(0x0b)
label(0x2a)
trigger_explosions_around_bond
hud_countdown_hide
hud_countdown_stop
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_27[] = {
label(0x04)
ai_sleep
if_bond_is_dead(0x3e)
if_bond_in_room_with_pad(0x3300, 0x2a)
goto_first(0x04)
label(0x2a)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x2a)
goto_first(0x08)
label(0x2a)
if_objective_all_completed(0x2a)
jump_to_ai_list(0xfd, 0x0f00)
label(0x2a)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x1b, 0x0200, 0x0000)
chr_flags_set_off(0x00, 0x00040000)
if_chr_in_room_with_pad(0x00, 0x7800, 0x2a)
chr_try_teleporting_to_pad(0x00, 0x3200, 0x2a)
label(0x2a)
jump_to_ai_list(0x00, 0x1604)
chr_flags_set_off(0xf8, 0x00040000)
chr_try_teleporting_to_pad(0xf8, 0x7700, 0x2a)
label(0x2a)
jump_to_ai_list(0xf8, 0x1704)
jump_to_ai_list(0xfd, 0x0100)
label(0x3e)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_22[] = {
guard_play_animation(0x5900, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
ai_sleep
screen_fade_from_black
label(0x08)
ai_sleep
if_local_timer_greater_than(0xf00000, 0x2a)
goto_first(0x08)
label(0x2a)
screen_fade_to_black
label(0x09)
if_screen_fade_completed(0x2a)
ai_sleep
goto_first(0x09)
label(0x2a)
exit_level
label(0x07)
ai_sleep
goto_first(0x07)
ai_list_end
};
u8 ai_20[] = {
label(0x04)
guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2a)
if_guard_shot_from_bond_missed(0x07)
label(0x2a)
label(0x08)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_and_bond_within_line_of_sight(0x2a)
goto_first(0x08)
label(0x2a)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2a)
label(0x2a)
label(0x09)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_has_stopped_moving(0x2a)
goto_first(0x09)
label(0x2a)
goto_first(0x04)
label(0x07)
jump_to_ai_list(0xfd, 0x0d00)
ai_list_end
};
u8 ai_23[] = {
label(0x38)
guard_try_running_to_bond_position(0x08)
label(0x08)
ai_sleep
if_guard_distance_to_bond_greater_than(0xf401, 0x34)
if_guard_and_bond_within_line_of_sight(0x39)
label(0x34)
if_guard_has_stopped_moving(0x3a)
goto_first(0x08)
label(0x39)
if_guard_and_bond_within_line_of_sight(0x2a)
goto_next(0x07)
label(0x3a)
ai_sleep
goto_first(0x38)
label(0x2a)
label(0x3b)
random_generate_seed
if_random_seed_greater_than(0x0a, 0x2a)
guard_try_throwing_grenade(0x07)
label(0x2a)
if_random_seed_greater_than(0x32, 0x2a)
guard_try_sidestepping(0x07)
label(0x2a)
if_random_seed_greater_than(0x3c, 0x2a)
guard_try_firing_roll(0x07)
label(0x2a)
if_random_seed_greater_than(0x50, 0x2a)
guard_try_firing_roll(0x07)
label(0x2a)
if_random_seed_greater_than(0x64, 0x2a)
guard_try_firing_walk(0x07)
label(0x2a)
if_random_seed_greater_than(0x96, 0x2a)
guard_try_firing_run(0x07)
label(0x2a)
if_random_seed_greater_than(0xc8, 0x2a)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07)
label(0x2a)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07)
label(0x07)
ai_sleep
if_guard_has_stopped_moving(0x2a)
goto_first(0x07)
label(0x2a)
if_guard_and_bond_within_line_of_sight(0x2a)
goto_next(0x08)
label(0x08)
ai_sleep
goto_first(0x38)
label(0x2a)
ai_sleep
goto_first(0x3b)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+559 -19
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -884,25 +885,564 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0xf300be00, 0xfffd0404, 0x00000002, 0x00020005, 0xfd000204 };
u32 ai_3[] = { 0xbf00b808, 0x00000000, 0x000200c0, 0x00dd0000, 0x00000002, 0x0005fd00, 0x02040000 };
u32 ai_4[] = { 0x8e1aad68, 0x310a0005, 0xfd040904 };
u32 ai_5[] = { 0x8e1bad68, 0x320a0005, 0xfd040904 };
u32 ai_6[] = { 0x8e1cad68, 0x330a0005, 0xfd040904 };
u32 ai_8[] = { 0x3335c806, 0x72007806, 0x35640890, 0x003cc000, 0xde000000, 0x00000200, 0xbf00cd06, 0x80000000, 0x00020033, 0x356400bf, 0x00cd0690, 0x00000000, 0x02000001, 0x02089000, 0x50c000dd, 0x00000000, 0x000200bf, 0x00c10780, 0x00000000, 0x02003335, 0x6400bf00, 0xc1079000, 0x00000002, 0x00000102, 0x06900014, 0xc000dc00, 0x00000000, 0x0200bf00, 0xb8080000, 0x00000002, 0x00020105, 0xfd040b04 };
u32 ai_10[] = { 0x022d2808, 0x0208034c, 0x01f4273c, 0x2f02272f, 0x2e010802, 0x2f3c0600, 0x01022e03, 0x012d0206, 0x02303335, 0x0a061a01, 0x02063532, 0x060e0102, 0x06353c06, 0x13010206, 0x35500613, 0x01020635, 0x64061101, 0x02063596, 0x06120102, 0x0635c806, 0x14000100, 0x00010206, 0x15000100, 0x00010201, 0x032f0601, 0x0102063c, 0x06000802, 0x0803012d, 0x02060301, 0x30040000 };
u32 ai_7[] = { 0x02000346, 0x213b2132, 0x21392196, 0x01210100, 0x0221ae02, 0x0803214b, 0x000f06b4, 0x0002581b, 0x001f0206, 0xb40000b4, 0x06001f02, 0x06452200, 0x1f021b45, 0x1f4c0050, 0x1c3c1f00, 0x1c021f01, 0x08021c95, 0x04951096, 0x01066f20, 0x1d6e081d, 0x6e041d6e, 0x021d6e01, 0x1d010802, 0x06ab0061, 0x0006021d, 0x03333532, 0x061e2328, 0x001e0206, 0x1d021e03, 0x4dfd0064, 0x0063024d, 0xfd000f23, 0x28012f01, 0x011e0201, 0x96012533, 0x4b001406, 0x4506011c, 0x02060100, 0x02229604, 0x06c3780a, 0x94040007, 0x0206b300, 0x01e007c3, 0x780b0207, 0xae961006, 0x94101e00, 0x18020602, 0x23032f01, 0xb400012c, 0x1b012302, 0x014dfd00, 0x0f001806, 0x001b021b, 0x451f4c00, 0x321c3c1f, 0x021f0122, 0x021c011c, 0x0206ae5b, 0x06245b07, 0x24002802, 0x24c37812, 0x0d022803, 0x30fd2a31, 0xfd2a5b06, 0x065b0706, 0x00290206, 0xb4000708, 0x16b40005, 0xdc15b400, 0x04b014b4, 0x00038413, 0xb4000258, 0x12b40001, 0x2c110128, 0x0211b400, 0x016806c3, 0x780e0206, 0x01280212, 0xb4000294, 0x06c3780f, 0x02060128, 0x0213b400, 0x03c006c3, 0x78100206, 0x01280214, 0xb40004ec, 0x06259a00, 0x00010094, 0x01c37811, 0x02060128, 0x0215b400, 0x06180602, 0x06012802, 0x16030006, 0x01160206, 0x01000225, 0x00020100, 0x02060322, 0x01250229, 0xc3781794, 0x01010002, 0x2a05fd00, 0x01020205, 0xfd040c04 };
u32 ai_11[] = { 0x02231c00, 0x65020303, 0x2f064dfd, 0x000f0065, 0x06010302, 0x064dfd00, 0x0f006501, 0x01230201, 0x039c0000, 0x01000670, 0x0206c378, 0x139a0000, 0x02000206, 0x22010102, 0x2a05fd00, 0x01040000 };
u32 ai_13[] = { 0xad68656c, 0x6c6f0002, 0x00033705, 0x01000205, 0xf4003c4b, 0x96010194, 0x010226ae, 0xad210a00, 0x03311a06, 0x00270206, 0xf327bd04, 0xff006104, 0x05000000, 0x01060227, 0x02060331, 0x1b060027, 0x0206f327, 0xbd04ff00, 0x61040600, 0x00000106, 0x02270206, 0x03311c06, 0x00270206, 0xf327bd04, 0xff006104, 0x07000000, 0x01060227, 0x020103b4, 0x0004b006, 0x01010206, 0x01260400 };
u32 ai_14[] = { 0x02080331, 0x19060108, 0x02069c00, 0x00010009, 0x9a000002, 0x00020903, 0x01090400 };
u32 ai_15[] = { 0x0208039c, 0x00000100, 0x095d0606, 0x5d070601, 0x08020659, 0x37060108, 0x0206c378, 0x14010802, 0x09035d06, 0x065d0706, 0x01090206, 0x59370601, 0x090206c3, 0x7815aec4, 0x00e3ff02, 0x00035d06, 0x2402245d, 0x07240224, 0xb40000f0, 0x06010002, 0x06c37816, 0x9a000004, 0x00010904 };
u32 ai_17[] = { 0x022b7002, 0x01020003, 0x6d03015b, 0x06275b07, 0x27000602, 0x27010002, 0x06c3782e, 0x9a000008, 0x00020103, 0x01010400 };
u32 ai_16[] = { 0x022b03eb, 0x2c550064, 0x06012b02, 0x06ecd700, 0xda020803, 0xdc060108, 0x0206f106, 0x05fd000f, 0x0206ddea, 0xed030303, 0xd5090002, 0x0000d9f8, 0x00680602, 0x0605f804, 0x0a05fd00, 0x01022c05, 0xfd000104 };
u32 ai_9[] = { 0xdbf400ff, 0xffdf080a, 0x006affff, 0xffff0610, 0xae020a03, 0xb400003c, 0x06010a02, 0x060a0059, 0xffffffff, 0x0610ae02, 0x0803b400, 0x00b40601, 0x080206da, 0x0209dc06, 0x03010902, 0x06d20201, 0x03010104 };
u32 ai_12[] = { 0x02000330, 0xfd352f2f, 0x0100022f, 0x5b022700, 0x31022732, 0x313e323f, 0x3346343a, 0x323b320b, 0x06333501, 0x0606040d, 0x05fd0003, 0x02060100, 0x02343335, 0x7f310604, 0x0d05fd00, 0x0a023106, 0x040d05fd, 0x00060232, 0x06040d05, 0xfd000802, 0x3306040d, 0x05fd000b, 0x023505fd, 0x00010400 };
u32 ai_18[] = { 0x0200036d, 0x01060100, 0x0206a304, 0x00100000, 0x02010301, 0x01040000 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
if_bond_damage_and_pickups_disabled(0x00)
chr_try_spawning_next_to_unseen_chr(0x00, 0xff, 0xfd, 0x0404, 0x02000000, 0x00)
label(0x00)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_3[] = {
guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_hat(0xdd00, 0x00000000, 0x00)
label(0x00)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_4[] = {
guard_set_chr_num(0x1a)
debug_log 'h', '1', '\n', '\0',
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_5[] = {
guard_set_chr_num(0x1b)
debug_log 'h', '2', '\n', '\0',
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_6[] = {
guard_set_chr_num(0x1c)
debug_log 'h', '3', '\n', '\0',
jump_to_ai_list(0xfd, 0x0904)
ai_list_end
};
u8 ai_8[] = {
random_generate_seed
if_random_seed_greater_than(0xc8, 0x06)
if_mission_time_less_than(0x7800, 0x06)
if_random_seed_greater_than(0x64, 0x08)
guard_set_armour(0x3c00)
guard_try_spawning_hat(0xde00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xcd00, 0x06, 0x00000080, 0x00)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x64, 0x00)
guard_try_spawning_item(0xcd00, 0x06, 0x00000090, 0x00)
label(0x00)
goto_next(0x01)
label(0x08)
guard_set_armour(0x5000)
guard_try_spawning_hat(0xdd00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x00)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x64, 0x00)
guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x00)
label(0x00)
goto_next(0x01)
label(0x06)
guard_set_armour(0x1400)
guard_try_spawning_hat(0xdc00, 0x00000000, 0x00)
label(0x00)
guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00)
label(0x00)
label(0x01)
jump_to_ai_list(0xfd, 0x0b04)
ai_list_end
};
u8 ai_10[] = {
label(0x2d)
guard_try_running_to_bond_position(0x08)
label(0x08)
ai_sleep
if_guard_distance_to_bond_greater_than(0xf401, 0x27)
if_guard_and_bond_within_line_of_sight(0x2f)
label(0x27)
if_guard_has_stopped_moving(0x2e)
goto_first(0x08)
label(0x2f)
if_guard_and_bond_within_line_of_sight(0x06)
goto_next(0x01)
label(0x2e)
ai_sleep
goto_first(0x2d)
label(0x06)
label(0x30)
random_generate_seed
if_random_seed_greater_than(0x0a, 0x06)
guard_try_throwing_grenade(0x01)
label(0x06)
if_random_seed_greater_than(0x32, 0x06)
guard_try_sidestepping(0x01)
label(0x06)
if_random_seed_greater_than(0x3c, 0x06)
guard_try_firing_roll(0x01)
label(0x06)
if_random_seed_greater_than(0x50, 0x06)
guard_try_firing_roll(0x01)
label(0x06)
if_random_seed_greater_than(0x64, 0x06)
guard_try_firing_walk(0x01)
label(0x06)
if_random_seed_greater_than(0x96, 0x06)
guard_try_firing_run(0x01)
label(0x06)
if_random_seed_greater_than(0xc8, 0x06)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01)
label(0x06)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01)
label(0x01)
ai_sleep
if_guard_has_stopped_moving(0x06)
goto_first(0x01)
label(0x06)
if_guard_and_bond_within_line_of_sight(0x06)
goto_next(0x08)
label(0x08)
ai_sleep
goto_first(0x2d)
label(0x06)
ai_sleep
goto_first(0x30)
ai_list_end
};
u8 ai_7[] = {
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x21)
if_guard_see_another_guard_die(0x21)
if_guard_sees_bond(0x21)
if_guard_heard_bond(0x21)
if_guard_bitfield_is_set_on(0x01, 0x21)
goto_first(0x00)
label(0x21)
local_timer_reset_start
label(0x08)
ai_sleep
guard_surrenders
if_guard_distance_to_bond_less_than(0x0f00, 0x06)
if_local_timer_greater_than(0x580200, 0x1b)
goto_next(0x1f)
label(0x06)
if_local_timer_greater_than(0xb40000, 0x06)
goto_next(0x1f)
label(0x06)
if_guard_is_targeted_by_bond(0x22)
goto_next(0x1f)
label(0x1b)
if_guard_is_targeted_by_bond(0x1f)
if_guard_distance_to_bond_greater_than(0x5000, 0x1c)
if_guard_and_bond_within_line_of_sight(0x1f)
goto_next(0x1c)
label(0x1f)
goto_first(0x08)
label(0x1c)
guard_bitfield_set_off(0x04)
guard_bitfield_set_off(0x10)
if_guard_bitfield_is_set_on(0x01, 0x06)
guard_try_unknown6F(0x20, 0x1d)
guard_try_unknown6E(0x08, 0x1d)
guard_try_unknown6E(0x04, 0x1d)
guard_try_unknown6E(0x02, 0x1d)
guard_try_unknown6E(0x01, 0x1d)
goto_first(0x08)
label(0x06)
guard_set_pad_preset(0x6100)
goto_next(0x06)
label(0x1d)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0x32, 0x06)
guard_walks_to_pad(0x2823)
goto_next(0x1e)
label(0x06)
guard_runs_to_pad_preset
label(0x1e)
ai_sleep
if_chr_distance_to_pad_less_than(0xfd, 0x6400, 0x6300, 0x02)
if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x01)
if_guard_has_stopped_moving(0x01)
goto_first(0x1e)
label(0x01)
if_guard_bitfield_is_set_on(0x01, 0x25)
random_generate_seed
if_guard_distance_to_bond_less_than(0x1400, 0x06)
if_guard_is_targeted_by_bond(0x06)
goto_first(0x1c)
label(0x06)
goto_first(0x00)
label(0x22)
if_guard_bitfield_is_set_on(0x04, 0x06)
text_print_top(0x0a78)
guard_bitfield_set_on(0x04)
goto_next(0x07)
label(0x06)
if_local_timer_less_than(0xe00100, 0x07)
text_print_top(0x0b78)
label(0x07)
local_timer_reset_start
if_guard_bitfield_is_set_on(0x10, 0x06)
guard_bitfield_set_on(0x10)
guard_walks_to_pad(0x1800)
label(0x06)
label(0x23)
ai_sleep
if_guard_has_stopped_moving(0x01)
if_local_timer_greater_than(0x2c0100, 0x1b)
goto_first(0x23)
label(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x1800, 0x06)
goto_next(0x1b)
label(0x1b)
if_guard_is_targeted_by_bond(0x1f)
if_guard_distance_to_bond_greater_than(0x3200, 0x1c)
if_guard_and_bond_within_line_of_sight(0x1f)
label(0x1f)
goto_first(0x22)
label(0x1c)
goto_first(0x1c)
label(0x06)
local_timer_reset_start
if_object_not_destroyed(0x06, 0x24)
if_object_not_destroyed(0x07, 0x24)
goto_next(0x28)
label(0x24)
text_print_top(0x1278)
guard_looks_around_self
label(0x28)
ai_sleep
if_chr_dying_or_dead(0xfd, 0x2a)
if_chr_does_not_exist(0xfd, 0x2a)
if_object_not_destroyed(0x06, 0x06)
if_object_not_destroyed(0x07, 0x06)
goto_next(0x29)
label(0x06)
if_local_timer_greater_than(0x080700, 0x16)
if_local_timer_greater_than(0xdc0500, 0x15)
if_local_timer_greater_than(0xb00400, 0x14)
if_local_timer_greater_than(0x840300, 0x13)
if_local_timer_greater_than(0x580200, 0x12)
if_local_timer_greater_than(0x2c0100, 0x11)
goto_first(0x28)
label(0x11)
if_local_timer_greater_than(0x680100, 0x06)
text_print_top(0x0e78)
label(0x06)
goto_first(0x28)
label(0x12)
if_local_timer_greater_than(0x940200, 0x06)
text_print_top(0x0f78)
label(0x06)
goto_first(0x28)
label(0x13)
if_local_timer_greater_than(0xc00300, 0x06)
text_print_top(0x1078)
label(0x06)
goto_first(0x28)
label(0x14)
if_local_timer_greater_than(0xec0400, 0x06)
alarm_on
objective_bitfield_set_on(0x00010000)
guard_bitfield_set_on(0x01)
text_print_top(0x1178)
label(0x06)
goto_first(0x28)
label(0x15)
if_local_timer_greater_than(0x180600, 0x06)
label(0x06)
goto_first(0x28)
label(0x16)
ai_sleep
goto_next(0x06)
goto_first(0x16)
label(0x06)
goto_first(0x00)
label(0x25)
goto_next(0x02)
goto_first(0x00)
label(0x06)
ai_sleep
guard_remove_fade
goto_first(0x25)
label(0x29)
text_print_top(0x1778)
guard_bitfield_set_on(0x01)
goto_first(0x00)
label(0x2a)
jump_to_ai_list(0xfd, 0x0100)
label(0x02)
jump_to_ai_list(0xfd, 0x0c04)
ai_list_end
};
u8 ai_11[] = {
label(0x23)
guard_runs_to_pad(0x6500)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x06)
if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x6500, 0x06)
goto_first(0x03)
label(0x06)
if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x6500, 0x01)
goto_first(0x23)
label(0x01)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x06)
if_game_difficulty_less_than(0x02, 0x06)
text_print_top(0x1378)
objective_bitfield_set_on(0x00020000)
label(0x06)
guard_remove_fade
goto_first(0x01)
label(0x2a)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_13[] = {
debug_log 'h', 'e', 'l', 'l', 'o', '\0',
label(0x00)
ai_sleep
if_alarm_is_on(0x05)
goto_first(0x00)
label(0x05)
music_xtrack_play(0x00, 0x3c, 0x4b)
if_guard_bitfield_is_set_on(0x01, 0x01)
guard_bitfield_set_on(0x01)
label(0x26)
local_timer_reset_start
debug_log '!', '\n', '\0',
ai_sleep
if_chr_does_not_exist(0x1a, 0x06)
goto_next(0x27)
label(0x06)
if_bond_damage_and_pickups_disabled(0x27)
chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0504, 0x01000000, 0x06)
label(0x27)
label(0x06)
ai_sleep
if_chr_does_not_exist(0x1b, 0x06)
goto_next(0x27)
label(0x06)
if_bond_damage_and_pickups_disabled(0x27)
chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0604, 0x01000000, 0x06)
label(0x27)
label(0x06)
ai_sleep
if_chr_does_not_exist(0x1c, 0x06)
goto_next(0x27)
label(0x06)
if_bond_damage_and_pickups_disabled(0x27)
chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0704, 0x01000000, 0x06)
label(0x27)
label(0x01)
ai_sleep
if_local_timer_greater_than(0xb00400, 0x06)
goto_first(0x01)
label(0x06)
goto_first(0x26)
ai_list_end
};
u8 ai_14[] = {
label(0x08)
ai_sleep
if_chr_does_not_exist(0x19, 0x06)
goto_first(0x08)
label(0x06)
if_objective_bitfield_is_set_on(0x00010000, 0x09)
objective_bitfield_set_on(0x00020000)
label(0x09)
ai_sleep
goto_first(0x09)
ai_list_end
};
u8 ai_15[] = {
label(0x08)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x09)
if_bond_used_gadget_on_object(0x06, 0x06)
if_bond_used_gadget_on_object(0x07, 0x06)
goto_first(0x08)
label(0x06)
if_bond_has_item_equipped(0x37, 0x06)
goto_first(0x08)
label(0x06)
text_print_top(0x1478)
goto_first(0x08)
label(0x09)
ai_sleep
if_bond_used_gadget_on_object(0x06, 0x06)
if_bond_used_gadget_on_object(0x07, 0x06)
goto_first(0x09)
label(0x06)
if_bond_has_item_equipped(0x37, 0x06)
goto_first(0x09)
label(0x06)
text_print_top(0x1578)
local_timer_reset_start
sfx_play(0xe300, 0xff)
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x06, 0x24)
label(0x24)
if_bond_used_gadget_on_object(0x07, 0x24)
label(0x24)
if_local_timer_greater_than(0xf00000, 0x06)
goto_first(0x00)
label(0x06)
text_print_top(0x1678)
objective_bitfield_set_on(0x00040000)
goto_first(0x09)
ai_list_end
};
u8 ai_17[] = {
label(0x2b)
if_game_difficulty_less_than(0x02, 0x01)
label(0x00)
ai_sleep
if_objective_num_complete(0x03, 0x01)
if_object_not_destroyed(0x06, 0x27)
if_object_not_destroyed(0x07, 0x27)
goto_next(0x06)
label(0x27)
goto_first(0x00)
label(0x06)
text_print_top(0x2e78)
objective_bitfield_set_on(0x00080000)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_16[] = {
label(0x2b)
ai_sleep
if_bond_is_dead(0x2c)
if_bond_in_room_with_pad(0x6400, 0x06)
goto_first(0x2b)
label(0x06)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x06)
goto_first(0x08)
label(0x06)
if_objective_all_completed(0x06)
jump_to_ai_list(0xfd, 0x0f00)
label(0x06)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x09, 0x0200, 0x0000)
chr_try_teleporting_to_pad(0xf8, 0x6800, 0x06)
label(0x06)
jump_to_ai_list(0xf8, 0x0a04)
jump_to_ai_list(0xfd, 0x0100)
label(0x2c)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_9[] = {
screen_fade_from_black
music_xtrack_play(0x00, 0xff, 0xff)
door_open_instant(0x08)
guard_play_animation(0x6a00, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x06)
goto_first(0x0a)
label(0x06)
guard_play_animation(0x5900, 0xffff, 0xffff, 0x06, 0x10)
local_timer_reset_start
label(0x08)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x06)
goto_first(0x08)
label(0x06)
screen_fade_to_black
label(0x09)
if_screen_fade_completed(0x06)
ai_sleep
goto_first(0x09)
label(0x06)
exit_level
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_12[] = {
label(0x00)
ai_sleep
if_chr_dying_or_dead(0xfd, 0x35)
if_guard_has_stopped_moving(0x2f)
goto_first(0x00)
label(0x2f)
if_object_not_destroyed(0x02, 0x27)
goto_next(0x31)
label(0x27)
if_guard_sees_bond(0x31)
if_guard_was_shot_or_seen_bond_within_last_10_secs(0x32)
if_guard_heard_bond_within_last_10_secs(0x33)
if_guard_shot_from_bond_missed(0x34)
if_guard_see_another_guard_shot(0x32)
if_guard_see_another_guard_die(0x32)
if_guard_playing_animation(0x06)
random_generate_seed
if_random_seed_greater_than(0x01, 0x06)
set_return_ai_list(0x0d04)
jump_to_ai_list(0xfd, 0x0300)
label(0x06)
goto_first(0x00)
label(0x34)
random_generate_seed
if_random_seed_greater_than(0x7f, 0x31)
set_return_ai_list(0x0d04)
jump_to_ai_list(0xfd, 0x0a00)
label(0x31)
set_return_ai_list(0x0d04)
jump_to_ai_list(0xfd, 0x0600)
label(0x32)
set_return_ai_list(0x0d04)
jump_to_ai_list(0xfd, 0x0800)
label(0x33)
set_return_ai_list(0x0d04)
jump_to_ai_list(0xfd, 0x0b00)
label(0x35)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_18[] = {
label(0x00)
ai_sleep
if_objective_num_complete(0x01, 0x06)
goto_first(0x00)
label(0x06)
object_flags_1_set_on(0x04, 0x00001000)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+436 -13
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = {
};
u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 };
u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 };
u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 };
u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 };
u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 };
u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 };
u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 };
u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 };
u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 };
u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 };
u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 };
u8 ai_1[] = {
guard_surrenders
label(0x00)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x00)
label(0x07)
label(0x0b)
ai_sleep
if_chr_dying_or_dead(0xfd, 0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x0b)
label(0x07)
text_print_top(0x0834)
chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08)
label(0x0a)
ai_sleep
goto_first(0x0a)
label(0x0c)
text_print_top(0x0934)
set_return_ai_list(0x0404)
jump_to_ai_list(0xfd, 0x0404)
ai_list_end
};
u8 ai_2[] = {
guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
goto_first(0x00)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_local_timer_greater_than(0x780000, 0x07)
goto_next(0x08)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_local_timer_greater_than(0x960000, 0x07)
goto_next(0x08)
label(0x29)
if_local_timer_greater_than(0xb40000, 0x07)
label(0x08)
if_guard_hits_greater_than(0x00, 0x0b)
goto_first(0x0a)
label(0x07)
guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07)
label(0x07)
ai_sleep
ai_sleep
ai_sleep
ai_sleep
ai_sleep
chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
label(0x0b)
ai_sleep
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0200)
goto_first(0x0b)
ai_list_end
};
u8 ai_3[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x28, 0x07)
guard_set_pad_preset(0x8f00)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x50, 0x07)
guard_set_pad_preset(0x9100)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x78, 0x07)
guard_set_pad_preset(0x9300)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xa0, 0x07)
guard_set_pad_preset(0x9400)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xc8, 0x07)
guard_set_pad_preset(0xa800)
goto_next(0x08)
label(0x07)
guard_set_pad_preset(0xa900)
goto_next(0x08)
label(0x08)
guard_runs_to_pad(0x2823)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04)
if_guard_shot_from_bond_missed(0x23)
goto_first(0x0a)
label(0x23)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x07)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x07)
if_guard_see_another_guard_die(0x07)
if_guard_has_stopped_moving(0x07)
goto_first(0x07)
label(0x07)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e)
jump_to_return_ai_list
label(0x2e)
if_guard_and_bond_within_line_of_sight(0x0c)
text_print_top(0x0a34)
goto_next(0x0d)
label(0x0b)
ai_sleep
goto_first(0x0b)
label(0x0c)
goto_first(0x00)
label(0x0d)
guard_remove_fade
if_objective_bitfield_is_set_on(0x00010000, 0x07)
objective_bitfield_set_on(0x00010000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00020000, 0x07)
objective_bitfield_set_on(0x00020000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00040000, 0x07)
objective_bitfield_set_on(0x00040000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00080000, 0x07)
objective_bitfield_set_on(0x00080000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x07)
objective_bitfield_set_on(0x00100000)
goto_next(0x0e)
label(0x07)
label(0x0e)
ai_sleep
goto_first(0x0e)
ai_list_end
};
u8 ai_0[] = {
aircraft_rotor_speed(0x6c02, 0x0000)
guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00)
label(0x00)
ai_sleep
goto_first(0x00)
ai_list_end
};
u8 ai_5[] = {
label(0x00)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
if_item_is_stationary_within_level(0x2f, 0x08)
goto_first(0x00)
label(0x0c)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_first(0x0c)
label(0x07)
text_print_top(0x0b34)
objective_bitfield_set_off(0x00800000)
objective_bitfield_set_on(0x00400000)
goto_next(0x0a)
label(0x0a)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_next(0x08)
label(0x07)
goto_first(0x0a)
label(0x08)
text_print_top(0x0c34)
objective_bitfield_set_on(0x00800000)
objective_bitfield_set_off(0x00400000)
goto_first(0x0c)
ai_list_end
};
u8 ai_6[] = {
sfx_play(0x3c00, 0x00)
sfx_set_channel_volume(0x00, 0x0000, 0x0000)
label(0x0a)
ai_sleep
if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07)
if_bond_in_room_with_pad(0x6c00, 0x07)
if_bond_in_room_with_pad(0x1c00, 0x07)
if_bond_in_room_with_pad(0x3500, 0x07)
if_bond_in_room_with_pad(0x6e00, 0x07)
if_bond_in_room_with_pad(0x1d00, 0x07)
if_bond_in_room_with_pad(0x7500, 0x07)
if_bond_in_room_with_pad(0x6600, 0x07)
if_bond_in_room_with_pad(0x6300, 0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x08)
goto_first(0x0a)
label(0x07)
debug_log '!', '!', '!', '\n', '\0',
sfx_set_channel_volume(0x00, 0xff7f, 0x7800)
goto_next(0x0b)
label(0x0b)
ai_sleep
if_objective_bitfield_is_set_on(0x00000800, 0x08)
if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07)
goto_first(0x0b)
label(0x07)
debug_log 'o', 'f', 'f', '\n', '\0',
sfx_set_channel_volume(0x00, 0x0000, 0xf000)
goto_first(0x0a)
label(0x08)
debug_log 'b', 'a', 'n', 'g', '\n', '\0',
object_flags_1_set_off(0x03, 0x00000200)
object_destroy(0x03)
sfx_stop_channel(0x00)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_7[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x01, 0x07)
if_object_was_activated(0x01, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x01)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x01)
sfx_emit_from_object(0x01, 0x01, 0x0000)
objective_bitfield_set_on(0x00000100)
text_print_top(0x0d34)
object_flags_1_set_on(0x01, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_8[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x02, 0x07)
if_object_was_activated(0x02, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x02)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x02)
sfx_emit_from_object(0x02, 0x02, 0x0000)
objective_bitfield_set_on(0x00000200)
text_print_top(0x0e34)
object_flags_1_set_on(0x02, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_9[] = {
label(0x2a)
ai_sleep
if_objective_bitfield_is_set_on(0x00000400, 0x07)
if_object_not_destroyed(0x01, 0x07)
objective_bitfield_set_on(0x00000400)
label(0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x07)
if_object_not_destroyed(0x02, 0x07)
objective_bitfield_set_on(0x00000800)
label(0x07)
goto_first(0x2a)
ai_list_end
};
u8 ai_10[] = {
label(0x0a)
ai_sleep
if_bond_in_room_with_pad(0x9900, 0x07)
if_bond_in_room_with_pad(0x9500, 0x07)
goto_next(0x03)
label(0x07)
goto_first(0x0a)
label(0x03)
ai_sleep
if_bond_is_dead(0x2f)
if_bond_in_room_with_pad(0x9900, 0x07)
goto_first(0x03)
label(0x07)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x0e)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0e)
label(0x07)
if_objective_all_completed(0x07)
jump_to_ai_list(0xfd, 0x0f00)
label(0x07)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
if_bond_has_item_equipped(0x02, 0x07)
if_bond_has_item_equipped(0x03, 0x07)
if_bond_has_item_equipped(0x1a, 0x07)
if_bond_has_item_equipped(0x1b, 0x07)
if_bond_has_item_equipped(0x1c, 0x07)
if_bond_has_item_equipped(0x1d, 0x07)
if_bond_has_item_equipped(0x18, 0x07)
if_bond_has_item_equipped(0x19, 0x07)
if_bond_has_item_equipped(0x04, 0x07)
if_bond_has_item_equipped(0x05, 0x07)
if_bond_has_item_equipped(0x06, 0x07)
if_bond_has_item_equipped(0x07, 0x07)
if_bond_has_item_equipped(0x08, 0x07)
if_bond_has_item_equipped(0x09, 0x07)
if_bond_has_item_equipped(0x0a, 0x07)
if_bond_has_item_equipped(0x0b, 0x07)
if_bond_has_item_equipped(0x0c, 0x07)
if_bond_has_item_equipped(0x0d, 0x07)
if_bond_has_item_equipped(0x0e, 0x07)
if_bond_has_item_equipped(0x0f, 0x07)
if_bond_has_item_equipped(0x10, 0x07)
if_bond_has_item_equipped(0x11, 0x07)
if_bond_has_item_equipped(0x12, 0x07)
if_bond_has_item_equipped(0x13, 0x07)
if_bond_has_item_equipped(0x16, 0x07)
if_bond_has_item_equipped(0x14, 0x07)
if_bond_has_item_equipped(0x15, 0x07)
bond_equip_item_cinema(0x04)
label(0x07)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x04, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x0504)
screen_fade_from_black
label(0x0f)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0f)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
label(0x2f)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x01)
guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10)
label(0x0b)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0b)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x00)
guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10)
local_timer_reset_start
label(0x0c)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_local_timer_greater_than(0xde0000, 0x07)
goto_first(0x0c)
label(0x07)
screen_fade_to_black
label(0x0d)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0d)
label(0x07)
exit_level
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_11[] = {
if_game_difficulty_greater_than(0x01, 0x04)
objective_bitfield_set_on(0x00010000)
if_game_difficulty_greater_than(0x00, 0x04)
objective_bitfield_set_on(0x00020000)
objective_bitfield_set_on(0x00040000)
label(0x04)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_12[] = {
label(0x03)
ai_sleep
chr_flags_set_on(0x2c, 0x00001000)
chr_flags_set_on(0x2d, 0x00001000)
chr_flags_set_on(0x30, 0x00001000)
ai_sleep
chr_flags_set_on(0x31, 0x00001000)
chr_flags_set_on(0x34, 0x00001000)
chr_flags_set_on(0x35, 0x00001000)
label(0x2a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_killed_civilians_greater_than(0x01, 0x07)
goto_first(0x2a)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_killed_civilians_greater_than(0x02, 0x07)
goto_first(0x2a)
label(0x29)
if_killed_civilians_greater_than(0x04, 0x07)
goto_first(0x2a)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x07)
text_print_top(0x1e34)
objective_bitfield_set_on(0x00001000)
goto_first(0x0a)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
+114 -6
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -795,15 +796,122 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 };
u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 };
u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 };
u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 };
u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 };
u8 ai_1[] = {
chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c)
label(0x2c)
guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_3[] = {
label(0x03)
guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
label(0x03)
guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_2[] = {
if_folder_actor_is_equal(0x00, 0x09)
chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c)
label(0x09)
debug_log 'b', '2', '\n', '\0',
chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c)
label(0x2c)
guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2c)
goto_first(0x08)
label(0x2c)
random_generate_seed
if_random_seed_greater_than(0xdc, 0x2c)
guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0304)
goto_first(0x08)
label(0x2c)
guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0404)
goto_first(0x08)
ai_list_end
};
u8 ai_5[] = {
ai_sleep
hud_hide_and_lock_controls_and_pause_mission_time(0x01)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c)
chr_flags_set_on(0xf8, 0x00000100)
chr_flags_set_on(0x00, 0x00000100)
chr_flags_set_on(0xf8, 0x00000200)
chr_flags_set_on(0x00, 0x00000200)
jump_to_ai_list(0xf8, 0x0204)
jump_to_ai_list(0x00, 0x0104)
ai_sleep
ai_sleep
screen_fade_from_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x0b)
label(0x2c)
local_timer_reset_start
label(0x0f)
ai_sleep
if_local_timer_greater_than(0x1e0000, 0x2c)
goto_first(0x0f)
label(0x2c)
text_print_top(0x0850)
local_timer_reset_start
label(0x0c)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0c)
label(0x2c)
text_print_top(0x0950)
local_timer_reset_start
label(0x0d)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0d)
label(0x2c)
text_print_top(0x0a50)
local_timer_reset_start
label(0x0e)
ai_sleep
if_local_timer_greater_than(0x2c0100, 0x2c)
goto_first(0x0e)
label(0x2c)
credits_roll
label(0x08)
ai_sleep
if_credits_has_completed(0x2c)
goto_first(0x08)
label(0x2c)
screen_fade_to_black
label(0x09)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x09)
label(0x2c)
label(0x0a)
ai_sleep
exit_level
goto_first(0x0a)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+684 -32
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1481,38 +1482,689 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x200305fd, 0x00070400 };
u32 ai_4[] = { 0x200405fd, 0x00070400 };
u32 ai_5[] = { 0x200505fd, 0x00070400 };
u32 ai_6[] = { 0x200605fd, 0x00070400 };
u32 ai_7[] = { 0x200705fd, 0x00070400 };
u32 ai_8[] = { 0x200805fd, 0x00070400 };
u32 ai_9[] = { 0x200905fd, 0x00070400 };
u32 ai_10[] = { 0x200a05fd, 0x00070400 };
u32 ai_11[] = { 0x200b05fd, 0x00070400 };
u32 ai_12[] = { 0x200c05fd, 0x00070400 };
u32 ai_13[] = { 0x200d05fd, 0x00070400 };
u32 ai_14[] = { 0x200e05fd, 0x00070400 };
u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 };
u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 };
u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 };
u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 };
u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 };
u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 };
u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 };
u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 };
u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 };
u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 };
u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 };
u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 };
u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 };
u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 };
u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_start_patrol(0x03)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_4[] = {
guard_start_patrol(0x04)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_5[] = {
guard_start_patrol(0x05)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_6[] = {
guard_start_patrol(0x06)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_7[] = {
guard_start_patrol(0x07)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_8[] = {
guard_start_patrol(0x08)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_9[] = {
guard_start_patrol(0x09)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_10[] = {
guard_start_patrol(0x0a)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_11[] = {
guard_start_patrol(0x0b)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_12[] = {
guard_start_patrol(0x0c)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_13[] = {
guard_start_patrol(0x0d)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_14[] = {
guard_start_patrol(0x0e)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_15[] = {
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x1f)
if_guard_has_stopped_moving(0x3c)
goto_first(0x00)
label(0x3c)
if_guard_shot_from_bond_missed(0x1f)
if_guard_see_another_guard_shot(0x1f)
if_guard_see_another_guard_die(0x20)
if_guard_sees_bond(0x17)
ai_sleep
if_guard_heard_bond(0x15)
if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15)
if_guard_heard_bond_within_last_10_secs(0x15)
if_guard_and_bond_within_line_of_sight(0x16)
label(0x3d)
ai_sleep
if_guard_bitfield_is_set_on(0x80, 0x13)
if_guard_has_stopped_moving(0x03)
goto_first(0x00)
label(0x13)
if_guard_is_on_screen(0x23)
goto_first(0x00)
label(0x23)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x0400)
label(0x03)
if_guard_hits_greater_than(0x00, 0x20)
goto_first(0x00)
label(0x04)
goto_first(0x00)
label(0x15)
random_generate_seed
if_random_seed_greater_than(0x40, 0x18)
goto_first(0x00)
label(0x18)
guard_try_running_to_side(0x16)
goto_first(0x00)
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
goto_first(0x00)
label(0x17)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x1b)
if_guard_is_targeted_by_bond(0x1b)
goto_first(0x00)
label(0x1b)
if_guard_distance_to_bond_less_than(0x6400, 0x1f)
if_guard_hits_greater_than(0x00, 0x20)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1104)
label(0x1f)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1204)
label(0x20)
random_generate_seed
if_random_seed_greater_than(0x40, 0x24)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1304)
label(0x24)
debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0',
guard_try_throwing_grenade(0x25)
goto_first(0x00)
label(0x25)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x25)
label(0x01)
goto_first(0x00)
ai_list_end
};
u8 ai_16[] = {
label(0x00)
ai_sleep
if_guard_has_stopped_moving(0x1c)
goto_first(0x00)
label(0x1c)
random_generate_seed
if_random_seed_greater_than(0x96, 0x1d)
random_generate_seed
if_random_seed_greater_than(0x00, 0x1e)
goto_next(0x01)
label(0x1d)
guard_try_sidestepping(0x01)
label(0x1e)
guard_try_running_to_side(0x01)
label(0x01)
ai_sleep
if_guard_has_stopped_moving(0x03)
goto_first(0x01)
label(0x03)
if_guard_and_bond_within_line_of_sight(0x16)
jump_to_return_ai_list
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
jump_to_return_ai_list
label(0x17)
goto_first(0x1c)
ai_list_end
};
u8 ai_17[] = {
label(0x00)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfd, 0x20)
if_guard_shot_from_bond_missed(0x20)
goto_next(0x1f)
label(0x1f)
if_guard_is_targeted_by_bond(0x21)
if_guard_distance_to_bond_greater_than(0xc800, 0x1a)
if_guard_and_bond_within_line_of_sight(0x21)
goto_next(0x1a)
label(0x21)
if_guard_hits_greater_than(0x01, 0x02)
guard_surrenders
goto_first(0x00)
label(0x1a)
goto_next(0x20)
label(0x20)
set_return_ai_list(0x1204)
jump_to_ai_list(0xfd, 0x1304)
label(0x01)
jump_to_return_ai_list
label(0x02)
jump_to_ai_list(0xfd, 0x1000)
ai_list_end
};
u8 ai_18[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
guard_runs_to_pad(0xd100)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01)
if_guard_shot_from_bond_missed(0x1f)
goto_first(0x03)
label(0x1f)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x23)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x23)
if_guard_see_another_guard_die(0x23)
if_guard_has_stopped_moving(0x23)
goto_first(0x23)
label(0x23)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d)
jump_to_return_ai_list
label(0x2d)
if_guard_and_bond_within_line_of_sight(0x04)
guard_remove_fade
jump_to_return_ai_list
label(0x04)
ai_sleep
jump_to_return_ai_list
ai_list_end
};
u8 ai_19[] = {
guard_flags_set_on(0x00080000)
guard_flags_set_on(0x00020000)
guard_set_armour(0x2c01)
guard_set_health_total(0xc800)
guard_set_speed_rating(0x50)
guard_set_accuracy_rating(0x50)
guard_set_argh_rating(0x50)
label(0x34)
ai_sleep
guard_animation_stop
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x34)
label(0x23)
text_print_top(0x0a88)
local_timer_reset_start
label(0x37)
ai_sleep
if_guard_distance_to_bond_less_than(0x3200, 0x38)
if_chr_health_less_than(0xfd, 0xc8, 0x38)
if_local_timer_greater_than(0x080700, 0x38)
if_guard_has_stopped_moving(0x23)
goto_first(0x37)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0x80, 0x23)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a)
label(0x23)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a)
goto_first(0x37)
label(0x3a)
goto_first(0x37)
label(0x38)
jump_to_ai_list(0xfd, 0x1504)
ai_list_end
};
u8 ai_20[] = {
guard_flags_set_on(0x10000000)
if_chr_health_less_than(0xfd, 0xc8, 0x03)
label(0x38)
guard_sprints_to_pad(0xc700)
label(0x39)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xba00, 0x04)
label(0x13)
if_objective_bitfield_is_set_on(0x00200000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05)
label(0x13)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x39)
label(0x07)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x38)
label(0x01)
guard_remove_fade
jump_to_ai_list(0xfd, 0x0100)
label(0x03)
object_drop_from_chr(0x07)
goto_first(0x38)
label(0x04)
door_close(0x0f)
objective_bitfield_set_on(0x00100000)
goto_first(0x38)
label(0x05)
door_close(0x10)
objective_bitfield_set_on(0x00200000)
goto_first(0x38)
ai_list_end
};
u8 ai_26[] = {
label(0x34)
chr_bitfield_set_on(0x36, 0x80)
chr_bitfield_set_on(0x37, 0x80)
chr_bitfield_set_on(0x38, 0x80)
chr_bitfield_set_on(0x39, 0x80)
chr_bitfield_set_on(0x3b, 0x80)
chr_bitfield_set_on(0x3e, 0x80)
chr_bitfield_set_on(0x3f, 0x80)
label(0x37)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x23)
if_object_not_destroyed(0x02, 0x23)
objective_bitfield_set_on(0x00010000)
label(0x23)
if_objective_bitfield_is_set_on(0x00020000, 0x23)
if_object_not_destroyed(0x03, 0x23)
objective_bitfield_set_on(0x00020000)
label(0x23)
if_objective_bitfield_is_set_on(0x00040000, 0x23)
if_object_not_destroyed(0x04, 0x23)
objective_bitfield_set_on(0x00040000)
label(0x23)
if_objective_bitfield_is_set_on(0x00080000, 0x23)
if_object_not_destroyed(0x05, 0x23)
objective_bitfield_set_on(0x00080000)
label(0x23)
goto_first(0x37)
ai_list_end
};
u8 ai_27[] = {
label(0x00)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x00)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_game_difficulty_less_than(0x01, 0x13)
if_local_timer_less_than(0x2c0100, 0x13)
if_game_difficulty_less_than(0x02, 0x3f)
if_game_difficulty_less_than(0x04, 0x40)
label(0x13)
if_item_is_stationary_within_level(0x22, 0x3e)
goto_first(0x03)
label(0x3e)
text_print_top(0x0988)
hud_countdown_set(0x6801)
goto_next(0x34)
label(0x3f)
text_print_top(0x4688)
hud_countdown_set(0xc201)
goto_next(0x34)
label(0x40)
text_print_top(0x4688)
hud_countdown_set(0xfe01)
goto_next(0x34)
label(0x34)
hud_countdown_start
hud_countdown_show
label(0x07)
ai_sleep
if_hud_countdown_less_than(0x1900, 0x23)
goto_first(0x07)
label(0x23)
music_xtrack_play(0x00, 0xff, 0xff)
label(0x04)
ai_sleep
if_hud_countdown_less_than(0x0f00, 0x23)
goto_first(0x04)
label(0x23)
text_print_top(0x0b88)
label(0x05)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x05)
label(0x23)
trigger_explosions_around_bond
hud_countdown_hide
hud_countdown_stop
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_28[] = {
label(0x03)
ai_sleep
if_bond_has_item_equipped(0x01, 0x23)
goto_first(0x03)
label(0x23)
door_open(0x0a)
label(0x04)
ai_sleep
if_bond_has_item_equipped(0x05, 0x23)
goto_first(0x04)
label(0x23)
door_close(0x0a)
goto_first(0x03)
ai_list_end
};
u8 ai_21[] = {
chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10)
label(0x04)
ai_sleep
if_local_timer_greater_than(0x700000, 0x23)
goto_first(0x04)
label(0x23)
chr_remove_item_in_hand(0xfd, 0x00)
chr_remove_item_in_hand(0xfd, 0x01)
label(0x05)
ai_sleep
if_local_timer_greater_than(0xea0000, 0x23)
goto_first(0x05)
label(0x23)
door_close(0x0d)
label(0x06)
ai_sleep
if_door_state_equal(0x0d, 0x01, 0x23)
goto_first(0x06)
label(0x23)
screen_fade_to_black
label(0x07)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x07)
label(0x23)
if_objective_num_complete(0x00, 0x23)
goto_next(0x13)
label(0x23)
camera_switch(0x12, 0x0200, 0x0000)
screen_fade_from_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x08)
label(0x23)
hud_countdown_set(0x0200)
hud_countdown_show
hud_countdown_start
local_timer_reset_start
label(0x09)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x09)
label(0x23)
hud_countdown_hide
object_flags_1_set_off(0x11, 0x00000200)
object_destroy(0x11)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x0a)
label(0x23)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x0b)
label(0x23)
label(0x13)
exit_level
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_22[] = {
guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_30[] = {
label(0x03)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xf8, 0x1704)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_29[] = {
label(0x34)
ai_sleep
if_bond_is_dead(0x3b)
if_bond_in_room_with_pad(0xe800, 0x23)
goto_first(0x34)
label(0x23)
objective_bitfield_set_on(0x00800000)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x04)
hud_countdown_hide
hud_countdown_stop
screen_fade_to_black
label(0x03)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x03)
label(0x23)
if_objective_all_completed(0x23)
jump_to_ai_list(0xfd, 0x0f00)
label(0x23)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
door_open_instant(0x0d)
door_open_instant(0x0e)
if_bond_has_item_equipped(0x02, 0x23)
if_bond_has_item_equipped(0x03, 0x23)
if_bond_has_item_equipped(0x1a, 0x23)
if_bond_has_item_equipped(0x1b, 0x23)
if_bond_has_item_equipped(0x1c, 0x23)
if_bond_has_item_equipped(0x1d, 0x23)
if_bond_has_item_equipped(0x18, 0x23)
if_bond_has_item_equipped(0x19, 0x23)
if_bond_has_item_equipped(0x04, 0x23)
if_bond_has_item_equipped(0x05, 0x23)
if_bond_has_item_equipped(0x06, 0x23)
if_bond_has_item_equipped(0x07, 0x23)
if_bond_has_item_equipped(0x08, 0x23)
if_bond_has_item_equipped(0x09, 0x23)
if_bond_has_item_equipped(0x0a, 0x23)
if_bond_has_item_equipped(0x0b, 0x23)
if_bond_has_item_equipped(0x0c, 0x23)
if_bond_has_item_equipped(0x0d, 0x23)
if_bond_has_item_equipped(0x0e, 0x23)
if_bond_has_item_equipped(0x0f, 0x23)
if_bond_has_item_equipped(0x10, 0x23)
if_bond_has_item_equipped(0x11, 0x23)
if_bond_has_item_equipped(0x12, 0x23)
if_bond_has_item_equipped(0x13, 0x23)
if_bond_has_item_equipped(0x16, 0x23)
if_bond_has_item_equipped(0x14, 0x23)
if_bond_has_item_equipped(0x15, 0x23)
bond_equip_item_cinema(0x05)
label(0x23)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x0c, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x1604)
screen_fade_from_black
label(0x04)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x04)
label(0x23)
jump_to_ai_list(0xfd, 0x0100)
label(0x3b)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_23[] = {
guard_set_speed_rating(0x1e)
guard_set_accuracy_rating(0x14)
guard_set_grenade_probability(0x33)
label(0x34)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x23)
if_guard_see_another_guard_shot(0x23)
if_guard_see_another_guard_die(0x23)
if_guard_sees_bond(0x23)
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x00)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x3a)
if_random_seed_greater_than(0x64, 0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03)
label(0x3a)
guard_try_throwing_grenade(0x03)
label(0x23)
guard_kneel
local_timer_reset_start
label(0x04)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfa, 0x23)
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x04)
label(0x23)
guard_animation_stop
ai_sleep
ai_sleep
ai_sleep
ai_sleep
label(0x23)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23)
label(0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23)
label(0x23)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x03)
label(0x01)
goto_first(0x34)
ai_list_end
};
u8 ai_24[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x7cfc, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_25[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x0000, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_31[] = {
label(0x34)
ai_sleep
chr_flags_set_on(0x36, 0x00001000)
chr_flags_set_on(0x37, 0x00001000)
chr_flags_set_on(0x38, 0x00001000)
chr_flags_set_on(0x39, 0x00001000)
chr_flags_set_on(0x3a, 0x00001000)
ai_sleep
chr_flags_set_on(0x3b, 0x00001000)
chr_flags_set_on(0x3c, 0x00001000)
chr_flags_set_on(0x3d, 0x00001000)
chr_flags_set_on(0x3e, 0x00001000)
chr_flags_set_on(0x3f, 0x00001000)
ai_sleep
label(0x37)
ai_sleep
if_killed_civilians_greater_than(0x02, 0x23)
goto_first(0x37)
label(0x23)
text_print_top(0x0c88)
objective_bitfield_set_on(0x00400000)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+436 -13
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = {
};
u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 };
u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 };
u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 };
u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 };
u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 };
u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 };
u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 };
u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 };
u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 };
u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 };
u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 };
u8 ai_1[] = {
guard_surrenders
label(0x00)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x00)
label(0x07)
label(0x0b)
ai_sleep
if_chr_dying_or_dead(0xfd, 0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x0b)
label(0x07)
text_print_top(0x0834)
chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08)
label(0x0a)
ai_sleep
goto_first(0x0a)
label(0x0c)
text_print_top(0x0934)
set_return_ai_list(0x0404)
jump_to_ai_list(0xfd, 0x0404)
ai_list_end
};
u8 ai_2[] = {
guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
goto_first(0x00)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_local_timer_greater_than(0x780000, 0x07)
goto_next(0x08)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_local_timer_greater_than(0x960000, 0x07)
goto_next(0x08)
label(0x29)
if_local_timer_greater_than(0xb40000, 0x07)
label(0x08)
if_guard_hits_greater_than(0x00, 0x0b)
goto_first(0x0a)
label(0x07)
guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07)
label(0x07)
ai_sleep
ai_sleep
ai_sleep
ai_sleep
ai_sleep
chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
label(0x0b)
ai_sleep
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0200)
goto_first(0x0b)
ai_list_end
};
u8 ai_3[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x28, 0x07)
guard_set_pad_preset(0x8f00)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x50, 0x07)
guard_set_pad_preset(0x9100)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x78, 0x07)
guard_set_pad_preset(0x9300)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xa0, 0x07)
guard_set_pad_preset(0x9400)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xc8, 0x07)
guard_set_pad_preset(0xa800)
goto_next(0x08)
label(0x07)
guard_set_pad_preset(0xa900)
goto_next(0x08)
label(0x08)
guard_runs_to_pad(0x2823)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04)
if_guard_shot_from_bond_missed(0x23)
goto_first(0x0a)
label(0x23)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x07)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x07)
if_guard_see_another_guard_die(0x07)
if_guard_has_stopped_moving(0x07)
goto_first(0x07)
label(0x07)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e)
jump_to_return_ai_list
label(0x2e)
if_guard_and_bond_within_line_of_sight(0x0c)
text_print_top(0x0a34)
goto_next(0x0d)
label(0x0b)
ai_sleep
goto_first(0x0b)
label(0x0c)
goto_first(0x00)
label(0x0d)
guard_remove_fade
if_objective_bitfield_is_set_on(0x00010000, 0x07)
objective_bitfield_set_on(0x00010000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00020000, 0x07)
objective_bitfield_set_on(0x00020000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00040000, 0x07)
objective_bitfield_set_on(0x00040000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00080000, 0x07)
objective_bitfield_set_on(0x00080000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x07)
objective_bitfield_set_on(0x00100000)
goto_next(0x0e)
label(0x07)
label(0x0e)
ai_sleep
goto_first(0x0e)
ai_list_end
};
u8 ai_0[] = {
aircraft_rotor_speed(0x6c02, 0x0000)
guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00)
label(0x00)
ai_sleep
goto_first(0x00)
ai_list_end
};
u8 ai_5[] = {
label(0x00)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
if_item_is_stationary_within_level(0x2f, 0x08)
goto_first(0x00)
label(0x0c)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_first(0x0c)
label(0x07)
text_print_top(0x0b34)
objective_bitfield_set_off(0x00800000)
objective_bitfield_set_on(0x00400000)
goto_next(0x0a)
label(0x0a)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_next(0x08)
label(0x07)
goto_first(0x0a)
label(0x08)
text_print_top(0x0c34)
objective_bitfield_set_on(0x00800000)
objective_bitfield_set_off(0x00400000)
goto_first(0x0c)
ai_list_end
};
u8 ai_6[] = {
sfx_play(0x3c00, 0x00)
sfx_set_channel_volume(0x00, 0x0000, 0x0000)
label(0x0a)
ai_sleep
if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07)
if_bond_in_room_with_pad(0x6c00, 0x07)
if_bond_in_room_with_pad(0x1c00, 0x07)
if_bond_in_room_with_pad(0x3500, 0x07)
if_bond_in_room_with_pad(0x6e00, 0x07)
if_bond_in_room_with_pad(0x1d00, 0x07)
if_bond_in_room_with_pad(0x7500, 0x07)
if_bond_in_room_with_pad(0x6600, 0x07)
if_bond_in_room_with_pad(0x6300, 0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x08)
goto_first(0x0a)
label(0x07)
debug_log '!', '!', '!', '\n', '\0',
sfx_set_channel_volume(0x00, 0xff7f, 0x7800)
goto_next(0x0b)
label(0x0b)
ai_sleep
if_objective_bitfield_is_set_on(0x00000800, 0x08)
if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07)
goto_first(0x0b)
label(0x07)
debug_log 'o', 'f', 'f', '\n', '\0',
sfx_set_channel_volume(0x00, 0x0000, 0xf000)
goto_first(0x0a)
label(0x08)
debug_log 'b', 'a', 'n', 'g', '\n', '\0',
object_flags_1_set_off(0x03, 0x00000200)
object_destroy(0x03)
sfx_stop_channel(0x00)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_7[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x01, 0x07)
if_object_was_activated(0x01, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x01)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x01)
sfx_emit_from_object(0x01, 0x01, 0x0000)
objective_bitfield_set_on(0x00000100)
text_print_top(0x0d34)
object_flags_1_set_on(0x01, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_8[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x02, 0x07)
if_object_was_activated(0x02, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x02)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x02)
sfx_emit_from_object(0x02, 0x02, 0x0000)
objective_bitfield_set_on(0x00000200)
text_print_top(0x0e34)
object_flags_1_set_on(0x02, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_9[] = {
label(0x2a)
ai_sleep
if_objective_bitfield_is_set_on(0x00000400, 0x07)
if_object_not_destroyed(0x01, 0x07)
objective_bitfield_set_on(0x00000400)
label(0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x07)
if_object_not_destroyed(0x02, 0x07)
objective_bitfield_set_on(0x00000800)
label(0x07)
goto_first(0x2a)
ai_list_end
};
u8 ai_10[] = {
label(0x0a)
ai_sleep
if_bond_in_room_with_pad(0x9900, 0x07)
if_bond_in_room_with_pad(0x9500, 0x07)
goto_next(0x03)
label(0x07)
goto_first(0x0a)
label(0x03)
ai_sleep
if_bond_is_dead(0x2f)
if_bond_in_room_with_pad(0x9900, 0x07)
goto_first(0x03)
label(0x07)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x0e)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0e)
label(0x07)
if_objective_all_completed(0x07)
jump_to_ai_list(0xfd, 0x0f00)
label(0x07)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
if_bond_has_item_equipped(0x02, 0x07)
if_bond_has_item_equipped(0x03, 0x07)
if_bond_has_item_equipped(0x1a, 0x07)
if_bond_has_item_equipped(0x1b, 0x07)
if_bond_has_item_equipped(0x1c, 0x07)
if_bond_has_item_equipped(0x1d, 0x07)
if_bond_has_item_equipped(0x18, 0x07)
if_bond_has_item_equipped(0x19, 0x07)
if_bond_has_item_equipped(0x04, 0x07)
if_bond_has_item_equipped(0x05, 0x07)
if_bond_has_item_equipped(0x06, 0x07)
if_bond_has_item_equipped(0x07, 0x07)
if_bond_has_item_equipped(0x08, 0x07)
if_bond_has_item_equipped(0x09, 0x07)
if_bond_has_item_equipped(0x0a, 0x07)
if_bond_has_item_equipped(0x0b, 0x07)
if_bond_has_item_equipped(0x0c, 0x07)
if_bond_has_item_equipped(0x0d, 0x07)
if_bond_has_item_equipped(0x0e, 0x07)
if_bond_has_item_equipped(0x0f, 0x07)
if_bond_has_item_equipped(0x10, 0x07)
if_bond_has_item_equipped(0x11, 0x07)
if_bond_has_item_equipped(0x12, 0x07)
if_bond_has_item_equipped(0x13, 0x07)
if_bond_has_item_equipped(0x16, 0x07)
if_bond_has_item_equipped(0x14, 0x07)
if_bond_has_item_equipped(0x15, 0x07)
bond_equip_item_cinema(0x04)
label(0x07)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x04, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x0504)
screen_fade_from_black
label(0x0f)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0f)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
label(0x2f)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x01)
guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10)
label(0x0b)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0b)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x00)
guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10)
local_timer_reset_start
label(0x0c)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_local_timer_greater_than(0xde0000, 0x07)
goto_first(0x0c)
label(0x07)
screen_fade_to_black
label(0x0d)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0d)
label(0x07)
exit_level
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_11[] = {
if_game_difficulty_greater_than(0x01, 0x04)
objective_bitfield_set_on(0x00010000)
if_game_difficulty_greater_than(0x00, 0x04)
objective_bitfield_set_on(0x00020000)
objective_bitfield_set_on(0x00040000)
label(0x04)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_12[] = {
label(0x03)
ai_sleep
chr_flags_set_on(0x2c, 0x00001000)
chr_flags_set_on(0x2d, 0x00001000)
chr_flags_set_on(0x30, 0x00001000)
ai_sleep
chr_flags_set_on(0x31, 0x00001000)
chr_flags_set_on(0x34, 0x00001000)
chr_flags_set_on(0x35, 0x00001000)
label(0x2a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_killed_civilians_greater_than(0x01, 0x07)
goto_first(0x2a)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_killed_civilians_greater_than(0x02, 0x07)
goto_first(0x2a)
label(0x29)
if_killed_civilians_greater_than(0x04, 0x07)
goto_first(0x2a)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x07)
text_print_top(0x1e34)
objective_bitfield_set_on(0x00001000)
goto_first(0x0a)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
+114 -6
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -798,15 +799,122 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 };
u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 };
u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 };
u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 };
u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 };
u8 ai_1[] = {
chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c)
label(0x2c)
guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_3[] = {
label(0x03)
guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
label(0x03)
guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_2[] = {
if_folder_actor_is_equal(0x00, 0x09)
chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c)
label(0x09)
debug_log 'b', '2', '\n', '\0',
chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c)
label(0x2c)
guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2c)
goto_first(0x08)
label(0x2c)
random_generate_seed
if_random_seed_greater_than(0xdc, 0x2c)
guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0304)
goto_first(0x08)
label(0x2c)
guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0404)
goto_first(0x08)
ai_list_end
};
u8 ai_5[] = {
ai_sleep
hud_hide_and_lock_controls_and_pause_mission_time(0x01)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c)
chr_flags_set_on(0xf8, 0x00000100)
chr_flags_set_on(0x00, 0x00000100)
chr_flags_set_on(0xf8, 0x00000200)
chr_flags_set_on(0x00, 0x00000200)
jump_to_ai_list(0xf8, 0x0204)
jump_to_ai_list(0x00, 0x0104)
ai_sleep
ai_sleep
screen_fade_from_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x0b)
label(0x2c)
local_timer_reset_start
label(0x0f)
ai_sleep
if_local_timer_greater_than(0x1e0000, 0x2c)
goto_first(0x0f)
label(0x2c)
text_print_top(0x0850)
local_timer_reset_start
label(0x0c)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0c)
label(0x2c)
text_print_top(0x0950)
local_timer_reset_start
label(0x0d)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0d)
label(0x2c)
text_print_top(0x0a50)
local_timer_reset_start
label(0x0e)
ai_sleep
if_local_timer_greater_than(0x2c0100, 0x2c)
goto_first(0x0e)
label(0x2c)
credits_roll
label(0x08)
ai_sleep
if_credits_has_completed(0x2c)
goto_first(0x08)
label(0x2c)
screen_fade_to_black
label(0x09)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x09)
label(0x2c)
label(0x0a)
ai_sleep
exit_level
goto_first(0x0a)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+684 -32
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1481,38 +1482,689 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x200305fd, 0x00070400 };
u32 ai_4[] = { 0x200405fd, 0x00070400 };
u32 ai_5[] = { 0x200505fd, 0x00070400 };
u32 ai_6[] = { 0x200605fd, 0x00070400 };
u32 ai_7[] = { 0x200705fd, 0x00070400 };
u32 ai_8[] = { 0x200805fd, 0x00070400 };
u32 ai_9[] = { 0x200905fd, 0x00070400 };
u32 ai_10[] = { 0x200a05fd, 0x00070400 };
u32 ai_11[] = { 0x200b05fd, 0x00070400 };
u32 ai_12[] = { 0x200c05fd, 0x00070400 };
u32 ai_13[] = { 0x200d05fd, 0x00070400 };
u32 ai_14[] = { 0x200e05fd, 0x00070400 };
u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 };
u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 };
u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 };
u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 };
u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 };
u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 };
u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 };
u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 };
u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 };
u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 };
u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 };
u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 };
u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 };
u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 };
u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_start_patrol(0x03)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_4[] = {
guard_start_patrol(0x04)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_5[] = {
guard_start_patrol(0x05)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_6[] = {
guard_start_patrol(0x06)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_7[] = {
guard_start_patrol(0x07)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_8[] = {
guard_start_patrol(0x08)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_9[] = {
guard_start_patrol(0x09)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_10[] = {
guard_start_patrol(0x0a)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_11[] = {
guard_start_patrol(0x0b)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_12[] = {
guard_start_patrol(0x0c)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_13[] = {
guard_start_patrol(0x0d)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_14[] = {
guard_start_patrol(0x0e)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_15[] = {
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x1f)
if_guard_has_stopped_moving(0x3c)
goto_first(0x00)
label(0x3c)
if_guard_shot_from_bond_missed(0x1f)
if_guard_see_another_guard_shot(0x1f)
if_guard_see_another_guard_die(0x20)
if_guard_sees_bond(0x17)
ai_sleep
if_guard_heard_bond(0x15)
if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15)
if_guard_heard_bond_within_last_10_secs(0x15)
if_guard_and_bond_within_line_of_sight(0x16)
label(0x3d)
ai_sleep
if_guard_bitfield_is_set_on(0x80, 0x13)
if_guard_has_stopped_moving(0x03)
goto_first(0x00)
label(0x13)
if_guard_is_on_screen(0x23)
goto_first(0x00)
label(0x23)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x0400)
label(0x03)
if_guard_hits_greater_than(0x00, 0x20)
goto_first(0x00)
label(0x04)
goto_first(0x00)
label(0x15)
random_generate_seed
if_random_seed_greater_than(0x40, 0x18)
goto_first(0x00)
label(0x18)
guard_try_running_to_side(0x16)
goto_first(0x00)
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
goto_first(0x00)
label(0x17)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x1b)
if_guard_is_targeted_by_bond(0x1b)
goto_first(0x00)
label(0x1b)
if_guard_distance_to_bond_less_than(0x6400, 0x1f)
if_guard_hits_greater_than(0x00, 0x20)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1104)
label(0x1f)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1204)
label(0x20)
random_generate_seed
if_random_seed_greater_than(0x40, 0x24)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1304)
label(0x24)
debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0',
guard_try_throwing_grenade(0x25)
goto_first(0x00)
label(0x25)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x25)
label(0x01)
goto_first(0x00)
ai_list_end
};
u8 ai_16[] = {
label(0x00)
ai_sleep
if_guard_has_stopped_moving(0x1c)
goto_first(0x00)
label(0x1c)
random_generate_seed
if_random_seed_greater_than(0x96, 0x1d)
random_generate_seed
if_random_seed_greater_than(0x00, 0x1e)
goto_next(0x01)
label(0x1d)
guard_try_sidestepping(0x01)
label(0x1e)
guard_try_running_to_side(0x01)
label(0x01)
ai_sleep
if_guard_has_stopped_moving(0x03)
goto_first(0x01)
label(0x03)
if_guard_and_bond_within_line_of_sight(0x16)
jump_to_return_ai_list
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
jump_to_return_ai_list
label(0x17)
goto_first(0x1c)
ai_list_end
};
u8 ai_17[] = {
label(0x00)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfd, 0x20)
if_guard_shot_from_bond_missed(0x20)
goto_next(0x1f)
label(0x1f)
if_guard_is_targeted_by_bond(0x21)
if_guard_distance_to_bond_greater_than(0xc800, 0x1a)
if_guard_and_bond_within_line_of_sight(0x21)
goto_next(0x1a)
label(0x21)
if_guard_hits_greater_than(0x01, 0x02)
guard_surrenders
goto_first(0x00)
label(0x1a)
goto_next(0x20)
label(0x20)
set_return_ai_list(0x1204)
jump_to_ai_list(0xfd, 0x1304)
label(0x01)
jump_to_return_ai_list
label(0x02)
jump_to_ai_list(0xfd, 0x1000)
ai_list_end
};
u8 ai_18[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
guard_runs_to_pad(0xd100)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01)
if_guard_shot_from_bond_missed(0x1f)
goto_first(0x03)
label(0x1f)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x23)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x23)
if_guard_see_another_guard_die(0x23)
if_guard_has_stopped_moving(0x23)
goto_first(0x23)
label(0x23)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d)
jump_to_return_ai_list
label(0x2d)
if_guard_and_bond_within_line_of_sight(0x04)
guard_remove_fade
jump_to_return_ai_list
label(0x04)
ai_sleep
jump_to_return_ai_list
ai_list_end
};
u8 ai_19[] = {
guard_flags_set_on(0x00080000)
guard_flags_set_on(0x00020000)
guard_set_armour(0x2c01)
guard_set_health_total(0xc800)
guard_set_speed_rating(0x50)
guard_set_accuracy_rating(0x50)
guard_set_argh_rating(0x50)
label(0x34)
ai_sleep
guard_animation_stop
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x34)
label(0x23)
text_print_top(0x0a88)
local_timer_reset_start
label(0x37)
ai_sleep
if_guard_distance_to_bond_less_than(0x3200, 0x38)
if_chr_health_less_than(0xfd, 0xc8, 0x38)
if_local_timer_greater_than(0x080700, 0x38)
if_guard_has_stopped_moving(0x23)
goto_first(0x37)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0x80, 0x23)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a)
label(0x23)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a)
goto_first(0x37)
label(0x3a)
goto_first(0x37)
label(0x38)
jump_to_ai_list(0xfd, 0x1504)
ai_list_end
};
u8 ai_20[] = {
guard_flags_set_on(0x10000000)
if_chr_health_less_than(0xfd, 0xc8, 0x03)
label(0x38)
guard_sprints_to_pad(0xc700)
label(0x39)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xba00, 0x04)
label(0x13)
if_objective_bitfield_is_set_on(0x00200000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05)
label(0x13)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x39)
label(0x07)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x38)
label(0x01)
guard_remove_fade
jump_to_ai_list(0xfd, 0x0100)
label(0x03)
object_drop_from_chr(0x07)
goto_first(0x38)
label(0x04)
door_close(0x0f)
objective_bitfield_set_on(0x00100000)
goto_first(0x38)
label(0x05)
door_close(0x10)
objective_bitfield_set_on(0x00200000)
goto_first(0x38)
ai_list_end
};
u8 ai_26[] = {
label(0x34)
chr_bitfield_set_on(0x36, 0x80)
chr_bitfield_set_on(0x37, 0x80)
chr_bitfield_set_on(0x38, 0x80)
chr_bitfield_set_on(0x39, 0x80)
chr_bitfield_set_on(0x3b, 0x80)
chr_bitfield_set_on(0x3e, 0x80)
chr_bitfield_set_on(0x3f, 0x80)
label(0x37)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x23)
if_object_not_destroyed(0x02, 0x23)
objective_bitfield_set_on(0x00010000)
label(0x23)
if_objective_bitfield_is_set_on(0x00020000, 0x23)
if_object_not_destroyed(0x03, 0x23)
objective_bitfield_set_on(0x00020000)
label(0x23)
if_objective_bitfield_is_set_on(0x00040000, 0x23)
if_object_not_destroyed(0x04, 0x23)
objective_bitfield_set_on(0x00040000)
label(0x23)
if_objective_bitfield_is_set_on(0x00080000, 0x23)
if_object_not_destroyed(0x05, 0x23)
objective_bitfield_set_on(0x00080000)
label(0x23)
goto_first(0x37)
ai_list_end
};
u8 ai_27[] = {
label(0x00)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x00)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_game_difficulty_less_than(0x01, 0x13)
if_local_timer_less_than(0x2c0100, 0x13)
if_game_difficulty_less_than(0x02, 0x3f)
if_game_difficulty_less_than(0x04, 0x40)
label(0x13)
if_item_is_stationary_within_level(0x22, 0x3e)
goto_first(0x03)
label(0x3e)
text_print_top(0x0988)
hud_countdown_set(0x6801)
goto_next(0x34)
label(0x3f)
text_print_top(0x4688)
hud_countdown_set(0xc201)
goto_next(0x34)
label(0x40)
text_print_top(0x4688)
hud_countdown_set(0xfe01)
goto_next(0x34)
label(0x34)
hud_countdown_start
hud_countdown_show
label(0x07)
ai_sleep
if_hud_countdown_less_than(0x1900, 0x23)
goto_first(0x07)
label(0x23)
music_xtrack_play(0x00, 0xff, 0xff)
label(0x04)
ai_sleep
if_hud_countdown_less_than(0x0f00, 0x23)
goto_first(0x04)
label(0x23)
text_print_top(0x0b88)
label(0x05)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x05)
label(0x23)
trigger_explosions_around_bond
hud_countdown_hide
hud_countdown_stop
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_28[] = {
label(0x03)
ai_sleep
if_bond_has_item_equipped(0x01, 0x23)
goto_first(0x03)
label(0x23)
door_open(0x0a)
label(0x04)
ai_sleep
if_bond_has_item_equipped(0x05, 0x23)
goto_first(0x04)
label(0x23)
door_close(0x0a)
goto_first(0x03)
ai_list_end
};
u8 ai_21[] = {
chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10)
label(0x04)
ai_sleep
if_local_timer_greater_than(0x700000, 0x23)
goto_first(0x04)
label(0x23)
chr_remove_item_in_hand(0xfd, 0x00)
chr_remove_item_in_hand(0xfd, 0x01)
label(0x05)
ai_sleep
if_local_timer_greater_than(0xea0000, 0x23)
goto_first(0x05)
label(0x23)
door_close(0x0d)
label(0x06)
ai_sleep
if_door_state_equal(0x0d, 0x01, 0x23)
goto_first(0x06)
label(0x23)
screen_fade_to_black
label(0x07)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x07)
label(0x23)
if_objective_num_complete(0x00, 0x23)
goto_next(0x13)
label(0x23)
camera_switch(0x12, 0x0200, 0x0000)
screen_fade_from_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x08)
label(0x23)
hud_countdown_set(0x0200)
hud_countdown_show
hud_countdown_start
local_timer_reset_start
label(0x09)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x09)
label(0x23)
hud_countdown_hide
object_flags_1_set_off(0x11, 0x00000200)
object_destroy(0x11)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x0a)
label(0x23)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x0b)
label(0x23)
label(0x13)
exit_level
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_22[] = {
guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_30[] = {
label(0x03)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xf8, 0x1704)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_29[] = {
label(0x34)
ai_sleep
if_bond_is_dead(0x3b)
if_bond_in_room_with_pad(0xe800, 0x23)
goto_first(0x34)
label(0x23)
objective_bitfield_set_on(0x00800000)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x04)
hud_countdown_hide
hud_countdown_stop
screen_fade_to_black
label(0x03)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x03)
label(0x23)
if_objective_all_completed(0x23)
jump_to_ai_list(0xfd, 0x0f00)
label(0x23)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
door_open_instant(0x0d)
door_open_instant(0x0e)
if_bond_has_item_equipped(0x02, 0x23)
if_bond_has_item_equipped(0x03, 0x23)
if_bond_has_item_equipped(0x1a, 0x23)
if_bond_has_item_equipped(0x1b, 0x23)
if_bond_has_item_equipped(0x1c, 0x23)
if_bond_has_item_equipped(0x1d, 0x23)
if_bond_has_item_equipped(0x18, 0x23)
if_bond_has_item_equipped(0x19, 0x23)
if_bond_has_item_equipped(0x04, 0x23)
if_bond_has_item_equipped(0x05, 0x23)
if_bond_has_item_equipped(0x06, 0x23)
if_bond_has_item_equipped(0x07, 0x23)
if_bond_has_item_equipped(0x08, 0x23)
if_bond_has_item_equipped(0x09, 0x23)
if_bond_has_item_equipped(0x0a, 0x23)
if_bond_has_item_equipped(0x0b, 0x23)
if_bond_has_item_equipped(0x0c, 0x23)
if_bond_has_item_equipped(0x0d, 0x23)
if_bond_has_item_equipped(0x0e, 0x23)
if_bond_has_item_equipped(0x0f, 0x23)
if_bond_has_item_equipped(0x10, 0x23)
if_bond_has_item_equipped(0x11, 0x23)
if_bond_has_item_equipped(0x12, 0x23)
if_bond_has_item_equipped(0x13, 0x23)
if_bond_has_item_equipped(0x16, 0x23)
if_bond_has_item_equipped(0x14, 0x23)
if_bond_has_item_equipped(0x15, 0x23)
bond_equip_item_cinema(0x05)
label(0x23)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x0c, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x1604)
screen_fade_from_black
label(0x04)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x04)
label(0x23)
jump_to_ai_list(0xfd, 0x0100)
label(0x3b)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_23[] = {
guard_set_speed_rating(0x1e)
guard_set_accuracy_rating(0x14)
guard_set_grenade_probability(0x33)
label(0x34)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x23)
if_guard_see_another_guard_shot(0x23)
if_guard_see_another_guard_die(0x23)
if_guard_sees_bond(0x23)
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x00)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x3a)
if_random_seed_greater_than(0x64, 0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03)
label(0x3a)
guard_try_throwing_grenade(0x03)
label(0x23)
guard_kneel
local_timer_reset_start
label(0x04)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfa, 0x23)
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x04)
label(0x23)
guard_animation_stop
ai_sleep
ai_sleep
ai_sleep
ai_sleep
label(0x23)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23)
label(0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23)
label(0x23)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x03)
label(0x01)
goto_first(0x34)
ai_list_end
};
u8 ai_24[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x7cfc, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_25[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x0000, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_31[] = {
label(0x34)
ai_sleep
chr_flags_set_on(0x36, 0x00001000)
chr_flags_set_on(0x37, 0x00001000)
chr_flags_set_on(0x38, 0x00001000)
chr_flags_set_on(0x39, 0x00001000)
chr_flags_set_on(0x3a, 0x00001000)
ai_sleep
chr_flags_set_on(0x3b, 0x00001000)
chr_flags_set_on(0x3c, 0x00001000)
chr_flags_set_on(0x3d, 0x00001000)
chr_flags_set_on(0x3e, 0x00001000)
chr_flags_set_on(0x3f, 0x00001000)
ai_sleep
label(0x37)
ai_sleep
if_killed_civilians_greater_than(0x02, 0x23)
goto_first(0x37)
label(0x23)
text_print_top(0x0c88)
objective_bitfield_set_on(0x00400000)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+436 -13
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = {
};
u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 };
u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 };
u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 };
u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 };
u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 };
u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 };
u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 };
u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 };
u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 };
u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 };
u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 };
u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 };
u8 ai_1[] = {
guard_surrenders
label(0x00)
ai_sleep
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x00)
label(0x07)
label(0x0b)
ai_sleep
if_chr_dying_or_dead(0xfd, 0x07)
if_chr_does_not_exist(0xfc, 0x0c)
goto_first(0x0b)
label(0x07)
text_print_top(0x0834)
chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08)
label(0x0a)
ai_sleep
goto_first(0x0a)
label(0x0c)
text_print_top(0x0934)
set_return_ai_list(0x0404)
jump_to_ai_list(0xfd, 0x0404)
ai_list_end
};
u8 ai_2[] = {
guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x07)
if_guard_and_bond_within_line_of_sight(0x07)
if_guard_sees_bond(0x07)
goto_first(0x00)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_local_timer_greater_than(0x780000, 0x07)
goto_next(0x08)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_local_timer_greater_than(0x960000, 0x07)
goto_next(0x08)
label(0x29)
if_local_timer_greater_than(0xb40000, 0x07)
label(0x08)
if_guard_hits_greater_than(0x00, 0x0b)
goto_first(0x0a)
label(0x07)
guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07)
label(0x07)
ai_sleep
ai_sleep
ai_sleep
ai_sleep
ai_sleep
chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a)
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0800)
label(0x0b)
ai_sleep
set_return_ai_list(0x0200)
jump_to_ai_list(0xfd, 0x0200)
goto_first(0x0b)
ai_list_end
};
u8 ai_3[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
random_generate_seed
if_random_seed_greater_than(0x28, 0x07)
guard_set_pad_preset(0x8f00)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x50, 0x07)
guard_set_pad_preset(0x9100)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0x78, 0x07)
guard_set_pad_preset(0x9300)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xa0, 0x07)
guard_set_pad_preset(0x9400)
goto_next(0x08)
label(0x07)
if_random_seed_greater_than(0xc8, 0x07)
guard_set_pad_preset(0xa800)
goto_next(0x08)
label(0x07)
guard_set_pad_preset(0xa900)
goto_next(0x08)
label(0x08)
guard_runs_to_pad(0x2823)
label(0x0a)
ai_sleep
if_guard_has_stopped_moving(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04)
if_guard_shot_from_bond_missed(0x23)
goto_first(0x0a)
label(0x23)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x07)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x07)
if_guard_see_another_guard_die(0x07)
if_guard_has_stopped_moving(0x07)
goto_first(0x07)
label(0x07)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x04)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e)
jump_to_return_ai_list
label(0x2e)
if_guard_and_bond_within_line_of_sight(0x0c)
text_print_top(0x0a34)
goto_next(0x0d)
label(0x0b)
ai_sleep
goto_first(0x0b)
label(0x0c)
goto_first(0x00)
label(0x0d)
guard_remove_fade
if_objective_bitfield_is_set_on(0x00010000, 0x07)
objective_bitfield_set_on(0x00010000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00020000, 0x07)
objective_bitfield_set_on(0x00020000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00040000, 0x07)
objective_bitfield_set_on(0x00040000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00080000, 0x07)
objective_bitfield_set_on(0x00080000)
goto_next(0x0e)
label(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x07)
objective_bitfield_set_on(0x00100000)
goto_next(0x0e)
label(0x07)
label(0x0e)
ai_sleep
goto_first(0x0e)
ai_list_end
};
u8 ai_0[] = {
aircraft_rotor_speed(0x6c02, 0x0000)
guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00)
label(0x00)
ai_sleep
goto_first(0x00)
ai_list_end
};
u8 ai_5[] = {
label(0x00)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
if_item_is_stationary_within_level(0x2f, 0x08)
goto_first(0x00)
label(0x0c)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_first(0x0c)
label(0x07)
text_print_top(0x0b34)
objective_bitfield_set_off(0x00800000)
objective_bitfield_set_on(0x00400000)
goto_next(0x0a)
label(0x0a)
ai_sleep
if_item_is_attached_to_object(0x2f, 0x00, 0x07)
goto_next(0x08)
label(0x07)
goto_first(0x0a)
label(0x08)
text_print_top(0x0c34)
objective_bitfield_set_on(0x00800000)
objective_bitfield_set_off(0x00400000)
goto_first(0x0c)
ai_list_end
};
u8 ai_6[] = {
sfx_play(0x3c00, 0x00)
sfx_set_channel_volume(0x00, 0x0000, 0x0000)
label(0x0a)
ai_sleep
if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07)
if_bond_in_room_with_pad(0x6c00, 0x07)
if_bond_in_room_with_pad(0x1c00, 0x07)
if_bond_in_room_with_pad(0x3500, 0x07)
if_bond_in_room_with_pad(0x6e00, 0x07)
if_bond_in_room_with_pad(0x1d00, 0x07)
if_bond_in_room_with_pad(0x7500, 0x07)
if_bond_in_room_with_pad(0x6600, 0x07)
if_bond_in_room_with_pad(0x6300, 0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x08)
goto_first(0x0a)
label(0x07)
debug_log '!', '!', '!', '\n', '\0',
sfx_set_channel_volume(0x00, 0xff7f, 0x7800)
goto_next(0x0b)
label(0x0b)
ai_sleep
if_objective_bitfield_is_set_on(0x00000800, 0x08)
if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07)
goto_first(0x0b)
label(0x07)
debug_log 'o', 'f', 'f', '\n', '\0',
sfx_set_channel_volume(0x00, 0x0000, 0xf000)
goto_first(0x0a)
label(0x08)
debug_log 'b', 'a', 'n', 'g', '\n', '\0',
object_flags_1_set_off(0x03, 0x00000200)
object_destroy(0x03)
sfx_stop_channel(0x00)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_7[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x01, 0x07)
if_object_was_activated(0x01, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x01)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x01)
sfx_emit_from_object(0x01, 0x01, 0x0000)
objective_bitfield_set_on(0x00000100)
text_print_top(0x0d34)
object_flags_1_set_on(0x01, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_8[] = {
label(0x00)
ai_sleep
if_bond_used_gadget_on_object(0x02, 0x07)
if_object_was_activated(0x02, 0x08)
goto_first(0x00)
label(0x07)
if_bond_has_item_equipped(0x27, 0x0b)
label(0x08)
object_destroy(0x02)
goto_next(0x0c)
label(0x0b)
sfx_play(0xf700, 0x02)
sfx_emit_from_object(0x02, 0x02, 0x0000)
objective_bitfield_set_on(0x00000200)
text_print_top(0x0e34)
object_flags_1_set_on(0x02, 0x00000200)
label(0x0c)
ai_sleep
goto_first(0x0c)
ai_list_end
};
u8 ai_9[] = {
label(0x2a)
ai_sleep
if_objective_bitfield_is_set_on(0x00000400, 0x07)
if_object_not_destroyed(0x01, 0x07)
objective_bitfield_set_on(0x00000400)
label(0x07)
if_objective_bitfield_is_set_on(0x00000800, 0x07)
if_object_not_destroyed(0x02, 0x07)
objective_bitfield_set_on(0x00000800)
label(0x07)
goto_first(0x2a)
ai_list_end
};
u8 ai_10[] = {
label(0x0a)
ai_sleep
if_bond_in_room_with_pad(0x9900, 0x07)
if_bond_in_room_with_pad(0x9500, 0x07)
goto_next(0x03)
label(0x07)
goto_first(0x0a)
label(0x03)
ai_sleep
if_bond_is_dead(0x2f)
if_bond_in_room_with_pad(0x9900, 0x07)
goto_first(0x03)
label(0x07)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x00)
screen_fade_to_black
label(0x0e)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0e)
label(0x07)
if_objective_all_completed(0x07)
jump_to_ai_list(0xfd, 0x0f00)
label(0x07)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
if_bond_has_item_equipped(0x02, 0x07)
if_bond_has_item_equipped(0x03, 0x07)
if_bond_has_item_equipped(0x1a, 0x07)
if_bond_has_item_equipped(0x1b, 0x07)
if_bond_has_item_equipped(0x1c, 0x07)
if_bond_has_item_equipped(0x1d, 0x07)
if_bond_has_item_equipped(0x18, 0x07)
if_bond_has_item_equipped(0x19, 0x07)
if_bond_has_item_equipped(0x04, 0x07)
if_bond_has_item_equipped(0x05, 0x07)
if_bond_has_item_equipped(0x06, 0x07)
if_bond_has_item_equipped(0x07, 0x07)
if_bond_has_item_equipped(0x08, 0x07)
if_bond_has_item_equipped(0x09, 0x07)
if_bond_has_item_equipped(0x0a, 0x07)
if_bond_has_item_equipped(0x0b, 0x07)
if_bond_has_item_equipped(0x0c, 0x07)
if_bond_has_item_equipped(0x0d, 0x07)
if_bond_has_item_equipped(0x0e, 0x07)
if_bond_has_item_equipped(0x0f, 0x07)
if_bond_has_item_equipped(0x10, 0x07)
if_bond_has_item_equipped(0x11, 0x07)
if_bond_has_item_equipped(0x12, 0x07)
if_bond_has_item_equipped(0x13, 0x07)
if_bond_has_item_equipped(0x16, 0x07)
if_bond_has_item_equipped(0x14, 0x07)
if_bond_has_item_equipped(0x15, 0x07)
bond_equip_item_cinema(0x04)
label(0x07)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x04, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x0504)
screen_fade_from_black
label(0x0f)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0f)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
label(0x2f)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x01)
guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10)
label(0x0b)
ai_sleep
if_guard_has_stopped_moving(0x07)
goto_first(0x0b)
label(0x07)
chr_remove_item_in_hand(0xfd, 0x00)
guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10)
local_timer_reset_start
label(0x0c)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_local_timer_greater_than(0xde0000, 0x07)
goto_first(0x0c)
label(0x07)
screen_fade_to_black
label(0x0d)
ai_sleep
if_screen_fade_completed(0x07)
goto_first(0x0d)
label(0x07)
exit_level
label(0x04)
ai_sleep
goto_first(0x04)
ai_list_end
};
u8 ai_11[] = {
if_game_difficulty_greater_than(0x01, 0x04)
objective_bitfield_set_on(0x00010000)
if_game_difficulty_greater_than(0x00, 0x04)
objective_bitfield_set_on(0x00020000)
objective_bitfield_set_on(0x00040000)
label(0x04)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_12[] = {
label(0x03)
ai_sleep
chr_flags_set_on(0x2c, 0x00001000)
chr_flags_set_on(0x2d, 0x00001000)
chr_flags_set_on(0x30, 0x00001000)
ai_sleep
chr_flags_set_on(0x31, 0x00001000)
chr_flags_set_on(0x34, 0x00001000)
chr_flags_set_on(0x35, 0x00001000)
label(0x2a)
ai_sleep
if_game_difficulty_less_than(0x02, 0x29)
if_killed_civilians_greater_than(0x01, 0x07)
goto_first(0x2a)
label(0x29)
if_game_difficulty_less_than(0x01, 0x29)
if_killed_civilians_greater_than(0x02, 0x07)
goto_first(0x2a)
label(0x29)
if_killed_civilians_greater_than(0x04, 0x07)
goto_first(0x2a)
label(0x07)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x07)
text_print_top(0x1e34)
objective_bitfield_set_on(0x00001000)
goto_first(0x0a)
label(0x07)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
+114 -6
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -742,15 +743,122 @@ PathRecord patrolpaths[] = {
};
u32 ai_not_used_0[] = { 0x04000000 };
u8 ai_not_used_0[] = {
ai_list_end
};
u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 };
u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 };
u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 };
u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 };
u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 };
u8 ai_1[] = {
chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c)
label(0x2c)
guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_3[] = {
label(0x03)
guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_4[] = {
label(0x03)
guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_2[] = {
if_folder_actor_is_equal(0x00, 0x09)
chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c)
label(0x09)
debug_log 'b', '2', '\n', '\0',
chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c)
label(0x2c)
guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00)
label(0x08)
ai_sleep
if_guard_has_stopped_moving(0x2c)
goto_first(0x08)
label(0x2c)
random_generate_seed
if_random_seed_greater_than(0xdc, 0x2c)
guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0304)
goto_first(0x08)
label(0x2c)
guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20)
jump_to_ai_list(0x00, 0x0404)
goto_first(0x08)
ai_list_end
};
u8 ai_5[] = {
ai_sleep
hud_hide_and_lock_controls_and_pause_mission_time(0x01)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c)
chr_flags_set_on(0xf8, 0x00000100)
chr_flags_set_on(0x00, 0x00000100)
chr_flags_set_on(0xf8, 0x00000200)
chr_flags_set_on(0x00, 0x00000200)
jump_to_ai_list(0xf8, 0x0204)
jump_to_ai_list(0x00, 0x0104)
ai_sleep
ai_sleep
screen_fade_from_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x0b)
label(0x2c)
local_timer_reset_start
label(0x0f)
ai_sleep
if_local_timer_greater_than(0x1e0000, 0x2c)
goto_first(0x0f)
label(0x2c)
text_print_top(0x0850)
local_timer_reset_start
label(0x0c)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0c)
label(0x2c)
text_print_top(0x0950)
local_timer_reset_start
label(0x0d)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x2c)
goto_first(0x0d)
label(0x2c)
text_print_top(0x0a50)
local_timer_reset_start
label(0x0e)
ai_sleep
if_local_timer_greater_than(0x2c0100, 0x2c)
goto_first(0x0e)
label(0x2c)
credits_roll
label(0x08)
ai_sleep
if_credits_has_completed(0x2c)
goto_first(0x08)
label(0x2c)
screen_fade_to_black
label(0x09)
ai_sleep
if_screen_fade_completed(0x2c)
goto_first(0x09)
label(0x2c)
label(0x0a)
ai_sleep
exit_level
goto_first(0x0a)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
+684 -32
View File
@@ -7,6 +7,7 @@
#include "ultra64.h"
#include "bondtypes.h"
#include "bondaicommands.h"
// forward declarations
PadRecord padlist[];
@@ -1473,38 +1474,689 @@ PathRecord patrolpaths[] = {
};
u32 ai_0[] = { 0x200005fd, 0x00070400 };
u32 ai_1[] = { 0x200105fd, 0x00070400 };
u32 ai_2[] = { 0x200205fd, 0x00070400 };
u32 ai_3[] = { 0x200305fd, 0x00070400 };
u32 ai_4[] = { 0x200405fd, 0x00070400 };
u32 ai_5[] = { 0x200505fd, 0x00070400 };
u32 ai_6[] = { 0x200605fd, 0x00070400 };
u32 ai_7[] = { 0x200705fd, 0x00070400 };
u32 ai_8[] = { 0x200805fd, 0x00070400 };
u32 ai_9[] = { 0x200905fd, 0x00070400 };
u32 ai_10[] = { 0x200a05fd, 0x00070400 };
u32 ai_11[] = { 0x200b05fd, 0x00070400 };
u32 ai_12[] = { 0x200c05fd, 0x00070400 };
u32 ai_13[] = { 0x200d05fd, 0x00070400 };
u32 ai_14[] = { 0x200e05fd, 0x00070400 };
u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 };
u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 };
u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 };
u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 };
u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 };
u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 };
u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 };
u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 };
u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 };
u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 };
u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 };
u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 };
u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 };
u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 };
u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 };
u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 };
u8 ai_0[] = {
guard_start_patrol(0x00)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_1[] = {
guard_start_patrol(0x01)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_2[] = {
guard_start_patrol(0x02)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_3[] = {
guard_start_patrol(0x03)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_4[] = {
guard_start_patrol(0x04)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_5[] = {
guard_start_patrol(0x05)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_6[] = {
guard_start_patrol(0x06)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_7[] = {
guard_start_patrol(0x07)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_8[] = {
guard_start_patrol(0x08)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_9[] = {
guard_start_patrol(0x09)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_10[] = {
guard_start_patrol(0x0a)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_11[] = {
guard_start_patrol(0x0b)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_12[] = {
guard_start_patrol(0x0c)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_13[] = {
guard_start_patrol(0x0d)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_14[] = {
guard_start_patrol(0x0e)
jump_to_ai_list(0xfd, 0x0700)
ai_list_end
};
u8 ai_15[] = {
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x1f)
if_guard_has_stopped_moving(0x3c)
goto_first(0x00)
label(0x3c)
if_guard_shot_from_bond_missed(0x1f)
if_guard_see_another_guard_shot(0x1f)
if_guard_see_another_guard_die(0x20)
if_guard_sees_bond(0x17)
ai_sleep
if_guard_heard_bond(0x15)
if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15)
if_guard_heard_bond_within_last_10_secs(0x15)
if_guard_and_bond_within_line_of_sight(0x16)
label(0x3d)
ai_sleep
if_guard_bitfield_is_set_on(0x80, 0x13)
if_guard_has_stopped_moving(0x03)
goto_first(0x00)
label(0x13)
if_guard_is_on_screen(0x23)
goto_first(0x00)
label(0x23)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x0400)
label(0x03)
if_guard_hits_greater_than(0x00, 0x20)
goto_first(0x00)
label(0x04)
goto_first(0x00)
label(0x15)
random_generate_seed
if_random_seed_greater_than(0x40, 0x18)
goto_first(0x00)
label(0x18)
guard_try_running_to_side(0x16)
goto_first(0x00)
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
goto_first(0x00)
label(0x17)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x1b)
if_guard_is_targeted_by_bond(0x1b)
goto_first(0x00)
label(0x1b)
if_guard_distance_to_bond_less_than(0x6400, 0x1f)
if_guard_hits_greater_than(0x00, 0x20)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1104)
label(0x1f)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1204)
label(0x20)
random_generate_seed
if_random_seed_greater_than(0x40, 0x24)
set_return_ai_list(0x1004)
jump_to_ai_list(0xfd, 0x1304)
label(0x24)
debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0',
guard_try_throwing_grenade(0x25)
goto_first(0x00)
label(0x25)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x25)
label(0x01)
goto_first(0x00)
ai_list_end
};
u8 ai_16[] = {
label(0x00)
ai_sleep
if_guard_has_stopped_moving(0x1c)
goto_first(0x00)
label(0x1c)
random_generate_seed
if_random_seed_greater_than(0x96, 0x1d)
random_generate_seed
if_random_seed_greater_than(0x00, 0x1e)
goto_next(0x01)
label(0x1d)
guard_try_sidestepping(0x01)
label(0x1e)
guard_try_running_to_side(0x01)
label(0x01)
ai_sleep
if_guard_has_stopped_moving(0x03)
goto_first(0x01)
label(0x03)
if_guard_and_bond_within_line_of_sight(0x16)
jump_to_return_ai_list
label(0x16)
if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17)
if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17)
if_guard_distance_to_bond_less_than(0x0a00, 0x17)
jump_to_return_ai_list
label(0x17)
goto_first(0x1c)
ai_list_end
};
u8 ai_17[] = {
label(0x00)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfd, 0x20)
if_guard_shot_from_bond_missed(0x20)
goto_next(0x1f)
label(0x1f)
if_guard_is_targeted_by_bond(0x21)
if_guard_distance_to_bond_greater_than(0xc800, 0x1a)
if_guard_and_bond_within_line_of_sight(0x21)
goto_next(0x1a)
label(0x21)
if_guard_hits_greater_than(0x01, 0x02)
guard_surrenders
goto_first(0x00)
label(0x1a)
goto_next(0x20)
label(0x20)
set_return_ai_list(0x1204)
jump_to_ai_list(0xfd, 0x1304)
label(0x01)
jump_to_return_ai_list
label(0x02)
jump_to_ai_list(0xfd, 0x1000)
ai_list_end
};
u8 ai_18[] = {
chr_drop_all_concealed_items(0xfd)
label(0x00)
guard_runs_to_pad(0xd100)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01)
if_guard_shot_from_bond_missed(0x1f)
goto_first(0x03)
label(0x1f)
debug_log '!', '\n', '\0',
guard_surrenders
label(0x23)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xdc, 0x23)
if_guard_see_another_guard_die(0x23)
if_guard_has_stopped_moving(0x23)
goto_first(0x23)
label(0x23)
debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0',
goto_first(0x00)
label(0x01)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d)
jump_to_return_ai_list
label(0x2d)
if_guard_and_bond_within_line_of_sight(0x04)
guard_remove_fade
jump_to_return_ai_list
label(0x04)
ai_sleep
jump_to_return_ai_list
ai_list_end
};
u8 ai_19[] = {
guard_flags_set_on(0x00080000)
guard_flags_set_on(0x00020000)
guard_set_armour(0x2c01)
guard_set_health_total(0xc800)
guard_set_speed_rating(0x50)
guard_set_accuracy_rating(0x50)
guard_set_argh_rating(0x50)
label(0x34)
ai_sleep
guard_animation_stop
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x34)
label(0x23)
text_print_top(0x0a88)
local_timer_reset_start
label(0x37)
ai_sleep
if_guard_distance_to_bond_less_than(0x3200, 0x38)
if_chr_health_less_than(0xfd, 0xc8, 0x38)
if_local_timer_greater_than(0x080700, 0x38)
if_guard_has_stopped_moving(0x23)
goto_first(0x37)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0x80, 0x23)
guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a)
label(0x23)
guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a)
goto_first(0x37)
label(0x3a)
goto_first(0x37)
label(0x38)
jump_to_ai_list(0xfd, 0x1504)
ai_list_end
};
u8 ai_20[] = {
guard_flags_set_on(0x10000000)
if_chr_health_less_than(0xfd, 0xc8, 0x03)
label(0x38)
guard_sprints_to_pad(0xc700)
label(0x39)
ai_sleep
if_guard_has_stopped_moving(0x07)
if_objective_bitfield_is_set_on(0x00100000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xba00, 0x04)
label(0x13)
if_objective_bitfield_is_set_on(0x00200000, 0x13)
if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05)
label(0x13)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x39)
label(0x07)
if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01)
goto_first(0x38)
label(0x01)
guard_remove_fade
jump_to_ai_list(0xfd, 0x0100)
label(0x03)
object_drop_from_chr(0x07)
goto_first(0x38)
label(0x04)
door_close(0x0f)
objective_bitfield_set_on(0x00100000)
goto_first(0x38)
label(0x05)
door_close(0x10)
objective_bitfield_set_on(0x00200000)
goto_first(0x38)
ai_list_end
};
u8 ai_26[] = {
label(0x34)
chr_bitfield_set_on(0x36, 0x80)
chr_bitfield_set_on(0x37, 0x80)
chr_bitfield_set_on(0x38, 0x80)
chr_bitfield_set_on(0x39, 0x80)
chr_bitfield_set_on(0x3b, 0x80)
chr_bitfield_set_on(0x3e, 0x80)
chr_bitfield_set_on(0x3f, 0x80)
label(0x37)
ai_sleep
if_objective_bitfield_is_set_on(0x00010000, 0x23)
if_object_not_destroyed(0x02, 0x23)
objective_bitfield_set_on(0x00010000)
label(0x23)
if_objective_bitfield_is_set_on(0x00020000, 0x23)
if_object_not_destroyed(0x03, 0x23)
objective_bitfield_set_on(0x00020000)
label(0x23)
if_objective_bitfield_is_set_on(0x00040000, 0x23)
if_object_not_destroyed(0x04, 0x23)
objective_bitfield_set_on(0x00040000)
label(0x23)
if_objective_bitfield_is_set_on(0x00080000, 0x23)
if_object_not_destroyed(0x05, 0x23)
objective_bitfield_set_on(0x00080000)
label(0x23)
goto_first(0x37)
ai_list_end
};
u8 ai_27[] = {
label(0x00)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x00)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_game_difficulty_less_than(0x01, 0x13)
if_local_timer_less_than(0x2c0100, 0x13)
if_game_difficulty_less_than(0x02, 0x3f)
if_game_difficulty_less_than(0x04, 0x40)
label(0x13)
if_item_is_stationary_within_level(0x22, 0x3e)
goto_first(0x03)
label(0x3e)
text_print_top(0x0988)
hud_countdown_set(0x6801)
goto_next(0x34)
label(0x3f)
text_print_top(0x4688)
hud_countdown_set(0xc201)
goto_next(0x34)
label(0x40)
text_print_top(0x4688)
hud_countdown_set(0xfe01)
goto_next(0x34)
label(0x34)
hud_countdown_start
hud_countdown_show
label(0x07)
ai_sleep
if_hud_countdown_less_than(0x1900, 0x23)
goto_first(0x07)
label(0x23)
music_xtrack_play(0x00, 0xff, 0xff)
label(0x04)
ai_sleep
if_hud_countdown_less_than(0x0f00, 0x23)
goto_first(0x04)
label(0x23)
text_print_top(0x0b88)
label(0x05)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x05)
label(0x23)
trigger_explosions_around_bond
hud_countdown_hide
hud_countdown_stop
label(0x06)
ai_sleep
goto_first(0x06)
ai_list_end
};
u8 ai_28[] = {
label(0x03)
ai_sleep
if_bond_has_item_equipped(0x01, 0x23)
goto_first(0x03)
label(0x23)
door_open(0x0a)
label(0x04)
ai_sleep
if_bond_has_item_equipped(0x05, 0x23)
goto_first(0x04)
label(0x23)
door_close(0x0a)
goto_first(0x03)
ai_list_end
};
u8 ai_21[] = {
chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23)
label(0x23)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10)
label(0x04)
ai_sleep
if_local_timer_greater_than(0x700000, 0x23)
goto_first(0x04)
label(0x23)
chr_remove_item_in_hand(0xfd, 0x00)
chr_remove_item_in_hand(0xfd, 0x01)
label(0x05)
ai_sleep
if_local_timer_greater_than(0xea0000, 0x23)
goto_first(0x05)
label(0x23)
door_close(0x0d)
label(0x06)
ai_sleep
if_door_state_equal(0x0d, 0x01, 0x23)
goto_first(0x06)
label(0x23)
screen_fade_to_black
label(0x07)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x07)
label(0x23)
if_objective_num_complete(0x00, 0x23)
goto_next(0x13)
label(0x23)
camera_switch(0x12, 0x0200, 0x0000)
screen_fade_from_black
label(0x08)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x08)
label(0x23)
hud_countdown_set(0x0200)
hud_countdown_show
hud_countdown_start
local_timer_reset_start
label(0x09)
ai_sleep
if_hud_countdown_less_than(0x0000, 0x23)
goto_first(0x09)
label(0x23)
hud_countdown_hide
object_flags_1_set_off(0x11, 0x00000200)
object_destroy(0x11)
local_timer_reset_start
label(0x0a)
ai_sleep
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x0a)
label(0x23)
screen_fade_to_black
label(0x0b)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x0b)
label(0x23)
label(0x13)
exit_level
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_22[] = {
guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10)
local_timer_reset_start
label(0x03)
ai_sleep
if_local_timer_greater_than(0x3c0000, 0x23)
goto_first(0x03)
label(0x23)
guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_30[] = {
label(0x03)
ai_sleep
if_camera_is_in_bond_swirl(0x23)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xf8, 0x1704)
label(0x01)
ai_sleep
goto_first(0x01)
ai_list_end
};
u8 ai_29[] = {
label(0x34)
ai_sleep
if_bond_is_dead(0x3b)
if_bond_in_room_with_pad(0xe800, 0x23)
goto_first(0x34)
label(0x23)
objective_bitfield_set_on(0x00800000)
bond_disable_damage_and_pickups
hud_hide_and_lock_controls_and_pause_mission_time(0x04)
hud_countdown_hide
hud_countdown_stop
screen_fade_to_black
label(0x03)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x03)
label(0x23)
if_objective_all_completed(0x23)
jump_to_ai_list(0xfd, 0x0f00)
label(0x23)
chr_hide_all
trigger_fade_and_exit_level_on_button_press
door_open_instant(0x0d)
door_open_instant(0x0e)
if_bond_has_item_equipped(0x02, 0x23)
if_bond_has_item_equipped(0x03, 0x23)
if_bond_has_item_equipped(0x1a, 0x23)
if_bond_has_item_equipped(0x1b, 0x23)
if_bond_has_item_equipped(0x1c, 0x23)
if_bond_has_item_equipped(0x1d, 0x23)
if_bond_has_item_equipped(0x18, 0x23)
if_bond_has_item_equipped(0x19, 0x23)
if_bond_has_item_equipped(0x04, 0x23)
if_bond_has_item_equipped(0x05, 0x23)
if_bond_has_item_equipped(0x06, 0x23)
if_bond_has_item_equipped(0x07, 0x23)
if_bond_has_item_equipped(0x08, 0x23)
if_bond_has_item_equipped(0x09, 0x23)
if_bond_has_item_equipped(0x0a, 0x23)
if_bond_has_item_equipped(0x0b, 0x23)
if_bond_has_item_equipped(0x0c, 0x23)
if_bond_has_item_equipped(0x0d, 0x23)
if_bond_has_item_equipped(0x0e, 0x23)
if_bond_has_item_equipped(0x0f, 0x23)
if_bond_has_item_equipped(0x10, 0x23)
if_bond_has_item_equipped(0x11, 0x23)
if_bond_has_item_equipped(0x12, 0x23)
if_bond_has_item_equipped(0x13, 0x23)
if_bond_has_item_equipped(0x16, 0x23)
if_bond_has_item_equipped(0x14, 0x23)
if_bond_has_item_equipped(0x15, 0x23)
bond_equip_item_cinema(0x05)
label(0x23)
bond_hide_weapons
ai_sleep
ai_sleep
ai_sleep
camera_switch(0x0c, 0x0200, 0x0000)
jump_to_ai_list(0xf8, 0x1604)
screen_fade_from_black
label(0x04)
ai_sleep
if_screen_fade_completed(0x23)
goto_first(0x04)
label(0x23)
jump_to_ai_list(0xfd, 0x0100)
label(0x3b)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
u8 ai_23[] = {
guard_set_speed_rating(0x1e)
guard_set_accuracy_rating(0x14)
guard_set_grenade_probability(0x33)
label(0x34)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00)
label(0x00)
ai_sleep
if_guard_shot_from_bond_missed(0x23)
if_guard_see_another_guard_shot(0x23)
if_guard_see_another_guard_die(0x23)
if_guard_sees_bond(0x23)
if_guard_and_bond_within_line_of_sight(0x23)
goto_first(0x00)
label(0x23)
random_generate_seed
if_random_seed_greater_than(0xc8, 0x3a)
if_random_seed_greater_than(0x64, 0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03)
label(0x3a)
guard_try_throwing_grenade(0x03)
label(0x23)
guard_kneel
local_timer_reset_start
label(0x04)
ai_sleep
random_generate_seed
if_random_seed_greater_than(0xfa, 0x23)
if_local_timer_greater_than(0xb40000, 0x23)
goto_first(0x04)
label(0x23)
guard_animation_stop
ai_sleep
ai_sleep
ai_sleep
ai_sleep
label(0x23)
guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23)
label(0x23)
guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23)
label(0x23)
label(0x03)
ai_sleep
if_guard_has_stopped_moving(0x01)
goto_first(0x03)
label(0x01)
goto_first(0x34)
ai_list_end
};
u8 ai_24[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x7cfc, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_25[] = {
label(0x03)
ai_sleep
if_bond_y_pos_less_than(0x0000, 0x04)
goto_next(0x23)
label(0x04)
goto_first(0x03)
label(0x23)
jump_to_ai_list(0xfd, 0x0200)
ai_list_end
};
u8 ai_31[] = {
label(0x34)
ai_sleep
chr_flags_set_on(0x36, 0x00001000)
chr_flags_set_on(0x37, 0x00001000)
chr_flags_set_on(0x38, 0x00001000)
chr_flags_set_on(0x39, 0x00001000)
chr_flags_set_on(0x3a, 0x00001000)
ai_sleep
chr_flags_set_on(0x3b, 0x00001000)
chr_flags_set_on(0x3c, 0x00001000)
chr_flags_set_on(0x3d, 0x00001000)
chr_flags_set_on(0x3e, 0x00001000)
chr_flags_set_on(0x3f, 0x00001000)
ai_sleep
label(0x37)
ai_sleep
if_killed_civilians_greater_than(0x02, 0x23)
goto_first(0x37)
label(0x23)
text_print_top(0x0c88)
objective_bitfield_set_on(0x00400000)
jump_to_ai_list(0xfd, 0x0100)
ai_list_end
};
AIListRecord ailists[] = {
/* index = 0 */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+116 -116
View File
@@ -12,120 +12,120 @@ Gfx DL_0x0018[] = {
};
//G_IM_FMT_RGBA, G_IM_SIZ_16b
u32 imgRAre_0x0020[] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FCC4F, 0x0000ED0F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FED11, 0x82C9ED0F,
0x00000000, 0xED11ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xED53ED53, 0x0000DCD1, 0x0000ED0F, 0xED0FCC8F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xED0FED0F, 0xED0F82C8, 0xED0FED11, 0x49870000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000DCD1, 0xED51E4D1,
0xF50FCC8F, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xED0F3184, 0xED0FED0F, 0xB3CD0000, 0xED0FED0F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF551E511, 0x0000F551, 0x0000F511, 0xF511CC8F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FF50F, 0xED110000,
0xE4CFF50F, 0xCC4F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x51C4F551, 0xF551DDD5, 0xF511D48F, 0x0000F551, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xED110000, 0xED0FF50F, 0xF50F0800, 0xD48DF50F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5517BCE, 0x934BF551,
0x0000F551, 0xF551ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xF50FF50F, 0xED110000, 0x0000F50F, 0xF50F59C6, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xC40DF551, 0xF5510000, 0xF551ED11, 0x0000F551,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5110000, 0xF50FF50F,
0xF50F9309, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xF5510000, 0xD48FF551, 0x0000FD51, 0xF551F50F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF50FF50F, 0xDCCF0000, 0x0000F54F, 0xF50FE4CF,
0x00000000, 0x00000000, 0x00000000, 0x00001880, 0xF551F551, 0xF5D50000,
0xFD51F50F, 0x0000FD51, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xE4CF0000, 0xF50FFD4F, 0xFD4FFD51, 0x0000B3CB, 0x62066206, 0x72466206,
0x624682C8, 0x62066206, 0xB5150000, 0xFD51FD51, 0x0000FD4F, 0xFD4FDCD1,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD4FFD4F, 0xD48F0000,
0x00003902, 0xFD51FD51, 0xED0FECCF, 0xECCFECCF, 0xED0FED0F, 0xED11ED11,
0xFD51FD93, 0x21040000, 0xFD4FF50F, 0x0000FD4F, 0x00000000, 0x00000000,
0x00007246, 0x00000000, 0xFDD30000, 0xFD4FFD4F, 0xFD51FD51, 0x00000000,
0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0x08400000, 0xFD91FD93,
0x0000FD4F, 0xFD4FF54F, 0x00000000, 0x00000000, 0x00000000, 0x0000ED0F,
0xFD51FD51, 0xD5970000, 0x00000000, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51,
0xFD51FD51, 0xFD51FD91, 0xFD91FE99, 0x00000000, 0xFD4FFD4F, 0x0000FD4F,
0x8B088B08, 0x8B088B08, 0xFD51FD51, 0x8B08FD4F, 0x9C190000, 0xFD51FD51,
0x59C4FD51, 0x00000000, 0x8C4E8C4E, 0xFD51944F, 0x9C8FFD91, 0x8C4E8C4E,
0x00000000, 0xFD91A38B, 0x0000FD4F, 0xFD4FFD4F, 0xFD4FFD4F, 0xFD51FD51,
0xFD51FD51, 0xFD51FD51, 0xFD51ED0F, 0x5AD60000, 0x00000000, 0x59C4FD51,
0xFD510840, 0x00000000, 0x00000000, 0x9B4BFD91, 0xFD91A4D5, 0x00000000,
0xFD4FFD51, 0x0000FD4F, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51,
0x00000000, 0xFD4F7BD4, 0x0000FD91, 0x00000000, 0x00000000, 0xFD91FD51,
0x9B4BFD91, 0x00000000, 0x00000000, 0xFD9120C2, 0x0000DC8D, 0xFD91FD91,
0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD9120C2, 0x00000000,
0x00000000, 0x0000D48D, 0xFD91FD51, 0x00000000, 0x00000000, 0x9B4BFD91,
0xFE572104, 0x00000000, 0xFD91FD51, 0x0000DC8D, 0x8C4E8C4E, 0x8C4E8C4E,
0x8B08FD91, 0x8C4E8B08, 0x00000000, 0xFD91FD91, 0x0000A38B, 0x00000000,
0x00000000, 0xFD91FD91, 0xFD91FD91, 0x00000000, 0x00000000, 0xC44D0000,
0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, 0x00000000, 0x0000DCCF,
0xFD91FD91, 0xB40D0000, 0x00000000, 0x00000000, 0xFD91FD91, 0x29020000,
0x00000000, 0xFD91FD91, 0xC5130000, 0x00000000, 0xFD91FD91, 0x0000DCCD,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD910000, 0xFD91FD91,
0x00000000, 0x00000000, 0xDCCF0000, 0xFD91FD91, 0xFD91FD93, 0x00000000,
0x00000000, 0x838C0000, 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF54FFD91, 0xFD914144, 0x00000000, 0x00000000,
0xED51FD91, 0xE50F0000, 0x00008B08, 0xFD91FDD3, 0x49840000, 0x00000000,
0xFD91FD91, 0x0000DCCD, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xFD915A06, 0x7AC8FD91, 0x00000000, 0x00000000, 0xFD910800, 0xCC8DFD91,
0xFDD1FDD3, 0x0000ED51, 0x00000000, 0x39C80000, 0x0000DCCD, 0xFD91FD91,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3944FD91, 0xFD91934B,
0x00000000, 0x00000000, 0x5A06FD91, 0xFD9151C4, 0x0000F591, 0xFDD1E511,
0x00000000, 0x00000000, 0xFD91FD91, 0x0000DCCF, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xFDD1A3CD, 0x9349FDD1, 0x00000000, 0x00000000,
0xFDD1ABCB, 0x0000FD91, 0xFDD1AC0D, 0x0000FD91, 0x00000000, 0x00000000,
0x0000DCCF, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x9349FDD1, 0xFDD1AC4F, 0x00000000, 0x00000000, 0x0000FD91, 0xFDD1D4CF,
0x49C4FDD1, 0xFDD1730C, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x0000BC0D,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFDD149C4, 0xED4FFDD1,
0x00000000, 0x00000000, 0xFDD1FDD1, 0x00004144, 0xFDD318C2, 0xC44DFDD1,
0x00000000, 0x00000000, 0x0000D4CF, 0xFDD1FDD1, 0x00000000, 0x00000000,
0x00000000, 0x0000E50F, 0xFDD1FDD1, 0xD4CF3148, 0x00000000, 0x00000000,
0x00000840, 0xFDD1FDD1, 0xFDD1FDD1, 0xF5910000, 0x00000000, 0x00000000,
0xFDD1FDD1, 0x0000DD0F, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1,
0x9B8B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00000000,
0xF69B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x0000B40D, 0xFDD1FDD1,
0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0x5A040000,
0x00000000, 0x00000000, 0x00000000, 0xFDD1FDD1, 0xFDD1FDD1, 0x83080000,
0x00000000, 0x00000000, 0xFE11FE11, 0x0000B40D, 0xFE11FE11, 0xFE11FE11,
0xFE11FE11, 0xFE11FE11, 0x00000000, 0xFE11EEA5, 0x00000000, 0x00000000,
0x3944FE13, 0x00000000, 0x84140000, 0xFE13FE13, 0x00000000, 0x00000000,
0x0000B40D, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE13,
0x8B4A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20C2FE13,
0xFE13FE13, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x49847A88, 0x00000000, 0x00000000, 0x6A4682C8,
0x82C80000, 0x00000000, 0x00000000, 0x418482CA, 0x00000000, 0x82C8DCCF,
0xED0FABCB, 0x00000000, 0x00000000, 0xED0F4984, 0x82C8ED11, 0x00000000,
0x8AC8E4D1, 0x00000000, 0x00000000, 0xED0F82C9, 0xE4CF7A89, 0x00000000,
0x00000000, 0xB3CDCD13, 0x00000000, 0x8AC8F511, 0xF50F82C9, 0x00000000,
0x00000000, 0x8AC9B3CD, 0xE4CF8B08, 0x00000000, 0x8B08F551, 0x00000000,
0x00000000, 0xF50F7AC8, 0x7A86F50F, 0x39443902, 0x39424184, 0xF5517B0A,
0x00000000, 0x8B08F50F, 0xFD4F82C8, 0x000020C2, 0xF50FF50F, 0x1040FD51,
0xFD510840, 0xF511F551, 0x8B08FD4F, 0x51845184, 0x7246C40D, 0xFD516ACC,
0x0000DC8D, 0xE50FCCCF, 0xCCCFE551, 0xED530000, 0xFD4FFD51, 0x8B08FD4F,
0xDCD118C6, 0xFD51FD51, 0xCC4D0000, 0x0000A34B, 0xBC4F0000, 0x0000CC4D,
0x7A86FD91, 0xCD0FCD0F, 0xCC8FE4CF, 0xCC4D0000, 0x00006A46, 0xFD910000,
0x0000E50F, 0x830A0000, 0x00000000, 0x7A86FD91, 0xFD917AC9, 0x00004184,
0xFD9149C4, 0x00000000, 0x5A480000, 0x0000FD91, 0x7A86FD91, 0x00000000,
0x00000000, 0xDCCFABCB, 0x00000000, 0xED518B08, 0x6A46FDD3, 0x29040000,
0x00000000, 0x7AC6FD91, 0xB40BCC8F, 0x00000000, 0xA38BC44D, 0x00000000,
0x00000000, 0x8B08E511, 0x7286FDD1, 0x00000000, 0x00000000, 0xDD0FC48D,
0x00000000, 0x5A06F591, 0xC48DAC0D, 0x00000000, 0x8B488B48, 0x7AC8FDD1,
0xFDD17288, 0x8B48C44D, 0x0000FDD1, 0x00000000, 0x00000000, 0xFDD18B8C,
0x6246FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFE171882, 0x00000000, 0x0000D4CF,
0xFE114A08, 0x00000000, 0x934B934B, 0x3944934B, 0x29020000, 0x934B934B,
0x00005206, 0x00000000, 0x00000000, 0x934B0000, 0x8B090000, 0x0000A38B,
0x7A880000, 0x0000930B, 0x0000BC0D, 0xBC0D0000, 0x0000BC4F, 0xAB8B0000,
0xC40D0000, 0x0840BC0D, 0xA38B9B4B, 0x9B4BA3CD, 0xCC4D9B8D, 0xCC4DAB8B,
0xA3CD72C8, 0x6A46A3CB, 0xBC0D72C8, 0x83089B4B, 0x20829B8B, 0x8B084184,
0x0000C44D, 0xBC0D0000, 0xBC0D0840, 0x0000B40D, 0xBC4D49C4, 0x5A06C48D,
0x00009B8B, 0xC48F0000, 0xCCCF5A48, 0x8B4ACCCD, 0x83080000, 0x00005206,
0x5A066206, 0x51C45A06, 0x934B9B8B, 0x9309930B, 0x82C882C8, 0x62466A46,
0x41845A06, 0x9B8B938B, 0x7A887A88, 0x00000000, 0x00000000, 0x8B485A06,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FCC4F, 0x0000ED0F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FED11, 0x82C9ED0F,
0x00000000, 0xED11ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xED53ED53, 0x0000DCD1, 0x0000ED0F, 0xED0FCC8F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xED0FED0F, 0xED0F82C8, 0xED0FED11, 0x49870000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000DCD1, 0xED51E4D1,
0xF50FCC8F, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xED0F3184, 0xED0FED0F, 0xB3CD0000, 0xED0FED0F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF551E511, 0x0000F551, 0x0000F511, 0xF511CC8F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FF50F, 0xED110000,
0xE4CFF50F, 0xCC4F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x51C4F551, 0xF551DDD5, 0xF511D48F, 0x0000F551, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xED110000, 0xED0FF50F, 0xF50F0800, 0xD48DF50F,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5517BCE, 0x934BF551,
0x0000F551, 0xF551ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xF50FF50F, 0xED110000, 0x0000F50F, 0xF50F59C6, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xC40DF551, 0xF5510000, 0xF551ED11, 0x0000F551,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5110000, 0xF50FF50F,
0xF50F9309, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xF5510000, 0xD48FF551, 0x0000FD51, 0xF551F50F, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF50FF50F, 0xDCCF0000, 0x0000F54F, 0xF50FE4CF,
0x00000000, 0x00000000, 0x00000000, 0x00001880, 0xF551F551, 0xF5D50000,
0xFD51F50F, 0x0000FD51, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xE4CF0000, 0xF50FFD4F, 0xFD4FFD51, 0x0000B3CB, 0x62066206, 0x72466206,
0x624682C8, 0x62066206, 0xB5150000, 0xFD51FD51, 0x0000FD4F, 0xFD4FDCD1,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD4FFD4F, 0xD48F0000,
0x00003902, 0xFD51FD51, 0xED0FECCF, 0xECCFECCF, 0xED0FED0F, 0xED11ED11,
0xFD51FD93, 0x21040000, 0xFD4FF50F, 0x0000FD4F, 0x00000000, 0x00000000,
0x00007246, 0x00000000, 0xFDD30000, 0xFD4FFD4F, 0xFD51FD51, 0x00000000,
0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0x08400000, 0xFD91FD93,
0x0000FD4F, 0xFD4FF54F, 0x00000000, 0x00000000, 0x00000000, 0x0000ED0F,
0xFD51FD51, 0xD5970000, 0x00000000, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51,
0xFD51FD51, 0xFD51FD91, 0xFD91FE99, 0x00000000, 0xFD4FFD4F, 0x0000FD4F,
0x8B088B08, 0x8B088B08, 0xFD51FD51, 0x8B08FD4F, 0x9C190000, 0xFD51FD51,
0x59C4FD51, 0x00000000, 0x8C4E8C4E, 0xFD51944F, 0x9C8FFD91, 0x8C4E8C4E,
0x00000000, 0xFD91A38B, 0x0000FD4F, 0xFD4FFD4F, 0xFD4FFD4F, 0xFD51FD51,
0xFD51FD51, 0xFD51FD51, 0xFD51ED0F, 0x5AD60000, 0x00000000, 0x59C4FD51,
0xFD510840, 0x00000000, 0x00000000, 0x9B4BFD91, 0xFD91A4D5, 0x00000000,
0xFD4FFD51, 0x0000FD4F, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51,
0x00000000, 0xFD4F7BD4, 0x0000FD91, 0x00000000, 0x00000000, 0xFD91FD51,
0x9B4BFD91, 0x00000000, 0x00000000, 0xFD9120C2, 0x0000DC8D, 0xFD91FD91,
0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD9120C2, 0x00000000,
0x00000000, 0x0000D48D, 0xFD91FD51, 0x00000000, 0x00000000, 0x9B4BFD91,
0xFE572104, 0x00000000, 0xFD91FD51, 0x0000DC8D, 0x8C4E8C4E, 0x8C4E8C4E,
0x8B08FD91, 0x8C4E8B08, 0x00000000, 0xFD91FD91, 0x0000A38B, 0x00000000,
0x00000000, 0xFD91FD91, 0xFD91FD91, 0x00000000, 0x00000000, 0xC44D0000,
0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, 0x00000000, 0x0000DCCF,
0xFD91FD91, 0xB40D0000, 0x00000000, 0x00000000, 0xFD91FD91, 0x29020000,
0x00000000, 0xFD91FD91, 0xC5130000, 0x00000000, 0xFD91FD91, 0x0000DCCD,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD910000, 0xFD91FD91,
0x00000000, 0x00000000, 0xDCCF0000, 0xFD91FD91, 0xFD91FD93, 0x00000000,
0x00000000, 0x838C0000, 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xF54FFD91, 0xFD914144, 0x00000000, 0x00000000,
0xED51FD91, 0xE50F0000, 0x00008B08, 0xFD91FDD3, 0x49840000, 0x00000000,
0xFD91FD91, 0x0000DCCD, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0xFD915A06, 0x7AC8FD91, 0x00000000, 0x00000000, 0xFD910800, 0xCC8DFD91,
0xFDD1FDD3, 0x0000ED51, 0x00000000, 0x39C80000, 0x0000DCCD, 0xFD91FD91,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3944FD91, 0xFD91934B,
0x00000000, 0x00000000, 0x5A06FD91, 0xFD9151C4, 0x0000F591, 0xFDD1E511,
0x00000000, 0x00000000, 0xFD91FD91, 0x0000DCCF, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0xFDD1A3CD, 0x9349FDD1, 0x00000000, 0x00000000,
0xFDD1ABCB, 0x0000FD91, 0xFDD1AC0D, 0x0000FD91, 0x00000000, 0x00000000,
0x0000DCCF, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x9349FDD1, 0xFDD1AC4F, 0x00000000, 0x00000000, 0x0000FD91, 0xFDD1D4CF,
0x49C4FDD1, 0xFDD1730C, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x0000BC0D,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFDD149C4, 0xED4FFDD1,
0x00000000, 0x00000000, 0xFDD1FDD1, 0x00004144, 0xFDD318C2, 0xC44DFDD1,
0x00000000, 0x00000000, 0x0000D4CF, 0xFDD1FDD1, 0x00000000, 0x00000000,
0x00000000, 0x0000E50F, 0xFDD1FDD1, 0xD4CF3148, 0x00000000, 0x00000000,
0x00000840, 0xFDD1FDD1, 0xFDD1FDD1, 0xF5910000, 0x00000000, 0x00000000,
0xFDD1FDD1, 0x0000DD0F, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1,
0x9B8B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00000000,
0xF69B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x0000B40D, 0xFDD1FDD1,
0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0x5A040000,
0x00000000, 0x00000000, 0x00000000, 0xFDD1FDD1, 0xFDD1FDD1, 0x83080000,
0x00000000, 0x00000000, 0xFE11FE11, 0x0000B40D, 0xFE11FE11, 0xFE11FE11,
0xFE11FE11, 0xFE11FE11, 0x00000000, 0xFE11EEA5, 0x00000000, 0x00000000,
0x3944FE13, 0x00000000, 0x84140000, 0xFE13FE13, 0x00000000, 0x00000000,
0x0000B40D, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE13,
0x8B4A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20C2FE13,
0xFE13FE13, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x49847A88, 0x00000000, 0x00000000, 0x6A4682C8,
0x82C80000, 0x00000000, 0x00000000, 0x418482CA, 0x00000000, 0x82C8DCCF,
0xED0FABCB, 0x00000000, 0x00000000, 0xED0F4984, 0x82C8ED11, 0x00000000,
0x8AC8E4D1, 0x00000000, 0x00000000, 0xED0F82C9, 0xE4CF7A89, 0x00000000,
0x00000000, 0xB3CDCD13, 0x00000000, 0x8AC8F511, 0xF50F82C9, 0x00000000,
0x00000000, 0x8AC9B3CD, 0xE4CF8B08, 0x00000000, 0x8B08F551, 0x00000000,
0x00000000, 0xF50F7AC8, 0x7A86F50F, 0x39443902, 0x39424184, 0xF5517B0A,
0x00000000, 0x8B08F50F, 0xFD4F82C8, 0x000020C2, 0xF50FF50F, 0x1040FD51,
0xFD510840, 0xF511F551, 0x8B08FD4F, 0x51845184, 0x7246C40D, 0xFD516ACC,
0x0000DC8D, 0xE50FCCCF, 0xCCCFE551, 0xED530000, 0xFD4FFD51, 0x8B08FD4F,
0xDCD118C6, 0xFD51FD51, 0xCC4D0000, 0x0000A34B, 0xBC4F0000, 0x0000CC4D,
0x7A86FD91, 0xCD0FCD0F, 0xCC8FE4CF, 0xCC4D0000, 0x00006A46, 0xFD910000,
0x0000E50F, 0x830A0000, 0x00000000, 0x7A86FD91, 0xFD917AC9, 0x00004184,
0xFD9149C4, 0x00000000, 0x5A480000, 0x0000FD91, 0x7A86FD91, 0x00000000,
0x00000000, 0xDCCFABCB, 0x00000000, 0xED518B08, 0x6A46FDD3, 0x29040000,
0x00000000, 0x7AC6FD91, 0xB40BCC8F, 0x00000000, 0xA38BC44D, 0x00000000,
0x00000000, 0x8B08E511, 0x7286FDD1, 0x00000000, 0x00000000, 0xDD0FC48D,
0x00000000, 0x5A06F591, 0xC48DAC0D, 0x00000000, 0x8B488B48, 0x7AC8FDD1,
0xFDD17288, 0x8B48C44D, 0x0000FDD1, 0x00000000, 0x00000000, 0xFDD18B8C,
0x6246FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFE171882, 0x00000000, 0x0000D4CF,
0xFE114A08, 0x00000000, 0x934B934B, 0x3944934B, 0x29020000, 0x934B934B,
0x00005206, 0x00000000, 0x00000000, 0x934B0000, 0x8B090000, 0x0000A38B,
0x7A880000, 0x0000930B, 0x0000BC0D, 0xBC0D0000, 0x0000BC4F, 0xAB8B0000,
0xC40D0000, 0x0840BC0D, 0xA38B9B4B, 0x9B4BA3CD, 0xCC4D9B8D, 0xCC4DAB8B,
0xA3CD72C8, 0x6A46A3CB, 0xBC0D72C8, 0x83089B4B, 0x20829B8B, 0x8B084184,
0x0000C44D, 0xBC0D0000, 0xBC0D0840, 0x0000B40D, 0xBC4D49C4, 0x5A06C48D,
0x00009B8B, 0xC48F0000, 0xCCCF5A48, 0x8B4ACCCD, 0x83080000, 0x00005206,
0x5A066206, 0x51C45A06, 0x934B9B8B, 0x9309930B, 0x82C882C8, 0x62466A46,
0x41845A06, 0x9B8B938B, 0x7A887A88, 0x00000000, 0x00000000, 0x8B485A06,
0x7A880000, 0x00000000
};
@@ -805,7 +805,7 @@ Vtx verts31B8[] = {
{0x0024, 0x009A, 0x000F, 0x0000, 0x016F, 0x0876, 0x1F, 0x43, 0x66, 0x00},
{0x0026, 0x009F, 0x000B, 0x0000, 0x0184, 0x08A1, 0x1F, 0x43, 0x66, 0x00},
{0x0038, 0x0091, 0x000B, 0x0000, 0x0242, 0x082A, 0x39, 0x33, 0x64, 0x00}
};
Vtx verts3298[] = {
{0x0062, 0xFF48, 0x000B, 0x0000, 0xFE37, 0x00CB, 0x0C, 0xE4, 0x7B, 0x00},
@@ -1516,7 +1516,7 @@ Gfx D_02004758[] = {
gsSP1Triangle(13, 1, 2, 0),
gsSP1Triangle(3, 4, 5, 0),
gsSP1Triangle(3, 5, 6, 0),
gsSPVertex(verts4258, 16, 0),
gsSP1Triangle(8, 9, 10, 0),
gsSP1Triangle(8, 10, 11, 0),
+25 -2
View File
@@ -40,7 +40,6 @@ The requirements for Debian / Ubuntu should be:
```bash
sudo apt-get update
sudo apt-get install binutils-mips-linux-gnu make git python3
sudo apt-get install libcapstone-dev pkg-config
```
If you don't have host development tools already installed then you will also need to install `build-essential`:
@@ -49,6 +48,14 @@ If you don't have host development tools already installed then you will also ne
sudo apt-get install build-essential
```
> **Note:** `libcapstone-dev`/`pkg-config` are **no longer required**. Older
> versions of this repo's recompiled IDO toolchain (`tools/ido5.3_recomp`,
> see [Recompile IDO](#recompile-ido) below) linked against the system
> `libcapstone` library for MIPS disassembly. The current toolchain vendors
> its own disassembly library (`rabbitizer`) instead, so there's nothing
> extra to install for it beyond the compiler already covered by
> `build-essential` above.
Additionally, [qemu-irix](https://github.com/n64decomp/qemu-irix/releases) is needed. Download the package to a desired location and install with:
```bash
@@ -71,13 +78,29 @@ Alternatively, you can start the container with `docker compose up` and connect
### Recompile IDO
Recompile IDO for your platform to increase compilation speed
This project can compile the ROM's C code in one of two ways, controlled by the `IDO_RECOMP` build option (see
[Build the ROM](#build-the-rom)):
* `IDO_RECOMP=YES` (the default) — uses `tools/ido5.3_recomp/cc`, a copy of the original SGI IRIX 5.3 IDO compiler
that has been *statically recompiled* into a native x86-64 Linux program. Since it runs directly on your machine
instead of under an emulator, it's noticeably faster to compile with — this is why the setup step below exists.
* `IDO_RECOMP=NO` — runs the original, unmodified IRIX IDO binaries (`tools/irix/root/usr/bin/cc` etc.) under the
[qemu-irix](https://github.com/n64decomp/qemu-irix/releases) user-mode emulator instead. Slower, but useful as a
lower-risk reference if you ever suspect the recompiled toolchain is misbehaving.
The recompiled toolchain isn't checked into git — it's generated locally the first time it's needed, from the
original IDO binaries in `tools/irix/root`. A plain `make` from the repo root builds it automatically if it's
missing (wired up via `tools/Makefile`), so most people never need to run this step by hand. To build it explicitly
(e.g. to watch its own build output, or force a rebuild after changing it):
```bash
cd tools/ido5.3_recomp
make
```
For what this toolchain actually *is*, where it comes from upstream, and how to update it to a newer version, see
[`tools/ido5.3_recomp/README.md`](../tools/ido5.3_recomp/README.md).
Be careful! If you previously compiled GoldenEye on a different operating system or CPU architecture, the binaries (gzip, n64cksum) that were compiled will be incompatible.
You must delete them.
+18 -67
View File
@@ -4,8 +4,8 @@
#define TRI4_Ext
/**
* This file should contain most of the extensions to gbi avoiding loosing
/**
* This file should contain most of the extensions to gbi avoiding loosing
* changes should the OS ever be updated.
*/
@@ -25,7 +25,7 @@
#define MASK_512 9
#define MASK_1024 10
typedef enum
typedef enum
{
TEXTURETYPE_LOD,
TEXTURETYPE_DETAIL,
@@ -144,7 +144,7 @@ typedef enum
}
/**
Source compatable F3DEX gSP2Triangles for GE
Source compatible F3DEX gSP2Triangles for GE
Vertex index is 0-15, to use a higher index use gSP1Triangle
*/
#define gSP2Triangles(pkt, x1, y1, z1, flag0, x2, y2, z2, flag1) \
@@ -178,19 +178,18 @@ typedef enum
Use Texture from bank.
If detail, use shift eg 15 for 2x detail per base texel, 14 fpr 4x.
Confirm params from decomp in CO expand function
Confirm params from decomp in CO expand function
@param cms: s-axis mirror, no-mirror, wrap, and clamp flags
@param cmt: t-axis mirror, no-mirror, wrap, and clamp flags eg G_TX_CLAMP
@param cmt: t-axis mirror, no-mirror, wrap, and clamp flags eg G_TX_CLAMP
@param tile: Number of tiles
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
@param type: texture type: E.g. TEXTURETYPE_DETAIL
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
@param type: texture type: E.g. TEXTURETYPE_DETAIL
@param minlevel: Clamp at tile 0 + frac (eg, 0.5)
@param detail_id: Detail Texture ID
@param texture_id: Texture ID
*/
#define gsSPUseTexture(cms, cmt, tile, shifts, shiftt, type, minlevel, detail_id, texture_id) \
{ \
{ \
@@ -207,54 +206,6 @@ typedef enum
} \
}
/**
* GoldenEye Custom Vertex Commands
*
* These commands use different encodings than standard F3DEX macros.
* Opcode 0x01: Custom GE format with simplified encoding
* Opcode 0x04: Uses (v0+n)*2 encoding instead of v0*2
*/
/* GoldenEye Matrix command (opcode 0x01) - G_MTX */
#define G_MTX_GE 0x01
#define G_VTX_GE 0x04
#define gsSPMatrixGE(m, p) \
{ \
{ \
(_SHIFTL(G_MTX_GE, 24, 8) | \
_SHIFTL((p), 16, 8) | \
_SHIFTL(sizeof(Mtx), 0, 16)), \
(unsigned int)(m) \
} \
}
/* RARE vertex load (opcode 0x04) - Custom encoding for GE/PD Tri4 support */
/* Format: cmd(24-31) | (((v0+n)<<1)|flag)(16-23) | sizeof(Vtx)*n(0-15) */
#define gsSPVertexGE(v, n, v0, flag) \
{ \
{ \
(_SHIFTL(G_VTX_GE, 24, 8) | \
_SHIFTL((((v0) + (n)) << 1) | (flag), 16, 8) | \
_SHIFTL(sizeof(Vtx) * (n), 0, 16)), \
(unsigned int)(v) \
} \
}
/* F3DEX gsSP1Triangle without flag rotation (GoldenEye uses simpler encoding) */
/* Format: w0=0xBF000000, w1=(v0*2<<16)|(v1*2<<8)|(v2*2) */
#define gsSP1TriangleGE(v0, v1, v2, flag) \
{ \
{ \
0xBF000000, \
(_SHIFTL((v0)*2, 16, 8) | \
_SHIFTL((v1)*2, 8, 8) | \
_SHIFTL((v2)*2, 0, 8)) \
} \
}
#endif
/**
@@ -281,8 +232,8 @@ typedef enum
Override of Load Texture Block without the PipeSync.
Loads a Texture and sets its tile
@param timg: Address of the texture image. E.g. IMAGESEG(IMAGE_SMOKE_0)
@param fmt: Texture image format: E.g. G_IM_FMT_IA
@param siz: Pixel component size: E.g. G_IM_SIZ_8b
@param fmt: Texture image format: E.g. G_IM_FMT_IA
@param siz: Pixel component size: E.g. G_IM_SIZ_8b
@param width: Texture image width
@param height: Texture image height
@param pal: Location of palette for 4-bit color index texture (0 - 15)
@@ -290,8 +241,8 @@ typedef enum
@param cmt: t-axis mirror, no-mirror, wrap, and clamp flags
@param masks: s-axis mask (0 - 15 or G_TX_NOMASK)
@param maskt: t-axis mask (0 - 15 or G_TX_NOMASK)
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
*/
#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
{ \
@@ -308,8 +259,8 @@ typedef enum
Override of Load Texture Block (static) without the PipeSync.
Loads a Texture and sets its tile
@param timg: Address of the texture image. E.g. IMAGESEG(IMAGE_SMOKE_0)
@param fmt: Texture image format: E.g. G_IM_FMT_IA
@param siz: Pixel component size: E.g. G_IM_SIZ_8b
@param fmt: Texture image format: E.g. G_IM_FMT_IA
@param siz: Pixel component size: E.g. G_IM_SIZ_8b
@param width: Texture image width
@param height: Texture image height
@param pal: Location of palette for 4-bit color index texture (0 - 15)
@@ -317,8 +268,8 @@ typedef enum
@param cmt: t-axis mirror, no-mirror, wrap, and clamp flags
@param masks: s-axis mask (0 - 15 or G_TX_NOMASK)
@param maskt: t-axis mask (0 - 15 or G_TX_NOMASK)
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
@param shifts: s-coordinate shift value or G_TX_NOLOD
@param shiftt: t-coordinate shift value or G_TX_NOLOD
*/
#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
\
+5 -3
View File
@@ -43,10 +43,11 @@
build/OUTCODE/src/game/title.o (.bss);
build/OUTCODE/src/game/front.o (.bss);
build/OUTCODE/src/game/rle.o (.bss);
build/OUTCODE/src/game/unk_01B240.o (.bss);
build/OUTCODE/src/game/unk_01BAE0.o (.bss);
build/OUTCODE/src/game/title2.o (.bss);
build/OUTCODE/src/game/title3.o (.bss);
build/OUTCODE/src/game/blood_animation.o (.bss);
build/OUTCODE/src/game/blood_decrypt.o (.bss);
build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.bss);
build/OUTCODE/src/game/file.o (.bss);
build/OUTCODE/src/game/file2.o (.bss);
build/OUTCODE/src/game/chr.o (.bss);
@@ -93,9 +94,10 @@
build/OUTCODE/src/game/player.o (.bss);
build/OUTCODE/src/game/crc.o (.bss);
build/OUTCODE/src/game/chrObjRandom.o (.bss);
build/OUTCODE/src/game/unk_09B7A0.o (.bss);
build/OUTCODE/src/game/vtxstore.o (.bss);
build/OUTCODE/src/game/explosion.o (.bss);
build/OUTCODE/src/game/glass.o (.bss);
build/OUTCODE/src/game/glass2.o (.bss);
build/OUTCODE/src/game/options.o (.bss);
build/OUTCODE/src/game/textrelated.o (.bss);
build/OUTCODE/src/game/stan.o (.bss);
+5 -3
View File
@@ -43,10 +43,11 @@
build/OUTCODE/src/game/title.o (.data);
build/OUTCODE/src/game/front.o (.data);
build/OUTCODE/src/game/rle.o (.data);
build/OUTCODE/src/game/unk_01B240.o (.data);
build/OUTCODE/src/game/unk_01BAE0.o (.data);
build/OUTCODE/src/game/title2.o (.data);
build/OUTCODE/src/game/title3.o (.data);
build/OUTCODE/src/game/blood_animation.o (.data);
build/OUTCODE/src/game/blood_decrypt.o (.data);
build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.data);
build/OUTCODE/src/game/file.o (.data);
build/OUTCODE/src/game/file2.o (.data);
build/OUTCODE/src/game/chr.o (.data);
@@ -93,9 +94,10 @@
build/OUTCODE/src/game/player.o (.data);
build/OUTCODE/src/game/crc.o (.data);
build/OUTCODE/src/game/chrObjRandom.o (.data);
build/OUTCODE/src/game/unk_09B7A0.o (.data);
build/OUTCODE/src/game/vtxstore.o (.data);
build/OUTCODE/src/game/explosion.o (.data);
build/OUTCODE/src/game/glass.o (.data);
build/OUTCODE/src/game/glass2.o (.data);
build/OUTCODE/src/game/options.o (.data);
build/OUTCODE/src/game/textrelated.o (.data);
build/OUTCODE/src/game/stan.o (.data);
+5 -3
View File
@@ -43,10 +43,11 @@
build/OUTCODE/src/game/title.o (.rodata);
build/OUTCODE/src/game/front.o (.rodata);
build/OUTCODE/src/game/rle.o (.rodata);
build/OUTCODE/src/game/unk_01B240.o (.rodata);
build/OUTCODE/src/game/unk_01BAE0.o (.rodata);
build/OUTCODE/src/game/title2.o (.rodata);
build/OUTCODE/src/game/title3.o (.rodata);
build/OUTCODE/src/game/blood_animation.o (.rodata);
build/OUTCODE/src/game/blood_decrypt.o (.rodata);
build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.rodata);
build/OUTCODE/src/game/file.o (.rodata);
build/OUTCODE/src/game/file2.o (.rodata);
build/OUTCODE/src/game/chr.o (.rodata);
@@ -93,9 +94,10 @@
build/OUTCODE/src/game/player.o (.rodata);
build/OUTCODE/src/game/crc.o (.rodata);
build/OUTCODE/src/game/chrObjRandom.o (.rodata);
build/OUTCODE/src/game/unk_09B7A0.o (.rodata);
build/OUTCODE/src/game/vtxstore.o (.rodata);
build/OUTCODE/src/game/explosion.o (.rodata);
build/OUTCODE/src/game/glass.o (.rodata);
build/OUTCODE/src/game/glass2.o (.rodata);
build/OUTCODE/src/game/options.o (.rodata);
build/OUTCODE/src/game/textrelated.o (.rodata);
build/OUTCODE/src/game/stan.o (.rodata);
+5 -3
View File
@@ -43,10 +43,11 @@
build/OUTCODE/src/game/title.o (.text);
build/OUTCODE/src/game/front.o (.text);
build/OUTCODE/src/game/rle.o (.text);
build/OUTCODE/src/game/unk_01B240.o (.text);
build/OUTCODE/src/game/unk_01BAE0.o (.text);
build/OUTCODE/src/game/title2.o (.text);
build/OUTCODE/src/game/title3.o (.text);
build/OUTCODE/src/game/blood_animation.o (.text);
build/OUTCODE/src/game/blood_decrypt.o (.text);
build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.text);
build/OUTCODE/src/game/file.o (.text);
build/OUTCODE/src/game/file2.o (.text);
build/OUTCODE/src/game/chr.o (.text);
@@ -93,9 +94,10 @@
build/OUTCODE/src/game/player.o (.text);
build/OUTCODE/src/game/crc.o (.text);
build/OUTCODE/src/game/chrObjRandom.o (.text);
build/OUTCODE/src/game/unk_09B7A0.o (.text);
build/OUTCODE/src/game/vtxstore.o (.text);
build/OUTCODE/src/game/explosion.o (.text);
build/OUTCODE/src/game/glass.o (.text);
build/OUTCODE/src/game/glass2.o (.text);
build/OUTCODE/src/game/options.o (.text);
build/OUTCODE/src/game/textrelated.o (.text);
build/OUTCODE/src/game/stan.o (.text);
+1 -1
View File
@@ -248,5 +248,5 @@
#endif
build/OUTCODE/src/libultra/io/vimodentsclan1.o (.bss);
build/OUTCODE/src/libultrare/io/vimodepallan1.o (.bss);
build/OUTCODE/src/libultrare/ultra80069080.o (.bss); /*edited*/
build/OUTCODE/src/libultrare/io/ultra80069080.o (.bss); /*edited*/
/*build/OUTCODE/src/libultra/libultra.a:libultra.o (.bss);*/
+1 -1
View File
@@ -252,5 +252,5 @@
build/OUTCODE/src/libultra/io/vimodentsclan1.o (.data);
build/OUTCODE/src/libultrare/io/vimodepallan1.o (.data);
#endif
build/OUTCODE/src/libultrare/ultra80069080.o (.data); /*edited*/
build/OUTCODE/src/libultrare/io/ultra80069080.o (.data); /*edited*/
/*build/OUTCODE/src/libultra/libultra.a:libultra.o (.data);*/
+1 -1
View File
@@ -250,5 +250,5 @@
#endif
build/OUTCODE/src/libultra/io/vimodentsclan1.o (.rodata);
build/OUTCODE/src/libultrare/io/vimodepallan1.o (.rodata);
build/OUTCODE/src/libultrare/ultra80069080.o (.rodata); /*edited*/
build/OUTCODE/src/libultrare/io/ultra80069080.o (.rodata); /*edited*/
/*build/OUTCODE/src/libultra/libultra.a:libultra.o (.rodata);*/
+1 -1
View File
@@ -249,5 +249,5 @@
#endif
build/OUTCODE/src/libultra/io/vimodentsclan1.o (.text);
build/OUTCODE/src/libultrare/io/vimodepallan1.o (.text);
build/OUTCODE/src/libultrare/ultra80069080.o (.text); /*edited*/
build/OUTCODE/src/libultrare/io/ultra80069080.o (.text); /*edited*/
/*build/OUTCODE/src/libultra/libultra.a:libultra.o (.text);*/
+15 -15
View File
@@ -773,16 +773,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/rle.o
e8b537a19dbef522cab0d218d9e0cd28,.text,build/e/src/game/unk_01B240.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01B240.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01B240.o
2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/e/src/game/unk_01B240.o
c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/e/src/game/unk_01B240.o
9dd182e36f7cdfc30e37c9479de46c22,.text,build/e/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_01BAE0.o
334b90953c5606d68014564e5eda0c1b,.rodata,build/e/src/game/unk_01BAE0.o
e8b537a19dbef522cab0d218d9e0cd28,.text,build/e/src/game/title2.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/title2.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/title2.o
2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/e/src/game/title2.o
c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/e/src/game/title2.o
9dd182e36f7cdfc30e37c9479de46c22,.text,build/e/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/title3.o
334b90953c5606d68014564e5eda0c1b,.rodata,build/e/src/game/title3.o
d0f801f11337accd96ccf6967a01ce8c,.text,build/e/src/game/bondhead.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bondhead.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bondhead.o
@@ -803,11 +803,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_092E50.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_092E50.o
2503662ee6318a7e4cb77c46c99506d5,.data,build/e/src/game/unk_092E50.o
f1dbcb1438dbbb5e8506a728d9c4d142,.rodata,build/e/src/game/unk_092E50.o
3288d6c4e46d199aa581307312d196d9,.text,build/e/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_09B7A0.o
3288d6c4e46d199aa581307312d196d9,.text,build/e/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/vtxstore.o
8729ba49ddeb23c78aea1637f63dc141,.text,build/e/src/game/explosion.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/explosion.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/explosion.o
1 491aefb4d4b8ac93d91148b1ffba34ac .text build/e/src/aspboot.o
773 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/rle.o
774 d41d8cd98f00b204e9800998ecf8427e .data build/e/src/game/rle.o
775 d41d8cd98f00b204e9800998ecf8427e .rodata build/e/src/game/rle.o
776 e8b537a19dbef522cab0d218d9e0cd28 .text build/e/src/game/unk_01B240.o build/e/src/game/title2.o
777 d41d8cd98f00b204e9800998ecf8427e .code build/e/src/game/unk_01B240.o build/e/src/game/title2.o
778 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/unk_01B240.o build/e/src/game/title2.o
779 2e036a1e94af4dca08dbda3ca29bb9f1 .data build/e/src/game/unk_01B240.o build/e/src/game/title2.o
780 c1c2bef3d9452a0f148d8613ed14b3f1 .rodata build/e/src/game/unk_01B240.o build/e/src/game/title2.o
781 9dd182e36f7cdfc30e37c9479de46c22 .text build/e/src/game/unk_01BAE0.o build/e/src/game/title3.o
782 d41d8cd98f00b204e9800998ecf8427e .code build/e/src/game/unk_01BAE0.o build/e/src/game/title3.o
783 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/unk_01BAE0.o build/e/src/game/title3.o
784 d41d8cd98f00b204e9800998ecf8427e .data build/e/src/game/unk_01BAE0.o build/e/src/game/title3.o
785 334b90953c5606d68014564e5eda0c1b .rodata build/e/src/game/unk_01BAE0.o build/e/src/game/title3.o
786 d0f801f11337accd96ccf6967a01ce8c .text build/e/src/game/bondhead.o
787 d41d8cd98f00b204e9800998ecf8427e .code build/e/src/game/bondhead.o
788 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/bondhead.o
803 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/unk_092E50.o
804 2503662ee6318a7e4cb77c46c99506d5 .data build/e/src/game/unk_092E50.o
805 f1dbcb1438dbbb5e8506a728d9c4d142 .rodata build/e/src/game/unk_092E50.o
806 3288d6c4e46d199aa581307312d196d9 .text build/e/src/game/unk_09B7A0.o build/e/src/game/vtxstore.o
807 d41d8cd98f00b204e9800998ecf8427e .code build/e/src/game/unk_09B7A0.o build/e/src/game/vtxstore.o
808 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/unk_09B7A0.o build/e/src/game/vtxstore.o
809 d41d8cd98f00b204e9800998ecf8427e .data build/e/src/game/unk_09B7A0.o build/e/src/game/vtxstore.o
810 d41d8cd98f00b204e9800998ecf8427e .rodata build/e/src/game/unk_09B7A0.o build/e/src/game/vtxstore.o
811 8729ba49ddeb23c78aea1637f63dc141 .text build/e/src/game/explosion.o
812 d41d8cd98f00b204e9800998ecf8427e .code build/e/src/game/explosion.o
813 d41d8cd98f00b204e9800998ecf8427e .bss build/e/src/game/explosion.o
+15 -15
View File
@@ -768,16 +768,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/rle.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/rle.o
e8b537a19dbef522cab0d218d9e0cd28,.text,build/j/src/game/unk_01B240.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01B240.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01B240.o
2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/j/src/game/unk_01B240.o
c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/j/src/game/unk_01B240.o
9dd182e36f7cdfc30e37c9479de46c22,.text,build/j/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01BAE0.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_01BAE0.o
334b90953c5606d68014564e5eda0c1b,.rodata,build/j/src/game/unk_01BAE0.o
e8b537a19dbef522cab0d218d9e0cd28,.text,build/j/src/game/title2.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/title2.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/title2.o
2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/j/src/game/title2.o
c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/j/src/game/title2.o
9dd182e36f7cdfc30e37c9479de46c22,.text,build/j/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/title3.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/title3.o
334b90953c5606d68014564e5eda0c1b,.rodata,build/j/src/game/title3.o
155f1fa47776a23483dca05a6d9d83c2,.text,build/j/src/game/bondhead.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bondhead.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bondhead.o
@@ -798,11 +798,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_092E50.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_092E50.o
a64d97ec0061b70dcbcebed4ae05d125,.data,build/j/src/game/unk_092E50.o
f1dbcb1438dbbb5e8506a728d9c4d142,.rodata,build/j/src/game/unk_092E50.o
3288d6c4e46d199aa581307312d196d9,.text,build/j/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_09B7A0.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_09B7A0.o
3288d6c4e46d199aa581307312d196d9,.text,build/j/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/vtxstore.o
d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/vtxstore.o
8729ba49ddeb23c78aea1637f63dc141,.text,build/j/src/game/explosion.o
d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/explosion.o
d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/explosion.o
1 491aefb4d4b8ac93d91148b1ffba34ac .text build/j/src/aspboot.o
768 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/rle.o
769 d41d8cd98f00b204e9800998ecf8427e .data build/j/src/game/rle.o
770 d41d8cd98f00b204e9800998ecf8427e .rodata build/j/src/game/rle.o
771 e8b537a19dbef522cab0d218d9e0cd28 .text build/j/src/game/unk_01B240.o build/j/src/game/title2.o
772 d41d8cd98f00b204e9800998ecf8427e .code build/j/src/game/unk_01B240.o build/j/src/game/title2.o
773 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/unk_01B240.o build/j/src/game/title2.o
774 2e036a1e94af4dca08dbda3ca29bb9f1 .data build/j/src/game/unk_01B240.o build/j/src/game/title2.o
775 c1c2bef3d9452a0f148d8613ed14b3f1 .rodata build/j/src/game/unk_01B240.o build/j/src/game/title2.o
776 9dd182e36f7cdfc30e37c9479de46c22 .text build/j/src/game/unk_01BAE0.o build/j/src/game/title3.o
777 d41d8cd98f00b204e9800998ecf8427e .code build/j/src/game/unk_01BAE0.o build/j/src/game/title3.o
778 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/unk_01BAE0.o build/j/src/game/title3.o
779 d41d8cd98f00b204e9800998ecf8427e .data build/j/src/game/unk_01BAE0.o build/j/src/game/title3.o
780 334b90953c5606d68014564e5eda0c1b .rodata build/j/src/game/unk_01BAE0.o build/j/src/game/title3.o
781 155f1fa47776a23483dca05a6d9d83c2 .text build/j/src/game/bondhead.o
782 d41d8cd98f00b204e9800998ecf8427e .code build/j/src/game/bondhead.o
783 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/bondhead.o
798 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/unk_092E50.o
799 a64d97ec0061b70dcbcebed4ae05d125 .data build/j/src/game/unk_092E50.o
800 f1dbcb1438dbbb5e8506a728d9c4d142 .rodata build/j/src/game/unk_092E50.o
801 3288d6c4e46d199aa581307312d196d9 .text build/j/src/game/unk_09B7A0.o build/j/src/game/vtxstore.o
802 d41d8cd98f00b204e9800998ecf8427e .code build/j/src/game/unk_09B7A0.o build/j/src/game/vtxstore.o
803 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/unk_09B7A0.o build/j/src/game/vtxstore.o
804 d41d8cd98f00b204e9800998ecf8427e .data build/j/src/game/unk_09B7A0.o build/j/src/game/vtxstore.o
805 d41d8cd98f00b204e9800998ecf8427e .rodata build/j/src/game/unk_09B7A0.o build/j/src/game/vtxstore.o
806 8729ba49ddeb23c78aea1637f63dc141 .text build/j/src/game/explosion.o
807 d41d8cd98f00b204e9800998ecf8427e .code build/j/src/game/explosion.o
808 d41d8cd98f00b204e9800998ecf8427e .bss build/j/src/game/explosion.o
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+71 -141
View File
@@ -2,6 +2,7 @@
COUNTRY_CODE=""
OUTFILE=""
ARG_VERSION=""
usage() {
echo "$0 usage:"
@@ -11,168 +12,97 @@ usage() {
echo " -o output filename. Optional. Defaults to full_hashtable_{version}.csv"
echo " -v version. Supported options are: US,u, JP,j, EU,e"
echo ""
exit 0;
exit 0
}
[ $# -eq 0 ] && usage
while getopts "o:hv:" arg; do
case $arg in
v) # version
if [ "${OPTARG,,}" = "us" ]; then
COUNTRY_CODE="u"
elif [ "${OPTARG,,}" = "u" ]; then
COUNTRY_CODE="u"
elif [ "${OPTARG,,}" = "jp" ]; then
COUNTRY_CODE="j"
elif [ "${OPTARG,,}" = "j" ]; then
COUNTRY_CODE="j"
elif [ "${OPTARG,,}" = "eu" ]; then
COUNTRY_CODE="e"
elif [ "${OPTARG,,}" = "e" ]; then
COUNTRY_CODE="e"
fi
ARG_VERSION="${OPTARG}"
;;
o) # out file
OUTFILE="${OPTARG}"
;;
h | *) # Display help.
usage
exit 0
;;
esac
while getopts "o:hv:" arg; do
case $arg in
v)
case "${OPTARG,,}" in
us | u)
COUNTRY_CODE="u"
;;
jp | j)
COUNTRY_CODE="j"
;;
eu | e)
COUNTRY_CODE="e"
;;
*)
echo "Unsupported version: ${OPTARG}"
usage
;;
esac
ARG_VERSION="${OPTARG}"
;;
o)
OUTFILE="${OPTARG}"
;;
h | *)
usage
;;
esac
done
if [ -z "${COUNTRY_CODE}" ]; then
echo "No valid version provided."
usage
fi
if ! command -v "mips-linux-gnu-objcopy" &> /dev/null
then
echo "command mips-linux-gnu-objcopy not found"
exit 1
fi
if [ "${OUTFILE}" = "" ] ; then
OUTFILE="full_hashtable_${version}.csv"
if ! command -v "md5sum" &> /dev/null
then
echo "command md5sum not found"
exit 1
fi
TMP=$(mktemp /tmp/ge_test_files.XXXXXX)
if [ -z "${OUTFILE}" ] ; then
OUTFILE="full_hashtable_${ARG_VERSION}.csv"
fi
TMP=$(mktemp /tmp/ge_test_files.XXXXXX) || { echo "Failed to create temp file"; exit 1; }
trap 'rm -f "${TMP}"' EXIT
rm -f "${OUTFILE}"
touch "${OUTFILE}"
# output format is simple csv, one entry per line
# 32 character md5, name of section extracted from ELF binary, and path to file relative from repo root (where this script is)
#
# escaped csv, quotes or commas in filenames are not supported.
SECTIONS=( ".text" ".code" ".bss" ".data" ".rodata" )
for FILE in build/${COUNTRY_CODE}/src/*.o
# Search roots: build country tree and repository root assets folder
SEARCH_ROOTS=( "build/${COUNTRY_CODE}" )
for ROOT in "${SEARCH_ROOTS[@]}"
do
echo "adding ${FILE}"
if [ -d "${ROOT}" ]; then
# find all object files under this root, but skip build/${COUNTRY_CODE}/assets/images/*
find "${ROOT}" -type f -name '*.o' ! -path "*/assets/images/*" -print0 | while IFS= read -r -d '' FILE
do
echo "adding ${FILE}"
for SEC in "${SECTIONS[@]}"
do
# Extract section to TMP; suppress objcopy stderr (section may be missing)
mips-linux-gnu-objcopy -j "${SEC}" -O binary "${FILE}" "${TMP}" 2>/dev/null || true
mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}"
printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
# If TMP has content, compute md5 and append to OUTFILE
if [ -s "${TMP}" ]; then
MD5=$(md5sum -b "${TMP}" | cut -c -32)
printf "%s,%s,%s\n" "${MD5}" "${SEC}" "${FILE}" >> "${OUTFILE}"
fi
mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}"
printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
# Clear TMP for next section
: > "${TMP}"
done
done
fi
done
for FILE in build/${COUNTRY_CODE}/src/game/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}"
printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}"
printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
for FILE in build/${COUNTRY_CODE}/assets/obseg/bg/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
for FILE in build/${COUNTRY_CODE}/assets/obseg/brief/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
for FILE in build/${COUNTRY_CODE}/assets/obseg/setup/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
for FILE in build/${COUNTRY_CODE}/assets/obseg/stan/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
for FILE in build/${COUNTRY_CODE}/assets/obseg/text/*.o
do
echo "adding ${FILE}"
mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}"
printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}"
printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}"
printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}"
done
rm -f "${TMP}"
# TMP is removed by trap on exit
exit 0
+3 -2
View File
@@ -66,8 +66,9 @@ do
mips-linux-gnu-objcopy -j "${SECTION}" -O binary "${FILE}" "${TMP}"
ACTUAL=$(md5sum -b "${TMP}" | cut -c -32 | tr '[:upper:]' '[:lower:]')
EXPECTED=$(echo "${MD5}" | tr '[:upper:]' '[:lower:]')
FILENAME=$(echo $FILE | sed -E -e 's/build\/[uje]\/src\//src\//g;');
VERSION=$(echo $FILE | sed -E -e 's/build\/([uje])\/.*/\1/g;');
# derive VERSION (u/j/e) and relative path inside build/<version>/
VERSION=$(echo "${FILE}" | sed -E -e 's|build/([uje])(/.*)|\1|')
FILENAME=$(echo "${FILE}" | sed -E -e 's|build/[uje]/(.*)|\1|')
if [ "${ACTUAL}" != "${EXPECTED}" ] ; then
#if [ "${SECTION}" == ".data" ] || [ "${SECTION}" == ".rodata" ] ; then
+11 -11
View File
@@ -4485,7 +4485,7 @@ _AI_CMD(
* Is Key, if it exists, "Dropped"? (not moving/in mid-air)
********************************************************************************
* @return Continue execution from LABEL if TRUE
* @exception: Used to check if a Key with ID has been "Dropped" (RUNTIMEBITFLAG_DEPOSIT)
* @exception: Used to check if a Key with ID has been "Dropped" (RUNTIMEBITFLAG_HASPROJECTILE)
* Make sure IFItemIsAttachedToObject takes priority over
* IFKeyDropped when using both commands
*******************************************************************************/
@@ -4879,7 +4879,7 @@ _AI_CMD(
if (!objGetDestroyedLevel(obj))
{
f32 damage = ((obj->damage - obj->maxdamage) + 1) / 250.0f;
maybe_detonate_object(obj, damage, &obj->runtime_pos, 29, -1);
objApplyDamage(obj, damage, &obj->runtime_pos, 29, -1);
}
}
Offset += CAT(CAT(AI_, CMDNAME), _LENGTH);
@@ -5062,7 +5062,7 @@ _AI_CMD(
ObjectRecord *obj = objFindByTagId(ai->val[0]);
if (obj && obj->prop)
{
bool a = collect_or_interact_object(obj->prop, 0);
bool a = propPickupByPlayer(obj->prop, 0);
propExecuteTickOperation(obj->prop, a);
}
Offset += CAT(CAT(AI_, CMDNAME), _LENGTH);
@@ -6394,7 +6394,7 @@ _AI_CMD(
{
AIRecord *ai = AiListp + Offset;
float val = (ai->val[0]) / 255.0f;
if (val > bondviewGetCurrentPlayerHealth())
if (val > currentPlayerGetHealth())
{
Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]);
}
@@ -6436,7 +6436,7 @@ _AI_CMD(
{
AIRecord *ai = AiListp + Offset;
float val = (ai->val[0]) / 255.0f;
if (val < bondviewGetCurrentPlayerHealth())
if (val < currentPlayerGetHealth())
{
Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]);
}
@@ -10165,11 +10165,11 @@ _AI_CMD(
u16 padnum = CharArrayTo16(ai->val,0);
if (isNotBoundPad(padnum))
{
dword_CODE_bss_800799F8 = &g_CurrentSetup.pads[padnum];
g_CameraLookAtBondPad = &g_CurrentSetup.pads[padnum];
}
else
{
dword_CODE_bss_800799F8 = (PadRecord *) &g_CurrentSetup.boundpads[getBoundPadNum(padnum)];
g_CameraLookAtBondPad = (PadRecord *) &g_CurrentSetup.boundpads[getBoundPadNum(padnum)];
}
set_camera_mode(CAMERAMODE_POSEND);
Offset += CAT(CAT(AI_, CMDNAME), _LENGTH);
@@ -10218,7 +10218,7 @@ _AI_CMD(
if (TagIndex >= 0)
{
CutsceneRecord *cdef = setupGetPtrToCommandByIndex(tag->OffsetToObj + TagIndex);
dword_CODE_bss_800799F8 = NULL;
g_CameraLookAtBondPad = NULL;
gBondViewCutscene = cdef;
dword_CODE_bss_80079A18 = CharArrayTo16(ai->val,1);
dword_CODE_bss_80079A1C = CharArrayTo16(ai->val,3);
@@ -10262,7 +10262,7 @@ _AI_CMD(
{
AIRecord * ai = AiListp + Offset;
f32 bondpos = (s16) CharArrayTo16(ai->val,0);
if (get_curplayer_positiondata()->pos.y < bondpos)
if (getCurrentPlayerProp()->pos.y < bondpos)
{
Offset = chraiGoToLabel(AiListp, Offset, ai->val[2]);
}
@@ -11294,7 +11294,7 @@ _AI_CMD(
padnum = CharArrayTo16(ai->val, 6);
targetHeight = (s16)CharArrayTo16(ai->val, 8);
start = CharArrayTo16(ai->val, 10);
dword_CODE_bss_800799F8 = NULL;
g_CameraLookAtBondPad = NULL;
gBondViewCutscene = NULL;
flt_CODE_bss_80079A00 = (start * M_TAU_F) / M_U16_MAX_VALUE_F; /*unit direction 0 - 1 (increments are 0.000001)*/
flt_CODE_bss_80079A04 = (speed60 * M_TAU_F) / M_U16_MAX_VALUE_F; /*how many increments per frame*/
@@ -11850,7 +11850,7 @@ _AI_CMD(
if (obj && obj->prop)
{
sub_GAME_7F03FDA8(obj->prop);
if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT)
if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE)
{
obj->projectile->flags |= 0x601;
projectileSetSticky(obj->prop);
+1 -1
View File
@@ -933,7 +933,7 @@ IF_VA(NOT(IS_EMPTY(CASE_VAL0)))(IF_VA(NOT(IS_EMPTY(CASE_VAL1)))(BREAK(FAIL_LBL)
#define ai_list_end_ID 0x04
#define ai_list_end_LENGTH 0x01
#define ai_list_end \
ai_list_end_ID
ai_list_end_ID,
/*=============================================================================
// name: jump_to_ai_list
+187 -95
View File
@@ -229,6 +229,13 @@ typedef enum CHRFLAG
CHRFLAG_80000000 = 0x80000000 // unknown
}CHRFLAG;
enum CHR_RENDER_PART {
CHR_RENDERPART_HEAD,
CHR_RENDERPART_TORSO,
CHR_RENDERPART_LEFT_ARM,
CHR_RENDERPART_RIGHT_ARM
};
// collision detection types
typedef enum CDTYPE
{
@@ -287,7 +294,7 @@ BITFLAG(PS_FLAGS2,
typedef enum PROPFLAG
{
PROPFLAG_RENDERPOSTBG = 0x00000001, // Fall to Ground
PROPFLAG_ONSCREEN = 0x00000002, // In Air Rotated 90 Deg Upside-Down
PROPFLAG_ONSCREEN = 0x00000002, // In Air Rotated 90 Deg Upside-Down
PROPFLAG_ENABLED = 0x00000004, // In Air Upside-Down
PROPFLAG_00000008 = 0x00000008, // In Air
PROPFLAG_00000010 = 0x00000010, // Scale to Pad Bounds
@@ -296,17 +303,17 @@ typedef enum PROPFLAG
PROPFLAG_00000080 = 0x00000080, // Scale Z to Pad Bounds
PROPFLAG_00000100 = 0x00000100, // Force Collisions
PROPFLAG_00000200 = 0x00000200, // Glass Env Mapping Style
PROPFLAG_ILLUMINATED = 0x00000400, /* ignore Stan Colour?*/
PROPFLAG_ILLUMINATED = 0x00000400, // ignore Stan Colour?
PROPFLAG_00000800 = 0x00000800, // Free Standing Glass
PROPFLAG_00001000 = 0x00001000, // Absolute Position
PROPFLAG_AIUNDROPPABLE = 0x00002000, /* Item Not Droppedz*/
PROPFLAG_AIUNDROPPABLE = 0x00002000, // Item Not Droppedz
PROPFLAG_ASSIGNEDTOCHR = 0x00004000, // Assigned to Actor
PROPFLAG_INSIDEANOTHEROBJ = 0x00008000, // Embedded Object
PROPFLAG_FORCEMORTAL = 0x00010000, // unknown
PROPFLAG_INVINCIBLE = 0x00020000, // Invincible
PROPFLAG_00040000 = 0x00040000, // Allow Pickup (chr_type)
PROPFLAG_00080000 = 0x00080000, // Collect Object by Interaction Button Only
PROPFLAG_UNCOLLECTABLE = 0x00100000, /* Item Not Collectable*/
PROPFLAG_UNCOLLECTABLE = 0x00100000, // Item Not Collectable
PROPFLAG_00200000 = 0x00200000, // Bounce and Destroy If Shot
PROPFLAG_00400000 = 0x00400000, // unknown
PROPFLAG_00800000 = 0x00800000, // unknown
@@ -314,21 +321,24 @@ typedef enum PROPFLAG
PROPFLAG_CANNOT_ACTIVATE = 0x02000000, // Cannot Activate Door/Object
PROPFLAG_04000000 = 0x04000000, // AI Sees Through Door/Object
PROPFLAG_DOOR_TWOWAY = 0x08000000, // Open Away From Player
PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, /* Left-Handed weapon*/
PROPFLAG_GLASS_HASPORTAL = 0x10000000, /* Glass Has Portal*/
PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, // Left-Handed weapon
PROPFLAG_GLASS_HASPORTAL = 0x10000000, // Glass Has Portal
PROPFLAG_CULL_BEHIND_DOOR = 0x10000000, // Area Behind Door Invisible
PROPFLAG_FIXED_MONITOR = 0x10000000, // Monitor Fixed
PROPFLAG_CCTV_DISABLED = 0x10000000, // Disable security camera
PROPFLAG_IS_DRONE_GUN = 0x10000000, // drone gun
PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, /* Open Backwards*/
PROPFLAG_SPECIAL_FUNC = 0x20000000, //Special Function
PROPFLAG_CONCEAL_GUN = 0x20000000, //Conceal Weapon
PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, // Open Backwards
PROPFLAG_SPECIAL_FUNC = 0x20000000, // Special Function
PROPFLAG_INMOTION = 0x20000000, // projectile/prop is in motion
PROPFLAG_CONCEAL_GUN = 0x20000000, // Conceal Weapon
PROPFLAG_MONITOR_RENDERPOSTBG = 0x40000000,
PROPFLAG_NO_PORTAL_CLOSE = 0x40000000, // Area Behind Door Visible
PROPFLAG_NO_AMMO = 0x40000000,/* No Ammo on pickup */
PROPFLAG_NO_AMMO = 0x40000000, // No Ammo on pickup
PROPFLAG_80000000 = 0x80000000, // Open By Default/Weapon Paired for Player
PROPFLAG_IS_DOUBLE = 0x80000000
PROPFLAG_IS_DOUBLE = 0x80000000,
PROPFLAG_DOOR_KEEPOPEN = 0x80000000
}PROPFLAG;
// prop definition flags
typedef enum PROPFLAG2
{
@@ -366,65 +376,40 @@ typedef enum PROPFLAG2
PROPFLAG2_DOOR_ALTCOORDSYSTEM = 0x80000000 // Massive Explosion (08 Type)/Rotating Disabled Drone Gun (0D Type)
} PROPFLAG2;
// Flags on DoorRecord.doorFlags (u16, offset 0x98)
typedef enum DOORFLAG
{
DOORFLAG_0001 = 0x00000001,
DOORFLAG_EXTENDEDY = 0x00000001,
DOORFLAG_WINDOWED = 0x00000002,
DOORFLAG_0004 = 0x00000004,
DOORFLAG_FLIP = 0x00000008,
DOORFLAG_AUTOMATIC = 0x00000010,
DOORFLAG_0020 = 0x00000020,
DOORFLAG_ROTATEDPAD = 0x00000040,
DOORFLAG_080 = 0x00000080,
DOORFLAG_100 = 0x00000100,
DOORFLAG_LONGRANGE = 0x00000200,
DOORFLAG_DAMAGEONCONTACT = 0x00000400, // Lasers
DOORFLAG_UNBLOCKABLEOPEN = 0x00000800, // Skip collision checks when opening
DOORFLAG_4000 = 0x00004000, // Two Investigation vertical doors after lasers
DOORFLAG_CANNOT_ACTIVATE = 0x02000000,
DOORFLAG_KEEPOPEN = 0x80000000
DOORFLAG_CLIP_TO_BBOX = 0x00000004, // Clip the mesh to the shrinking/expanding bbox while sliding
DOORFLAG_FLIP = 0x00000008
} DOORFLAG;
typedef enum DOORMODE
{
DOORMODE_IDLE,
DOORMODE_OPENING,
DOORMODE_CLOSING,
// Waiting for sibling door to close. Eg. Dam gates in GE
DOORMODE_WAITING
} DOORMODE;
typedef enum DOORSTATE
{
DOORSTATE_STATIONARY,
DOORSTATE_OPENING,// also OPEN but NOT AIlist compatible (02)
DOORSTATE_OPENING, // also OPEN but NOT AIlist compatible (02)
DOORSTATE_CLOSING, // also CLOSE but NOT AIlist compatible (01)
DOORSTATE_WAITING
DOORSTATE_WAITING // Waiting for sibling door to close. Eg. Dam gates
} DOORSTATE;
#define DOORTYPE_SLIDING 0
// GE only - Bunker flexi door
#define DOORTYPE_FLEXI1 1
#define DOORTYPE_FLEXI2 2
#define DOORTYPE_FLEXI3 3
#define DOORTYPE_VERTICAL 4
#define DOORTYPE_SWINGING 5
// GE only - Caverns
#define DOORTYPE_EYE 6
// GE only - Caverns
#define DOORTYPE_IRIS 7
// GE only - Surface grate and Train floor panel
#define DOORTYPE_FALLAWAY 8
// GE only
#define DOORTYPE_AZTECCHAIR 9
// Attack Ship windows
#define DOORTYPE_HULL 10
#define DOORTYPE_LASER 11
typedef enum DOORTYPE
{
DOORTYPE_SLIDING,
DOORTYPE_FLEXI1, // Bunker flexi door
DOORTYPE_FLEXI2,
DOORTYPE_FLEXI3,
DOORTYPE_VERTICAL,
DOORTYPE_SWINGING,
DOORTYPE_EYE, // Caverns
DOORTYPE_IRIS, // Caverns
DOORTYPE_FALLAWAY, // Surface grate and Train floor panel
DOORTYPE_AZTECCHAIR
} DOORTYPE;
typedef enum DOOR_OPEN_SOUND
{
DOOR_OPEN_SOUND_NONE = 0,
DOOR_OPEN_SOUND_NONE,
DOOR_OPEN_SOUND_01,
DOOR_OPEN_SOUND_02,
DOOR_OPEN_SOUND_METAL,
@@ -458,10 +443,13 @@ typedef enum PROJECTILEFLAG
PROJECTILEFLAG_AIRBORNE = 0x00000001,
PROJECTILEFLAG_00000002 = 0x00000002,
PROJECTILEFLAG_STICKY = 0x00000004,
PROJECTILEFLAG_00000008 = 0x00000008,
PROJECTILEFLAG_POWERED = 0x00000010,
PROJECTILEFLAG_00000020 = 0x00000020,
PROJECTILEFLAG_00000040 = 0x00000040,
PROJECTILEFLAG_LAUNCHING = 0x00000080,
PROJECTILEFLAG_00000100 = 0x00000100,
PROJECTILEFLAG_00000200 = 0x00000200,
PROJECTILEFLAG_FALLING = 0x00000400,
PROJECTILEFLAG_SLIDING = 0x00000800,
PROJECTILEFLAG_00001000 = 0x00001000,
@@ -503,6 +491,17 @@ typedef enum PROPSTATE {
#define PROPSTATE_NORMAL PROPSTATE_NONE
typedef enum STANTILEFLAG
{
STANTILEFLAG_NORMAL = 0x01,
STANTILEFLAG_FORCECROUCH = 0x02,
STANTILEFLAG_04 = 0x04,
STANTILEFLAG_08 = 0x08,
STANTILEFLAG_10 = 0x10,
STANTILEFLAG_20 = 0x20,
STANTILEFLAG_LADDER = 0x40
} STANTILE_FLAG;
BITFLAG(PLAYERFLAG,
LOCKCONTROLS,
NOCONTROL,
@@ -512,23 +511,23 @@ BITFLAG(PLAYERFLAG,
BITFLAG(RUNTIMEBITFLAG,
00000001,
00000002,
REMOVE, /* removes object when set */
REMOVE, /* removes object when set */
ISRETICK,
TAGGED,
THROWING_KNIFE_RELATED,
EMBEDDED,
DEPOSIT, /* depositted (thrown/launching) */
HASPROJECTILE, /* this object owns a live Projectile record in obj->projectile */
00000100,
BEENOPENED,
DESTROYED, /* only set with disabled or destroyed doors */
DESTROYED, /* only set with disabled or destroyed doors */
00000800,
00001000,
PADLOCKEDDOOR,
ACTIVATED, /* activated */
ACTIVATED, /* activated */
00008000,
00010000,
00020000, /* owner 2bit (0-3) used to */
00040000, /* attribute kills to players */
00020000, /* owner 2bit (0-3) used to */
00040000, /* attribute kills to players */
HASOWNER,
00100000,
00200000,
@@ -544,9 +543,15 @@ BITFLAG(RUNTIMEBITFLAG,
80000000
)
#define RUNTIMEBITFLAG_OWNER 0x60000
#define RUNTIMEBITSHIFT_OWNER 0x11
#define RUNTIMEBITFLAG_00000001 0x1
#define RUNTIMEBITFLAG_OWNER 0x60000
#define RUNTIMEBITSHIFT_OWNER 0x11
#define RUNTIMEBITFLAG_00000001 0x1
#define RUNTIMEBITFLAG_00000080 0x00000080
#define RUNTIMEBITFLAG_00000100 0x00000100
#define RUNTIMEBITFLAG_00001000 0x00001000
#define RUNTIMEBITFLAG_00000800 0X00000800
#define RUNTIMEBITFLAG_PADLOCKEDDOOR 0X00002000
#define RUNTIMEBITFLAG_HASOWNER 0X00080000
#define WEAPONSTATBITFLAG_00000001 0x1
/* skip from fire to reload animation; item "disappears" after use, redrawn from off-screen like knives" */
@@ -1523,6 +1528,47 @@ typedef enum GAMEMODE
GAMEMODE_CHEATS
} GAMEMODE;
typedef enum GUN_ANIMATION_STATE_IDS
{
GUN_ANIM_STATE_IDLE,
GUN_ANIM_STATE_TRIGGER_PRESS,
GUN_ANIM_STATE_FIRE,
GUN_ANIM_STATE_RECOIL1,
GUN_ANIM_STATE_RECOIL2,
GUN_ANIM_STATE_SWITCH_LOWER,
GUN_ANIM_STATE_SWITCH_SWAP,
GUN_ANIM_STATE_SWITCH_HOLD,
GUN_ANIM_STATE_SWITCH_RAISE,
GUN_ANIM_STATE_RELOAD_START,
GUN_ANIM_STATE_RELOAD_LOWER,
GUN_ANIM_STATE_RELOAD_SWAP,
GUN_ANIM_STATE_RELOAD_RAISE,
GUN_ANIM_STATE_DRY_FIRE,
GUN_ANIM_STATE_WATCH_LOWER,
GUN_ANIM_STATE_WATCH_SWAP,
GUN_ANIM_STATE_WATCH_RAISE,
GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN, // Slash right to left
GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE,
GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER,
GUN_ANIM_STATE_KNIFE_SLASH2_BEGIN, // Slash left to right
GUN_ANIM_STATE_KNIFE_SLASH2_STRIKE,
GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER,
GUN_ANIM_STATE_THROWKNIFE_DRAW,
GUN_ANIM_STATE_THROWKNIFE_THROW,
GUN_ANIM_STATE_THROWKNIFE_RECOVER,
GUN_ANIM_STATE_GRENADE_THROW,
GUN_ANIM_STATE_GRENADE_RECOVER,
GUN_ANIM_STATE_MINE_PLACE,
GUN_ANIM_STATE_MINE_RECOVER,
GUN_ANIM_STATE_PUNCH1_STRIKE,
GUN_ANIM_STATE_PUNCH1_RECOVER,
GUN_ANIM_STATE_PUNCH2_STRIKE,
GUN_ANIM_STATE_PUNCH2_RECOVER,
GUN_ANIM_STATE_UNUSED_34,
GUN_ANIM_STATE_UNUSED_35,
GUN_ANIM_STATE_USE_ITEM
} GUN_ANIMATION_STATE_IDS;
typedef enum GUNHAND //Canonical name
{
GUNRIGHT,
@@ -1865,6 +1911,12 @@ typedef enum MODELNODE_CHILD
MODELNODE_CHILD_MAX
} MODELNODE_CHILD;
typedef enum MODEL_GROUP_MTX_BUILD_FLAGS
{
MODELGROUP_MTX_HAS_MATRIX1 = 0x0100,
MODELGROUP_MTX_HAS_MATRIX2 = 0x0200
} MODEL_GROUP_MTX_BUILD_FLAGS;
typedef enum BOND
{
BOND_BROSNAN,
@@ -1898,8 +1950,8 @@ typedef enum MPMENU
MENU_SCORES,
MENU_PAUSE,
MENU_EXIT,
MENU_6,
MENU_7
MENU_EXIT_CONFIRM,
MENU_FINISHED
} MPMENU;
typedef enum MPSCENARIOS
@@ -2063,6 +2115,12 @@ typedef enum PLAYER_ID
PLAYER_4
} PLAYER_ID;
typedef enum PORTALFLAGS
{
PORTALFLAG_DISABLED = 0x01,
PORTALFLAG_SPECIAL = 0x02
} PORTALFLAGS;
#define SAVESLOT1 0x0
#define SAVESLOT2 0x1
#define SAVESLOT3 0x2
@@ -2768,15 +2826,15 @@ char *TEXTBANK_LEVEL_INDEX_ToString[] =
#define GUNAMMOREASON_DAMAGE 0x08
typedef enum WATCH_ANIMATION_STATE_IDS {
WATCH_ANIMATION_0x0 = 0,
WATCH_ANIMATION_0x1,
WATCH_ANIMATION_0x2,
WATCH_ANIMATION_0x3,
WATCH_ANIMATION_0x4,
WATCH_ANIMATION_0x5,
WATCH_ANIMATION_0x6,
WATCH_ANIMATION_0x7,
WATCH_ANIMATION_0x8,
WATCH_ANIMATION_0x0, /* Watch closed, normal play. */
WATCH_ANIMATION_0x1, /* Pause initiated, lower any weapon in left hand. */
WATCH_ANIMATION_0x2, /* Tilt player camera to watch angle. */
WATCH_ANIMATION_0x3, /* Raise left arm. */
WATCH_ANIMATION_0x4, /* Zoom into watch face. */
WATCH_ANIMATION_0x5, /* Watch open, game paused. */
WATCH_ANIMATION_0x6, /* Zoom out from watch face. */
WATCH_ANIMATION_0x7, /* Lower left arm. */
WATCH_ANIMATION_0x8, /* Tilt player camera to where it was before pause initiated, finish pause. */
WATCH_ANIMATION_0x9,
WATCH_ANIMATION_0xa,
WATCH_ANIMATION_0xb,
@@ -2794,7 +2852,6 @@ typedef enum WATCH_BRIEFING_PAGE
BRIEFING_MONEYPENNY
} WATCH_BRIEFING_PAGE;
typedef enum AWARD {
AWARD_MOSTSUICIDAL = 0x00001,
@@ -2816,7 +2873,6 @@ typedef enum AWARD {
AWARD_QUADKILL = 0x10000
} AWARD;
typedef enum WAYMODE
{
WAYMODE_0,
@@ -2844,22 +2900,22 @@ typedef enum SPSEGMENT
typedef enum TVCMD
{
TVCMD_STOPSCROLL = 0x00,
TVCMD_SCROLLRELX = 0x01,
TVCMD_SCROLLRELY = 0x02,
TVCMD_SCROLLABSX = 0x03,
TVCMD_SCROLLABSY = 0x04,
TVCMD_SCALEABSX = 0x05,
TVCMD_SCALEABSY = 0x06,
TVCMD_SETTEXTURE = 0x07,
TVCMD_PAUSE = 0x08,
TVCMD_SETCMDLIST = 0x09,
TVCMD_RANDSETCMDLIST = 0x0a,
TVCMD_RESTART = 0x0b,
TVCMD_YIELD = 0x0c,
TVCMD_SETCOLOUR = 0x0d,
TVCMD_ROTATEABS = 0x0e,
TVCMD_ROTATEREL = 0x0f
TVCMD_STOPSCROLL,
TVCMD_SCROLLRELX,
TVCMD_SCROLLRELY,
TVCMD_SCROLLABSX,
TVCMD_SCROLLABSY,
TVCMD_SCALEABSX,
TVCMD_SCALEABSY,
TVCMD_SETTEXTURE,
TVCMD_PAUSE,
TVCMD_SETCMDLIST,
TVCMD_RANDSETCMDLIST,
TVCMD_RESTART,
TVCMD_YIELD,
TVCMD_SETCOLOUR,
TVCMD_ROTATEABS,
TVCMD_ROTATEREL
} TVCMD;
enum CCRMLUT
@@ -2967,6 +3023,7 @@ enum CCRMLUT
BODY_Natalya_Jungle_Fatigues,
BODIES_MAX
} BODIES;
typedef enum GENDER
{
FEMALE,
@@ -4006,6 +4063,7 @@ typedef enum PROJECTILES
HATTYPE_FURRY,
HATTYPE_MOON
} HATTYPE;
typedef enum INV_ITEM_TYPE
{
INV_ITEM_NONE,
@@ -4015,6 +4073,23 @@ typedef enum PROJECTILES
INV_ITEM_PICKUP
} INV_ITEM_TYPE;
/**
* Tick operations
* The per-prop tick functions like chrTick, objTick, playerTick, explosionTick, explosionSmokeTick
* and the collect/interact chain returns a tickop telling the game what to do with the prop it just processed.
*
* TICKOP_DISABLE and TICKOP_RETICK are handled but never actually used.
*/
typedef enum TICKOP
{
TICKOP_NONE, // Default, do nothing.
TICKOP_FREE, // Deregister, delist, disable and free the prop except for weapons flagged PROPSTATE_RESPAWN which begin their respawn timer instead.
TICKOP_DISABLE, // Deregister, delist and disable the prop, but keep the record.
TICKOP_RETICK, // Delist the prop and reactivate it so it is ticked again this frame.
TICKOP_GIVETOPLAYER, // Detach the prop and reparent it to the player prop e.g. collected pickups.
TICKOP_CHANGEDLIST // The tick restructured the prop list (such as being embedded), so prop->prev is stale. The loop resumes from the prev captured before the tick.
} TICKOP;
typedef enum ITEM_IDS
{
ITEM_NOTHING = -1,
@@ -4383,6 +4458,13 @@ typedef enum PROJECTILES
};
#endif
typedef enum INTRO_WEAPON_TYPE
{
INTRO_WEAPON_TYPE_NONE,
INTRO_WEAPON_TYPE_PISTOL,
INTRO_WEAPON_TYPE_RIFLE
} INTRO_WEAPON_TYPE;
typedef enum MISSION_STATE_IDS
{
MISSION_STATE_0,
@@ -4422,7 +4504,7 @@ typedef enum PROJECTILES
typedef enum TANK_RUN_STATE
{
TANK_RUN_STATE_NOT_RUNNING = 0,
TANK_RUN_STATE_NOT_RUNNING,
TANK_RUN_STATE_STARTING,
TANK_RUN_STATE_RUNNING
} TANK_RUN_STATE;
@@ -4467,6 +4549,14 @@ typedef enum PROJECTILES
VIDEOMODE_320x240 = MD_NORMAL,
VIDEOMODE_640x480 = MD_MAXIMUM
} VIDEOMODE;
typedef enum ZBUFMODE
{
ZBUF_OFF, /* G_RM_AA_*_SURF (no z-buffer) */
ZBUF_SURFACE, /* G_RM_AA_ZB_*_SURF */
ZBUF_DECAL /* G_RM_AA_ZB_*_DECAL */
} ZBUFMODE;
#pragma endregion
#if !defined(VERSION_EU)
@@ -4529,6 +4619,7 @@ typedef enum PROJECTILES
#define S32_MAX 2147483647
#define U32_MAX 4294967295
#define M_SQRT2_F 1.41412f
#pragma region Inline Macro Functions
#ifndef _MATH_EXT_H_
#define M_TAU_F 6.2831855f
@@ -4747,6 +4838,7 @@ typedef enum PROJECTILES
#define ALIGN8(val) (((val) + 0x7 | 0x7) ^ 0x7)
#define RANDOMFRAC() ((f32) randomGetNext() * 2.3283064e-10f)
#define MAXFLOAT ((float)3.40282346638528860e+38)
#define SQ(x) ((x) * (x))
#define HUDHALIGN_RIGHT 0
#define HUDHALIGN_LEFT 1
+279 -179
View File
@@ -500,10 +500,10 @@ typedef union
// Very similar but definitely different to the above?
struct StandTileLocusCallbackRecord
{
s32 unk00;
s32 count;
s32 bufMax;
s32 nearEdgeCount;
s32 *rooms; /* 0x00 */
s32 count; /* 0x04 */
s32 bufMax; /* 0x08 */
s32 nearEdgeCount; /* 0x0c */
};
typedef struct StandFileFooter
@@ -516,7 +516,7 @@ typedef union
} StandFileFooter;
typedef s32 (*standTileLocusCallback_A_t)(struct StandTile *, struct StandTileLocusCallbackRecord *);
typedef s32 (*standTileLocusCallback_B_t)(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4, struct StandTileLocusCallbackRecord *arg5);
typedef s32 (*standTileLocusCallback_B_t)(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, f32 arg4, struct StandTileLocusCallbackRecord *arg5);
typedef s32 (*standTileLocusCallback_C_t)(struct StandTile **, s32, struct StandTileLocusCallbackRecord *);
typedef s32 (*tilePredicate_t)(struct StandTile *);
@@ -556,33 +556,45 @@ typedef union
int a;
char b;
} AnimTable2;
// unknown struct, unknown size.
typedef struct ModelAnimBitField {
u16 bitOffset;
u8 bitCount;
u8 padding;
u16 valueOffset;
} ModelAnimBitField;
typedef struct ModelAnimRootMotionChannel
{
u16 bitOffset;
u8 bitCount;
u8 padding;
u16 valueOffset;
} ModelAnimRootMotionChannel;
typedef struct ModelAnimation
{
s32 address;
u16 unk04; //nextframe
u16 unk06;
u16 unk08;
u16 unk0A;
u16 unk04; // number of frames in the animation
u8 unk06;
u8 unk07; // bit 0 is a loop flag: 0 means freeze anim at end, 1 means loop anim
ModelAnimBitField *bitDescriptors; // 0x08
u16 unk0C;
u16 unk0E;
int unk10;
int unk14;
int unk18;
int unk1c;
int unk20;
int unk24;
int unk28;
int unk2c;
int unk30;
int unk34;
int unk38;
int unk3c; //endframe
// ...
u8 *bitStream; // 0x10
s32 unk14;
s32 unk18;
s32 unk1c;
s32 unk20;
s32 unk24;
s32 unk28;
s32 unk2c;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3c; // end frame
} ModelAnimation;
struct object_animation_controller
{
void *ptranimation; // 0x00
@@ -635,12 +647,12 @@ typedef union
*/
typedef struct ModelRenderData
{
Mtxf *unk_matrix; /*0x00 */
Mtxf *basemtx; /*0x00*/ // Canonical name. See instcalcmatrices in model.c.
bool zbufferenabled; /*0x04*/
u32 flags; /*0x08*/
Gfx *gdl; /*0x0c*/
Mtxf *mtxlist; /*0x10 */
Mtxf *mtxlist; /*0x10*/ // Canonical name. See instcalcmatrices in model.c.
u32 unk14; /*0x14*/
u32 unk18; /*0x18*/
u32 unk1c; /*0x1c*/
@@ -650,7 +662,7 @@ typedef union
u32 unk28; /*0x28*/
u32 unk2c; /*0x2c*/
s32 PropType; /*0x30*/
s32 PropType; /*0x30*/
rgba_u8 envcolour; /*0x34*/
rgba_u8 fogcolour; /*0x38*/
u32 cullmode; /*0x3c*/
@@ -663,32 +675,47 @@ typedef union
typedef struct Vertex
{
coord16 coord;
s16 index; /*0x6 Collisions Only - points to vertex*/
s16 index; /* 0x6 Collisions Only - points to vertex */
union
{
struct
{
s16 s; /*0x8*/
s16 t; /*0xa*/
s16 s; /* 0x8 */
s16 t; /* 0xa */
};
struct Vertex *LinkedTo;
/* Collision vertices only: points to related model node. */
void *CollisionRelatedNode; /* 0x8 */
};
union
{
u8 r; /*0xc*/
u8 nx;
struct
{
u8 r; /* 0xc */
u8 g; /* 0xd */
u8 b; /* 0xe */
u8 a; /* 0xf */
};
struct
{
u8 nx; /* 0xc */
u8 ny; /* 0xd */
u8 nz; /* 0xe */
u8 nflag; /* 0xf */
};
struct
{
s16 CollisionRelatedIndex; /* 0xc */
s16 CollisionReserved; /* 0xe */
};
};
union
{
u8 g; /*0xd*/
u8 ny;
};
union
{
u8 b; /*0xe*/
u8 nz;
};
u8 a; /*0xf*/
} Vertex;
#pragma region OpenFlight Records
@@ -814,8 +841,12 @@ typedef union
*/
typedef struct ModelRoData_HeaderRecord
{
u32 ModelType; /*0x0 Legnth of Record (4)*/
struct ModelRoData_GroupRecord *FirstGroup; /*0x4 First group in tree*/
u16 AnimPart; /* 0x00 */
s16 MatrixIndex; /* 0x02 */
union {
struct ModelRoData_GroupRecord *FirstGroup; /* 0x04 */ /*0x4 First group in tree*/
ModelNode *FirstGroupNode;
};
union
{
@@ -878,7 +909,10 @@ typedef union
s16 MatrixID2; /*0x12 never used*/
};
};
struct ModelRoData_GroupRecord *ChildGroup; /*0x14*/
union { /*0x14*/
struct ModelRoData_GroupRecord *ChildGroup;
ModelNode *ChildGroupNode;
};
f32 BoundingVolumeRadius; /*0x18*/
} ModelRoData_GroupRecord;
@@ -1027,11 +1061,15 @@ typedef union
*/
typedef struct ModelRoData_Op11Record
{
u32 unk0c[16]; /*0x0*/
f32 BoundingVolumeRadius;
u16 RwDataIndex; /*0x44*/
u16 unk46;
void* BaseAddr;
union {
coord3d pos; /* 0x00 */
u32 unk0c[16]; /* 0x00 */
};
f32 BoundingVolumeRadius; /* 0x40 */
u16 RwDataIndex; /* 0x44 */
u16 unk46; /* 0x46 */
void *BaseAddr; /* 0x48 */
} ModelRoData_Op11Record;
typedef struct ModelRwData_Op11Record
@@ -1066,12 +1104,17 @@ typedef union
*/
typedef struct ModelRoData_ShadowRecord
{
coord2d pos; /*0x0*/
coord2d size; /*0x8*/
void *image; /*0x10*/
ModelRoData_HeaderRecord *Header; /*0x14*/
f32 Scale; /*0x18*/
void *BaseAddr; /*0x1C*/
coord2d pos; /* 0x00 */
coord2d size; /* 0x08 */
void *image; /* 0x10 */
union { /* 0x14 */
ModelRoData_HeaderRecord *Header;
ModelNode *HeaderNode;
};
f32 Scale; /* 0x18 */
void *BaseAddr; /* 0x1c */
} ModelRoData_ShadowRecord;
/**
@@ -1098,29 +1141,59 @@ typedef union
*/
typedef struct ModelRoData_InterlinkageRecord
{
coord3d pos; /*0x0*/
u32 unknown1; /*0xC*/
u32 unknown2; /*0x10*/
u32 unknown3; /*0x14*/
f32 Scale; /*0x18*/
coord3d pos; /* 0x00 */
coord3d pos2; /* 0x0c */
f32 Scale; /* 0x18 */
} ModelRoData_InterlinkageRecord;
/**
* Opcode 16
* unused
* unused but referenced
*/
typedef struct ModelNode_Op16Record
{
coord3d pos; /*0x0*/
u32 unknown1; /*0xC*/
u32 unknown2; /*0x10*/
f32 Scale; /*0x14*/
coord3d pos; /* 0x00 */
s16 nodeindex0c; /* 0x0c */
s16 nodeindex0e; /* 0x0e */
s16 nodeindex10; /* 0x10 */
s16 unk12; /* 0x12 */
f32 Scale; /* 0x14 */
} ModelNode_Op16Record;
/**
* Opcode 17
* unused
*/
typedef struct ModelRoData_Op17Record
{
s32 hitpart; /* 0x00 */
f32 radiusSq; /* 0x04 */
coord3d pos; /* 0x08 */
ModelNode *othernode; /* 0x14 */
f32 scale1; /* 0x18 */
f32 scale2; /* 0x1c */
} ModelRoData_Op17Record;
typedef struct
{
u8 pad0[0x8];
struct
{
coord3d pos;
f32 radiusSq;
coord3d rel;
coord3d dir;
} data;
} ModelOp17MainStack;
typedef struct
{
struct
{
coord3d axis;
f32 scale;
} axisAdjustment;
u8 pad0[0x0c];
} ModelOp17AxisStack;
/**
* Opcode 18 0x12
@@ -1397,9 +1470,8 @@ typedef union
*/
typedef struct Model
{
s16 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16...
s16 Type; /*0x01*/ // but modelInit() indicates that Type is a s16...
// not sure which is correct.
s16 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16...
s16 rwdatalen; /*0x01*/
struct ChrRecord *chr; /*0x04*/
ModelFileHeader *obj; /*0x08 GE Name confirmed*/
@@ -1422,7 +1494,7 @@ typedef union
s8 animlooping; /*0x26*/
s8 unk27;
f32 unk28; // animation related
f32 animframe1; /*0x28*/
f32 unk2c;
/**
@@ -1448,7 +1520,7 @@ typedef union
ModelAnimation *anim2;
f32 unk58;
f32 animframe2; /* 0x58*/
f32 unk5c;
/**
@@ -1468,11 +1540,11 @@ typedef union
f32 unk6c;
// 0x70
f32 speed2;
s32 unk74;
s32 unk78;
f32 unk74;
f32 unk78;
f32 unk7c;
// 0x80
s32 unk80;
f32 unk80;
/**
* Related to "anim2", per debug message.
@@ -1480,22 +1552,21 @@ typedef union
f32 unk84;
f32 unk88;
s32 unk8c;
f32 unk8c;
// 0x90
f32 animloopframe; /*0x90*/
f32 animloopmerge; /*0x94*/
s32 animflipfunc; /*0x98*/
s32 unk9c;
// 0xa0
s32 unka0;
s32 unka0; // This is likely a function pointer, see sub_GAME_7F06D490()
f32 playspeed; // used by ACT_STAND in chrlv
f32 animrate;
f32 unkac;
// 0xb0
f32 unkb0;
f32 unkb4;
f32 unkb8; // used by ACT_ANIM in chrlv
s32 unkbc;
f32 anim_translation_scale; // used by ACT_ANIM in chrlv
} Model;
/*
@@ -1533,10 +1604,61 @@ typedef union
} ExplosionDetailsRecordEuList;
#pragma endregion Explosion Stuff
#pragma region Hit Structures
typedef struct HitThing {
coord3d hitpos; // 0x00
coord3d normal; // 0x0c
Vertex *vtx0; // 0x18
Vertex *vtx1; // 0x1c
Vertex *vtx2; // 0x20
Gfx *tricmd; // 0x24 - display-list command associated with hit triangle
s16 unk28; // 0x28
s16 texturenum; // 0x2a
s16 tileformat; // 0x2c
s16 tilesize; // 0x2e
} HitThing;
typedef struct BulletHit {
f32 dist; // 0x00
struct PropRecord *prop; // 0x04
s32 hitpart; // 0x08
struct ModelNode *node; // 0x0c
HitThing hit; // 0x10, size 0x30
s32 room; // 0x40
struct ModelNode *unk44; // 0x44
struct Model *model; // 0x48
s32 countsAsPenetration; // 0x4c
} BulletHit;
typedef struct ShotData {
coord3d viewOrigin; // 0x00
coord3d viewDir; // 0x0c
ITEM_IDS weapon; // 0x18
coord3d gunpos; // 0x1c
coord3d dir; // 0x28
f32 maxdist; // 0x34
BulletHit hits[10]; // 0x38
} ShotData;
typedef struct ModelHitEntry {
struct Model *model; /* 0x00 */
struct ModelNode *rootnode; /* 0x04 */
f32 sortvalue; /* 0x08 */
struct ModelHitEntry *next; /* 0x0c */
struct ModelHitEntry *prev; /* 0x10 */
} ModelHitEntry;
#pragma endregion Hit Structures
#pragma region PadAndPaths
/**
* Pads hold a location in space and are tied to a specified Stand Tile.
* Other attributes include its roation and normal.
* Other attributes include its rotation and normal.
*/
typedef struct PadRecord /*0x2c (44) long confirmed*/
{
@@ -2176,9 +2298,11 @@ typedef union
#pragma region GlobalPropDef
/**
* Record for bullet/laser beam tracers.
*
* sizeof = 0x2c = 44 bytes.
*/
typedef struct ChrRecord_f180
typedef struct BeamRecord
{
/***/
s8 unk00;
@@ -2197,7 +2321,7 @@ typedef union
f32 unk20;
f32 unk24;
f32 unk28;
} ChrRecord_f180;
} BeamRecord;
typedef struct PropDefHeaderRecord
@@ -2227,30 +2351,29 @@ typedef union
/* unfinished struct, WIP */
typedef struct ChrRecord
{
s16 chrnum; /* 0x0000 */
s8 accuracyrating; /* 0x0002 */
s8 speedrating; /* 0x0003 */ //0-100
u8 firecount[2]; /* 0x0004 */
s8 headnum; /* 0x0006 */
ACT_TYPE actiontype : 8; /* 0x0007 */ //force 8bit
s8 sleep; /* 0x0008 */
s8 invalidmove; /* 0x0009 */
s8 numclosearghs; /* 0x000A */
s8 numarghs; /* 0x000B */
u8 fadealpha; /* 0x000C */
s8 arghrating; /* 0x000D */
s8 aimendcount; /* 0x000E */
s8 bodynum; /* 0x000F */
u8 grenadeprob; /* 0x0010 */
s8 flinchcnt; /* 0x0011 */
u16 hidden; /* 0x0012 */
CHRFLAG chrflags; /* 0x0014 */
PropRecord *prop; /* 0x0018 */
Model *model; /* 0x001C */
/* 0x0020 */
void *field_20; /* 0x0020 */ //path?
f32 chrwidth; /* 0x0024 */
f32 chrheight; /* 0x0028 */
s16 chrnum; /* 0x0000 */
s8 accuracyrating; /* 0x0002 */
s8 speedrating; /* 0x0003 */ //0-100
u8 firecount[2]; /* 0x0004 */
s8 headnum; /* 0x0006 */
ACT_TYPE actiontype : 8; /* 0x0007 */ //force 8bit
s8 sleep; /* 0x0008 */
s8 invalidmove; /* 0x0009 */
s8 numclosearghs; /* 0x000A */
s8 numarghs; /* 0x000B */
u8 fadealpha; /* 0x000C */
s8 arghrating; /* 0x000D */
s8 aimendcount; /* 0x000E */
s8 bodynum; /* 0x000F */
u8 grenadeprob; /* 0x0010 */
s8 flinchcnt; /* 0x0011 */
u16 hidden; /* 0x0012 */
CHRFLAG chrflags; /* 0x0014 */
PropRecord *prop; /* 0x0018 */
Model *model; /* 0x001C */
ModelHitEntry *field_20; /* 0x0020 */
f32 chrwidth; /* 0x0024 */
f32 chrheight; /* 0x0028 */
union
{
struct act_init act_init;
@@ -2348,55 +2471,37 @@ typedef union
f32 aimendback;
f32 aimendsideback;
/* 0x0160 */
// this section needs work, see:
// - sub_GAME_7F02BFE4
// - disable_sounds_attached_to_player_then_something
// there should be some ALSoundState * pointers in here.
//
PropRecord *weapons_held[3]; /* handle_positiondata 0x0160 0x0164 0x0168 Right, Left, Hat*/
union {
s32 fireslot_word;
s8 fireslot[2]; /* 0x016C 0x0170*/
};
int *ptr_SEbuffer3;
int *ptr_SEbuffer4;
int field_178[2];
//int field_17C;
PropRecord *weapons_held[2]; /* handle_positiondata 0x0160 0x0164 Right, Left */
struct { /* 0x0168 */
ALSoundState *ptr_SEbuffer1;
ALSoundState *ptr_SEbuffer2;
} field_160[2];
s32 field_178[2]; // 0x178-17c
/* 0x0180 */
/**
* Method chrlvFireWeaponRelated calls CapBeamLengthAndDecideIfRendered, and passes an address
* which makes it look like this is an array at ChrRecord offset 180.
*/
ChrRecord_f180 unk180[2];
BeamRecord beams[2];
PropRecord *handle_positiondata_hat;
} ChrRecord;
// ChrRecord *pChrData; //not Global, local to Object or function
typedef struct ChrRenderContext {
s32 unk00;
ChrRecord *chr;
} ChrRenderContext;
#pragma region IndividualObjectTypes
typedef struct collision_data
{
s32 edges; // 0x00
rect4f polygon; // 0x04
s32 unk24;
s32 unk28;
s32 unk2C;
s32 unk30;
s32 unk34;
s32 unk38;
s32 unk3C;
s32 unk40;
f32 top; // 0x44
// Might be related to collision radius
f32 bottom; // 0x48
s32 edges; // 0x00
coord2d polygon[8]; // 0x04 - 0x43
f32 top; // 0x44
f32 bottom; // 0x48
} collision_data;
typedef struct Projectile {
@@ -2418,11 +2523,10 @@ typedef union
u32 unk90;
f32 unk94;
struct ALSoundState* sound1; // 0x98
struct ALSoundState* sound2; // 0x9C
struct ALSoundState* sounds[2]; // 0x98
u32 unkA0;
u32 unkA4;
u32 lastSfxTimer; // 0xa0
u32 soundSlot; // 0xa4
u32 unkA8;
u32 unkAC;
@@ -2441,7 +2545,7 @@ typedef union
u32 unkD8;
u32 unkDC;
u32 unkE0;
u32 age; //0xE0
struct ObjectRecord* obj; // 0xE4;
s32 unkE8;
} Projectile;
@@ -2452,6 +2556,23 @@ typedef union
/*0x044*/ struct Projectile *projectile;
} Embedment;
// Not exactly sure where this belongs or if it may even already have an existing struct
typedef struct AttachmentChild {
u8 pad00[0x01];
u8 flags1; // 0x01
u8 pad02[0x16];
f32 unk18; // 0x18
} AttachmentChild;
// Not exactly sure where this belongs or if it may even already have an existing struct
typedef struct AttachedObj {
u8 pad00[0x10];
AttachmentChild *child; // 0x10
Model *model; // 0x14
Mtxf transform; // 0x18
coord3d position; // 0x58
} AttachedObj;
/**
* Object (Prop Definition) Record holds common data such as pad and health.
*/
@@ -2797,7 +2918,7 @@ typedef union
*/
s8 openstate;
u8 unkbd; /*0xbd*/
s8 unkbd; /*0xbd*/
// something related to rendering
s16 calculatedopacity; /*0xbe*/
@@ -2965,7 +3086,7 @@ typedef union
/**
* Offset 0xd0.
* Used in object_interaction, setting to zero won't disable.
* Used in objTick, setting to zero won't disable.
*/
s32 is_active; // 0xD0
@@ -3593,6 +3714,8 @@ typedef union
// objtype 48+
#define EndObjectList PropDefHeaderRecord endme = New_PropDefHeaderRecord(48)
#pragma endregion IndividualObjectTypes
#pragma endregion //Propdefs
#pragma region Intro
@@ -3908,22 +4031,6 @@ typedef struct stagesetup
u16 half[3];
};
typedef struct object_standard {
s16 scale;
u8 state;
@@ -4065,23 +4172,16 @@ struct PortalMetric {
f32 max;
};
struct FolderSelect {
s32 unk00;
s32 unk04;
s32 unk08;
struct FolderSelectColour {
s32 red;
s32 green;
s32 blue;
};
struct damage_display_val {
s16 unk00;
s16 unk02;
s16 unk04;
s16 unk06;
s16 unk08;
s16 unk0A;
s8 unk0C;
s8 unk0D;
s8 unk0E;
s8 unk0F;
coord16 pos;
coord16 normal;
rgba_u8 colour;
};
struct damage_display_parent {
-108
View File
@@ -1,108 +0,0 @@
#include <ultra64.h>
#include "boot.h"
#include <bondgame.h>
#include "inflate/inflate.h"
/**
* @file boot.c
* This file sets up initial tlb mapping then jumps to boot1.
*
* In particular, it:
* - also contains functions that grab segment addresses
* - will likely always be asm as it manipulates tlb directly
*/
/**
* 1050 70000450 registers 70000000-70400000 in TLB, JR to 70000510
* technically, this is used in bootcode and used prior to TLB registration
*/
GLOBAL_ASM(
glabel boot
/* 001050 70000450 24020001 */ li $v0, 1
/* 001054 70000454 24030000 */ li $v1, 0
/* 001058 70000458 24040000 */ li $a0, 0
/* 00105C 7000045C 3C057000 */ lui $a1, 0x7000
/* 001060 70000460 2406001F */ li $a2, 31
/* 001064 70000464 24070001 */ li $a3, 1
/* 001068 70000468 3C08007F */ lui $t0, (0x007FE000 >> 16) # lui $t0, 0x7f
/* 00106C 7000046C 3508E000 */ ori $t0, (0x007FE000 & 0xFFFF) # ori $t0, $t0, 0xe000
/* 001070 70000470 40820000 */ mtc0 $v0, $0
/* 001074 70000474 00031B02 */ srl $v1, $v1, 0xc
/* 001078 70000478 00031980 */ sll $v1, $v1, 6
/* 00107C 7000047C 00661821 */ addu $v1, $v1, $a2
/* 001080 70000480 40831000 */ mtc0 $v1, $2
/* 001084 70000484 00042302 */ srl $a0, $a0, 0xc
/* 001088 70000488 00042180 */ sll $a0, $a0, 6
/* 00108C 7000048C 00872021 */ addu $a0, $a0, $a3
/* 001090 70000490 40841800 */ mtc0 $a0, $3
/* 001094 70000494 00052342 */ srl $a0, $a1, 0xd
/* 001098 70000498 00042340 */ sll $a0, $a0, 0xd
/* 00109C 7000049C 40845000 */ mtc0 $a0, $10
/* 0010A0 700004A0 40882800 */ mtc0 $t0, $5
/* 0010A4 700004A4 00000000 */ nop
/* 0010A8 700004A8 42000002 */ tlbwi
/* 0010AC 700004AC 3C0A7000 */ lui $t2, %hi(init) # $t2, 0x7000
/* 0010B0 700004B0 254A0510 */ addiu $t2, %lo(init) # addiu $t2, $t2, 0x510
/* 0010B4 700004B4 01400008 */ jr $t2
/* 0010B8 700004B8 00000000 */ nop
)
/**
* Due to alignments the following functions are included here
* these could have been assembly originally, or more likely part
* of the code inserted by the custom makerom rare created
*/
/**
*10BC 700004BC V0=80020D90: target address for 21990 (USA)
*/
u32 get_csegmentSegmentStart(void)
{
return &_csegmentSegmentStart;
}
/**
*10C8 700004C8 V0=21990: ROM address of main compressed block (USA)
*/
u32 get_cdataSegmentRomStart(void)
{
return &_cdataSegmentRomStart;
}
/**
*10D4 700004D4 V0=33590: ROM address of 70200000 inflate ASM [33590-34B30 ROM] (USA)
*/
u32 get_cdataSegmentRomEnd(void)
{
return &_cdataSegmentRomEnd;
}
/**
*10E0 700004E0 V0=33590: ROM address of 70200000 inflate ASM [33590-34B30 ROM] (USA)
*/
u32 get_inflateSegmentRomStart(void)
{
return &_inflateSegmentRomStart;
}
/**
*10EC 700004EC V0=34B30: ROM address of 7F- TLB routines (USA)
*/
u32 get_inflateSegmentRomEnd(void)
{
return &_inflateSegmentRomEnd;
}
/**
* 10F8 700004F8 redirect to 7020141C: decompression routine
* accepts: A0=p->source, A1=p->target, A2=p->buffer
* sets A3=7020141C, then jumps to address
*/
GLOBAL_ASM(
glabel jump_decompressfile
/* 0010F8 700004F8 3C077020 */ lui $a3, %hi(decompress_entry) # $a3, 0x7020
/* 0010FC 700004FC 24E7141C */ addiu $a3, %lo(decompress_entry) # addiu $a3, $a3, 0x141c
/* 001100 70000500 00E00008 */ jr $a3
/* 001104 70000504 00000000 */ nop
)
+1
View File
@@ -2,6 +2,7 @@
#define _BOOT_H_
#include <ultra64.h>
void boot(void);
u32 get_csegmentSegmentStart(void);
u32 get_cdataSegmentRomStart(void);
u32 get_cdataSegmentRomEnd(void);
+68
View File
@@ -0,0 +1,68 @@
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64
.include "macros.inc"
.section .text, "ax"
glabel boot
/* 001050 70000450 24020001 */ li $v0, 1
/* 001054 70000454 24030000 */ li $v1, 0
/* 001058 70000458 24040000 */ li $a0, 0
/* 00105C 7000045C 3C057000 */ lui $a1, 0x7000
/* 001060 70000460 2406001F */ li $a2, 31
/* 001064 70000464 24070001 */ li $a3, 1
/* 001068 70000468 3C08007F */ lui $t0, (0x007FE000 >> 16)
/* 00106C 7000046C 3508E000 */ ori $t0, (0x007FE000 & 0xFFFF)
/* 001070 70000470 40820000 */ mtc0 $v0, $0
/* 001074 70000474 00031B02 */ srl $v1, $v1, 0xc
/* 001078 70000478 00031980 */ sll $v1, $v1, 6
/* 00107C 7000047C 00661821 */ addu $v1, $v1, $a2
/* 001080 70000480 40831000 */ mtc0 $v1, $2
/* 001084 70000484 00042302 */ srl $a0, $a0, 0xc
/* 001088 70000488 00042180 */ sll $a0, $a0, 6
/* 00108C 7000048C 00872021 */ addu $a0, $a0, $a3
/* 001090 70000490 40841800 */ mtc0 $a0, $3
/* 001094 70000494 00052342 */ srl $a0, $a1, 0xd
/* 001098 70000498 00042340 */ sll $a0, $a0, 0xd
/* 00109C 7000049C 40845000 */ mtc0 $a0, $10
/* 0010A0 700004A0 40882800 */ mtc0 $t0, $5
/* 0010A4 700004A4 00000000 */ nop
/* 0010A8 700004A8 42000002 */ tlbwi
/* 0010AC 700004AC 3C0A7000 */ lui $t2, %hi(init)
/* 0010B0 700004B0 254A0510 */ addiu $t2, $t2, %lo(init)
/* 0010B4 700004B4 01400008 */ jr $t2
/* 0010B8 700004B8 00000000 */ nop
glabel get_csegmentSegmentStart
/* 0010BC 700004BC 3C028002 */ lui $v0, %hi(_csegmentSegmentStart)
/* 0010C0 700004C0 03E00008 */ jr $ra
/* 0010C4 700004C4 24420D90 */ addiu $v0, $v0, %lo(_csegmentSegmentStart)
glabel get_cdataSegmentRomStart
/* 0010C8 700004C8 3C020000 */ lui $v0, %hi(_cdataSegmentRomStart)
/* 0010CC 700004CC 03E00008 */ jr $ra
/* 0010D0 700004D0 24421990 */ addiu $v0, $v0, %lo(_cdataSegmentRomStart)
glabel get_cdataSegmentRomEnd
/* 0010D4 700004D4 3C020000 */ lui $v0, %hi(_cdataSegmentRomEnd)
/* 0010D8 700004D8 03E00008 */ jr $ra
/* 0010DC 700004DC 24423590 */ addiu $v0, $v0, %lo(_cdataSegmentRomEnd)
glabel get_inflateSegmentRomStart
/* 0010E0 700004E0 3C020000 */ lui $v0, %hi(_inflateSegmentRomStart)
/* 0010E4 700004E4 03E00008 */ jr $ra
/* 0010E8 700004E8 24423590 */ addiu $v0, $v0, %lo(_inflateSegmentRomStart)
glabel get_inflateSegmentRomEnd
/* 0010EC 700004EC 3C020000 */ lui $v0, %hi(_inflateSegmentRomEnd)
/* 0010F0 700004F0 03E00008 */ jr $ra
/* 0010F4 700004F4 24424B30 */ addiu $v0, $v0, %lo(_inflateSegmentRomEnd)
glabel jump_decompressfile
/* 0010F8 700004F8 3C077020 */ lui $a3, %hi(decompress_entry)
/* 0010FC 700004FC 24E7141C */ addiu $a3, $a3, %lo(decompress_entry)
/* 001100 70000500 00E00008 */ jr $a3
/* 001104 70000504 00000000 */ nop
+1 -1
View File
@@ -228,7 +228,7 @@ void bossInitMainthreadData(void)
speedgraphInit();
set_gu_scale();
null_init_main_2();
sub_GAME_7F000980();
casingsInit();
alloc_load_expand_ani_table();
init_weapon_animation_groups_maybe();
reset_counter_rand_body_head();
+213 -1190
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -216,7 +216,7 @@ s32 viGet800232A0(void);
void viSet800232A0(s32 arg0);
Gfx *viClearZBufCurrentPlayer(Gfx *gdl);
Gfx *video_related_F(Gfx *gdl);
Gfx *viSetupCurrentPlayerView(Gfx *gdl);
void viGetZRange(f32 *zrange);
#endif
+3946 -11009
View File
File diff suppressed because it is too large Load Diff
+105 -31
View File
@@ -17,37 +17,83 @@ struct levelentry
// cannon definition
#define MAXPORTALSPERROOM 20
// cannonical name
#define PORTMAX 200
#define BG_SEG_TO_PTR(base, off) ((void *) (((u32) (base)) + (((u32) (off)) + 0xF1000000)))
typedef struct RoomVtxBatchBounds {
s16 gdlindex; // 0x00
s16 pad02; // 0x02
union {
struct {
s32 xmin; // 0x04
s32 ymin; // 0x08
s32 zmin; // 0x0c
s32 xmax; // 0x10
s32 ymax; // 0x14
s32 zmax; // 0x18
};
struct {
s32 min[3]; // 0x04
s32 max[3]; // 0x10
};
};
} RoomVtxBatchBounds; // size = 0x1c
typedef struct BoundVec {
s32 x, y, z;
} BoundVec;
typedef struct s_room_info {
// is room being rendered? boolean
u8 room_rendered;
u8 room_rendered; // 0x00
// is the room a neighbor to a room being rendered? boolean
u8 room_neighbor_to_rendered;
u8 room_neighbor_to_rendered; // 0x01
u8 model_bin_loaded;
/**
* Acts like a small room age counter.
* 0 = unloaded
* 1 = loaded/used recently
* 2-3 = loaded but aging towards unload
* 4 = unload on tick
*/
u8 model_bin_loaded; // 0x02
// number of portals in between the player's room and this room.
// is 0 if the room is not visible or if the player is standing in this room.
u8 portals_to_room_count;
/**
* Counts how often this room has been reached during the current portal
* visibility traversal.
*/
u8 portal_visit_count; // 0x03
Vtx * ptr_point_index;
void * ptr_expanded_mapping_info;
void * ptr_secondary_expanded_mapping_info;
s32 csize_point_index_binary;
s32 csize_primary_DL_binary;
s32 csize_secondary_DL_binary;
s32 usize_point_index_binary;
s32 usize_primary_DL_binary;
s32 usize_secondary_DL_binary;
s32 cur_room_totalsize;
void * ptr_unique_collision_points;
s32 bitflags3;
u8 room_loaded_mask;
u8 field_35;
s16 field_36;
coord3d minbounds;
coord3d maxbounds;
} s_room_info;
Vtx *vertices; // 0x04
void *ptr_expanded_mapping_info; // 0x08
void *ptr_secondary_expanded_mapping_info; // 0x0c
s32 csize_point_index_binary; // 0x10
s32 csize_primary_DL_binary; // 0x14
s32 csize_secondary_DL_binary; // 0x18
s32 usize_point_index_binary; // 0x1c
s32 usize_primary_DL_binary; // 0x20
s32 usize_secondary_DL_binary; // 0x24
s32 cur_room_totalsize; // 0x28
RoomVtxBatchBounds *vtx_batch_bounds; // 0x2c
s16 num_vtx_batch_bounds; // 0x30
s16 field_32; // 0x32
u8 room_loaded_mask; // 0x34
u8 field_35; // 0x35
s16 field_36; // 0x36
coord3d minbounds; // 0x38
coord3d maxbounds; // 0x44
} s_room_info;
typedef struct s_bound_info
{
@@ -112,7 +158,29 @@ typedef struct unk_portalstruct
s32 unk10;
} unk_portalstruct;
extern struct unk_portalstruct table_for_portals[200];
typedef struct PortalCache {
s32 count;
bbox2d bbox;
} PortalCache;
typedef struct bg_queued_portal_entry {
#if defined(VERSION_EU)
u8 arg0; // 0x00
u8 roomnum; // 0x01
s16 portalnum; // 0x02
f32 sp4[4]; // 0x04
#else
s32 arg0; // 0x00
s32 roomnum; // 0x04
s32 portalnum; // 0x08
s32 arg3; // 0x0c
f32 sp10[4]; // 0x10
#endif
} bg_queued_portal_entry;
extern bg_portal_data_entry *g_BgPortals;
extern struct unk_portalstruct table_for_portals[PORTMAX];
extern s32 g_MaxNumRooms;
extern f32 room_data_float2;
@@ -125,10 +193,12 @@ extern Gfx DL_LUT_PRIMARY_ADDFOG[];
void bgInit(void);
// sub_GAME_7F033B38 requres arg be s32
s32 sub_GAME_7F0B8FD0(s32 roomA, s32 roomB);
bool bgRoomsSharePortal(s32 roomA, s32 roomB);
//f32 sub_GAME_7F0B4F9C(s32 room); // u8 not s32 for sub_GAME_7F0B2FE0
s32 bgCopyVisibleRoomsToList(s32 *rooms, s32 max);
u32 bgDecompress(u8* source, u8 *target);
bool bgTestBulletHitBackground(coord3d *from, coord3d *to, s32 roomnum, struct HitThing *hit);
void delete_room_data(s32 roomID);
void load_bg_file(LEVEL_INDEX stagenum);
@@ -140,8 +210,8 @@ void bgToggleDataPortalsContrlBytes1Bit1(s32 index, s32 toggle);
s32 bgGetDataPortalsControlBytes1Bit2(s32 arg0);
void bgClearDataPortalsControlBytes1Low2Bits(s32 index);
void bgSetDataPortalsControlBytes1Bit2(s32 index);
s32 sub_GAME_7F0B9A7C(s32 arg0);
s32 sub_GAME_7F0B9A2C(s32 arg0);
void sub_GAME_7F0B9A7C(s32 portalnum);
void sub_GAME_7F0B9A2C(s32 portalnum);
void bgRoomVisibilityRelated(void);
Gfx* bgLevelRender(Gfx *arg0);
Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height);
@@ -151,10 +221,14 @@ f32 get_room_data_float1(void);
u8 getROOMID_isRendered(int roomID);
s32 bgGet2dBboxByRoomId(s32 room_id, struct bbox2d *result);
f32 bgGetLevelVisibilityScale(void);
void sub_GAME_7F0B5CC0(struct bbox2d *a, struct bbox2d *b);
void bgRectOutersect(struct bbox2d *a, struct bbox2d *b);
f32 get_room_data_float2(void);
s32 sub_GAME_7F0B9CC8(s32 arg0, s32 arg1, struct coord3d *arg2, struct coord3d *arg3);
void sub_GAME_7F0B96CC(s32 arg0, struct PortalMetric *arg1);
s32 bgGetPortalBetweenRooms(s32 arg0, s32 arg1, struct coord3d *arg2, struct coord3d *arg3);
void sub_GAME_7F0B96CC(s32 portalnum, f32 *out);
void bgApplyDynamicCCRMLUT(Gfx *arg0, Gfx *arg1, enum CCRMLUT arg2);
void sub_GAME_7F0BA2D4(coord3d *, coord3d *, s32 *, s32 *, s32);
void bgFindRoomsAlongSegment(coord3d *pos1, coord3d *pos2, u8 *initialRooms, u8 *outRoomSet, s32 *outRoomNums, s32 *outRoomNumsCount, s32 outRoomNumsMax);
s32 sub_GAME_7F0B9E04(coord3d *arg0, coord3d *arg1);
void bgRoomCalcBB(s32 room);
#endif
+1 -1
View File
@@ -223,7 +223,6 @@ s32 setupRoomTransformationMatrix(s32 room)
}
/**
* Updates the display list with the room matrix for a specific room roomID.
*
@@ -249,6 +248,7 @@ struct coord3d* getRoomPositionByIndex(s32 roomID)
return &ptr_bgdata_room_fileposition_list[roomID].pos;
}
/**
* Retrieves and scales the position of a room by its roomID.
*
+3 -3
View File
@@ -4,8 +4,8 @@
void setPlayerRoomField(s32 param_1);
void updateRoomStatusFlags(void);
void getRoomPositionScaledByIndex(s32 index, coord3d *param_2);
Gfx * applyRoomMatrixToDisplayList(Gfx *DL,int index);
struct coord3d* getRoomPositionByIndex(s32 index);
void getRoomPositionScaledByIndex(s32 index, struct coord3d *param_2);
Gfx * applyRoomMatrixToDisplayList(Gfx *DL, s32 index);
struct coord3d* getRoomPositionByIndex(s32 roomID);
#endif
+11 -8
View File
@@ -6,6 +6,8 @@
#include "player.h"
#include <PR/os.h>
#define BLOOD_IMG_WIDTH 80
#define BLOOD_IMG_HEIGHT 96
u8 die_blood_image_1[] = {
0x00, 0x20, 0x03, 0x05, 0x04, 0x02, 0x60, 0x21, 0x22, 0x01, 0xE0, 0xE0, 0xE0, 0xE0,
@@ -193,7 +195,8 @@ u8 die_blood_image_1[] = {
u8 die_blood_image_end = 0;
Gfx *insert_imageDL(Gfx *gdl) {
Gfx *clear_framebuffer_black(Gfx *gdl)
{
gDPSetCycleType(gdl++, G_CYC_FILL);
gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, viGetX(), osVirtualToPhysical(viGetFrameBuf2()));
gDPSetFillColor(gdl++, ((GPACK_RGBA5551(0, 0, 0, 1) << 16) | GPACK_RGBA5551(0, 0, 0, 1)));
@@ -226,13 +229,13 @@ s32 die_blood_image_routine(s32 arg0) {
}
g_CurrentPlayer->bloodImgIdx = (1 - g_CurrentPlayer->bloodImgIdx);
g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx] = dynAllocate(0x1E00);
temp_v0_2 = dynAllocate(0x1E00);
g_CurrentPlayer->bloodImgNxt = decrypt_bleeding_animation_data(g_CurrentPlayer->bloodImgCur, 0x50, 0x60, temp_v0_2, &sp37);
sub_GAME_7F01D16C(temp_v0_2, 0x50, 0x60, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01D02C(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x50, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01CEEC(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x50, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01CC94(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x1E00, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx] = dynAllocate(BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT);
temp_v0_2 = dynAllocate(BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT);
g_CurrentPlayer->bloodImgNxt = decrypt_bleeding_animation_data(g_CurrentPlayer->bloodImgCur, BLOOD_IMG_WIDTH, BLOOD_IMG_HEIGHT, temp_v0_2, &sp37);
bloodImgTranspose(temp_v0_2, BLOOD_IMG_WIDTH, BLOOD_IMG_HEIGHT, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01D02C(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01CEEC(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
sub_GAME_7F01CC94(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]);
return (g_CurrentPlayer->bloodImgNxt >= &die_blood_image_end);
}
+2 -1
View File
@@ -3,11 +3,12 @@
#include <ultra64.h>
Gfx *insert_imageDL(Gfx *gdl);
Gfx *clear_framebuffer_black(Gfx *gdl);
Gfx *sub_GAME_7F01C1A4(Gfx *gdl);
s32 die_blood_image_routine(s32 arg0);
Gfx *gunbarrelBloodOverlayDL(Gfx *gdl);
Gfx *sub_GAME_7F01CA18(Gfx *gdl);
Gfx *gameplayBloodOverlayDL(Gfx *gdl);
#endif
+20 -109
View File
@@ -67,8 +67,6 @@ u8 *decrypt_bleeding_animation_data(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 *ar
}
void sub_GAME_7F01CC94(u8* arg0, u16 arg1, u8* arg2)
{
while (arg1-- > 0)
@@ -78,6 +76,7 @@ void sub_GAME_7F01CC94(u8* arg0, u16 arg1, u8* arg2)
}
}
// Address 0x7F01CCEC NTSC
void sub_GAME_7F01CCEC(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 arg4)
{
@@ -124,7 +123,6 @@ void sub_GAME_7F01CCEC(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 arg4)
}
// Averages 4 pixel data, ending on "second" row.
// Address 0x7F01CEEC NTSC
void sub_GAME_7F01CEEC(u8 *arg0, s32 arg1, u8 *arg2)
@@ -143,7 +141,6 @@ void sub_GAME_7F01CEEC(u8 *arg0, s32 arg1, u8 *arg2)
}
// Averages 4 pixel data, ending on "first" row.
// Address 0x7F01D02C NTSC
void sub_GAME_7F01D02C(u8 *arg0, s32 arg1, u8 *arg2)
@@ -161,131 +158,45 @@ void sub_GAME_7F01D02C(u8 *arg0, s32 arg1, u8 *arg2)
}
}
// Address 0x7F01D16C NTSC
void sub_GAME_7F01D16C(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3)
/**
* Address: 7F01D16C
*
* Converts the decoded blood frame from column-major to row-major order.
*/
void bloodImgTranspose(u8 *src, s32 srcwidth, s32 srcheight, u8 *dst)
{
s32 temp_lo;
u32 temp_a0;
s32 pixelcount;
u32 rowend;
u32 var_t2;
u8 *var_t0;
u8 *var_v1;
u32 t1;
temp_lo = arg1 * arg2;
var_v1 = arg0;
var_t0 = arg3;
t1 = arg0 + temp_lo;
var_t2 = arg0 + arg1;
pixelcount = srcwidth * srcheight;
var_v1 = src;
var_t0 = dst;
t1 = src + pixelcount;
var_t2 = src + srcwidth;
do
{
temp_a0 = var_t2;
rowend = var_t2;
do
{
*var_t0 = *var_v1++;
var_t2 += 1;
var_t0 += arg2;
var_t0 += srcheight;
} while ((u32) var_v1 < temp_a0);
} while ((u32) var_v1 < rowend);
var_t0 = (var_t0 - (temp_lo)) + 1;
var_t0 = (var_t0 - (pixelcount)) + 1;
} while ((u32) var_v1 < (u32) t1);
}
#ifdef NONMATCHING
// Unreferenced.
// Address 0x7F01D1C0 NTSC.
u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3)
{
// mips2c output makes this look like `decrypt_bleeding_animation_data`, but without
// u8 variables, and without arg4. But I can't get it to generate anything
// close to matching.
// https://decomp.me/scratch/ptG72 0%
}
#else
GLOBAL_ASM(
.text
glabel sub_GAME_7F01D1C0
/* 051CF0 7F01D1C0 27BDFFF0 */ addiu $sp, $sp, -0x10
/* 051CF4 7F01D1C4 240C00FF */ li $t4, 255
/* 051CF8 7F01D1C8 90880000 */ lbu $t0, ($a0)
/* 051CFC 7F01D1CC 24840001 */ addiu $a0, $a0, 1
.L7F01D1D0:
/* 051D00 7F01D1D0 90890000 */ lbu $t1, ($a0)
/* 051D04 7F01D1D4 24840001 */ addiu $a0, $a0, 1
/* 051D08 7F01D1D8 152C001A */ bne $t1, $t4, .L7F01D244
/* 051D0C 7F01D1DC 240B00FF */ li $t3, 255
/* 051D10 7F01D1E0 90890000 */ lbu $t1, ($a0)
/* 051D14 7F01D1E4 240A0000 */ li $t2, 0
/* 051D18 7F01D1E8 112C000C */ beq $t1, $t4, .L7F01D21C
/* 051D1C 7F01D1EC 24840001 */ addiu $a0, $a0, 1
.L7F01D1F0:
/* 051D20 7F01D1F0 01495021 */ addu $t2, $t2, $t1
/* 051D24 7F01D1F4 19200005 */ blez $t1, .L7F01D20C
/* 051D28 7F01D1F8 2529FFFF */ addiu $t1, $t1, -1
.L7F01D1FC:
/* 051D2C 7F01D1FC A0EB0000 */ sb $t3, ($a3)
/* 051D30 7F01D200 24E70001 */ addiu $a3, $a3, 1
/* 051D34 7F01D204 1D20FFFD */ bgtz $t1, .L7F01D1FC
/* 051D38 7F01D208 2529FFFF */ addiu $t1, $t1, -1
.L7F01D20C:
/* 051D3C 7F01D20C 90890000 */ lbu $t1, ($a0)
/* 051D40 7F01D210 396B00FF */ xori $t3, $t3, 0xff
/* 051D44 7F01D214 152CFFF6 */ bne $t1, $t4, .L7F01D1F0
/* 051D48 7F01D218 24840001 */ addiu $a0, $a0, 1
.L7F01D21C:
/* 051D4C 7F01D21C 0145082A */ slt $at, $t2, $a1
/* 051D50 7F01D220 10200006 */ beqz $at, .L7F01D23C
/* 051D54 7F01D224 254A0001 */ addiu $t2, $t2, 1
.L7F01D228:
/* 051D58 7F01D228 A0EB0000 */ sb $t3, ($a3)
/* 051D5C 7F01D22C 24E70001 */ addiu $a3, $a3, 1
/* 051D60 7F01D230 0145082A */ slt $at, $t2, $a1
/* 051D64 7F01D234 1420FFFC */ bnez $at, .L7F01D228
/* 051D68 7F01D238 254A0001 */ addiu $t2, $t2, 1
.L7F01D23C:
/* 051D6C 7F01D23C 0BC074A7 */ j .L7F01D29C
/* 051D70 7F01D240 24C6FFFF */ addiu $a2, $a2, -1
.L7F01D244:
/* 051D74 7F01D244 312A001F */ andi $t2, $t1, 0x1f
/* 051D78 7F01D248 01485021 */ addu $t2, $t2, $t0
/* 051D7C 7F01D24C 00094942 */ srl $t1, $t1, 5
/* 051D80 7F01D250 25290001 */ addiu $t1, $t1, 1
/* 051D84 7F01D254 00C93023 */ subu $a2, $a2, $t1
.L7F01D258:
/* 051D88 7F01D258 01405825 */ move $t3, $t2
/* 051D8C 7F01D25C 19600005 */ blez $t3, .L7F01D274
/* 051D90 7F01D260 256BFFFF */ addiu $t3, $t3, -1
.L7F01D264:
/* 051D94 7F01D264 A0EC0000 */ sb $t4, ($a3)
/* 051D98 7F01D268 24E70001 */ addiu $a3, $a3, 1
/* 051D9C 7F01D26C 1D60FFFD */ bgtz $t3, .L7F01D264
/* 051DA0 7F01D270 256BFFFF */ addiu $t3, $t3, -1
.L7F01D274:
/* 051DA4 7F01D274 00AA5823 */ subu $t3, $a1, $t2
/* 051DA8 7F01D278 19600005 */ blez $t3, .L7F01D290
/* 051DAC 7F01D27C 256BFFFF */ addiu $t3, $t3, -1
.L7F01D280:
/* 051DB0 7F01D280 A0E00000 */ sb $zero, ($a3)
/* 051DB4 7F01D284 24E70001 */ addiu $a3, $a3, 1
/* 051DB8 7F01D288 1D60FFFD */ bgtz $t3, .L7F01D280
/* 051DBC 7F01D28C 256BFFFF */ addiu $t3, $t3, -1
.L7F01D290:
/* 051DC0 7F01D290 2529FFFF */ addiu $t1, $t1, -1
/* 051DC4 7F01D294 1D20FFF0 */ bgtz $t1, .L7F01D258
/* 051DC8 7F01D298 00000000 */ nop
.L7F01D29C:
/* 051DCC 7F01D29C 1CC0FFCC */ bgtz $a2, .L7F01D1D0
/* 051DD0 7F01D2A0 00801025 */ move $v0, $a0
/* 051DD4 7F01D2A4 03E00008 */ jr $ra
/* 051DD8 7F01D2A8 27BD0010 */ addiu $sp, $sp, 0x10
)
#endif
u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3);
+2 -1
View File
@@ -5,10 +5,11 @@
u8 *decrypt_bleeding_animation_data(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 *arg4);
void sub_GAME_7F01D16C(u8*, s32, s32, u8*);
void bloodImgTranspose(u8 *src, s32 srcwidth, s32 srcheight, u8 *dst);
void sub_GAME_7F01D02C(u8*, s32, u8*);
void sub_GAME_7F01CEEC(u8*, s32, u8*);
void sub_GAME_7F01CC94(u8*, u16, u8*);
u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3);
#endif
+4 -4
View File
@@ -252,13 +252,13 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways)
g_CurrentPlayer->resetheadtick = FALSE;
modelSetAnimMergingEnabled(0);
modelTickAnimQuarterSpeed(&g_CurrentPlayer->model, g_ClockTimer, 1);
modelTickAnim(&g_CurrentPlayer->model, g_ClockTimer, 1);
modelSetAnimMergingEnabled((s32) isMergable);
subcalcpos(&g_CurrentPlayer->model);
matrix_4x4_set_identity(&sp40);
renderData.unk_matrix = &sp40;
renderData.basemtx = &sp40;
renderData.mtxlist = &g_CurrentPlayer->bondheadmatrices[0];
subcalcmatrices(&renderData, &g_CurrentPlayer->model);
@@ -360,7 +360,7 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways)
// result = x vector plus ((y - x vector) * scaler)
// lookvel = ...
sub_GAME_7F05AE00(
vec3Lerp(
&g_CurrentPlayer->standlook[g_CurrentPlayer->standcnt].f[0],
&g_CurrentPlayer->standlook[1 - g_CurrentPlayer->standcnt].f[0],
g_CurrentPlayer->standfrac,
@@ -371,7 +371,7 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways)
// result = x vector plus ((y - x vector) * scaler)
// upvel = ...
sub_GAME_7F05AE00(
vec3Lerp(
&g_CurrentPlayer->standup[g_CurrentPlayer->standcnt].f[0],
&g_CurrentPlayer->standup[1 - g_CurrentPlayer->standcnt].f[0],
g_CurrentPlayer->standfrac,
+1 -1
View File
@@ -17,7 +17,7 @@ struct init_bond_anim_unk {
extern struct init_bond_anim_unk g_BondMoveAnimationSetup[];
s32 waypointFindRoute(waypoint *, waypoint *, waypoint ** arr, s32 arr_len);
waypoint * sub_GAME_7F08FB90(waypoint *, waypoint *);
waypoint * waypointFindNextStepToward(waypoint *, waypoint *);
void bheadFlipAnimation(void);
void bheadUpdateIdleRoll(void);
void bheadUpdate(f32 percent_speed, f32 speedsideways);
+1 -1
View File
@@ -250,7 +250,7 @@ InvItem *bondinvGetDualWeapon(ITEM_IDS right, ITEM_IDS left)
* @param left: enum Item ID eg: ITEM_KNIFE
* @return TRUE/FALSE
*/
int bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left)
bool bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left)
{
return bondinvGetDualWeapon(right, left) != NULL;
}
+2 -1
View File
@@ -15,7 +15,7 @@ textoverride *bondinvGetTextbyWeaponID(ITEM_IDS weaponnum);
void bondinvCycleBackward(s32 *nextright, s32 *nextleft, s32 requireammo);
void bondinvCycleForward(s32 *nextright, s32 *nextleft, s32 requireammo);
int bondinvHasGoldenGun(void);
bool bondinvHasGoldenGun(void);
int bondinvAddInvItem(ITEM_IDS item);
int bondinvAddDoublesInvItem(ITEM_IDS right, ITEM_IDS left);
s32 bondinvGetAllGunsFlag(void);
@@ -26,5 +26,6 @@ void bondinvRemoveItemByID(ITEM_IDS weaponnum);
s32 bondinvGetWeaponOfChoice(s32 *weapon1, s32 *weapon2);
s32 bondinvItemAvailableForHand(ITEM_IDS right, ITEM_IDS left);
s32 bondinvItemAvailable(ITEM_IDS weaponid);
void bondinvAddTextOverride(textoverride *override);
#endif
+2748 -11254
View File
File diff suppressed because it is too large Load Diff
+272 -205
View File
@@ -24,7 +24,7 @@ typedef struct invitem_dual
s32 weapon_left;
} invitem_dual;
/** unknown struct, used in `strut player`.
/**
* We know this is a struct from the compiler auto-generated
* code to copy structs in bondview.c bondviewKillCurrentPlayer.
*
@@ -55,18 +55,18 @@ struct collision434 {
/**
* Some kind of alternative to pos3 (in player struct).
* Offset 0x20.
* Offset 0x1c.
*/
coord3d pos3;
/**
* Offset 0x2c.
* Offset 0x28.
*/
f32 collision_radius;
/**
* Some kind of alternative to pos (in player struct).
* Offset 0x30.
* Offset 0x2c.
*/
coord3d pos;
@@ -75,21 +75,44 @@ struct collision434 {
* to this property and applied_view2. Removing the update to this property will fix
* Bond's camera orientation such that Bond can still turn, but the camera is always
* locked facing the starting position.
* Offset 0x3c.
* Offset 0x38.
*/
struct coord3d applied_view;
/**
* Offset 0x48.
* Offset 0x44.
*/
struct coord3d applied_view2;
/**
* Offset 0x54.
* Offset 0x50.
*/
StandTile *current_tile_ptr_for_portals;
};
typedef struct
{
u8 labels[9][3];
} DirectionLabels;
typedef struct TopMessageLocals
{
s32 textwidth;
s32 textheight;
s32 bottom;
s32 y;
s32 x;
} TopMessageLocals;
typedef struct DebugTextBuffers
{
char angle[0x10];
char z[0x10];
char y[0x10];
char x[0x10];
char room[0x10];
} DebugTextBuffers;
/**
* first hand: 0x800c6fd0
*/
@@ -113,11 +136,11 @@ struct hand
s32 field_888;
s32 field_88C;
s32 field_890;
s32 when_detonating_mines_is_0;
s32 weapon_action_state;
s32 weapon_current_animation;
s32 weapon_ammo_in_magazine;
s32 field_8A0;
s32 field_8A4;
s32 numvisibleshells;
s32 field_8A8;
s32 weapon_next_weapon;
s32 field_8B0;
@@ -137,24 +160,24 @@ struct hand
f32 field_8E8;
Mtxf field_8EC;
s32 field_92C;
s32 field_930;
s32 field_934;
s32 field_938;
s32 field_93C;
s32 field_940;
f32 field_944;
s32 field_948;
f32 field_94C;
s32 field_950;
s32 field_954;
s32 field_958;
s32 field_95C;
s32 field_960;
s32 field_964;
f32 field_968;
s32 field_96C;
f32 field_970;
s32 field_974;
f32 sway_pos_x;
f32 sway_pos_y;
f32 sway_pos_z;
f32 sway_look_x;
f32 sway_look_y;
f32 sway_look_z;
f32 sway_up_x;
f32 sway_up_y;
f32 sway_up_z;
f32 spring_pos_x;
f32 spring_pos_y;
f32 spring_pos_z;
f32 spring_look_x;
f32 spring_look_y;
f32 spring_look_z;
f32 spring_up_x;
f32 spring_up_y;
f32 spring_up_z;
coord3d blendpos[4];
coord3d blendlook[4];
coord3d blendup[4];
@@ -166,9 +189,9 @@ struct hand
f32 weapon_theta_displacement;
f32 weapon_verta_displacement;
s32 field_A24;
s32 field_A28;
s32 field_A2C;
f32 field_A30;
f32 gunofs2_x;
f32 gunofs2_y;
f32 gunofs2_z;
f32 field_A34;
f32 field_A38;
f32 field_A3C;
@@ -177,60 +200,29 @@ struct hand
s32 field_A48;
s32 field_A4C;
s32 field_A50;
ChrRecord_f180 field_A54;
BeamRecord weapon_beam;
f32 noise;
f32 field_A84;
f32 field_A88;
s32 field_A8C;
ObjectRecord* rocket;
AttachedObj* rocket;
s32 firedrocket;
s32 field_A98;
s32 field_A9C;
s32 field_AA0;
s32 field_AA4;
s32 field_AA8;
s32 field_AAC;
s32 field_AB0;
s32 field_AB4;
s32 field_AB8;
s32 field_ABC;
s32 field_AC0;
s32 field_AC4;
s32 field_AC8;
s32 field_ACC;
s32 field_AD0;
s32 field_AD4;
Mtxf gunmtx_camspace;
// offset 0xad8
Mtxf throw_item_pos_related;
s32 field_B18;
s32 field_B1C;
s32 field_B20;
s32 field_B24;
s32 field_B28;
s32 field_B2C;
s32 field_B30;
s32 field_B34;
s32 field_B38;
s32 field_B3C;
s32 field_B40;
s32 field_B44;
s32 field_B48;
s32 field_B4C;
s32 field_B50;
s32 field_B54;
// offset 0xb18
Mtxf throw_item_pos_related_prev;
coord3d field_B58;
f32 field_B64;
s32 field_B68;
s32 field_B6C;
s32 field_B70;
s32 field_B74;
Mtxf *mtxlist;
s32 field_B78;
s32 field_B7C;
s32 field_B80;
s32 field_B84;
s32 field_B88;
s32 modeldatas;
s32 field_B8C;
s32 field_B90;
s32 field_B94;
@@ -305,12 +297,12 @@ typedef struct gunheld {
struct player
{
/* 0x0000 */ s32 unknown;
s32 cameramode; // canonical name
/**
* Offset 0x0004.
*/
coord3d pos;
coord3d pos; // canonical "memcampos" ?
/**
* Offset 0x0010.
@@ -330,7 +322,7 @@ struct player
/**
* Offset 0x0034.
*/
StandTile *room_pointer;
StandTile *cameratile;
/**
* Offset 0x0038.
@@ -416,12 +408,12 @@ struct player
/**
* Flag: 0, 1, 2
*/
/* 0x009c */ s32 crouchpos;
/* 0x009c */ s32 crouchpos; // canonical name
/**
* Varies from 0.0f to -100.0f
* /
/* 0x00a0 */ f32 ducking_height_offset;
/* 0x00a0 */ f32 ducking_height_offset; // canonical "crouchoffset" ?
/**
* Crouch related, only used while moving up or down into or
@@ -437,14 +429,20 @@ struct player
struct rect4f collision_bounds;
/* 0x00d0 */ s32 field_D0;
/* 0x00d4 */ struct Model *ptr_char_objectinstance; //canonically bondsub
/* 0x00d8 */ s32 bonddead;
/* 0x00dc */ f32 bondhealth;
/**
* bodyModel is the third person model - it's seen by the other players in MP, and
* during intro/outros/death scenes in SP.
*/
/* 0x00d4 */ struct Model *bodyModel; //canonically bondsub
/* 0x00d8 */ s32 bonddead; // canonical name
/* 0x00dc */ f32 bondhealth; // canonical name
/* 0x00e0 */ f32 bondarmour;
/* 0x00e4 */ f32 oldhealth;
/* 0x00e8 */ f32 oldarmour;
/* 0x00ec */ f32 apparenthealth;
/* 0x00f0 */ f32 apparentarmour;
/* 0x00e4 */ f32 oldhealth; // canonical name
/* 0x00e8 */ f32 oldarmour; // canonical name
/* 0x00ec */ f32 apparenthealth; // canonical name
/* 0x00f0 */ f32 apparentarmour; // canonical name
#if defined(VERSION_JP) || defined (VERSION_EU)
@@ -468,21 +466,67 @@ struct player
**/
f32 healthshowtime;
#else
/* See comments above. 0x00f4 */ s32 damageshowtime;
/* See comments above. 0x00f8 */ s32 healthshowtime;
/* See comments above. 0x00f4 */ s32 damageshowtime; // canonical name
/* See comments above. 0x00f8 */ s32 healthshowtime; // canonical name
#endif
/* 0x00fc */ s32 healthshowmode;
/* 0x0100 */ s32 field_100;
/* 0x0104 */ s32 field_104;
/* 0x0108 */ s32 field_108;
/* 0x010c */ s32 field_10C;
/* 0x0120 */ s32 movecentrerelease;
/* 0x0124 */ s32 lookaheadcentreenabled;
/* 0x0128 */ s32 automovecentreenabled;
/* 0x012c */ s32 fastmovecentreenabled;
/* 0x0120 */ s32 automovecentre;
/* 0x00fc */ s32 healthshowmode; // canonical name
/* 0x0100 */ s32 field_100; // unused
/**
* The field names from this point up to bondbreathing are canonical names
* with the exceptions of autoaim_target_y and autoaim_target_x.
*/
/* 0x0104 */ bool docentreupdown;
/**
* Assigned to 0 but never read.
* Probably "lastupdown60" based on this list: https://gist.github.com/kholdfuzion/ec713f2c0a36fbfbd4f71568073f47bc
* 0x0108
*/
s32 lastupdown60;
/**
* When the player is doing manual pitch inputs, this is set to true so
* the automatic look ahead pitch adjust is interrupted.
* 0x010c
*/
bool prevupdown;
/**
* If the player is moving forward quickly, and has made a manual pitch adjustment, suppress
* the automatic look ahead pitch adjusting until the player has slowed down.
* 0x0110
*/
bool movecentrerelease;
/**
* If enabled, test the tiles ahead of the player for the look ahead functionality.
* This is always enabled.
* 0x0114
*/
bool lookaheadcentreenabled;
/**
* Look Ahead Setting in the watch menu.
* 0x0118
*/
bool automovecentreenabled;
/**
* Always false.
* 0x011c
*/
bool fastmovecentreenabled;
/**
* True when Look Ahead is enabled and the player is giving strong
* forwards or backwards input.
* 0x0120
*/
bool automovecentre;
/**
* 0: crosshair shown on screen
@@ -499,6 +543,7 @@ struct player
/* 0x013c */ f32 autoaimx;
/* 0x0140 */ struct PropRecord *autoaim_target_x;
/* 0x0144 */ s32 autoxaimtime60;
/* 0x0148 */ f32 vv_theta;
/* 0x014c */ f32 speedtheta;
@@ -617,13 +662,21 @@ struct player
* 1 = begin pause animation. Set as soon as moving arm begins, cleared when moving arm ends.
* 0x800C6960
*/
s32 pausing_flag;
f32 pause_starting_angle;
f32 pause_related;
f32 pause_target_angle;
f32 field_210;
f32 field_214;
s32 field_218;
s32 pausing_flag; // 0x200
f32 pause_starting_angle; // 0x204
f32 pause_saved_verta; // 0x208, camera pitch to restore after pause
f32 pause_target_verta; // 0x20c
f32 pause_transition_time; // 0x210, elapsed time
f32 pause_transition_duration; // 0x214, max/duration
/**
* Pausing states.
* 0 = Unpaused
* 1 = Entering pause.
* 2 = Leaving pause.
* 3 = Paused.
*/
s32 pause_state; // 0x218
s32 field_21C;
s32 step_in_view_watch_animation;
f32 pause_animation_counter;
@@ -645,7 +698,7 @@ struct player
s32 field_238;
s32 field_23C;
s32 field_240;
s32 watch_scale_destination;
f32 watch_scale_destination;
s32 field_248;
s32 field_24C;
s32 field_250;
@@ -755,6 +808,10 @@ struct player
f32 field_3C4;
f32 field_3C8;
f32 field_3CC;
/**
* Canonical names from here up through deathanimfinished.
*/
s32 colourscreenred;
s32 colourscreengreen;
s32 colourscreenblue;
@@ -778,11 +835,11 @@ struct player
* Something with position, like previous x position.
* Offset 0x408.
*/
coord3d bondprevpos; //0x408
coord3d bondprevpos;
f32 thetadie; //0x414
f32 vertadie; //0x418
s32 bondtype;
s32 bondtype; //0x41c
s32 startnewbonddie; //0x420
/**
@@ -797,11 +854,15 @@ struct player
*/
s32 deathanimfinished;
s32 field_42c;
s32 controldef; //0x430
s32 controldef; //0x430 canonical name
struct collision434 previous_collision_info;
struct collision434 previous_collision_info; // canonical "periminfo" ?
struct collision434 field_488;
/**
* Canonical names from here up to standcnt.
*/
s32 resetheadpos; // bool
s32 resetheadrot; // bool
s32 resetheadtick; // bool 0x4e4
@@ -962,8 +1023,8 @@ struct player
* Offset 0x870.
*/
struct hand hands[2];
f32 gunposamplitude;
f32 gunxamplitude;
f32 gunposamplitude; // canonical name
f32 gunxamplitude; // canonical name
// Whether the trigger was released this frame.
s32 trigger_released;
@@ -983,7 +1044,8 @@ struct player
s32 current_trigger_hand;
struct rgba_u8 tileColor;
s32 resetshadecol;
s32 resetshadecol; // canonical name
// unused. Name comes from XBLA debug.
s32 aimtype;
@@ -995,27 +1057,31 @@ struct player
coord2d crosshair_angle;
f32 crosshair_x_pos;
f32 crosshair_y_pos;
f32 guncrossdamp;
f32 guncrossdamp; // canonical name
coord2d field_FFC;
f32 gun_azimuth_angle;
f32 gun_azimuth_turning;
f32 gunaimdamp;
f32 gunaimdamp; // canonical name
coord3d field_1010;
Mtxf field_101C;
s32 last_z_trigger_timer;
s32 copiedgoldeneye;
s32 gunammooff;
s32 copiedgoldeneye; // canonical name
s32 gunammooff; // canonical name
s32 field_1068;
f32 gunsync;
f32 syncchange;
f32 synccount;
s32 syncoffset;
f32 gunsync; // canonical name
f32 syncchange; // canonical name
f32 synccount; // canonical name
s32 syncoffset; // canonical name
f32 field_107C;
f32 field_1080;
f32 sniper_zoom;
f32 camera_zoom;
s32 curRoomIndex;
/**
* Canonical names from here up through c_recipscaley.
*/
/**
* Offset 0x1090.
*/
@@ -1076,6 +1142,7 @@ struct player
*/
f32 c_recipscalex;
f32 c_recipscaley;
Mtx* field_10C4;
Mtx* field_10C8;
Mtxf* field_10CC;
@@ -1084,19 +1151,19 @@ struct player
/**
* Offset 0x10d4.
*/
Mtxf* field_10D4;
Mtxf* viewtoworldmtxf;
Mtx* projmatrix;
Mtxf* projmatrixf;
s32 field_10E0; // ptr
s32 field_10E4; // ptr
Mtxf* field_10E8;
Mtxf* field_10EC;
f32 c_scalelod60;
f32 c_scalelod;
f32 c_lodscalez;
u32 c_lodscalezu32;
coord3d c_cameratopnorm;
coord3d c_cameraleftnorm;
f32 c_scalelod60; // canonical name
f32 c_scalelod; // canonical name
f32 c_lodscalez; // canonical name
u32 c_lodscalezu32; // canonical name
coord3d c_cameratopnorm; // canonical name
coord3d c_cameraleftnorm; // canonical name
/**
* Offset 0x1118.
@@ -1112,11 +1179,16 @@ struct player
*/
s32 gunsightmode;
s32 field_112C;
s32 ammoheldarr[30];
s32 ammoheldarr[30]; // canonical name
u8 *bloodImgCur;
u8 *bloodImgNxt;
u8 *bloodImgBufPtrArray[2];
s32 bloodImgIdx;
/**
* Canonical names from here up through bondmesscnt.
*/
f32 zoomintime;
f32 zoomintimemax;
f32 zoominfovy;
@@ -1126,16 +1198,17 @@ struct player
f32 aspect;
s32 hudmessoff;
s32 bondmesscnt;
InvItem *ptr_inventory_first_in_cycle;
InvItem *p_itemcur;
s32 equipmaxitems;
s32 equipallguns;
s32 equipcuritem;
s32 equipmaxitems; // canonical name
s32 equipallguns; // canonical name
s32 equipcuritem; // canonical name
textoverride *textoverrides;
gunheld gunheldarr[10];
gunheld gunheldarr[10]; // canonical name
// -1 for inactive, 0 or greater for active.
s32 magnetattracttime;
s32 magnetattracttime; // canonical name
f32 swaytarget;
f32 swayoffset0;
@@ -1150,14 +1223,14 @@ struct player
* Entry seems to be added only on other button presses.
* Offset 0x128c.
*/
u16 cheatInputBuffer[20];
u16 cheatInputBuffer[20]; // canonically "buthist"
/**
* Offset 0x12b4.
*/
/* 0x12B4 */ u8 cheatInputBufferIndex;
/* 0x12B5 */ u8 cheatInputCount;
/* 0x12B6 */ u8 bondinvincible;
/* 0x12B4 */ u8 cheatInputBufferIndex; // canonically "buthistindex"
/* 0x12B5 */ u8 cheatInputCount; // canonically "buthistlen"
/* 0x12B6 */ u8 cheatBondInvincible; // canonically "bondinvincible"
/* 0x12B7 */ u8 field_12B7;
/* 0x12B8 */ struct damage_display_parent armor_display_values[23];
/* 0x1598 */ struct damage_display_parent health_display_values[23];
@@ -2193,41 +2266,41 @@ struct player
s32 field_29B4;
// Alt field_29C0 ?? Used in EU.
s32 healthDamageType;
s32 healthdamagetype; // canonical name
/**
* Related to player perspective.
* Offset 0x29bc.
*/
f32 field_29BC;
f32 eyeheight;
f32 field_29C0;
s32 mpmenuon;
s32 mpmenumode;
s32 mpquitconfirm;
s32 mpjoywascentre;
s32 damagetype;
s32 deathcount;
s32 num_suicides;
s32 field_29E0;
s32 last_kill_time[4];
s32 mpmenuon; // 29C4 canonincal name
s32 mpmenumode; // 29C8 canonincal name
s32 mpquitconfirm; // 29CC canonincal name
s32 mpjoywascentre; // 29D0 canonincal name
s32 damagetype; // 29D4 canonincal name
s32 deathcount; // 29D8 canonincal name
s32 num_suicides; // 29DC
s32 field_29E0; // 29E0
s32 last_kill_time[4]; // 29E4
/**
* Holds mission offset timer value.
* Offset 0x29f4.
*/
s32 field_29F4;
s32 lifestarttime60; // canonical name
s32 field_29F8;
s32 kills_this_life; // 29F8 canonically "killsthislife"
s32 autocrouchpos;
s32 healthdisplaytime;
s32 healthdisplaytime; // canonically "healthdisplaytime60"
/**
* Current tile pointer -> room.
*
* Offset 0x2a04.
*/
s16 field_2A04;
s16 registeredroom;
f32 field_2A08;
f32 field_2A0C;
s32 ptr_text_first_mp_award;
@@ -2242,10 +2315,10 @@ struct player
f32 speedgo;
s32 lock_hand_model[2];
s32 cur_player_control_type_0;
s32 cur_player_control_type_1;
f32 cur_player_control_type_2;
s32 neg_vspacing_for_control_type_entry;
u32 has_set_control_type_data;
s32 cur_player_control_type_1; //0x2a5c
f32 cur_player_control_type_2; //0x2a60
s32 neg_vspacing_for_control_type_entry; //0x2a64
u32 has_set_control_type_data; //0x2a68
/**
* Collision / clipping related.
* Related to 0ffset 0x2a70.
@@ -2311,11 +2384,12 @@ typedef struct DamageType
} DamageType;
#endif
typedef struct HealthDamageType { // time related idk
s32 updateStartFrame;
s32 updateEndFrame;
s32 otherEndFrame;
} HealthDamageType;
typedef struct HealthDisplayDuration
{
s32 validStartFrame; // When positive the health display does not show up at all.
s32 updateToRealHealthFrame; // Frame to switch from showing the health before taking damage, to showing the new health value.
s32 hideHealthFrame; // Frame to remove the health/armor gauge from the screen.
} HealthDisplayDuration;
/**
* First person weapon animation keyframe. Used for special weapons like the Throwing Knife and Taser.
@@ -2353,7 +2427,7 @@ extern CreditsEntry *credits_pointer;
//D:80036444
extern s32 g_SurroundBondWithExplosionsFlag;
//D:80036448
extern s32 in_tank_flag;
extern s32 g_PlayerIsInTank;
//D:8003644C
extern struct PropRecord *g_WorldTankProp;
@@ -2412,7 +2486,11 @@ extern struct SetupIntroSwirl *g_IntroSwirl;
//D:800364B0
extern s32 is_timer_active;
//D:800364B4
extern s32 g_PlayerInvincible;
/**
* Used to make the player invincible upon level completion.
* This is separate from the invincibility cheat, stored in cheatBondInvincible.
*/
extern bool g_PlayerInvincible;
//D:800364B8
extern struct SetupIntroCamera* g_CurrentSetupIntroCamera;
//D:800364BC
@@ -2513,7 +2591,7 @@ D:8003676C .byte 0
D:8003676D .byte 0, 0, 0xA
D:80036770 .word 0x1E, 0x3F19999A, 0
D:8003677C .word 5, 0xF, 0x3ECCCCCD, 0xFF, 0xFF, 0xFF
D:80036794 g_HealthDamageTypes:.word 0
D:80036794 g_HealthDisplayDurations:.word 0
D:80036798 .byte 0
D:80036799 .byte 0, 0, 0x28
D:8003679C .word 0x64, 0
@@ -2544,28 +2622,13 @@ extern struct coord3d g_DefaultFrozenPlayerOffset;
extern struct coord3d g_DefaultFrozenMoveOffset;
//D:80036830
extern s32 D_80036830;
//D:80036834
extern s32 D_80036834;
//D:80036838
extern s32 D_80036838;
extern coord3d ZeroCoord;
//D:8003683C
extern ModelRenderData D_8003683C;
//D:8003687C
extern s32 D_8003687C;
//D:80036880
extern s32 D_80036880;
//D:80036884
extern s32 D_80036884;
//D:80036888
extern s32 D_80036888;
extern coord3d ZeroCoordWatchPos;
//D:8003688C
extern s32 D_8003688C;
//D:80036890
extern s32 D_80036890;
//D:80036894
extern s32 D_80036894;
extern coord3d ZeroCoordSpawnPos;
//D:80036898
extern s32 status_bar_text_buffer_index;
//D:8003689C
@@ -2639,13 +2702,14 @@ extern StandTilePoint *dword_CODE_bss_80079DA4;
extern s32 dword_CODE_bss_80079DA8[];
u32 bondviewGetCameraMode(void);
void bondviewTriggerWatchZoom(f32 zoominfovy);
void trigger_watch_zoom(f32 final, f32 time);
PropRecord* getCurrentPlayerProp(void);
PropRecord* get_curplayer_positiondata(void);
f32 currentPlayerGetHealth(void);
f32 currentPlayerGetArmor(void);
bool currentPlayerGetIsAiming(void);
void currentPlayerSetScreenSize(f32 width, f32 height);
void currentPlayerSetCameraScale(void);
@@ -2653,23 +2717,32 @@ void currentPlayerSetScreenPosition(f32 left, f32 top);
void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect);
f32 getPlayer_c_screenwidth(void);
f32 getPlayer_c_screenheight(void);
f32 getPlayer_c_screenleft(void);
f32 getPlayer_c_screentop(void);
f32 getPlayer_c_perspfovy(void);
f32 getPlayer_c_perspaspect(void);
void currentPlayerSetXAutoAimEnabled(bool enabled);
bool currentPlayerGetXAutoAimEnabled(void);
bool currentPlayerGetXAutoAimEnabledRedirect(void);
void currentPlayerSetYAutoAimEnabled(s32 enabled);
bool currentPlayerGetYAutoAimEnabled(void);
bool currentPlayerGetYAutoAimEnabledRedirect(void);
void currentPlayerSetLookAheadSetting(bool enabled);
u32 bondviewGetCameraMode(void);
void bondviewTriggerWatchZoom(f32 zoominfovy);
void trigger_watch_zoom(f32 final, f32 time);
void set_open_close_solo_watch_menu_to1(void);
void init_player_BONDdata(void);
void bondviewPlayerSpawnRelated(void);
f32 bondviewGetCurrentPlayerHealth(void);
f32 get_BONDdata_watch_armor(void);
void bondviewPlayerBeginLife(void);
void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2);
#if defined(BUGFIX_R1)
@@ -2683,12 +2756,13 @@ void hudmsgBottomShow(char *string);
void setFontTables(s32 arg0, s32 arg1);
#endif
Gfx * sub_GAME_7F087A08(Gfx *arg0);
Gfx * bondviewRenderDebugBondView(Gfx *arg0);
s32 bond_pressed_reload_activate(void);
Gfx* write_stan_tiles_in_yellow(Gfx *arg0);
Gfx * maybe_mp_interface(Gfx *arg0);
Gfx * bondviewRemoved7F08BCB8(Gfx *arg0);
s32 camIsPosInScreen(coord3d *vec_scale, f32 norm_scale);
bool camIsPosInScreen(coord3d *vec_scale, f32 norm_scale);
bool camIsPosInScreenBox(coord3d *, f32, struct bbox2d *);
s32 getMissiontimer(void);
void solo_char_load(void);
void bondviewUpdateYAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_y);
@@ -2700,10 +2774,6 @@ void bondviewGetCollisionRadius(PropRecord* arg0, f32 *collision_radius, f32 *he
void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset);
void currentPlayerSetFadeColour(s32 r, s32 g, s32 b, f32 frac);
void currentPlayerSetFadeFrac(f32 maxfadetime, f32 frac);
void set_BONDdata_autoaim_x(s32 param_1);
s32 get_BONDdata_autoaim_x(void);
void set_BONDdata_autoaim_y(s32 param_1);
void set_BONDdata_lookahead_setting(s32 arg0);
f32 bondviewGetPlayerStanHeight(struct player *player);
void record_damage_kills(f32, f32, f32, s32, s32);
void bondviewCallRecordDamageKills(f32 arg0, f32 rad, s32 arg2, s32 arg3);
@@ -2711,14 +2781,14 @@ int bondviewGetIfCurrentPlayerDamageShowTime(void);
int bondviewGetIfCurrentPlayerHealthShowTime(void);
u8 bondviewGetCurrentPlayersRoom(void);
coord3d *bondviewGetCurrentPlayersPosition(void);
void bondviewUpdateGuardTankFlagsRelated(PropRecord *arg0, s32 flags);
void bondviewUpdateGuardTankFlagsRelated(PropRecord *prop, s32 flag);
void bondviewGetPropHeightRelatedValues(PropRecord *arg0, struct rect4f **field_B0, s32 *arg2, f32 *height_related, f32 *collision);
void bondviewAddCurrentPlayerArmor(f32 arg0);
void bondviewResetIntroCameraMessageDialogs(void);
void hudmsgsSetOn(s32 flag);
void hudmsgsSetOff(s32 flags);
Gfx* bondviewGfxPlayerField5cMatrix(Gfx* gdl);
Mtxf *currentPlayerGetMatrix10D4(void);
Mtxf *currentPlayerGetViewToWorldMtxf(void);
void sub_GAME_7F08BEEC(Mtxf *arg0, s32 arg1);
void currentPlayerStartChrFade(f32 duration60, f32 targetfrac);
s32 bondviewGetVisibleToGuardsFlag(void);
@@ -2726,11 +2796,9 @@ u8 get_bondata_invincible_flag(void);
void set_bondata_invincible_flag(u32 arg0);
void bondviewSetVisibleToGuardsFlag(s32 param_1);
Mtxf *currentPlayerGetMatrix10EC(void);
f32 get_curplay_horizontal_rotation_in_degrees(void);
f32 bondviewGetPlayerYawRadians(void);
Mtxf *camGetWorldToScreenMtxf(void);
void transformAndNormalizeByLength2Dto3D(struct coord2d *in, coord3d *out, f32 value);
s32 camIsPosInScreenBox(coord3d *, f32, struct bbox2d *);
void bondviewTransformManyPosToViewMatrix(RenderPosView *arg0, s32 arg1);
s32 sub_GAME_7F078474(void);
s32 get_BONDdata_field_10E0(void);
@@ -2747,18 +2815,17 @@ void hudmsgTopShow(char* string);
void SurroundWithExplosions(int delay);
s32 check_watch_page_transistion_running(void);
f32 bondviewWatchAnimationRelated(void);
struct coord3d *get_BONDdata_field408(void);
struct coord3d *getCurrentPlayerPrevPos(void);
struct PropRecord *get_ptr_for_players_tank(void);
s32 bondviewGetRandomSpawnPadIndex(void);
void change_player_pos_to_target(struct collision434* arg0, struct coord3d *arg1, struct StandTile *arg2);
void sub_GAME_7F089718(f32);
void bondviewResetUpperTextDisplay(void);
Mtxf *currentPlayerGetProjectionMatrixF(void);
int redirect_get_BONDdata_autoaim_x(void);
int redirect_get_BONDdata_autoaim_y(void);
void transform3Dto2DCoords(coord3d *in, coord2d *out);
void maybe_solo_intro_camera_handler(void);
s32 get_BONDdata_is_aiming(void);
void bondviewRemovePlayerBody(void);
void currentPlayerAdjustFade(f32 maxfadetime, s32 r, s32 g, s32 b, f32 frac);
void bondviewSelectCuff(Model *model, ModelFileHeader *header, s32 switchindex);
void sub_GAME_7F08976C(f32 param_1);
#endif
+4 -4
View File
@@ -133,7 +133,7 @@ void bondviewLoadSetupIntroSection(void)
g_ForceBondMoveOffset.f[2] = FLOAT_INIT;
g_SurroundBondWithExplosionsFlag = 0;
startpadcount = 0;
in_tank_flag = 0;
g_PlayerIsInTank = 0;
g_WorldTankProp = 0;
g_PlayerTankProp = NULL;
g_PlayerTankYOffset = FLOAT_INIT;
@@ -152,7 +152,7 @@ void bondviewLoadSetupIntroSection(void)
g_TankTurretTurn = FLOAT_INIT;
g_ExplodeTankOnDeathFlag = 0;
is_timer_active = 1;
g_PlayerInvincible = 0;
g_PlayerInvincible = FALSE;
g_CameraMode = 0;
g_CameraAfterCinema = 0;
camera_fade_active = 0;
@@ -395,7 +395,7 @@ void bondviewLoadSetupIntroSection(void)
start_stan = g_Startpad[rand_pad_index]->stan;
stan_height = bondviewYPositionRelated(start_stan, start_pos.f[0], start_pos.f[2]);
start_pos.f[1] = g_CurrentPlayer->field_29BC + stan_height;
start_pos.f[1] = g_CurrentPlayer->eyeheight + stan_height;
g_CurrentPlayer->field_70 = stan_height;
start_look_angle = M_TAU_F - atan2f(g_Startpad[rand_pad_index]->look.f[0], g_Startpad[rand_pad_index]->look.f[2]);
}
@@ -403,7 +403,7 @@ void bondviewLoadSetupIntroSection(void)
{
start_stan = sub_GAME_7F0AFB78(&start_pos.f[0], &start_pos.f[1], &start_pos.f[2], 30.0f);
stan_height = bondviewYPositionRelated(start_stan, start_pos.f[0], start_pos.f[2]);
start_pos.f[1] = g_CurrentPlayer->field_29BC + stan_height;
start_pos.f[1] = g_CurrentPlayer->eyeheight + stan_height;
g_CurrentPlayer->field_70 = stan_height;
}
+5 -5
View File
@@ -1157,9 +1157,9 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id)
HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_19_TINYBONDON_LF)));
g_playerPerm->player_perspective_height = 0.5f;
if (g_CurrentPlayer->ptr_char_objectinstance != NULL)
if (g_CurrentPlayer->bodyModel != NULL)
{
modelSetScale((struct Model *)g_CurrentPlayer->ptr_char_objectinstance, ((struct Model *)g_CurrentPlayer->ptr_char_objectinstance)->scale * 0.5f);
modelSetScale((struct Model *)g_CurrentPlayer->bodyModel, ((struct Model *)g_CurrentPlayer->bodyModel)->scale * 0.5f);
}
return;
}
@@ -1509,9 +1509,9 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id)
{
HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_24_TINYBONDOFF_LF)));
g_playerPerm->player_perspective_height = 1.0f;
if (g_CurrentPlayer->ptr_char_objectinstance)
if (g_CurrentPlayer->bodyModel)
{
modelSetScale(g_CurrentPlayer->ptr_char_objectinstance, 2.0f * ((struct Model *)g_CurrentPlayer->ptr_char_objectinstance)->scale);
modelSetScale(g_CurrentPlayer->bodyModel, 2.0f * ((struct Model *)g_CurrentPlayer->bodyModel)->scale);
}
return;
}
@@ -1714,7 +1714,7 @@ void cheatButtonSetDkMode(CHEAT_ID cheat_id)
modelSetScale(model, model->scale * scale);
}
#else
if (guard->model && not_in_us_7F0209EC(guard->bodynum, guard->headnum))
if (guard->model && chrCanUseDKModeScaling(guard->bodynum, guard->headnum))
{
model = (Model*)guard->model;
modelSetScale(model, model->scale * scale);
+1773 -6129
View File
File diff suppressed because it is too large Load Diff
+79 -94
View File
@@ -7,38 +7,36 @@
#define EXPLOSION_ANIMATION_TABLE_LEN 8
struct struck_animation_table;
struct StruckAnim;
struct animation_something
// Per-body-part hits and deaths reaction descriptor.
struct ChrHitReaction
{
s32 id;
s32 field_4;
s32 field_8;
f32 field_C;
s32 field_10;
s32 field_14;
f32 field_18;
s32 hitpart; // HITTARGET key
s32 impactPuffCount;
s32 unused_8;
f32 impactPuffSize;
s32 backImpactPuffCount; // Count for the impact puff(s) that appears behind the hit point
s32 unused_14;
f32 backImpactPuffSize;
struct struck_animation_table *field_1C;
struct StruckAnim *deathAnims;
s32 deathAnimCount;
// maybe count of field_1C
s32 field_20;
struct struck_animation_table *field_24;
// maybe count of field_24
s32 field_28;
struct StruckAnim *flinchAnims;
s32 flinchAnimCount;
};
struct struck_animation_table
// Animations for when characters are wounded or killed.
struct StruckAnim
{
void *anonymous_0; // This might be pointer to struct of ANIM_DATA_x
s32 anonymous_1;
f32 anonymous_2;
f32 anonymous_3;
s32 anonymous_4;
f32 sfx1_timer_60;
f32 sfx2_timer_60;
ModelAnimation *struck_anim;
s32 flip; // Mirror flag selecting left/right variant
f32 endframe;
f32 speed;
s32 knockback; // Enables characters to be pushed back when the gun's impact force > 0
f32 thudframe1;
f32 thudframe2;
};
struct explosion_death_animation
@@ -60,7 +58,12 @@ struct explosion_anim_group_info
struct weapon_firing_animation_table
{
s32 anim_num;
union
{
s32 offset;
struct ModelAnimation *anim;
} anim;
f32 unk04;
f32 turn_angle_per_frame;
f32 angle_offset;
@@ -112,28 +115,6 @@ struct anim_group_info
s32 len;
};
struct unk_joint_list {
Mtxf * unk_matrix;
s32 unk04;
s32 unk08;
Gfx *gdl;
Mtxf * mtxlist;
u32 unk14;
u32 unk18;
u32 unk1C;
u32 unk20;
u32 unk24;
u32 unk28;
u32 unk2C;
s32 PropType;
s32 unk34;
rgba_u8 unk38;
s32 unk3C;
};
extern s32 objectiveregisters1;
extern ChrRecord* g_ActiveChrs;
extern s32 g_ActiveChrsCount;
@@ -144,46 +125,46 @@ extern f32 g_AiHealthModifier;
extern f32 g_AiReactionSpeed;
extern s32 g_SeenBondRecentlyGuardCount;
extern struct animation_something D_8002C914[];
extern struct ChrHitReaction g_HitReactionTable[];
extern struct struck_animation_table D_8002CE54[];
extern struct struck_animation_table D_8002DF10[];
extern struct struck_animation_table D_8002CEE0[];
extern struct struck_animation_table D_8002DF64[];
extern struct struck_animation_table D_8002CF6C[];
extern struct struck_animation_table D_8002DFB8[];
extern struct struck_animation_table D_8002D014[];
extern struct struck_animation_table D_8002E028[];
extern struct struck_animation_table D_8002D0A0[];
extern struct struck_animation_table D_8002E07C[];
extern struct struck_animation_table D_8002D12C[];
extern struct struck_animation_table D_8002E0D0[];
extern struct struck_animation_table D_8002D1D4[];
extern struct struck_animation_table D_8002E140[];
extern struct struck_animation_table D_8002D3B0[];
extern struct struck_animation_table D_8002E23C[];
extern struct struck_animation_table D_8002D6DC[];
extern struct struck_animation_table D_8002E300[];
extern struct struck_animation_table D_8002D768[];
extern struct struck_animation_table D_8002E354[];
extern struct struck_animation_table D_8002D7F4[];
extern struct struck_animation_table D_8002E3A8[];
extern struct struck_animation_table D_8002D880[];
extern struct struck_animation_table D_8002E418[];
extern struct struck_animation_table D_8002D90C[];
extern struct struck_animation_table D_8002E46C[];
extern struct struck_animation_table D_8002D998[];
extern struct struck_animation_table D_8002E4C0[];
extern struct struck_animation_table D_8002DA24[];
extern struct struck_animation_table D_8002E530[];
extern struct struck_animation_table D_8002DCE0[];
extern struct struck_animation_table D_8002E5BC[];
extern struct StruckAnim death_left_foot[];
extern struct StruckAnim flinch_left_foot[];
extern struct StruckAnim death_left_leg[];
extern struct StruckAnim flinch_left_leg[];
extern struct StruckAnim death_left_thigh[];
extern struct StruckAnim flinch_left_thigh[];
extern struct StruckAnim death_right_foot[];
extern struct StruckAnim flinch_right_foot[];
extern struct StruckAnim death_right_leg[];
extern struct StruckAnim flinch_right_leg[];
extern struct StruckAnim death_right_thigh[];
extern struct StruckAnim flinch_right_thigh[];
extern struct StruckAnim death_pelvis[];
extern struct StruckAnim flinch_pelvis[];
extern struct StruckAnim death_head[];
extern struct StruckAnim flinch_head[];
extern struct StruckAnim death_left_hand[];
extern struct StruckAnim flinch_left_hand[];
extern struct StruckAnim death_left_arm[];
extern struct StruckAnim flinch_left_arm[];
extern struct StruckAnim death_left_shoulder[];
extern struct StruckAnim flinch_left_shoulder[];
extern struct StruckAnim death_right_hand[];
extern struct StruckAnim flinch_right_hand[];
extern struct StruckAnim death_right_arm[];
extern struct StruckAnim flinch_right_arm[];
extern struct StruckAnim death_right_shoulder[];
extern struct StruckAnim flinch_right_shoulder[];
extern struct StruckAnim death_chest[];
extern struct StruckAnim flinch_chest[];
extern struct StruckAnim death_gun[];
extern struct StruckAnim flinch_gun[];
extern struct StruckAnim death_stagger[];
extern struct struck_animation_table D_8002DEBC[];
extern struct animation_something D_8002CAA0;
extern struct animation_something D_8002CACC;
extern struct animation_something D_8002CB24;
extern struct animation_something D_8002CB50;
extern struct ChrHitReaction D_8002CAA0;
extern struct ChrHitReaction D_8002CACC;
extern struct ChrHitReaction D_8002CB24;
extern struct ChrHitReaction D_8002CB50;
extern struct weapon_firing_animation_table rifle_firing_animation_group1[];
extern struct weapon_firing_animation_table rifle_firing_animation_group2[];
@@ -233,9 +214,7 @@ extern s32 player1_guardID;
extern ChrRecord *g_ChrSlots;
extern s32 g_NumChrSlots;
extern ModelRenderData D_8002CC6C;
extern s32 D_8002CCAC;
extern s32 D_8002CCB0;
extern s32 D_8002CCB4;
extern coord3d D_8002CCAC;
extern rgba_u8 gBloodColour;
extern f32 D_80030984;
@@ -283,8 +262,8 @@ extern struct explosion_death_animation D_8002E648[];
void sub_GAME_7F022EE0(s32 param_1);
void setanimationdebugflag(s32 param_1);
void disable_sounds_attached_to_player_then_something(PropRecord* prop);
void chrPositionRelated7F020D94(ChrRecord *);
void chrpropCleanupForRemoval(PropRecord* prop);
void chrDetectRooms(ChrRecord *);
void chrSetMoving(ChrRecord *guard,s32 param_2);
f32 getAnimationRate(void);
void setAnimationRate(f32);
@@ -305,17 +284,23 @@ f32 chrGetChrGround(PropRecord *arg0);
void chrDropItems(struct ChrRecord *arg0);
s32 get_numguards(void);
Gfx *chrRenderProp(PropRecord *arg0, Gfx *arg1, s32 arg2);
void chrAddHealth(ChrRecord *chr, f32 health);
void chrSetMaxDamage(ChrRecord *chr, f32 maxdamage);
s32 propIsOfCdType(PropRecord* prop, s32 cdtypes);
s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3);
s32 chrGetOnscreenRenderBounds(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3);
void chrHandleBulletHit(struct ShotData *shot, struct BulletHit *bhit);
void propExecuteTickOperation(PropRecord *prop, TICKOP op);
//tentative signature
s32 sub_GAME_7F01FC10(Model *, coord3d *, coord3d *, f32 *);
void sub_GAME_7F0221DC(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3);
void chrCreateBloodStain(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3);
void chrpropAddBulletHit(struct ShotData *shotdata, PropRecord *prop, f32 dist, s32 hitpart, ModelNode *node, struct HitThing *hitthing, s32 room, s32 unk44, Model *model, bool countsAsPenetration, s32 blocksFurtherHits);
void chrTestHit(PropRecord *prop, ShotData *shotdata);
void sub_GAME_7F03E134(PropRecord* p);
#ifdef BUGFIX_R1
s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum);
bool chrCanUseDKModeScaling(s32 bodynum, s32 headnum);
#endif
#endif
-80
View File
@@ -1,80 +0,0 @@
#include <ultra64.h>
/**
* @file chrObjRandom.c
* This file contains code to get a random tlb value.
* The methods here are the same as in random and tlb_random (but different globals).
*/
// data
//D:80040160
u64 g_chrObjRandomSeed = 0xAB8D9F7781280783;
#ifdef NONMATCHING
/**
* Iterates the current random seed and returns a 32 bit value.
* Same assembly instructions as randomGetNext and tlbRandomGetNext, but different globals.
*/
u32 chrObjRandomGetNext(void) {
// best guess comments copied from random.c
// best -O1 guess
// g_randomSeed ^= (((((g_randomSeed << 0x3f) >> 0x1f) | ((g_randomSeed << 0x1f) >> 0x20)) ^ ((g_randomSeed << 0x2c) >> 0x20)) >> 0x14) & 0xfff;
// return (s32)(g_randomSeed);
// best -O2 guess
// u64 t = ((g_randomSeed << 0x3f) >> 0x1f);
// t |= ((g_randomSeed << 0x1f) >> 0x20);
// t ^= ((g_randomSeed << 0x2c) >> 0x20);
// t = g_randomSeed ^ ((t >> 0x14) & 0xfff);
// g_randomSeed = t;
// return (s32)(t);
}
#else
GLOBAL_ASM(
.text
glabel chrObjRandomGetNext
/* 0D0270 7F09B740 3C048004 */ lui $a0, %hi(g_chrObjRandomSeed)
/* 0D0274 7F09B744 DC840160 */ ld $a0, %lo(g_chrObjRandomSeed)($a0)
/* 0D0278 7F09B748 3C018004 */ lui $at, %hi(g_chrObjRandomSeed)
/* 0D027C 7F09B74C 000437FC */ dsll32 $a2, $a0, 0x1f
/* 0D0280 7F09B750 00042FF8 */ dsll $a1, $a0, 0x1f
/* 0D0284 7F09B754 000637FA */ dsrl $a2, $a2, 0x1f
/* 0D0288 7F09B758 0005283E */ dsrl32 $a1, $a1, 0
/* 0D028C 7F09B75C 0004233C */ dsll32 $a0, $a0, 0xc
/* 0D0290 7F09B760 00C53025 */ or $a2, $a2, $a1
/* 0D0294 7F09B764 0004203E */ dsrl32 $a0, $a0, 0
/* 0D0298 7F09B768 00C43026 */ xor $a2, $a2, $a0
/* 0D029C 7F09B76C 0006253A */ dsrl $a0, $a2, 0x14
/* 0D02A0 7F09B770 30840FFF */ andi $a0, $a0, 0xfff
/* 0D02A4 7F09B774 00862026 */ xor $a0, $a0, $a2
/* 0D02A8 7F09B778 0004103C */ dsll32 $v0, $a0, 0
/* 0D02AC 7F09B77C FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at)
/* 0D02B0 7F09B780 03E00008 */ jr $ra
/* 0D02B4 7F09B784 0002103F */ dsra32 $v0, $v0, 0
)
#endif
#ifdef NONMATCHING
/**
* This sets the global random seed.
*
* Assembly assigns zero to $a0 at the end of the function, which seems odd.
*
* Same assembly instructions as randomSetSeed.
*/
void chrObjRandomSetSeed(u64 param_1)
{
g_chrObjRandomSeed = param_1 + 1;
}
#else
GLOBAL_ASM(
.text
glabel chrObjRandomSetSeed
/* 0D02B8 7F09B788 64840001 */ daddiu $a0, $a0, 1
/* 0D02BC 7F09B78C 3C018004 */ lui $at, %hi(g_chrObjRandomSeed)
/* 0D02C0 7F09B790 FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at)
/* 0D02C4 7F09B794 03E00008 */ jr $ra
/* 0D02C8 7F09B798 24040000 */ li $a0, 0
)
#endif
+11
View File
@@ -0,0 +1,11 @@
#ifndef _CHROBJRANDOM_H_
#define _CHROBJRANDOM_H_
#include <ultra64.h>
extern u64 g_chrObjRandomSeed;
u32 chrObjRandomGetNext(void);
void chrObjRandomSetSeed(u32 param_1);
#endif
+40
View File
@@ -0,0 +1,40 @@
# assembler directives
.set noat # allow manual use of $at
.set noreorder # don't insert nops after branches
.set gp=64
.include "macros.inc"
.section .data
.balign 8
glabel g_chrObjRandomSeed
.word 0xAB8D9F77
.word 0x81280783
.section .text, "ax"
glabel chrObjRandomGetNext
/* 0D0270 7F09B740 3C048004 */ lui $a0, %hi(g_chrObjRandomSeed)
/* 0D0274 7F09B744 DC840160 */ ld $a0, %lo(g_chrObjRandomSeed)($a0)
/* 0D0278 7F09B748 3C018004 */ lui $at, %hi(g_chrObjRandomSeed)
/* 0D027C 7F09B74C 000437FC */ dsll32 $a2, $a0, 0x1f
/* 0D0280 7F09B750 00042FF8 */ dsll $a1, $a0, 0x1f
/* 0D0284 7F09B754 000637FA */ dsrl $a2, $a2, 0x1f
/* 0D0288 7F09B758 0005283E */ dsrl32 $a1, $a1, 0
/* 0D028C 7F09B75C 0004233C */ dsll32 $a0, $a0, 0xc
/* 0D0290 7F09B760 00C53025 */ or $a2, $a2, $a1
/* 0D0294 7F09B764 0004203E */ dsrl32 $a0, $a0, 0
/* 0D0298 7F09B768 00C43026 */ xor $a2, $a2, $a0
/* 0D029C 7F09B76C 0006253A */ dsrl $a0, $a2, 0x14
/* 0D02A0 7F09B770 30840FFF */ andi $a0, $a0, 0xfff
/* 0D02A4 7F09B774 00862026 */ xor $a0, $a0, $a2
/* 0D02A8 7F09B778 0004103C */ dsll32 $v0, $a0, 0
/* 0D02AC 7F09B77C FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at)
/* 0D02B0 7F09B780 03E00008 */ jr $ra
/* 0D02B4 7F09B784 0002103F */ dsra32 $v0, $v0, 0
glabel chrObjRandomSetSeed
/* 0D02B8 7F09B788 64840001 */ daddiu $a0, $a0, 1
/* 0D02BC 7F09B78C 3C018004 */ lui $at, %hi(g_chrObjRandomSeed)
/* 0D02C0 7F09B790 FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at)
/* 0D02C4 7F09B794 03E00008 */ jr $ra
/* 0D02C8 7F09B798 24040000 */ li $a0, 0
+6 -6
View File
@@ -30,7 +30,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader
f32 scale;
f32 pov;
s32 opcode;
struct ModelRoData_HeaderRecord *node;
ModelRwData_SwitchRecord *rwdata;
scale = c_item_entries[body].scale * 0.10000001f;
opcode = 0;
@@ -38,7 +38,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader
if (
#ifdef BUGFIX_R1
cheatIsActive(CHEAT_DK_MODE) && not_in_us_7F0209EC(body, head)
cheatIsActive(CHEAT_DK_MODE) && chrCanUseDKModeScaling(body, head)
#else
cheatIsActive(CHEAT_DK_MODE)
#endif
@@ -76,7 +76,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader
if (model == 0)
{
model = get_aircraft_obj_instance_controller(bodyHeader);
model = modelmgrInstantiateModelWithAnim(bodyHeader);
}
#ifdef DEBUG
assert(chrsub->inst.savesize>=bodyobj->savesize); //bodyHeader = chrsub, model = bodyobj
@@ -95,7 +95,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader
if (model != 0)
{
modelSetScale(model, scale);
sub_GAME_7F06CE84(model, pov);
modelSetAnimTranslationScale(model, pov);
if ((headHeader != 0) && (c_item_entries[body].hasHead == 0))
{
@@ -106,8 +106,8 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader
{
if (headHeader->Switches[0] != 0)
{
node = modelGetNodeRwData(model, headHeader->Switches[0]);
node->ModelType = 0;
rwdata = &modelGetNodeRwData(model, headHeader->Switches[0])->Switch;
rwdata->visible = 0;
}
}
}
+2 -2
View File
@@ -5,7 +5,7 @@
#include <bondtypes.h>
s32 load_body_head_if_not_loaded(s32 model);
Model *makeonebody(int body, int head, ModelFileHeader *bodyheader, ModelFileHeader *headheader, int sunglasses, Model *model);
Model *setup_chr_instance(int body, int head, ModelFileHeader *body_header, ModelFileHeader *head_header, int sunglasses);
Model *makeonebody(s32 body, s32 head, ModelFileHeader *bodyheader, ModelFileHeader *headheader, s32 sunglasses, Model *model);
Model *setup_chr_instance(s32 body, s32 head, ModelFileHeader *body_header, ModelFileHeader *head_header, s32 sunglasses);
#endif
+341 -944
View File
File diff suppressed because it is too large Load Diff
+14 -15
View File
@@ -816,8 +816,7 @@ PathRecord *pathFindById(s32 ID)
}
// forward
extern void chrpropDelist(PropRecord *prop);
extern PadRecord *dword_CODE_bss_800799F8;
extern PadRecord *g_CameraLookAtBondPad;
extern CutsceneRecord *gBondViewCutscene;
extern enum CAMERAMODE dword_CODE_bss_80079A18;
extern s32 dword_CODE_bss_80079A1C;
@@ -2280,7 +2279,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
osSyncPrintf("ai_destroyobj 3 : adddamageobj\n");
#endif
maybe_detonate_object(obj, damage, &obj->runtime_pos, 0x1D, -1);
objApplyDamage(obj, damage, &obj->runtime_pos, 0x1D, -1);
}
}
Offset += sizeof(AiDestroyObjectRecord);
@@ -2336,8 +2335,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
ObjectRecord *obj = objFindByTagId(ai->OBJECT_TAG);
if (obj && obj->prop)
{
INV_ITEM_TYPE iType = collect_or_interact_object(obj->prop, FALSE);
propExecuteTickOperation(obj->prop, iType);
TICKOP op = propPickupByPlayer(obj->prop, FALSE);
propExecuteTickOperation(obj->prop, op);
}
Offset += sizeof(AiBondCollectObjectRecord);
break;
@@ -2672,7 +2671,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
{
AiIFBondHealthLessThanRecord *ai = AiListp + Offset;
float val = (ai->HEALTH) / 255.0f;
if (val > bondviewGetCurrentPlayerHealth())
if (val > currentPlayerGetHealth())
{
Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL);
}
@@ -2686,7 +2685,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
{
AiIFBondHealthGreaterThanRecord *ai = AiListp + Offset;
float val = (ai->HEALTH) / 255.0f;
if (val < bondviewGetCurrentPlayerHealth())
if (val < currentPlayerGetHealth())
{
Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL);
}
@@ -3974,11 +3973,11 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
u16 padnum = ntohs(ai->PAD);
if (isNotBoundPad(padnum))
{
dword_CODE_bss_800799F8 = &g_CurrentSetup.pads[padnum];
g_CameraLookAtBondPad = &g_CurrentSetup.pads[padnum];
}
else
{
dword_CODE_bss_800799F8 = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padnum)];
g_CameraLookAtBondPad = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padnum)];
}
bondviewSetCameraMode(CAMERAMODE_POSEND);
Offset += sizeof(AiCameraLookAtBondFromPadRecord);
@@ -3999,7 +3998,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
/*".\\ported\\chrai.c", 0xc2b, "Assertion failed: cdef->type==PROPDEF_CAMERAPOS") */
assert(cdef->type == PROPDEF_CAMERAPOS);
#endif
dword_CODE_bss_800799F8 = NULL;
g_CameraLookAtBondPad = NULL;
gBondViewCutscene = cdef;
dword_CODE_bss_80079A18 = ntohs(ai->LOOK_AT_BOND_FLAG);
dword_CODE_bss_80079A1C = ntohs(ai->UNUSED_FLAG);
@@ -4013,7 +4012,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
{
AiIFBondYPosLessThanRecord *ai = AiListp + Offset;
f32 bondpos = (s16)ntohs(ai->Y_POS);
if (get_curplayer_positiondata()->pos.y < bondpos)
if (getCurrentPlayerProp()->pos.y < bondpos)
{
Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL);
}
@@ -4101,7 +4100,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
chr->chrflags = chr->chrflags | CHRFLAG_INIT;
setsubroty(chr->model, FacingDirection);
setsuboffset(chr->model, &pos);
chrPositionRelated7F020D94(chr);
chrDetectRooms(chr);
if (chr->prop == g_CurrentPlayer->prop)
{
g_CurrentPlayer->field_488.collision_position.x = pos.x;
@@ -4193,7 +4192,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
door->openPosition = door->maxFrac;
door->openedTime = g_GlobalTimer;
door->openstate = DOORSTATE_STATIONARY;
door7F052B00(door);
doorUpdateBbox(door);
doorActivatePortal(door); // doorActivatePortal
door7F053B10(door);
}
@@ -4350,7 +4349,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
padnum = ntohs(ai->PAD);
targetHeight = (s16)ntohs(ai->Y_POS_OFFSET);
start = ntohs(ai->INITIAL_ROTATION);
dword_CODE_bss_800799F8 = NULL;
g_CameraLookAtBondPad = NULL;
gBondViewCutscene = NULL;
flt_CODE_bss_80079A00 = (start * M_TAU_F) / M_U16_MAX_VALUE_F; /*unit direction 0 - 1 (increments are 0.000001) */
flt_CODE_bss_80079A04 = (speed60 * M_TAU_F) / M_U16_MAX_VALUE_F; /*how many increments per frame */
@@ -4503,7 +4502,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType)
{
sub_GAME_7F03FDA8(obj->prop);
if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT)
if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE)
{
obj->projectile->flags |= 0x601;
projectileSetSticky(obj->prop);
+60 -59
View File
@@ -111,7 +111,7 @@ primarily used to reset rotation to 0
/*
Rotate Image:
0000000F rrrr.rrrr
[r]otate image incrementally rrrr.rrrr%;
[r]otate image incrementally rrrr.rrrr%;
0x2000 rotates approximately 45 degrees, 0x1555 to mimic a clock
*/
#define MONROTATEIMAGE(r) 0xF, r
@@ -161,7 +161,7 @@ Rotate Image:
#define HUNDRED_PERCENT_CHANCE 0xFFFF
#define SFX_RELATED_LEN 8
#define POS_DATA_ENTRY_LEN 600
#define MAX_PROPS 600
#define PTR_LIST_OBJECT_LOOKUP_INDICES_LEN 512
#define BSS_8007161C_LEN 256
#define BSS_8007161C_DATA_LEN 16
@@ -169,6 +169,7 @@ Rotate Image:
#define MAX_HAT_SLOTS 10
#define MAX_AMMO_CRATES 20
#define PROJECTILES_ARR_MAX 20
#define PROXIMITYARRMAX 30 /*canonical name for max mines*/
#define EMBEDMENT_ARR_MAX 40
#define ONSCREEN_PROP_LIST_LEN 500
@@ -178,7 +179,7 @@ Rotate Image:
* Getting a match on alloc_lookup_buffers makes it seem
* the struct is just one continuous array. (or maybe there's no struct....)
*/
struct roomproplistchunk
struct roomproplistblock
{
s16 propnums[16];
};
@@ -217,24 +218,24 @@ extern u32 monAnim2DRandEffectFlash[];
extern u32 monAnim00Bond[];
extern u32 monAnim34[];
extern u32 monAnim35Taser[];
extern WeaponObjRecord* temp_mine_table[30];
extern WeaponObjRecord* proxy_mine_table[30];
extern f32 gasTimeToFullOpacity;
extern u32 gasDoesDamageFlag;
extern f32 difficulty ;
extern stagesetup g_CurrentSetup;
extern s16 * ptr_list_object_lookup_indices;
extern PropRecord pos_data_entry[];
extern PropRecord g_Props[];
extern PropRecord *ptr_obj_pos_list_current_entry;
extern PropRecord *ptr_obj_pos_list_first_entry;
extern PropRecord *ptr_obj_pos_list_final_entry;
extern PropRecord *g_ActivePropsTail;
extern PropRecord *g_ActivePropsHead;
extern PropRecord *g_FreeProps;
extern s32 g_OnScreenPropCount;
extern PropRecord ** g_LastOnScreenProp;
extern PropRecord * g_OnScreenPropList[];
extern PropRecord * g_InteractProp;
extern s16 * RoomPropListChunkIndexes;
extern struct roomproplistchunk * RoomPropListChunks;
extern s16 * RoomPropListBlockIndices;
extern struct roomproplistblock * RoomPropListBlocks;
extern sfxRecord sfx_related[];
extern struct WeaponObjRecord g_WeaponSlots[];
extern struct HatRecord g_HatSlots[];
@@ -252,54 +253,54 @@ extern struct object_animation_controller g_TaserAnimController;
extern stagesetup *g_ptrStageSetupFile;
extern char *setup_text_pointers[];
void alarmDeactivate(void);
s32 chraiitemsize(u8 *AIList, s32 offset);
void check_deactivate_gas_sound(void);
void handle_mp_respawn_and_some_things(void);
void determing_type_of_object_and_detection(void);
void chraiUpdateOnscreenPropCount(void);
void chrpropUpdateAutoaimTarget(void);
void chraiCheckUseHeldItems(void);
bool bond_interact_object(void);
void sub_GAME_7F03D0D4(void);
void chrpropRegisterRoom(PropRecord *, s16);
PropRecord* chrpropAllocate(void);
void chrpropReparent(PropRecord *newChild, PropRecord *host);
void chrpropDeregisterRooms(PropRecord *);
void sub_GAME_7F03E27C(PropRecord *, coord3d *, coord3d *, f32);
void chrpropRegisterRooms(PropRecord *posData);
void chrpropActivate(PropRecord *);
void chrpropEnable(PropRecord *);
void chrpropActivateThisFrame(PropRecord *);
void chrpropReparent(PropRecord *newChild, PropRecord *host);
AIRecord *ailistFindById(s32 ID);
void chraiGetCollisionBounds(PropRecord *prop, struct rect4f **polygon, s32 *edges, f32 *arg3, f32 *arg4);
void sub_GAME_7F03D058(PropRecord *prop, bool unset);
void chraiGetCollisionBoundsWithoutY(PropRecord *prop, struct rect4f **polygon, s32 *edges);
s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges);
void roomGetProps(s32 *roomids);
ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 arg0);
Gfx *chrpropsRenderPass(Gfx *arg0, s32 roomid, s32 arg2);
PropRecord *get_ptr_obj_pos_list_current_entry(void);
void propsDefragRoomProps(void);
void chraiGetPropRoomIds(PropRecord *self, s32 *roomids);
void chrpropFree(PropRecord *prop);
void chrpropDisable(PropRecord *prop);
f32 chrpropBBOXGetXmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetYmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetYmax(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetZmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
ObjectRecord *sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID);
void chrpropGetCollisionBounds(PropRecord *arg0, f32 *arg1, f32 *arg2, f32 *arg3);
f32 sub_GAME_7F03CFE8(PropRecord *arg0);
f32 chrpropSumMatrixPosX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixPosY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixPosZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, struct rect4f* arg2, struct collision_data *arg3);
void sub_GAME_7F03F948(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4);
void sub_GAME_7F03E6A0(PropRecord *prop);
void alarmDeactivate(void);
s32 chraiitemsize(u8 *AIList, s32 offset);
void check_deactivate_gas_sound(void);
void chrpropTick(void);
void propsTick(void);
void chraiUpdateOnscreenPropCount(void);
void chrpropUpdateAutoaimTarget(void);
void chraiCheckUseHeldItems(void);
bool bond_interact_object(void);
void propsTickPlayer(void);
void chrpropRegisterRoom(PropRecord *, s16);
PropRecord* chrpropAllocate(void);
void chrpropReparent(PropRecord *newChild, PropRecord *host);
void chrpropDelist(PropRecord *prop);
void chrpropDeregisterRooms(PropRecord *);
void chrpropUpdateRoomList(PropRecord *prop, coord3d *bbmin, coord3d *bbmax, f32 radius);
void chrpropRegisterRooms(PropRecord *posData);
void chrpropActivate(PropRecord *);
void chrpropEnable(PropRecord *);
void chrpropActivateThisFrame(PropRecord *);
AIRecord *ailistFindById(s32 ID);
void chraiGetCollisionBounds(PropRecord *prop, struct rect4f **polygon, s32 *edges, f32 *arg3, f32 *arg4);
void sub_GAME_7F03D058(PropRecord *prop, bool unset);
void chraiGetCollisionBoundsWithoutY(PropRecord *prop, struct rect4f **polygon, s32 *edges);
s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges);
void roomGetProps(s32 *roomids);
ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 arg0);
Gfx *chrpropsRenderPass(Gfx *arg0, s32 roomid, s32 arg2);
PropRecord *chrpropGetActiveTail(void);
void propsDefragRoomProps(void);
void chraiGetPropRoomIds(PropRecord *self, s32 *roomids);
void chrpropFree(PropRecord *prop);
void chrpropDisable(PropRecord *prop);
f32 chrpropBBOXGetXmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetYmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetYmax(ModelRoData_BoundingBoxRecord *modelBoundingBox);
f32 chrpropBBOXGetZmin(ModelRoData_BoundingBoxRecord *modelBoundingBox);
ObjectRecord *sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID);
void chrpropGetCollisionBounds(PropRecord *arg0, f32 *arg1, f32 *arg2, f32 *arg3);
f32 sub_GAME_7F03CFE8(PropRecord *arg0);
f32 chrpropSumMatrixPosX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixPosY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixPosZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
f32 chrpropSumMatrixNegZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1);
void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, struct rect4f* arg2, struct collision_data *arg3);
void projectRectCornersTo2D(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4);
void sub_GAME_7F03E6A0(PropRecord *prop);
struct PropRecord *propFindForInteract(void);
#endif

Some files were not shown because too many files have changed in this diff Show More