mirror of
https://gitlab.com/kholdfuzion/goldeneye_src
synced 2026-08-28 00:01:43 -04:00
for england james?
This commit is contained in:
@@ -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: |
|
||||
|
||||
@@ -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: |
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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[] = {
|
||||
|
||||
+1664
-55
File diff suppressed because it is too large
Load Diff
+532
-2245
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
+1116
-28
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
+1127
-30
File diff suppressed because it is too large
Load Diff
+619
-22
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
+1225
-60
File diff suppressed because it is too large
Load Diff
+1520
-42
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
+1177
-38
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
@@ -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
+1443
-41
File diff suppressed because it is too large
Load Diff
+1520
-42
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
+1177
-38
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
@@ -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
+1443
-41
File diff suppressed because it is too large
Load Diff
+1518
-42
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
+1175
-38
File diff suppressed because it is too large
Load Diff
@@ -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 */
|
||||
|
||||
@@ -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
+1441
-41
File diff suppressed because it is too large
Load Diff
+116
-116
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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);*/
|
||||
|
||||
@@ -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
@@ -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);*/
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
+1116
-1229
File diff suppressed because it is too large
Load Diff
+314
-318
File diff suppressed because it is too large
Load Diff
+71
-141
@@ -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
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
)
|
||||
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
+105
-31
@@ -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
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+272
-205
@@ -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
|
||||
|
||||
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+79
-94
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+14
-15
@@ -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
@@ -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
Reference in New Issue
Block a user