Start snake_vr/sna_init.c

For now it's copy-pasted from snake/sna_init.c, but once it's all
matched, we'll be able to diff those two files and decide how to
get rid of the duplication.
This commit is contained in:
nocato 2023-10-18 14:46:42 +02:00
parent 639c270236
commit 8167c12fba
14 changed files with 1375 additions and 782 deletions

View File

@ -1,8 +1,8 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_8005145C
snake_vr_sna_init_8005145C:
xdef sna_800515BC
sna_800515BC:
dw 0x27BDFFD0 ; 8005145C
dw 0xAFB10014 ; 80051460
dw 0x00808821 ; 80051464

View File

@ -1,594 +0,0 @@
opt c+, at+, e+, n-
section .text
xdef sna_NewSnake_8005B650
sna_NewSnake_8005B650:
dw 0x27BDFFA8 ; 8005AB30
dw 0xAFB00030 ; 8005AB34
dw 0x00808021 ; 8005AB38
dw 0xAFB10034 ; 8005AB3C
dw 0x00A08821 ; 8005AB40
dw 0x24040005 ; 8005AB44
dw 0x24050A70 ; 8005AB48
dw 0xAFBF0050 ; 8005AB4C
dw 0xAFB7004C ; 8005AB50
dw 0xAFB60048 ; 8005AB54
dw 0xAFB50044 ; 8005AB58
dw 0xAFB40040 ; 8005AB5C
dw 0xAFB3003C ; 8005AB60
dw 0x0C0053FA ; 8005AB64
dw 0xAFB20038 ; 8005AB68
dw 0x00409021 ; 8005AB6C
dw 0x12400230 ; 8005AB70
dw 0x3C058006 ; 8005AB74
dw 0x02402021 ; 8005AB78
dw 0x24A5A3D0 ; 8005AB7C
dw 0x3C068006 ; 8005AB80
dw 0x24C6AA24 ; 8005AB84
dw 0x3C078001 ; 8005AB88
dw 0x0C005414 ; 8005AB8C
dw 0x24E72428 ; 8005AB90
dw 0x26530020 ; 8005AB94
dw 0x02602021 ; 8005AB98
dw 0x02002821 ; 8005AB9C
dw 0x0C0096B3 ; 8005ABA0
dw 0x02203021 ; 8005ABA4
dw 0x0440021B ; 8005ABA8
dw 0x2402FFFF ; 8005ABAC
dw 0x0C0082A6 ; 8005ABB0
dw 0x24040070 ; 8005ABB4
dw 0x24040064 ; 8005ABB8
dw 0x0C0082A6 ; 8005ABBC
dw 0x00408021 ; 8005ABC0
dw 0x02602021 ; 8005ABC4
dw 0x02002821 ; 8005ABC8
dw 0x0C0098BC ; 8005ABCC
dw 0x00403021 ; 8005ABD0
dw 0x02602021 ; 8005ABD4
dw 0x00002821 ; 8005ABD8
dw 0x240601C2 ; 8005ABDC
dw 0x0C0098D7 ; 8005ABE0
dw 0x00C03821 ; 8005ABE4
dw 0x24020001 ; 8005ABE8
dw 0xA2620059 ; 8005ABEC
dw 0x02602021 ; 8005ABF0
dw 0x0C0098DB ; 8005ABF4
dw 0x00402821 ; 8005ABF8
dw 0x0C00990E ; 8005ABFC
dw 0x02602021 ; 8005AC00
dw 0x3415992D ; 8005AC04
dw 0x2404006D ; 8005AC08
dw 0x0C0082A6 ; 8005AC0C
dw 0x2654009C ; 8005AC10
dw 0x10400006 ; 8005AC14
dw 0x00000000 ; 8005AC18
dw 0x0C0082F5 ; 8005AC1C
dw 0x00000000 ; 8005AC20
dw 0x0C0082C6 ; 8005AC24
dw 0x00402021 ; 8005AC28
dw 0x0040A821 ; 8005AC2C
dw 0x02802021 ; 8005AC30
dw 0x02A02821 ; 8005AC34
dw 0x2406032D ; 8005AC38
dw 0x0C00D2C5 ; 8005AC3C
dw 0x3407992D ; 8005AC40
dw 0x0C00D36C ; 8005AC44
dw 0x02802021 ; 8005AC48
dw 0x02802021 ; 8005AC4C
dw 0x26450180 ; 8005AC50
dw 0x3406992D ; 8005AC54
dw 0x264701D0 ; 8005AC58
dw 0x26420434 ; 8005AC5C
dw 0xAFA20010 ; 8005AC60
dw 0x26420698 ; 8005AC64
dw 0xAFB30014 ; 8005AC68
dw 0x0C00D401 ; 8005AC6C
dw 0xAFA20018 ; 8005AC70
dw 0x02802021 ; 8005AC74
dw 0x0C00D350 ; 8005AC78
dw 0x26450848 ; 8005AC7C
dw 0x3C01800B ; 8005AC80
dw 0xAC339654 ; 8005AC84
dw 0x3C19800B ; 8005AC88
dw 0x27399670 ; 8005AC8C
dw 0x8A560023 ; 8005AC90
dw 0x9A560020 ; 8005AC94
dw 0x8A570027 ; 8005AC98
dw 0x9A570024 ; 8005AC9C
dw 0xAB360003 ; 8005ACA0
dw 0xBB360000 ; 8005ACA4
dw 0xAB370007 ; 8005ACA8
dw 0xBB370004 ; 8005ACAC
dw 0x3C01800B ; 8005ACB0
dw 0xAC349680 ; 8005ACB4
dw 0x0C013ACD ; 8005ACB8
dw 0x02402021 ; 8005ACBC
dw 0x24040016 ; 8005ACC0
dw 0x24050002 ; 8005ACC4
dw 0x00003021 ; 8005ACC8
dw 0x2651092C ; 8005ACCC
dw 0x02203821 ; 8005ACD0
dw 0x0C006E8C ; 8005ACD4
dw 0xAFA00010 ; 8005ACD8
dw 0x00408021 ; 8005ACDC
dw 0x12000007 ; 8005ACE0
dw 0x00000000 ; 8005ACE4
dw 0x0C00607A ; 8005ACE8
dw 0x02002021 ; 8005ACEC
dw 0x3C02800B ; 8005ACF0
dw 0x8C429610 ; 8005ACF4
dw 0x00000000 ; 8005ACF8
dw 0xA6020028 ; 8005ACFC
dw 0x1200003E ; 8005AD00
dw 0x2403FFFF ; 8005AD04
dw 0x0C00765B ; 8005AD08
dw 0x240408DB ; 8005AD0C
dw 0x00402821 ; 8005AD10
dw 0x14A00003 ; 8005AD14
dw 0xAE450924 ; 8005AD18
dw 0x08016B7F ; 8005AD1C
dw 0x2403FFFF ; 8005AD20
dw 0x240201F4 ; 8005AD24
dw 0xA602002E ; 8005AD28
dw 0x00004021 ; 8005AD2C
dw 0x3C070080 ; 8005AD30
dw 0x34E78080 ; 8005AD34
dw 0x240A000C ; 8005AD38
dw 0x2409003E ; 8005AD3C
dw 0x02003021 ; 8005AD40
dw 0x8CC20040 ; 8005AD44
dw 0x00002021 ; 8005AD48
dw 0x2443000E ; 8005AD4C
dw 0xAC60FFF6 ; 8005AD50
dw 0xAC670002 ; 8005AD54
dw 0xAC60000E ; 8005AD58
dw 0xAC67001A ; 8005AD5C
dw 0xA06AFFF5 ; 8005AD60
dw 0xA069FFF9 ; 8005AD64
dw 0x94A20004 ; 8005AD68
dw 0x00000000 ; 8005AD6C
dw 0xA462000C ; 8005AD70
dw 0x94A20006 ; 8005AD74
dw 0x24840001 ; 8005AD78
dw 0xA4620000 ; 8005AD7C
dw 0x28820002 ; 8005AD80
dw 0x1440FFF2 ; 8005AD84
dw 0x24630034 ; 8005AD88
dw 0x25080001 ; 8005AD8C
dw 0x29020002 ; 8005AD90
dw 0x1440FFEB ; 8005AD94
dw 0x24C60004 ; 8005AD98
dw 0x2402FF9C ; 8005AD9C
dw 0xA6220010 ; 8005ADA0
dw 0xA6220000 ; 8005ADA4
dw 0x2402FED4 ; 8005ADA8
dw 0x26230010 ; 8005ADAC
dw 0xA622001A ; 8005ADB0
dw 0xA4620002 ; 8005ADB4
dw 0xA622000A ; 8005ADB8
dw 0xA6220002 ; 8005ADBC
dw 0x2402012C ; 8005ADC0
dw 0xA4620004 ; 8005ADC4
dw 0xA6220004 ; 8005ADC8
dw 0x2402FCE0 ; 8005ADCC
dw 0x240307D0 ; 8005ADD0
dw 0xA6220008 ; 8005ADD4
dw 0x24020320 ; 8005ADD8
dw 0xA623000C ; 8005ADDC
dw 0xA6220018 ; 8005ADE0
dw 0xA623001C ; 8005ADE4
dw 0x8E020024 ; 8005ADE8
dw 0x00001821 ; 8005ADEC
dw 0x34420100 ; 8005ADF0
dw 0xAE020024 ; 8005ADF4
dw 0xAE500928 ; 8005ADF8
dw 0x04610003 ; 8005ADFC
dw 0x3C02800B ; 8005AE00
dw 0x08016D06 ; 8005AE04
dw 0x2402FFFF ; 8005AE08
dw 0x244429F8 ; 8005AE0C
dw 0x94820020 ; 8005AE10
dw 0x24030003 ; 8005AE14
dw 0xA6420A22 ; 8005AE18
dw 0x00021400 ; 8005AE1C
dw 0x00021403 ; 8005AE20
dw 0x1443001F ; 8005AE24
dw 0x3C02800A ; 8005AE28
dw 0x2442B2D0 ; 8005AE2C
dw 0x8483001E ; 8005AE30
dw 0x00000000 ; 8005AE34
dw 0x24630001 ; 8005AE38
dw 0x00031840 ; 8005AE3C
dw 0x00621821 ; 8005AE40
dw 0x94620000 ; 8005AE44
dw 0x9483001E ; 8005AE48
dw 0x30420002 ; 8005AE4C
dw 0x14400005 ; 8005AE50
dw 0x2402FFFF ; 8005AE54
dw 0x2462FFFE ; 8005AE58
dw 0x2C420003 ; 8005AE5C
dw 0x10400002 ; 8005AE60
dw 0x2402FFFF ; 8005AE64
dw 0xA482001E ; 8005AE68
dw 0x3C03800A ; 8005AE6C
dw 0x3C02800B ; 8005AE70
dw 0x244429F8 ; 8005AE74
dw 0x8482001C ; 8005AE78
dw 0x2463B2B8 ; 8005AE7C
dw 0x24420001 ; 8005AE80
dw 0x00021040 ; 8005AE84
dw 0x00431021 ; 8005AE88
dw 0x94420000 ; 8005AE8C
dw 0x00000000 ; 8005AE90
dw 0x30420200 ; 8005AE94
dw 0x10400002 ; 8005AE98
dw 0x2402FFFF ; 8005AE9C
dw 0xA482001C ; 8005AEA0
dw 0x02402021 ; 8005AEA4
dw 0x00002821 ; 8005AEA8
dw 0x2410FFFF ; 8005AEAC
dw 0x2402FFFE ; 8005AEB0
dw 0xAE500844 ; 8005AEB4
dw 0x0C014431 ; 8005AEB8
dw 0xAE420918 ; 8005AEBC
dw 0x02402021 ; 8005AEC0
dw 0x00002821 ; 8005AEC4
dw 0x0C014517 ; 8005AEC8
dw 0xAE5009A4 ; 8005AECC
dw 0x3C02800B ; 8005AED0
dw 0x84432A14 ; 8005AED4
dw 0x240201C2 ; 8005AED8
dw 0xA6420A24 ; 8005AEDC
dw 0x000310C0 ; 8005AEE0
dw 0x00431023 ; 8005AEE4
dw 0x00021080 ; 8005AEE8
dw 0x3C03800A ; 8005AEEC
dw 0x2463CAC4 ; 8005AEF0
dw 0x00431021 ; 8005AEF4
dw 0xAE4209B0 ; 8005AEF8
dw 0x3C02800B ; 8005AEFC
dw 0x8A560023 ; 8005AF00
dw 0x9A560020 ; 8005AF04
dw 0x8A570027 ; 8005AF08
dw 0x9A570024 ; 8005AF0C
dw 0xAA560A43 ; 8005AF10
dw 0xBA560A40 ; 8005AF14
dw 0xAA570A47 ; 8005AF18
dw 0xBA570A44 ; 8005AF1C
dw 0x8A560023 ; 8005AF20
dw 0x9A560020 ; 8005AF24
dw 0x8A570027 ; 8005AF28
dw 0x9A570024 ; 8005AF2C
dw 0xAA560A5F ; 8005AF30
dw 0xBA560A5C ; 8005AF34
dw 0xAA570A63 ; 8005AF38
dw 0xBA570A60 ; 8005AF3C
dw 0x24595418 ; 8005AF40
dw 0x8A560A5F ; 8005AF44
dw 0x9A560A5C ; 8005AF48
dw 0x8A570A63 ; 8005AF4C
dw 0x9A570A60 ; 8005AF50
dw 0xAB360003 ; 8005AF54
dw 0xBB360000 ; 8005AF58
dw 0xAB370007 ; 8005AF5C
dw 0xBB370004 ; 8005AF60
dw 0x0C0082A6 ; 8005AF64
dw 0x2404006F ; 8005AF68
dw 0x10400007 ; 8005AF6C
dw 0x24021770 ; 8005AF70
dw 0x0C0082F5 ; 8005AF74
dw 0x00000000 ; 8005AF78
dw 0x0C0082C6 ; 8005AF7C
dw 0x00402021 ; 8005AF80
dw 0xA6420A56 ; 8005AF84
dw 0x24021770 ; 8005AF88
dw 0xA6420890 ; 8005AF8C
dw 0x0C0082A6 ; 8005AF90
dw 0x2404006C ; 8005AF94
dw 0x10400007 ; 8005AF98
dw 0x24020200 ; 8005AF9C
dw 0x0C0082F5 ; 8005AFA0
dw 0x00000000 ; 8005AFA4
dw 0x0C0082C6 ; 8005AFA8
dw 0x00402021 ; 8005AFAC
dw 0xA6420890 ; 8005AFB0
dw 0x24020200 ; 8005AFB4
dw 0xA6420892 ; 8005AFB8
dw 0x0C0082A6 ; 8005AFBC
dw 0x24040072 ; 8005AFC0
dw 0x10400007 ; 8005AFC4
dw 0x2402FC01 ; 8005AFC8
dw 0x0C0082F5 ; 8005AFCC
dw 0x00000000 ; 8005AFD0
dw 0x0C0082C6 ; 8005AFD4
dw 0x00402021 ; 8005AFD8
dw 0xA6420892 ; 8005AFDC
dw 0x2402FC01 ; 8005AFE0
dw 0xA7820904 ; 8005AFE4
dw 0x240203FF ; 8005AFE8
dw 0xA78208FC ; 8005AFEC
dw 0x0C0082A6 ; 8005AFF0
dw 0x24040074 ; 8005AFF4
dw 0x1040000B ; 8005AFF8
dw 0x00000000 ; 8005AFFC
dw 0x0C0082F5 ; 8005B000
dw 0x00000000 ; 8005B004
dw 0x0C0082C6 ; 8005B008
dw 0x00402021 ; 8005B00C
dw 0xA7820904 ; 8005B010
dw 0x0C0082F5 ; 8005B014
dw 0x00000000 ; 8005B018
dw 0x0C0082C6 ; 8005B01C
dw 0x00402021 ; 8005B020
dw 0xA78208FC ; 8005B024
dw 0xAE500A6C ; 8005B028
dw 0x0C0082A6 ; 8005B02C
dw 0x24040065 ; 8005B030
dw 0x10400006 ; 8005B034
dw 0x00000000 ; 8005B038
dw 0x0C0082F5 ; 8005B03C
dw 0x00000000 ; 8005B040
dw 0x0C0082C6 ; 8005B044
dw 0x00402021 ; 8005B048
dw 0xAE420A6C ; 8005B04C
dw 0x86450A22 ; 8005B050
dw 0x24020003 ; 8005B054
dw 0x14A20016 ; 8005B058
dw 0x24040042 ; 8005B05C
dw 0x24100002 ; 8005B060
dw 0x0C0138CB ; 8005B064
dw 0xA6500A22 ; 8005B068
dw 0x8E43009C ; 8005B06C
dw 0x00000000 ; 8005B070
dw 0x8C620028 ; 8005B074
dw 0x02402021 ; 8005B078
dw 0x34420080 ; 8005B07C
dw 0x0C013B23 ; 8005B080
dw 0xAC620028 ; 8005B084
dw 0x02402021 ; 8005B088
dw 0x3C058005 ; 8005B08C
dw 0x0C01389B ; 8005B090
dw 0x24A53330 ; 8005B094
dw 0x02402021 ; 8005B098
dw 0x24050002 ; 8005B09C
dw 0x3C02800B ; 8005B0A0
dw 0x0C013AB2 ; 8005B0A4
dw 0xA450546A ; 8005B0A8
dw 0x08016C4A ; 8005B0AC
dw 0x2650009C ; 8005B0B0
dw 0x0C013AB2 ; 8005B0B4
dw 0x02402021 ; 8005B0B8
dw 0x8E4309A8 ; 8005B0BC
dw 0x00000000 ; 8005B0C0
dw 0x30630001 ; 8005B0C4
dw 0x14600006 ; 8005B0C8
dw 0x00408021 ; 8005B0CC
dw 0x8E42091C ; 8005B0D0
dw 0x00000000 ; 8005B0D4
dw 0x30420020 ; 8005B0D8
dw 0x10400009 ; 8005B0DC
dw 0x3C03800A ; 8005B0E0
dw 0x8E4209A4 ; 8005B0E4
dw 0x00000000 ; 8005B0E8
dw 0x2442FFFE ; 8005B0EC
dw 0x2C420003 ; 8005B0F0
dw 0x1040000B ; 8005B0F4
dw 0x02001021 ; 8005B0F8
dw 0x08016C48 ; 8005B0FC
dw 0x24100004 ; 8005B100
dw 0x86420A22 ; 8005B104
dw 0x2463CBDC ; 8005B108
dw 0x00021080 ; 8005B10C
dw 0x00431021 ; 8005B110
dw 0x8C450000 ; 8005B114
dw 0x0C01389B ; 8005B118
dw 0x02402021 ; 8005B11C
dw 0x02001021 ; 8005B120
dw 0x2650009C ; 8005B124
dw 0x02002021 ; 8005B128
dw 0x00402821 ; 8005B12C
dw 0x00003021 ; 8005B130
dw 0x0C00D374 ; 8005B134
dw 0x00C03821 ; 8005B138
dw 0x0C00D2DE ; 8005B13C
dw 0x02002021 ; 8005B140
dw 0x3C02800B ; 8005B144
dw 0x2442E220 ; 8005B148
dw 0x864300B4 ; 8005B14C
dw 0x27B00028 ; 8005B150
dw 0xAE4209AC ; 8005B154
dw 0x2402028A ; 8005B158
dw 0xAE430798 ; 8005B15C
dw 0xA6430052 ; 8005B160
dw 0x2403012C ; 8005B164
dw 0xA7A30028 ; 8005B168
dw 0xA6020002 ; 8005B16C
dw 0x0C00B547 ; 8005B170
dw 0xA6030004 ; 8005B174
dw 0x00408821 ; 8005B178
dw 0x02202021 ; 8005B17C
dw 0x2405009F ; 8005B180
dw 0x24060001 ; 8005B184
dw 0x02003821 ; 8005B188
dw 0x0C00B764 ; 8005B18C
dw 0xAE510898 ; 8005B190
dw 0x02202021 ; 8005B194
dw 0x24050001 ; 8005B198
dw 0x2406FFFF ; 8005B19C
dw 0x3C10800B ; 8005B1A0
dw 0x261029F8 ; 8005B1A4
dw 0xAFA00010 ; 8005B1A8
dw 0x86070016 ; 8005B1AC
dw 0x3C02800B ; 8005B1B0
dw 0x24428FF0 ; 8005B1B4
dw 0x0C00B77A ; 8005B1B8
dw 0xAFA20014 ; 8005B1BC
dw 0x02202021 ; 8005B1C0
dw 0x00002821 ; 8005B1C4
dw 0x00A03021 ; 8005B1C8
dw 0x264708F0 ; 8005B1CC
dw 0x264208F8 ; 8005B1D0
dw 0x0C00B774 ; 8005B1D4
dw 0xAFA20010 ; 8005B1D8
dw 0x02202021 ; 8005B1DC
dw 0x0C00B587 ; 8005B1E0
dw 0x26450020 ; 8005B1E4
dw 0x96020016 ; 8005B1E8
dw 0x3404B05C ; 8005B1EC
dw 0x0C00765B ; 8005B1F0
dw 0xA6420A1E ; 8005B1F4
dw 0x00004021 ; 8005B1F8
dw 0x24100009 ; 8005B1FC
dw 0x240F002E ; 8005B200
dw 0x240A0080 ; 8005B204
dw 0x240E00FF ; 8005B208
dw 0x240D00A4 ; 8005B20C
dw 0x240C012F ; 8005B210
dw 0x240B00B0 ; 8005B214
dw 0x2643095A ; 8005B218
dw 0x00402021 ; 8005B21C
dw 0x90860008 ; 8005B220
dw 0x90850009 ; 8005B224
dw 0x24C90030 ; 8005B228
dw 0x24A7000C ; 8005B22C
dw 0xA070FFF5 ; 8005B230
dw 0xA06FFFF9 ; 8005B234
dw 0xA06AFFF6 ; 8005B238
dw 0xA06AFFF7 ; 8005B23C
dw 0xA06AFFF8 ; 8005B240
dw 0xA46EFFFA ; 8005B244
dw 0xA46DFFFC ; 8005B248
dw 0xA46C0002 ; 8005B24C
dw 0xA46D0004 ; 8005B250
dw 0xA46E000A ; 8005B254
dw 0xA46B000C ; 8005B258
dw 0xA46C0012 ; 8005B25C
dw 0xA46B0014 ; 8005B260
dw 0xA066FFFE ; 8005B264
dw 0xA065FFFF ; 8005B268
dw 0xA0690006 ; 8005B26C
dw 0xA0650007 ; 8005B270
dw 0xA066000E ; 8005B274
dw 0xA067000F ; 8005B278
dw 0xA0690016 ; 8005B27C
dw 0xA0670017 ; 8005B280
dw 0x94820004 ; 8005B284
dw 0x00000000 ; 8005B288
dw 0xA4620008 ; 8005B28C
dw 0x94820006 ; 8005B290
dw 0x25080001 ; 8005B294
dw 0xA4620000 ; 8005B298
dw 0x29020002 ; 8005B29C
dw 0x1440FFE3 ; 8005B2A0
dw 0x24630028 ; 8005B2A4
dw 0x02602021 ; 8005B2A8
dw 0x02802821 ; 8005B2AC
dw 0x24020006 ; 8005B2B0
dw 0xA7A20022 ; 8005B2B4
dw 0x2402000C ; 8005B2B8
dw 0xA7A20024 ; 8005B2BC
dw 0x2402000F ; 8005B2C0
dw 0xA7A20026 ; 8005B2C4
dw 0x2642088C ; 8005B2C8
dw 0xA7A00020 ; 8005B2CC
dw 0xAFA20010 ; 8005B2D0
dw 0x97A60022 ; 8005B2D4
dw 0x97A20020 ; 8005B2D8
dw 0x97A70026 ; 8005B2DC
dw 0x00063400 ; 8005B2E0
dw 0x00463025 ; 8005B2E4
dw 0x97A20024 ; 8005B2E8
dw 0x00073C00 ; 8005B2EC
dw 0x0C017E0A ; 8005B2F0
dw 0x00473825 ; 8005B2F4
dw 0x2404000F ; 8005B2F8
dw 0x3C03800C ; 8005B2FC
dw 0x2463BCC0 ; 8005B300
dw 0x2463003C ; 8005B304
dw 0xAE420888 ; 8005B308
dw 0x3C01800B ; 8005B30C
dw 0xAC20967C ; 8005B310
dw 0xAF800900 ; 8005B314
dw 0xAC600000 ; 8005B318
dw 0x2484FFFF ; 8005B31C
dw 0x0481FFFD ; 8005B320
dw 0x2463FFFC ; 8005B324
dw 0x3C02800C ; 8005B328
dw 0x2443BD08 ; 8005B32C
dw 0x00002021 ; 8005B330
dw 0x24050006 ; 8005B334
dw 0x3C01800C ; 8005B338
dw 0xAC20BCB8 ; 8005B33C
dw 0x3C01800C ; 8005B340
dw 0xAC20BD00 ; 8005B344
dw 0x24840001 ; 8005B348
dw 0xAC650000 ; 8005B34C
dw 0xAC600004 ; 8005B350
dw 0x28820010 ; 8005B354
dw 0x1440FFFB ; 8005B358
dw 0x24630010 ; 8005B35C
dw 0x3C02800C ; 8005B360
dw 0x2443BE08 ; 8005B364
dw 0x00002021 ; 8005B368
dw 0x24050005 ; 8005B36C
dw 0x3C01800A ; 8005B370
dw 0xAC20D088 ; 8005B374
dw 0x3C01800A ; 8005B378
dw 0xAC20D080 ; 8005B37C
dw 0x24840001 ; 8005B380
dw 0xAC650000 ; 8005B384
dw 0xAC600004 ; 8005B388
dw 0x28820008 ; 8005B38C
dw 0x1440FFFB ; 8005B390
dw 0x24630010 ; 8005B394
dw 0x2404003F ; 8005B398
dw 0x3C02800C ; 8005B39C
dw 0x2442BC58 ; 8005B3A0
dw 0x00441821 ; 8005B3A4
dw 0x3C02800A ; 8005B3A8
dw 0x3C01800A ; 8005B3AC
dw 0xAC20D094 ; 8005B3B0
dw 0x3C01800A ; 8005B3B4
dw 0xAC20D098 ; 8005B3B8
dw 0x3C01800A ; 8005B3BC
dw 0xAC20D09C ; 8005B3C0
dw 0xAC40D0C0 ; 8005B3C4
dw 0x3C01800A ; 8005B3C8
dw 0xAC20D0C4 ; 8005B3CC
dw 0x3C01800A ; 8005B3D0
dw 0xAC20D0C8 ; 8005B3D4
dw 0x3C01800C ; 8005B3D8
dw 0xAC20BE90 ; 8005B3DC
dw 0xA0600000 ; 8005B3E0
dw 0x2484FFFF ; 8005B3E4
dw 0x0481FFFD ; 8005B3E8
dw 0x2463FFFF ; 8005B3EC
dw 0x24027693 ; 8005B3F0
dw 0x3C01800A ; 8005B3F4
dw 0xAC20CFF8 ; 8005B3F8
dw 0xAF8008F4 ; 8005B3FC
dw 0x16A20005 ; 8005B400
dw 0x00001021 ; 8005B404
dw 0x02402021 ; 8005B408
dw 0x0C0138DB ; 8005B40C
dw 0x3C051000 ; 8005B410
dw 0x00001021 ; 8005B414
dw 0x04400004 ; 8005B418
dw 0x02401021 ; 8005B41C
dw 0xAF9204EC ; 8005B420
dw 0x08016D0E ; 8005B424
dw 0x00000000 ; 8005B428
dw 0x0C005433 ; 8005B42C
dw 0x02402021 ; 8005B430
dw 0x00001021 ; 8005B434
dw 0x8FBF0050 ; 8005B438
dw 0x8FB7004C ; 8005B43C
dw 0x8FB60048 ; 8005B440
dw 0x8FB50044 ; 8005B444
dw 0x8FB40040 ; 8005B448
dw 0x8FB3003C ; 8005B44C
dw 0x8FB20038 ; 8005B450
dw 0x8FB10034 ; 8005B454
dw 0x8FB00030 ; 8005B458
dw 0x03E00008 ; 8005B45C
dw 0x27BD0058 ; 8005B460

View File

@ -1,8 +1,8 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_8005A3D0
snake_vr_sna_init_8005A3D0:
xdef sna_act_8005AD10
sna_act_8005AD10:
dw 0x27BDFFC0 ; 8005A3D0
dw 0xAFB1002C ; 8005A3D4
dw 0x00808821 ; 8005A3D8

View File

@ -1,8 +1,8 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_80053330
snake_vr_sna_init_80053330:
xdef sna_anim_duct_move_80054424
sna_anim_duct_move_80054424:
dw 0x27BDFFE8 ; 80053330
dw 0xAFB00010 ; 80053334
dw 0x00808021 ; 80053338

View File

@ -1,8 +1,8 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_8005AA24
snake_vr_sna_init_8005AA24:
xdef sna_kill_8005B52C
sna_kill_8005B52C:
dw 0x27BDFFD8 ; 8005AA24
dw 0xAFB10014 ; 8005AA28
dw 0x00808821 ; 8005AA2C

View File

@ -1,8 +1,8 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_800510C4
snake_vr_sna_init_800510C4:
xdef sna_weapon_switching_800511BC
sna_weapon_switching_800511BC:
dw 0x3C02800B ; 800510C4
dw 0x84432A14 ; 800510C8
dw 0x27BDFFD0 ; 800510CC

View File

@ -1,31 +0,0 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_8004EC8C
snake_vr_sna_init_8004EC8C:
dw 0x27BDFFE8 ; 8004EC8C
dw 0xAFB00010 ; 8004EC90
dw 0x00808021 ; 8004EC94
dw 0xAFBF0014 ; 8004EC98
dw 0x0C0138DB ; 8004EC9C
dw 0x24050800 ; 8004ECA0
dw 0x3C0401FF ; 8004ECA4
dw 0x3484FF20 ; 8004ECA8
dw 0x00002821 ; 8004ECAC
dw 0x240201CC ; 8004ECB0
dw 0x3C03800B ; 8004ECB4
dw 0xA6020A24 ; 8004ECB8
dw 0x24020001 ; 8004ECBC
dw 0xA462546A ; 8004ECC0
dw 0x978304E4 ; 8004ECC4
dw 0x2402FFFA ; 8004ECC8
dw 0xA6020A1C ; 8004ECCC
dw 0x24020140 ; 8004ECD0
dw 0xA60209D0 ; 8004ECD4
dw 0xA60309D4 ; 8004ECD8
dw 0x0C021973 ; 8004ECDC
dw 0xA60309D8 ; 8004ECE0
dw 0x8FBF0014 ; 8004ECE4
dw 0x8FB00010 ; 8004ECE8
dw 0x03E00008 ; 8004ECEC
dw 0x27BD0018 ; 8004ECF0

View File

@ -1,7 +0,0 @@
opt c+, at+, e+, n-
section .text
xdef snake_vr_sna_init_80052AC0
snake_vr_sna_init_80052AC0:
dw 0x03E00008 ; 80052AC0
dw 0x00000000 ; 80052AC4

View File

@ -175,131 +175,10 @@
; just a guess
include "{{OBJ_DIR}}\chara\snake\snake.obj"
{% if not VR_EXE %}
include "{{OBJ_DIR}}\chara\snake\sna_init.obj"
{% if VR_EXE %}
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EB94.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EC18.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EC8C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004ECF4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004ED4C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_8004EE28.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EE90.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EEF4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004EFC4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F014.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F070.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F124.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F1D0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F260.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F2AC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F2F8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F400.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F4E4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F5C8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F688.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004F8D8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FA30.obj"
include "{{OBJ_DIR}}\chara\snake_vr\GM_Next_BulName_8004FBA0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\GM_ClearBulName_8004FBE4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\GM_CheckShukanReverse_8004FBF8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FB98.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FBC8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FCF8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FE98.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8004FFAC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80050108.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005018C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800502A8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80050350.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005046C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005056C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800506DC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80050954.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80050968.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80051078.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800510C4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005145C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_idle_8005275C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_crouch_800527DC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_prone_idle_800528BC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_run_8005292C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_prone_move_800529C0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_wall_idle_and_c4_80052A5C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_wall_crouch_80052CCC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80051F60.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800520D4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052240.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052350.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052560.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052714.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005280C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052994.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052AC0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052AC8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052B28.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052CB4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052DDC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80052EE8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_gun_800540D0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_bomb_800541A8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_chokethrow_begin1_80054210.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053198.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053254.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800532C0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053330.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053394.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800533EC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053554.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005361C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053800.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800538E0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053A20.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053AD8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053C38.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80053E44.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800541E4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005427C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005429C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800542FC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80054364.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800543D4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80054888.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80054C88.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80055500.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800556FC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005573C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800557D8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_psg1_80056DDC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_stinger_800570C0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_claymore_80057474.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80056FE8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057198.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057204.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057318.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800573E8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057548.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005792C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057CD0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_anim_grenade_80058470.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80057F9C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800580D8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058320.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058538.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800585A8.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800587AC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058818.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_800588AC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005895C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058A5C.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058AC4.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058AFC.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058E24.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80058F24.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_80059004.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005A3D0.obj"
include "{{OBJ_DIR}}\chara\snake_vr\snake_vr_sna_init_8005AA24.obj"
include "{{OBJ_DIR}}\chara\snake_vr\sna_NewSnake_8005B650.obj"
{% else %}
include "{{OBJ_DIR}}\chara\snake_vr\sna_init.obj"
{% endif %}
include "{{OBJ_DIR}}\data\sdata\sdata6.obj"

View File

@ -124,6 +124,8 @@ def get_obj_funcs(path):
pos += 2
elif cmd == 52:
pos += 2 + 1
elif cmd == 54: # "54 : Inc SLD linenum by word X at offset Y"
pos += 2 + 2
elif cmd == 56:
pos += 2 + 4
elif cmd == 58:

View File

@ -321,8 +321,6 @@ GV_PAD GV_PadData_8009F0C4 = {0, 0, 0, 0, -1, 0, 0, 0, 0, 0};
#define DispEmpty( pActor ) (pActor->field_9A0 = 4)
#define SE_KARASHT 4
#ifndef VR_EXE
void sub_8004EB74(Actor_SnaInit *pActor) // different in VR
{
if (GM_Camera_800B77E8.field_22 == 0)
@ -8655,16 +8653,3 @@ GV_ACT *sna_NewSnake_8005B650(int name, int where, int argc, char **argv)
sna_800ABBA0 = pActor;
return &pActor->field_0_actor;
}
#else
// some jump table probably
const char missing_rdata[] = {0xe4, 0x4f, 0x05, 0x80, 0xd4, 0x4f, 0x05, 0x80, 0x0c, 0x50, 0x05, 0x80, 0x48, 0x50, 0x05, 0x80, 0x94, 0x50, 0x05, 0x80, 0xfc, 0x50, 0x05, 0x80, 0xb4, 0x53, 0x05, 0x80};
// Add INCLUDE_ASM from asm/chara/snake_vr here?
// or start a separate src/chara/snake_vr/sna_init.c?
// Try to have a single sna_init.c file (with ifdefs) or two separate files?
// src/chara/snake_vr/sna_init.c is similar to snake/sna_init.c, but there are a lot
// of differences. Not sure which approach makes more sense.
#endif

View File

@ -0,0 +1,879 @@
// FIXME: copy-pasta of snake/sna_init.c
#include "sna_init.h"
#include "chara/snake/afterse.h"
#include "libdg/libdg.h"
#include "linker.h"
#include "Game/map.h"
#include "Game/object.h"
#include "Kojo/demothrd.h"
#include "Game/game.h"
#include "Game/linkvarbuf.h"
#include "unknown.h"
#include "Okajima/blood.h"
#include "Bullet/bakudan.h"
#include "Bullet/jirai.h"
#include "Game/homing_target.h"
#include "Game/vibrate.h"
#include "psyq.h"
#include "Game/camera.h"
#include "Weapon/grenade.h"
#include "Anime/animeconv/anime.h"
#include "libgcl/hash.h"
#include "Equip/bodyarm.h"
#include "Equip/box.h"
#include "Equip/bandana.h"
#include "Equip/gasmask.h"
#include "Equip/jpegcam.h"
#include "Equip/kogaku2.h"
#include "Equip/scope.h"
#include "Equip/tabako.h"
#include "Okajima/d_blood.h"
#include "Takabe/goggle.h"
#include "Takabe/goggleir.h"
#include "Weapon/aam.h"
extern Sna_E1 e1_800AB7C4;
Sna_E1 SECTION(".sdata") e1_800AB7C4;
extern int dword_800ABBA8;
int SECTION(".sbss") dword_800ABBA8;
extern int gSnaMoveDir_800ABBA4;
int SECTION(".sbss") gSnaMoveDir_800ABBA4;
extern char *dword_800ABBB4;
char * SECTION(".sbss") dword_800ABBB4;
extern CONTROL *GM_PlayerControl_800AB9F4;
extern OBJECT *GM_PlayerBody_800ABA20;
extern SVECTOR *svector_800ABBB8;
SVECTOR *SECTION(".sbss") svector_800ABBB8;
extern int dword_800ABBBC;
int SECTION(".sbss") dword_800ABBBC;
extern int dword_800ABBC0;
int SECTION(".sbss") dword_800ABBC0;
extern Actor_SnaInit *sna_800ABBA0;
Actor_SnaInit *SECTION(".sbss") sna_800ABBA0;
extern int dword_800ABBC4;
int SECTION(".sbss") dword_800ABBC4;
extern SVECTOR *pVec_800ABBC8;
SVECTOR *SECTION(".sbss") pVec_800ABBC8;
extern SVECTOR *pVec_800ABBCC;
SVECTOR *SECTION(".sbss") pVec_800ABBCC;
extern int dword_800ABBD0;
int SECTION(".sbss") dword_800ABBD0;
extern short dword_800ABBDC;
short SECTION(".sbss") dword_800ABBDC;
extern short dword_800ABBD4;
short SECTION(".sbss") dword_800ABBD4;
extern SVECTOR *dword_800ABBB0;
SVECTOR * SECTION(".sbss") dword_800ABBB0;
extern TARGET *GM_BombSeg_800ABBD8; // probably wrong type?
TARGET *SECTION(".sbss") GM_BombSeg_800ABBD8;
extern Actor_SnaInit *sna_800ABBA0;
Actor_SnaInit *SECTION(".sbss") sna_800ABBA0;
extern SVECTOR *dword_800ABBAC;
SVECTOR *SECTION(".sbss") dword_800ABBAC;
extern short GM_WeaponChanged_800AB9D8;
extern int GM_AlertMode_800ABA00;
extern int GM_GameOverTimer_800AB3D4;
extern int GM_GameStatus_800AB3CC;
extern SVECTOR DG_ZeroVector_800AB39C;
extern PlayerStatusFlag GM_PlayerStatus_800ABA50;
extern SVECTOR svector_800AB7FC;
extern GM_Camera GM_Camera_800B77E8;
extern SVECTOR svector_800AB7D4;
extern SVECTOR svector_800AB7DC;
extern unsigned short GM_WeaponTypes_8009D580[];
extern unsigned short GM_ItemTypes_8009D598[];
extern void *dword_8009EEA4[];
extern int GV_Time_800AB330;
extern int bakudan_count_8009F42C;
extern SVECTOR svector_800AB7EC;
extern SVECTOR svector_800AB7F4;
extern int gSnaMoveDir_800ABBA4;
extern int DG_UnDrawFrameCount_800AB380;
extern SVECTOR svector_800AB7CC;
extern int counter_8009F448;
extern const char aSnakeEUC[];
extern int dword_800ABA1C;
extern int tabako_dword_8009F2C0;
extern int dword_800AB9F0;
extern SVECTOR GM_PlayerPosition_800ABA10;
extern UnkCameraStruct gUnkCameraStruct_800B77B8;
extern GV_PAD GV_PadData_800B05C0[4];
extern CONTROL *tenage_ctrls_800BDD30[16];
extern Jirai_unknown stru_800BDD78[16];
extern Jirai_unknown stru_800BDE78[8];
extern unsigned char gBulNames_800BDC78[64];
extern int dword_8009F440;
extern int dword_8009F444;
extern int dword_8009F46C[];
extern int dword_8009F470;
extern int dword_8009F474;
extern TARGET *target_800BDF00;
extern int dword_800BDD28;
extern int tenage_ctrls_count_800BDD70;
extern int dword_8009F434;
extern short d_800AB9EC_mag_size;
extern short d_800ABA2C_ammo;
extern SVECTOR svector_800AB7E4;
extern void *dword_8009EEB0[];
extern void *dword_8009EEB8[];
extern int dword_800AB9D4;
extern short HzdHeights_8009EEC4[];
extern int DG_CurrentGroupID_800AB968;
extern int GV_Clock_800AB920;
extern char dword_8009EF1C[];
extern char dword_8009EF20[];
extern TSnakeEquipFuncion gSnakeEquips_8009EF8C[];
extern TSnakeActFunction GM_lpfnPlayerActControl_800AB3DC;
extern TSnakeActFunction GM_lpfnPlayerActObject2_800AB3E0;
extern char dword_8009EEE0[];
extern char dword_8009EEE4[];
extern char dword_8009EEF0[];
extern char dword_8009EEF4[];
extern char dword_8009EED4[];
extern char dword_8009EED8[];
extern short snake_weapon_idx_800BDCBA;
extern short snake_mag_size_800BDCB8;
extern short snake_weapon_max_ammo_800BDCBC;
extern int GM_PlayerAction_800ABA40;
extern Actor_SnaInit *snainit_actor_800A9424;
Actor_SnaInit *snainit_actor_800A9424;
extern const char aRunMoveCancel[]; // = "run move cancel\n"
extern const char aForceStanceCan[]; // = "force stance cancel\n"
extern const char aForceActCancel[]; // = "force act cancel\n"
extern const char aSnaInitC[]; // = "sna_init.c"
Sna_E2 e2_8009EC64 = {12u, 82u, 19u, 23u, 24u, 29u, 30u, 12u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009EC70 = {10u, 8u, 17u, 23u, 24u, 27u, 28u, 80u, 106u, 107u, 0u, 0u};
Sna_E2 e2_8009EC7C = {11u, 9u, 18u, 23u, 24u, 27u, 28u, 73u, 110u, 111u, 0u, 0u};
Sna_E2 e2_8009EC88 = {75u, 77u, 79u, 23u, 24u, 27u, 28u, 75u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009EC94 = {92u, 91u, 93u, 23u, 24u, 29u, 30u, 92u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ECA0 = {97u, 96u, 98u, 101u, 24u, 29u, 30u, 97u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ECAC = {104u, 103u, 19u, 23u, 24u, 29u, 30u, 104u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ECB8 = {63u, 65u, 67u, 68u, 69u, 70u, 71u, 72u, 66u, 123u, 130u, 131u};
Sna_E2 e2_8009ECC4 = {61u, 64u, 67u, 68u, 69u, 70u, 71u, 72u, 66u, 123u, 130u, 131u};
Sna_E2 e2_8009ECD0 = {62u, 83u, 67u, 68u, 69u, 70u, 71u, 72u, 66u, 123u, 130u, 131u};
Sna_E2 e2_8009ECDC = {136u, 136u, 35u, 136u, 36u, 37u, 38u, 39u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ECE8 = {42u, 51u, 35u, 45u, 47u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ECF4 = {5u, 52u, 34u, 46u, 48u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ED00 = {74u, 136u, 136u, 136u, 105u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ED0C = {74u, 136u, 34u, 46u, 81u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ED18 = {43u, 136u, 35u, 136u, 53u, 55u, 49u, 54u, 56u, 0u, 0u, 0u};
Sna_E2 e2_8009ED24 = {57u, 136u, 35u, 136u, 58u, 59u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ED30 = {60u, 136u, 35u, 136u, 50u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E2 e2_8009ED3C = {44u, 136u, 136u, 136u, 136u, 0u, 0u, 0u, 0u, 0u, 0u, 0u};
Sna_E6 e6_8009ED48[] = {
{115u, 133u, 0u, 0u},
{112u, 133u, 0u, 0u},
{113u, 133u, 0u, 0u},
{136u, 136u, 0u, 0u},
{114u, 132u, 0u, 0u},
{116u, 133u, 0u, 0u},
{117u, 133u, 0u, 0u},
{118u, 133u, 0u, 0u}
};
// TODO: Why is this in .data despite fitting into .sdata?
Sna_E1 SECTION(".data") e7_8009ED68 = {7u, 13u, 4u, 14u, 32u, 119u, 124u, 0u};
extern Sna_E1 e1_800AB78C;
extern Sna_E1 e1_800AB7C4;
extern Sna_E1 e1_800AB794;
extern Sna_E1 e1_800AB79C;
extern Sna_E1 e1_800AB7BC;
extern Sna_E1 e1_800AB7AC;
extern Sna_E1 e1_800AB7A4;
extern Sna_E1 e1_800AB7B4;
Sna_ActionTable actions_no_weapon_8009ED70 = {
&e1_800AB78C, &e2_8009EC64, &e1_800AB7C4, &e2_8009ECB8,
&e2_8009ECDC, &e6_8009ED48[0], &e7_8009ED68
};
Sna_ActionTable weapon_actions_8009ED8C[10] = {
{&e1_800AB794, &e2_8009EC70, &e1_800AB7C4, &e2_8009ECC4, &e2_8009ECE8, &e6_8009ED48[1], &e7_8009ED68},
{&e1_800AB79C, &e2_8009EC7C, &e1_800AB7C4, &e2_8009ECD0, &e2_8009ECF4, &e6_8009ED48[2], &e7_8009ED68},
{&e1_800AB7A4, &e2_8009ECAC, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED30, &e6_8009ED48[7], &e7_8009ED68},
{&e1_800AB7B4, &e2_8009EC88, &e1_800AB7C4, &e2_8009ECD0, &e2_8009ED0C, &e6_8009ED48[4], &e7_8009ED68},
{&e1_800AB79C, &e2_8009EC7C, &e1_800AB7C4, &e2_8009ECD0, &e2_8009ED00, &e6_8009ED48[3], &e7_8009ED68},
{&e1_800AB7BC, &e2_8009ECA0, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED24, &e6_8009ED48[6], &e7_8009ED68},
{&e1_800AB7AC, &e2_8009EC94, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED18, &e6_8009ED48[5], &e7_8009ED68},
{&e1_800AB7A4, &e2_8009ECAC, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED30, &e6_8009ED48[7], &e7_8009ED68},
{&e1_800AB7A4, &e2_8009ECAC, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED30, &e6_8009ED48[7], &e7_8009ED68},
{&e1_800AB78C, NULL, &e1_800AB7C4, &e2_8009ECB8, &e2_8009ED3C, &e6_8009ED48[3], &e7_8009ED68}};
void *dword_8009EEA4[] = {
sna_anim_idle_8005275C,
sna_anim_crouch_800527DC,
sna_anim_prone_idle_800528BC
};
void *SECTION(".data") dword_8009EEB0[] = {
sna_anim_wall_idle_and_c4_80052A5C,
sna_anim_wall_crouch_80052CCC
};
void *dword_8009EEB8[] = {
sna_anim_run_8005292C,
sna_anim_run_8005292C,
sna_anim_prone_move_800529C0
};
short SECTION(".data") HzdHeights_8009EEC4[] = {750, 250, 250, 0};
short SECTION(".data") dword_8009EECC[] = {1100, 496, 136, 0};
char SECTION(".data") dword_8009EED4[] = {127, 4, 0, 0};
char SECTION(".data") dword_8009EED8[] = {225, 1, 255, 2, 0, 0, 0, 0};
char SECTION(".data") dword_8009EEE0[] = {127, 6, 0, 0};
char SECTION(".data") dword_8009EEE4[] = {225, 1, 255, 4, 225, 2, 75, 8, 0, 0, 0, 0};
char SECTION(".data") dword_8009EEF0[] = {127, 1, 0, 0};
char SECTION(".data") dword_8009EEF4[] = {155, 3, 0, 0};
char SECTION(".data") dword_8009EEF8[] = {0, 2, 127, 2, 0, 0, 0, 0};
char SECTION(".data") dword_8009EF00[] = {140, 4, 80, 6, 0, 0, 0, 0};
char SECTION(".data") dword_8009EF08[] = {0, 10, 127, 2, 0, 0, 0, 0};
char SECTION(".data") dword_8009EF10[] = {80, 2, 50, 8, 140, 4, 80, 6, 0, 0, 0, 0};
char SECTION(".data") dword_8009EF1C[] = {196, 4, 0, 0};
char SECTION(".data") dword_8009EF20[] = {148, 4, 0, 0};
char SECTION(".data") dword_8009EF24[] = {0, 2, 127, 2, 0, 0, 0, 0};
char SECTION(".data") dword_8009EF2C[] = {60, 2, 200, 4, 40, 2, 0, 0};
typedef struct WeaponCreateEntry
{
void *mCreateActorFn;
void *mStateFn;
} WeaponCreateEntry;
WeaponCreateEntry gSnakeWeapons_8009EF3C[] = {
{NULL, sna_anim_chokethrow_begin1_80054210},
{NewSOCOM_80065D74, sna_gun_800540D0},
{famas_create_80066374, sna_gun_800540D0},
{grenade_create_80066A4C, sna_anim_grenade_80058470},
{NewRCM_80066FF0, sna_gun_800540D0},
{NewAAM_80067480, sna_anim_stinger_800570C0},
{mine_init_800677BC, sna_anim_claymore_80057474},
{NewBomb_80067B20, sna_bomb_800541A8},
{NewStanGrenade_80066A74, sna_anim_grenade_80058470},
{NewChaffGrenade_80066AA0, sna_anim_grenade_80058470},
{NewRifle_80068214, sna_anim_psg1_80056DDC}};
TSnakeEquipFuncion gSnakeEquips_8009EF8C[] = {
NewTabako_80062274,
NewScope_80063508,
NewBox_80061C7C,
NewBox_80061C7C,
NewBox_80061C7C,
NewGoggle_8007781C,
NewGoggleIr_80078E6C,
NewGasmask_80060C14,
NewBodyarm_80060940,
NewKetchap_80072B60,
NewKogaku2_800615FC,
NewBandana_80061E40
#ifndef VR_EXE
, NewJpegcam_80065118
#else
, NULL
#endif
};
short word_8009EFC0[] = {0, 500, 0, 320, 400, 320, 400, 32, 32, 0};
SVECTOR stru_8009EFD4[2] = {{-100, 200, 200, 0}, {-150, 18, 200, 0}};
Target_Data stru_8009EFE4[4] =
{
{{0, 0, 300, 0}, {400, 600, 400, 0}, 0, 0, 64, 0}, // TODO: Might not be part of this array, might be its own element
{{-400, 0, 600, 0}, {400, 600, 400, 0}, 0, 0, 36, 5},
{{400, 0, 600, 0}, {400, 600, 400, 0}, 0, 0, 36, 5},
{{0, 0, 0, 0}, {501, 600, 501, 0}, 0, 0, 7, 0}
};
MATRIX stru_8009F064 = {{{-200, 200, 600}, {0, 400, 200}, {400, 0, 5}}, {50, 0, 1}};
MATRIX stru_8009F084 = {{{200, 200, 600}, {0, 400, 200}, {400, 0, -5}}, {50, 0, 1}};
MATRIX stru_8009F0A4 = {{{0, 200, 600}, {0, 500, 250}, {500, 0, 0}}, {100, 0, 3}};
GV_PAD GV_PadData_8009F0C4 = {0, 0, 0, 0, -1, 0, 0, 0, 0, 0};
#define RIFLE_TEBURE_TIME 90 // delay before camera shake
#define TEBURE 122
#define GetAction( pActor ) (pActor->field_9C_obj.action_flag)
#define EndMotion( pActor ) (pActor->field_9C_obj.is_end != 0)
#define SET pActor->field_9B4_action_table->field_10->field_0
#define DispEmpty( pActor ) (pActor->field_9A0 = 4)
#define SE_KARASHT 4
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004EB94.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004EC18.s")
void sna_8004EC8C(Actor_SnaInit *pActor) // different in VR
{
ushort v2; // $v1
sna_set_flags1_8004E2F4(pActor, SNA_FLAG1_UNK12);
pActor->field_A28 = 460;
GM_Camera_800B77E8.field_22 = 1;
v2 = *(ushort *)&e1_800AB7C4.field_4;
pActor->field_A20 = -6;
pActor->field_9D0[2] = 320;
pActor->field_9D0[4] = v2;
pActor->field_9D0[6] = v2;
sd_set_cli_800887EC(0x1FFFF20, 0);
// sna_set_flags2_8004E330(pActor, SNA_FLAG2_UNK5);
// GM_ClearPlayerStatusFlag_8004E2D4(PLAYER_FIRST_PERSON);
}
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004ECF4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004ED4C.s")
void sna_8004EE28(Actor_SnaInit *snake)
{
MATRIX mat1;
MATRIX mat2;
SVECTOR vec;
int vx;
MATRIX *world = &snake->field_9C_obj.objs->objs[6].world;
ReadRotMatrix(&mat1);
DG_TransposeMatrix_8001EAD8(&mat1, &mat2);
MulMatrix0(&mat2, world, &mat2);
DG_MatrixRotZYX_8001E92C(&mat2, &vec);
SetRotMatrix(&mat1);
vx = vec.vx;
if (vx < 0)
{
vx += 0xf;
}
vx &= 0xfff0;
gUnkCameraStruct_800B77B8.field_28.vx = vx;
}
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004EE90.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004EEF4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004EFC4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F014.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F070.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F124.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F1D0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F260.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F2AC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F2F8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F400.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F4E4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F5C8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F688.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004F8D8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FA30.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/GM_Next_BulName_8004FBA0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/GM_ClearBulName_8004FBE4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/GM_CheckShukanReverse_8004FBF8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FB98.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FBC8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FCF8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FE98.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8004FFAC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80050108.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005018C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800502A8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80050350.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005046C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005056C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800506DC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80050954.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80050968.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80051078.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_weapon_switching_800511BC.s")
void sna_weapon_switching_800511BC(Actor_SnaInit *pActor, int callback);
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_800515BC.s")
void sna_800515BC(Actor_SnaInit *pActor, int a2);
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_idle_8005275C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_crouch_800527DC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_prone_idle_800528BC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_run_8005292C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_prone_move_800529C0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_wall_idle_and_c4_80052A5C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_wall_crouch_80052CCC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80051F60.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800520D4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052240.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052350.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052560.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052714.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005280C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052994.s")
void snake_vr_sna_init_80052AC0()
{
}
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052AC8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052B28.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052CB4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052DDC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80052EE8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_gun_800540D0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_bomb_800541A8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_chokethrow_begin1_80054210.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053198.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053254.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800532C0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_duct_move_80054424.s")
void sna_anim_duct_move_80054424(Actor_SnaInit *pActor, int time);
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053394.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800533EC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053554.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005361C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053800.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800538E0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053A20.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053AD8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053C38.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80053E44.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800541E4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005427C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005429C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800542FC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80054364.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800543D4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80054888.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80054C88.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80055500.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800556FC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005573C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800557D8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_psg1_80056DDC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_stinger_800570C0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_claymore_80057474.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80056FE8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057198.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057204.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057318.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800573E8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057548.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005792C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057CD0.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_anim_grenade_80058470.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80057F9C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800580D8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058320.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058538.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800585A8.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800587AC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058818.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_800588AC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_8005895C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058A5C.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058AC4.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058AFC.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058E24.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80058F24.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/snake_vr_sna_init_80059004.s")
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_act_8005AD10.s")
void sna_act_8005AD10(Actor_SnaInit *pActor);
#pragma INCLUDE_ASM("asm/chara/snake_vr/sna_kill_8005B52C.s")
void sna_kill_8005B52C(Actor_SnaInit *pActor);
static inline int sna_LoadSnake2(Actor_SnaInit *pActor)
{
SVECTOR *temp_s1;
SVECTOR *temp_s2;
DG_PRIM *pPrim;
DG_TEX *pTex;
POLY_GT4 *pPoly;
int i, j;
temp_s1 = &pActor->field_930;
pPrim = DG_GetPrim(22, 2, 0, temp_s1, 0);
if (!pPrim)
{
return -1;
}
pTex = DG_GetTexture_8001D830(PCX_LSIGHT);
pActor->field_928 = pTex;
if (!pTex)
{
return -1;
}
pPrim->field_2E_k500 = 500;
for (i = 0; i < 2; i++)
{
pPoly = &pPrim->field_40_pBuffers[i]->poly_gt4;
for (j = 0; j < 2; j++)
{
LSTORE(0, &pPoly->r0);
LSTORE(0x808080, &pPoly->r1);
LSTORE(0, &pPoly->r2);
LSTORE(0x808080, &pPoly->r3);
setPolyGT4(pPoly);
setSemiTrans(pPoly, 1);
pPoly->tpage = pTex->field_4_tPage;
pPoly->clut = pTex->field_6_clut;
pPoly++;
}
}
// ???
temp_s2 = temp_s1 + 2;
temp_s1[2].vx = -100;
temp_s1[0].vx = -100;
temp_s1[3].vy = -300;
temp_s2[0].vy = -300;
temp_s1[1].vy = -300;
temp_s1[0].vy = -300;
temp_s2[0].vz = 300;
temp_s1[0].vz = 300;
temp_s1[1].vx = -800;
temp_s1[1].vz = 2000;
temp_s1[3].vx = 800;
temp_s1[3].vz = 2000;
DG_InvisiblePrim(pPrim);
pActor->field_92C = pPrim;
return 0;
}
static inline void sna_LoadSnake3(Actor_SnaInit *pActor)
{
u_short t1, t2;
short stance;
short temp_a1;
int temp_v1_3;
int var_s0_2;
int var_v_2;
stance = pActor->field_A26_stance = GM_SnakeStance;
if (stance == 3)
{
t1 = GM_ItemTypes_8009D598[GM_CurrentItemId + 1];
t2 = GM_CurrentItemId;
if ((t1 & 2) || ((t2 - 2) < 3u))
{
GM_CurrentItemId = ITEM_NONE;
}
if (GM_WeaponTypes_8009D580[GM_CurrentWeaponId + 1] & 0x200)
{
GM_CurrentWeaponId = WEAPON_NONE;
}
}
pActor->field_844 = -1;
pActor->field_91C_weapon_idx = -2;
sna_weapon_switching_800511BC(pActor, 0);
pActor->field_9A8_current_item = ITEM_NONE;
sna_800515BC(pActor, 0);
pActor->field_9B4_action_table = &weapon_actions_8009ED8C[GM_CurrentWeaponId];
pActor->field_A28 = 450;
pActor->field_A44 = pActor->field_20_ctrl.field_0_mov;
pActor->field_A60 = pActor->field_20_ctrl.field_0_mov;
gUnkCameraStruct_800B77B8.field_0 = pActor->field_A60;
if (GCL_GetOption_80020968('o')) // oar
{
pActor->field_A5A = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
pActor->field_890_autoaim_max_dist = 6000;
if (GCL_GetOption_80020968('l')) // len
{
pActor->field_890_autoaim_max_dist = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
pActor->field_892_autoaim_min_angle = 512;
if (GCL_GetOption_80020968('r')) // rot
{
pActor->field_892_autoaim_min_angle = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
dword_800ABBDC = -1023;
dword_800ABBD4 = 1023;
if (GCL_GetOption_80020968('t')) // turn
{
dword_800ABBDC = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
dword_800ABBD4 = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
pActor->field_A70 = -1;
if (GCL_GetOption_80020968('e')) // exec
{
pActor->field_A70 = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
temp_a1 = pActor->field_A26_stance;
if (temp_a1 == 3)
{
pActor->field_A26_stance = 2;
GM_SetPlayerStatusFlag_8004E2B4(PLAYER_PRONE | PLAYER_FIRST_PERSON_DUCT);
DG_InvisibleObjs(pActor->field_9C_obj.objs);
sna_8004EC8C(pActor);
sna_start_anim_8004E1F4(pActor, &sna_anim_duct_move_80054424);
GM_Camera_800B77E8.field_22 = 2;
var_v_2 = sna_8004EAA8(pActor, 2);
}
else
{
var_s0_2 = sna_8004EAA8(pActor, temp_a1);
if ((pActor->field_9AC & 1) || (pActor->field_920_tbl_8009D580 & 0x20))
{
if ((unsigned int)(pActor->field_9A8_current_item - 2) < 3)
{
var_s0_2 = 4;
}
}
else
{
sna_start_anim_8004E1F4(pActor, dword_8009EEA4[pActor->field_A26_stance]);
}
var_v_2 = var_s0_2;
}
GM_ConfigObjectAction_80034CD4(&pActor->field_9C_obj, var_v_2, 0, 0);
GM_ActMotion_80034A7C(&pActor->field_9C_obj);
temp_v1_3 = (short)pActor->field_9C_obj.field_18;
pActor->field_798_p_height = temp_v1_3;
pActor->field_20_ctrl.field_32_height = temp_v1_3;
pActor->field_9B0_pad_ptr = GV_PadData_800B05C0;
}
static inline void sna_LoadSnake4( POLY_FT4 *packs, int n_packs, DG_TEX *tex )
{
char u, v;
int i;
u = tex->field_8_offx;
v = tex->field_9_offy;
for ( i = 0; i < n_packs; i ++ )
{
setPolyFT4( packs );
setSemiTrans( packs, 1 );
setRGB0( packs, 128, 128, 128 );
setXY4( packs, 255, 164, 303, 164, 255, 176, 303, 176 );
setUV4( packs, u, v, u + 48, v, u, v + 12, u + 48, v + 12 );
packs->tpage = tex->field_4_tPage;
packs->clut = tex->field_6_clut;
packs ++ ;
}
}
static inline int sna_LoadSnake(Actor_SnaInit *pActor, int scriptData, int scriptBinds)
{
CONTROL *pCtrl;
OBJECT *pObject;
TARGET *pTarget;
Jirai_unknown *pJiraiUnk;
Shadow_94 shadow94;
SVECTOR vec;
SVECTOR *pVec;
int tmp, model, i;
char *param_pos, *param_dir;
pCtrl = &pActor->field_20_ctrl;
if (GM_InitLoader_8002599C(pCtrl, scriptData, scriptBinds) < 0)
{
return -1;
}
param_pos = (char*)GCL_GetOption_80020968('p'); // pos
param_dir = (char*)GCL_GetOption_80020968('d'); // dir
GM_ConfigControlString_800261C0(pCtrl, param_pos, param_dir);
GM_ConfigControlHazard_8002622C(pCtrl, 0, 450, 450);
tmp = 1;
pCtrl->field_59 = tmp;
GM_ConfigControlAttribute_8002623C(pCtrl, tmp);
GM_ConfigControlTrapCheck_80026308(pCtrl);
pObject = &pActor->field_9C_obj;
model = KMD_SNAKE;
if (GCL_GetOption_80020968('m')) // model
{
model = GCL_StrToInt_800209E8(GCL_Get_Param_Result_80020AA4());
}
GM_InitObject_80034A18(pObject, model, BODY_FLAG, OAR_SNAKE);
GM_ConfigObjectJoint_80034CB4(pObject);
GM_ConfigMotionControl_80034F08(pObject,
&pActor->field_180,
OAR_SNAKE,
&pActor->field_1D0[0],
&pActor->field_1D0[17],
pCtrl,
(SVECTOR *)&pActor->field_698_joint_rotations);
GM_ConfigObjectLight_80034C44(pObject, &pActor->field_848_lighting_mtx);
GM_PlayerControl_800AB9F4 = pCtrl;
GM_PlayerPosition_800ABA10 = pActor->field_20_ctrl.field_0_mov;
GM_PlayerBody_800ABA20 = pObject;
sna_8004EB14(pActor);
if (sna_LoadSnake2(pActor) < 0)
{
return -1;
}
sna_LoadSnake3(pActor);
pVec = &vec;
setVector(pVec, 300, 650, 300);
pTarget = pActor->field_89C_pTarget = GM_AllocTarget_8002D400();
GM_SetTarget_8002DC74(pTarget, 159, PLAYER_SIDE, pVec);
GM_Target_8002DCCC(pTarget, 1, -1, GM_SnakeCurrentHealth, 0, &DG_ZeroVector_800AB39C);
GM_Target_8002DCB4(pTarget, 0, 0, &pActor->field_8F4, &pActor->field_8FC);
GM_Target_SetVector_8002D500(pTarget, &pActor->field_20_ctrl.field_0_mov);
pActor->field_A22_snake_current_health = GM_SnakeCurrentHealth;
sna_LoadSnake4(pActor->field_950, 2, DG_GetTexture_8001D830(PCX_EMPTY2));
shadow94.objs_offsets[0] = 0;
shadow94.objs_offsets[1] = 6;
shadow94.objs_offsets[2] = 12;
shadow94.objs_offsets[3] = 15;
pActor->field_888_pShadow = shadow_init2_80060384(pCtrl, pObject, shadow94, &pActor->field_88C);
dword_800ABA1C = 0;
GM_BombSeg_800ABBD8 = 0;
for (i = 0; i < 16; i++)
{
tenage_ctrls_800BDD30[i] = NULL;
}
dword_800BDD28 = 0;
tenage_ctrls_count_800BDD70 = 0;
pJiraiUnk = stru_800BDD78;
i = 0;
while (i < 16)
{
i++;
pJiraiUnk->field_0_ypos = 6;
pJiraiUnk->field_4_pActor = NULL;
pJiraiUnk++;
}
dword_8009F434 = 0;
bakudan_count_8009F42C = 0;
pJiraiUnk = stru_800BDE78;
i = 0;
while (i < 8)
{
i++;
pJiraiUnk->field_0_ypos = 5;
pJiraiUnk->field_4_pActor = NULL;
pJiraiUnk++;
}
dword_8009F440 = 0;
dword_8009F444 = 0;
counter_8009F448 = 0;
dword_8009F46C[0] = 0;
dword_8009F470 = 0;
dword_8009F474 = 0;
target_800BDF00 = 0;
for (i = 0; i < 64; i++)
{
gBulNames_800BDC78[i] = 0;
}
tabako_dword_8009F2C0 = 0;
pVec_800ABBCC = NULL;
if (model == KMD_SNE_WET2) // wet suit in the docks
{
sna_set_flags1_8004E2F4(pActor, SNA_FLAG1_UNK29);
}
return 0;
}
GV_ACT *sna_NewSnake_8005B650(int name, int where, int argc, char **argv)
{
Actor_SnaInit *pActor;
pActor = (Actor_SnaInit *)GV_NewActor_800150E4(5, sizeof(Actor_SnaInit));
if (!pActor)
{
return NULL;
}
GV_SetNamedActor_8001514C(&pActor->field_0_actor,
(TActorFunction)&sna_act_8005AD10,
(TActorFunction)&sna_kill_8005B52C,
aSnaInitC);
if (sna_LoadSnake(pActor, name, where) < 0)
{
GV_DestroyActor_800151C8(&pActor->field_0_actor);
return NULL;
}
snainit_actor_800A9424 = pActor;
return &pActor->field_0_actor;
}
// some jump table probably
const char missing_rdata[] = {0xe4, 0x4f, 0x05, 0x80, 0xd4, 0x4f, 0x05, 0x80, 0x0c, 0x50, 0x05, 0x80, 0x48, 0x50, 0x05, 0x80, 0x94, 0x50, 0x05, 0x80, 0xfc, 0x50, 0x05, 0x80, 0xb4, 0x53, 0x05, 0x80};

View File

@ -0,0 +1,479 @@
// FIXME: copy-pasta of snake/sna_init.h
#ifndef _sna_H_
#define _sna_H_
#include "libgv/libgv.h"
#include "Game/control.h"
#include "Game/game.h"
#include "Game/target.h"
#include "chara/snake/shadow.h"
#include <SYS/TYPES.H>
#include <LIBGTE.H>
#include <LIBGPU.H>
typedef struct Sna_E1
{
unsigned char field_0;
unsigned char field_1;
unsigned char field_2;
unsigned char field_3;
unsigned char field_4;
unsigned char field_5;
unsigned char field_6;
unsigned char field_7;
} Sna_E1;
typedef struct Sna_E2
{
unsigned char field_0;
unsigned char field_1;
unsigned char field_2;
unsigned char field_3;
unsigned char field_4;
unsigned char field_5;
unsigned char field_6;
unsigned char field_7;
unsigned char field_8;
unsigned char field_9;
unsigned char field_A;
unsigned char field_B;
} Sna_E2;
typedef struct Sna_E6
{
unsigned char field_0;
unsigned char field_1;
unsigned char field_2;
unsigned char field_3;
} Sna_E6;
typedef struct Target_Data
{
SVECTOR field_0;
SVECTOR field_8_size;
int field_10;
int field_14;
int field_18;
unsigned int field_1C;
} Target_Data;
typedef struct Sna_Joint_Rotations
{
SVECTOR field_0_lower_body;
SVECTOR field_8_upper_body;
SVECTOR field_10_right_shoulder;
SVECTOR field_18_right_elbow;
SVECTOR field_20_right_wrist;
SVECTOR field_28_neck;
SVECTOR field_30_neck2;
SVECTOR field_38_right_shoulder;
SVECTOR field_40_right_elbow;
SVECTOR field_48_right_wrist;
SVECTOR field_50_right_leg;
SVECTOR field_58_right_knee;
SVECTOR field_60_right_ankle;
SVECTOR field_68_left_leg;
SVECTOR field_70_left_knee;
SVECTOR field_78_left_ankle;
} Sna_Joint_Rotations;
typedef struct Sna_ActionTable
{
Sna_E1 *field_0;
Sna_E2 *field_4;
Sna_E1 *field_8;
Sna_E2 *field_C;
Sna_E2 *field_10;
Sna_E6 *field_14;
Sna_E1 *field_18;
} Sna_ActionTable;
typedef enum
{
SNA_FLAG1_UNK1 = 0x1,
SNA_FLAG1_UNK2 = 0x2,
SNA_FLAG1_UNK3 = 0x4,
SNA_FLAG1_UNK4 = 0x8,
SNA_FLAG1_UNK5 = 0x10,
SNA_FLAG1_UNK6 = 0x20,
SNA_FLAG1_UNK7 = 0x40,
SNA_FLAG1_UNK8 = 0x80,
SNA_FLAG1_UNK9 = 0x100,
SNA_FLAG1_UNK10 = 0x200,
SNA_FLAG1_UNK11 = 0x400,
SNA_FLAG1_UNK12 = 0x800,
SNA_FLAG1_UNK13 = 0x1000,
SNA_FLAG1_UNK14 = 0x2000,
SNA_FLAG1_UNK15 = 0x4000,
SNA_FLAG1_UNK16 = 0x8000,
SNA_FLAG1_UNK17 = 0x10000,
SNA_FLAG1_UNK18 = 0x20000,
SNA_FLAG1_UNK19 = 0x40000,
SNA_FLAG1_UNK20 = 0x80000,
SNA_FLAG1_UNK21 = 0x100000,
SNA_FLAG1_UNK22 = 0x200000,
SNA_FLAG1_UNK23 = 0x400000,
SNA_FLAG1_UNK24 = 0x800000,
SNA_FLAG1_UNK25 = 0x1000000,
SNA_FLAG1_UNK26 = 0x2000000,
SNA_FLAG1_UNK27 = 0x4000000,
SNA_FLAG1_UNK28 = 0x8000000,
SNA_FLAG1_UNK29 = 0x10000000,
SNA_FLAG1_UNK30 = 0x20000000,
SNA_FLAG1_UNK31 = 0x40000000,
SNA_FLAG1_UNK32 = 0x80000000,
} SnaFlag1;
typedef enum
{
SNA_FLAG2_UNK1 = 0x1,
SNA_FLAG2_UNK2 = 0x2,
SNA_FLAG2_UNK3 = 0x4,
SNA_FLAG2_UNK4 = 0x8,
SNA_FLAG2_UNK5 = 0x10,
SNA_FLAG2_UNK6 = 0x20,
SNA_FLAG2_UNK7 = 0x40,
SNA_FLAG2_UNK8 = 0x80,
SNA_FLAG2_UNK9 = 0x100,
SNA_FLAG2_UNK10 = 0x200,
SNA_FLAG2_UNK11 = 0x400,
SNA_FLAG2_UNK12 = 0x800,
SNA_FLAG2_UNK13 = 0x1000,
SNA_FLAG2_UNK14 = 0x2000,
SNA_FLAG2_UNK15 = 0x4000,
SNA_FLAG2_UNK16 = 0x8000,
SNA_FLAG2_UNK17 = 0x10000,
SNA_FLAG2_UNK18 = 0x20000,
SNA_FLAG2_UNK19 = 0x40000,
SNA_FLAG2_UNK20 = 0x80000,
SNA_FLAG2_UNK21 = 0x100000,
SNA_FLAG2_UNK22 = 0x200000,
SNA_FLAG2_UNK23 = 0x400000,
SNA_FLAG2_UNK24 = 0x800000,
SNA_FLAG2_UNK25 = 0x1000000,
SNA_FLAG2_UNK26 = 0x2000000,
SNA_FLAG2_UNK27 = 0x4000000,
SNA_FLAG2_UNK28 = 0x8000000,
SNA_FLAG2_UNK29 = 0x10000000,
SNA_FLAG2_UNK30 = 0x20000000,
SNA_FLAG2_UNK31 = 0x40000000,
SNA_FLAG2_UNK32 = 0x80000000,
} SnaFlag2;
// sub struct of Actor_SnaInit
typedef struct UnkSnakeStruct2
{
unsigned short field_9E4;
short field_9E6;
short field_9E8;
short field_9EA;
short field_9EC_flags3;
short field_9EE;
short field_9F0;
short field_9F2;
SVECTOR field_9F4;
} UnkSnakeStruct2;
typedef struct SnaAutoMove // @ field_A00 in Actor_SnaInit
{
VECTOR field_0_ivec; // dunno why int vector. this is something like the direction snake is moving
SVECTOR field_10_vec1; // these last two are related to the target position snake wants to move to
SVECTOR field_18_vec2;
} SnaAutoMove;
struct Actor_SnaInit;
typedef void (*TSnakeFunction)(struct Actor_SnaInit *, int);
// TODO: Many fields and sub structures are not yet recovered/incorrect
typedef struct Actor_SnaInit
{
GV_ACT field_0_actor;
CONTROL field_20_ctrl;
OBJECT field_9C_obj;
char field_C0[0xC0]; // zeroed during normal gameplay
MOTION_CONTROL field_180;
OAR_RECORD field_1D0[34]; // bottom half of array is weapon related
Sna_Joint_Rotations field_698_joint_rotations;
SVECTOR field_718[16]; // same size as above, related / same struct?
int field_798_p_height;
int field_79C;
int field_7A0_msg_count;
GV_MSG field_7A4_msgs[8];
int field_844;
// FIND EXTRA FIELD - snake_vr verison of the actor has 4 bytes less
// somewhere between here and "END FIND EXTRA FIELD"
// for now a random field is just commented out
MATRIX field_848_lighting_mtx; // .t is R, G, B
MATRIX field_868_lighting_mtx2;
Actor_Shadow *field_888_pShadow;
int *field_88C; // shadow enabled?
unsigned short field_890_autoaim_max_dist;
unsigned short field_892_autoaim_min_angle;
SnaFlag1 field_894_flags1;
// SnaFlag2 field_898_flags2;
TARGET *field_89C_pTarget;
TARGET field_8A0_target;
TARGET *field_8E8_pTarget;
SVECTOR field_8EC_vec;
int field_8F4;
int field_8F8;
SVECTOR field_8FC;
int field_904_frames_last_choke;
GV_ACT *field_908_weapon_actor;
TSnakeFunction field_90C_pWeaponFn;
int field_910;
int field_914_trigger;
short *field_918_n_bullets;
int field_91C_weapon_idx;
int field_920_tbl_8009D580;
short field_924;
short field_926;
DG_TEX *field_928;
DG_PRIM *field_92C;
SVECTOR field_930;
SVECTOR field_938;
SVECTOR field_940;
SVECTOR field_948;
POLY_FT4 field_950[2];
int field_9A0;
GV_ACT *field_9A4_item_actor;
int field_9A8_current_item;
int field_9AC;
GV_PAD *field_9B0_pad_ptr;
Sna_ActionTable *field_9B4_action_table;
TSnakeFunction field_9B8_fn_anim;
int field_9BC_anim_frame;
TSnakeFunction field_9C0;
int field_9C4;
TSnakeFunction field_9C8_anim_update_fn_3p; // called for every anim/state while in third person
TSnakeFunction field_9CC_anim_update_fn_1p; // same except first person. caller: 8005a7e0
short field_9D0[10];
UnkSnakeStruct2 field_9E4;
void *field_9FC;
SnaAutoMove field_A00; // auto movement of snake during mini cutscenes. some above fields may also be this
short field_A20;
short field_A22_snake_current_health;
char field_A24_invuln_frames;
char field_A25;
// END FIND EXTRA FIELD
short field_A26_stance; // SNA_STANCE_...
short field_A28;
short field_A2A;
SVECTOR field_A2C;
char field_A34;
char field_A35_vibtime2;
char field_A36;
char field_A37;
short field_A38_local_data;
short field_A3A;
SVECTOR field_A3C;
SVECTOR field_A44;
int field_A4C;
short field_A50;
short field_A52;
// var reused in differenet contexts, union is better than a generic name for all contexts
union {
short choke_count;
short prone_bool_thing;
short wall_thing;
short knockdown_thing;
} field_A54;
short field_A56;
short field_A58;
unsigned short field_A5A;
unsigned short field_A5C;
short field_A5E;
SVECTOR field_A60;
SVECTOR field_A68;
int field_A70;
} Actor_SnaInit;
typedef int (*TSnakeActFunction)(Actor_SnaInit *);
typedef GV_ACT * (*TSnakeEquipFuncion)(CONTROL *, OBJECT *, int);
void sna_start_anim_8004E1F4(Actor_SnaInit *pActor, void *pFn);
void SetAction_8004E22C(Actor_SnaInit *pActor, int action_flag, int interp);
void sna_8004E260(Actor_SnaInit *pActor, int a2, int interp, int a4);
int GM_CheckPlayerStatusFlag_8004E29C(PlayerStatusFlag arg0);
int GM_SetPlayerStatusFlag_8004E2B4(PlayerStatusFlag arg0);
void GM_ClearPlayerStatusFlag_8004E2D4(PlayerStatusFlag flag);
void sna_set_flags1_8004E2F4(Actor_SnaInit *snake, SnaFlag1 flags);
void sna_clear_flags1_8004E308(Actor_SnaInit *snake, SnaFlag1 flags);
int sna_check_flags1_8004E31C(Actor_SnaInit *snake, SnaFlag1 flags);
void sna_set_flags2_8004E330(Actor_SnaInit *snake, SnaFlag2 flag);
void sna_clear_flags2_8004E344(Actor_SnaInit *snake, SnaFlag2 flags);
unsigned int sna_sub_8004E358(Actor_SnaInit *snake, SnaFlag2 param_2);
void CheckSnakeDead_8004E384(Actor_SnaInit *snake);
void sna_sub_8004E41C(Actor_SnaInit *snake, unsigned short flags);
int sub_8004E458(short param_1, int param_2);
int sub_8004E4C0(Actor_SnaInit *pActor, int param_2);
int sub_8004E51C(SVECTOR *param_1, void *param_2, int param_3, int param_4);
void sub_8004E588(HZD_HDL *param_1, SVECTOR *param_2, int *param_3);
int sub_8004E930(Actor_SnaInit *snake, int arg1);
void sub_8004E9D0(Actor_SnaInit *pActor);
void sub_8004EA50(Actor_SnaInit *pActor, int param_2);
int sna_8004EAA8(Actor_SnaInit *pActor, int a2);
void sub_8004EB74(Actor_SnaInit *pActor);
void sna_8004EC00(Actor_SnaInit *pActor);
void sna_8004EC8C(Actor_SnaInit *pActor);
void sub_8004ED08(Actor_SnaInit *pActor);
void sub_8004EEB0(Actor_SnaInit *pActor);
int sub_8004EFE4(Actor_SnaInit *pActor, int param_2);
void sna_8004F034(Actor_SnaInit *pActor, unsigned int bits);
void sna_act_helper2_helper4_8004F090(Actor_SnaInit *pActor, int param_2);
void sub_8004F14C(Actor_SnaInit *param_1);
void sub_8004F204(Actor_SnaInit *param_1);
void sna_set_invuln_8004F2A0(Actor_SnaInit *pActor, char invuln_frames);
void sna_clear_invuln_8004F2EC(Actor_SnaInit *snake);
void sub_8004F338(Actor_SnaInit *param_1);
int sna_act_unk_helper4_8004FA3C(void);
void sna_8004FA74(Actor_SnaInit *param_1);
void sub_8004FA9C(Actor_SnaInit *snake);
int sna_current_item_8004FB38(void);
SVECTOR **sub_8004FB90(void);
int sna_8004E808(Actor_SnaInit *pActor, int a2, int a3, int a4, int a5);
// TODO: move these to game.h even though theyre defined in sna_init.c?
// .. or move the implementation to a static inline in game.h which the definition in sna_init calls?
int GM_Next_BulName_8004FBA0();
void GM_ClearBulName_8004FBE4(int idx);
void GM_CheckShukanReverse_8004FBF8(unsigned short *pInput);
void GM_CheckShukanReverseAnalog_8004FC70(unsigned char *pInput);
void sna_check_knock_800501F8(Actor_SnaInit *pActor, int time);
int sna_prone_check_standup_80050398(Actor_SnaInit *pActor);
void sna_80050440(Actor_SnaInit *pActor);
void sna_80050568(Actor_SnaInit *pActor);
int sub_800507D8(Actor_SnaInit *param_1);
void sna_80051FD0(Actor_SnaInit *pActor);
void sna_fn_80052120(Actor_SnaInit *pActor, int time);
void sub_8005230C(Actor_SnaInit *pActor, int time);
void sub_80052468(Actor_SnaInit *pActor, int time);
void sna_fn_80052540(Actor_SnaInit *pActor, int time);
void sna_fn_800525F8(Actor_SnaInit *pActor, int time);
void sna_act_helper2_helper_helper_800526BC(Actor_SnaInit *pActor, int time);
void sna_anim_idle_8005275C(Actor_SnaInit *pActor, int time);
void sna_anim_crouch_800527DC(Actor_SnaInit *param_1, int time);
void sna_anim_prone_idle_800528BC(Actor_SnaInit *pActor, int time);
void sna_anim_run_8005292C(Actor_SnaInit *pActor, int time);
void sna_anim_prone_move_800529C0(Actor_SnaInit *pActor, int time);
void sna_anim_wall_idle_and_c4_80052A5C(Actor_SnaInit *pActor, int time);
void sna_anim_wall_move_80052BA8(Actor_SnaInit *pActor, int time);
void sna_anim_wall_crouch_80052CCC(Actor_SnaInit *pActor, int time);
void sna_fn_80052E58(Actor_SnaInit *pActor, int time);
void sna_anim_crouch_helper_80053014(Actor_SnaInit *pActor, int time);
void sna_fn_800531F4(Actor_SnaInit *pActor, int time);
void sna_fn_nothing_80053B80(Actor_SnaInit *param_1, int time);
void sna_anim_run_begin_80053B88(Actor_SnaInit *param_1, int time);
void sna_anim_prone_begin_80053BE8(Actor_SnaInit *pActor, int time);
void sna_anim_prone_standup_80053D74(Actor_SnaInit *pActor, int time);
void sna_anim_enter_duct_80053E9C(Actor_SnaInit *pActor, int time);
void sub_80053FAC(Actor_SnaInit *pActor, int time);
void sna_gun_800540D0(Actor_SnaInit *pActor, int time);
void sna_bomb_800541A8(Actor_SnaInit *pActor);
void sna_anim_chokethrow_begin1_80054210(Actor_SnaInit *pActor, int time);
void sna_8005425C(Actor_SnaInit *pActor, int time);
void sna_80054318(Actor_SnaInit *pActor, int time);
void sna_fn_800543A8(Actor_SnaInit *pActor, int time);
void sna_anim_duct_move_80054424(Actor_SnaInit *pActor, int time);
void sna_anim_duct_idle_80054488(Actor_SnaInit *pActor, int time);
void sna_anim_shot_flinch_800544E0(Actor_SnaInit *pActor, int time);
void sna_act_helper2_helper7_80054648(Actor_SnaInit *pActor, int time);
void sna_anim_knockdown_80054710(Actor_SnaInit *pActor, int time);
void sna_anim_knockdown_idle_80054930(Actor_SnaInit *pActor, int time);
void sna_anim_knockdown_getup_80054A10(Actor_SnaInit *pActor, int time);
void sna_anim_knockdown_shot_80054B50(Actor_SnaInit *pActor);
void sna_anim_knockdown_shot_tank_80054C08(Actor_SnaInit *pActor, int time);
void sna_anim_scope_80055334(Actor_SnaInit *param_1, int time);
void sna_anim_jpegcam_800553CC(Actor_SnaInit *pActor, int time);
void sna_anim_box_idle_800553EC(Actor_SnaInit *pActor, int time);
void sna_anim_box_move_8005544C(Actor_SnaInit *pActor, int time);
void sna_anim_box_stop_800554B4(Actor_SnaInit *pActor, int time);
void sub_8005684C(Actor_SnaInit *pActor);
void sub_8005688C(Actor_SnaInit *pActor, int time);
void sub_80056928(Actor_SnaInit *param_1, int time);
void sna_knockdown_check_getup_80056A1C(Actor_SnaInit *pActor, int time);
void sna_80056A54(Actor_SnaInit *pActor, int time);
void sna_fn_80056AD8(Actor_SnaInit *pActor, int time);
void sna_anim_shoot_weapon_80056B88(Actor_SnaInit *pActor, int time);
void sna_anim_rungun_begin_80056BDC(Actor_SnaInit *param_1, int time);
void sna_anim_rungun_80056C3C(Actor_SnaInit *param_1, int time);
void sna_anim_stinger_800570C0(Actor_SnaInit *pActor, int time);
void sna_80057118(Actor_SnaInit *pActor, int time);
void sna_800571B8(Actor_SnaInit *pActor, int time);
void sna_80057378(Actor_SnaInit *pActor, int time);
void sna_anim_shoot_weapon_helper_80057590(Actor_SnaInit *pActor, int time);
void sna_anim_rungun_begin_helper_800577B4(Actor_SnaInit *pActor, int time);
void sna_auto_aim_800579A0(Actor_SnaInit *pActor);
void OP_ShootStinger_80058378(Actor_SnaInit *pActor, int time);
void sub_80058644(Actor_SnaInit *pActor, int time);
void sna_anim_punch_80058C10(Actor_SnaInit *pActor, int time);
void sna_anim_chokethrow_begin2_80058C80(Actor_SnaInit *pActor, int time);
void sna_anim_choke_80058E88(Actor_SnaInit *pActor, int time);
void sna_anim_choke_rechoke_80058EF4(Actor_SnaInit *pActor, int time);
void sna_anim_choke_rechoke_80058EF4(Actor_SnaInit *pActor, int time);
void sna_anim_choke_kill_80058F88(Actor_SnaInit *pActor, int time);
void sna_anim_choke_drag_80059054(Actor_SnaInit *pActor, int time);
void sna_anim_choke_hold_80059154(Actor_SnaInit *pActor, int time);
void sub_800591BC(Actor_SnaInit *pActor);
void sna_anim_choke_helper_8005951C(Actor_SnaInit *pActor, int time);
void sna_anim_choke_rechoke_helper_8005961C(Actor_SnaInit *pActor, int time);
void sna_kill_8005B52C(Actor_SnaInit *pActor);
void sna_anim_psg1_helper_80057FD4(Actor_SnaInit *pActor, int a2);
void sna_80051DA0(Actor_SnaInit *pActor);
void sna_80053360(Actor_SnaInit *pActor, int time);
void sub_80057BF0(Actor_SnaInit *pActor, int a2);
void sna_anim_throw_800589C8(Actor_SnaInit *pActor, int a2);
void sna_gun_800540D0(Actor_SnaInit *pActor, int a2);
void sna_anim_punch_helper_800591F4(Actor_SnaInit *pActor, int a2);
int sna_8004FDE8(Actor_SnaInit *pActor, Target_Data *pVec);
void sna_8004F8E4(Actor_SnaInit *pActor, int a2);
void sna_fn_800535B8(Actor_SnaInit *pActor, int time);
void sna_knockdown_getup_80050668(Actor_SnaInit *pActor);
void sna_anim_grenade_80058470(struct Actor_SnaInit *pActor, int a2);
void sna_anim_claymore_80057474(struct Actor_SnaInit *pActor, int a2);
void sna_anim_psg1_80056DDC(struct Actor_SnaInit *pActor, int a2);
void sna_8004EE28(Actor_SnaInit *pActor);
void sna_8004EB14(Actor_SnaInit *pActor);
void sna_anim_wall_idle_and_c4_helper_800537D4(Actor_SnaInit *pActor, int time);
void sna_anim_wall_crouch_helper_80053A54(Actor_SnaInit *pActor, int time);
void sub_8004FAE8(Actor_SnaInit *pActor);
void sna_anim_wall_move_helper_800538CC(Actor_SnaInit *pActor, int time);
void sna_knock_80054D68(Actor_SnaInit *pActor, int time);
void sna_anim_rungun_helper_80057844(Actor_SnaInit *pActor, int time);
int sna_8005009C(Actor_SnaInit *pActor);
int sub_80051BA4(Actor_SnaInit *pActor);
int sub_8004EFE4(Actor_SnaInit *pActor, int param_2);
int sub_8004E5E8(Actor_SnaInit *pActor, int param_2);
int sub_8004E808(Actor_SnaInit *pActor, int, int, int, int); // dummy signature
int sna_act_unk_helper2_helper3_80060684(SnaAutoMove *, SVECTOR *);
void sna_anim_claymore_helper_80058780(Actor_SnaInit *pActor, int time);
int HZD_GetAddress_8005C6C4(HZD_HDL *hzd, SVECTOR *vec, int param_3);
void sna_act_unk2_80051170(TARGET *pTarget);
void sna_act_helper3_helper_80056650(Actor_SnaInit *pActor, int time);
void sna_act_unk_helper3_80055DD8(Actor_SnaInit *pActor, int time);
void sna_anim_mini_cutscene_800559D8(Actor_SnaInit *pActor, int time);
void sna_anim_dying_80055524(Actor_SnaInit *pActor, int time);
void sna_act_unk_helper2_helper2_800605DC(SnaAutoMove *autoMove, HZD_HDL *pHzd, SVECTOR *pVec);
int sna_unk_helper2_helper_8006070C(SnaAutoMove *pAutoMove, CONTROL *pControl);
void sna_80057A90(Actor_SnaInit *pActor, int time);
void sna_8004EF14(Actor_SnaInit *pActor);
GV_ACT *sna_NewSnake_8005B650(int name, int where, int argc, char **argv);
int HZD_ReachTo_8005C89C(HZD_HDL *pHzd, int, int);
int sna_act_unk_helper2_helper_helper_8005C974(HZD_HDL *pHzd, int, int, CONTROL *pControl);
void sna_act_helper2_helper2_80033054(int id, SVECTOR *vec);
int sna_ration_available_8004FB4C(void);
// TODO: move these to indivudual weapon headers
GV_ACT *NewSOCOM_80065D74(CONTROL *a1, OBJECT *parentObj, int unit, int *a4, int a5);
GV_ACT *famas_create_80066374(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *grenade_create_80066A4C(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *NewRCM_80066FF0(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *mine_init_800677BC(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *NewBomb_80067B20(CONTROL *a1, OBJECT *parentObj, int unit, int *a4, int a5);
GV_ACT *NewStanGrenade_80066A74(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *NewChaffGrenade_80066AA0(CONTROL *a1, OBJECT *parentObj, int unit, int a4, int a5);
GV_ACT *NewRifle_80068214(CONTROL *a1, OBJECT *parentObj, int unit, int *a4, int a5);
#endif // _sna_H_

View File

@ -14,7 +14,8 @@ Sna_E1 SECTION(".sdata") e1_800AB7BC = {95u, 95u, 99u, 100u, 26u, 102u, 88u, 89u
Sna_E1 SECTION(".sdata") e1_800AB7C4 = {20u, 21u, 84u, 0u, 212u, 3u, 0u, 0u};
#ifdef VR_EXE
char vr_pad[8] = {255, 255, 255, 255, 0, 0, 0, 0};
char SECTION(".sdata") vr_pad[4] = {255, 255, 255, 255};
Actor_SnaInit *SECTION(".sdata") snainit_actor_800A9424 = NULL;
#endif
SVECTOR SECTION(".sdata") svector_800AB7CC = {150, 0, 50, 0};