mirror of
https://github.com/n64decomp/sm64.git
synced 2024-12-22 07:38:54 -05:00
refresh 5
This commit is contained in:
parent
04732af90b
commit
9273f38df1
15
CHANGES
15
CHANGES
@ -1,3 +1,18 @@
|
||||
Refresh #5
|
||||
1.) mem_error_screen.inc.c updated for C (#775)
|
||||
2.) updated patch_libultra_math to work directly on libultra.a (#781)
|
||||
3.) Enhancement: Debug boxes (#783)
|
||||
4.) Label effects MemoryPool (#784)
|
||||
5.) Use full-width characters for JP text and rename mislabeled stuff (#772)
|
||||
6.) Small asset extraction fixes (#785)
|
||||
7.) Fix incremental asset extraction after the last PR (#790)
|
||||
8.) Labelled behavior script commands, tidied up behavior scripts and ren…
|
||||
9.) Document camera.c (#741)
|
||||
10.) Fix a HMC texture asset (#795)
|
||||
11.) Fix UB in angle conversion for paintings. Needed for pc-port. (#796)
|
||||
12.) Fix PSS texture assets (#801)
|
||||
13.) Fix some camera typos (#802)
|
||||
|
||||
Refresh #4
|
||||
1.) Label screen_transition.c (#737)
|
||||
2.) Revamp macros (#738)
|
||||
|
7
Makefile
7
Makefile
@ -441,6 +441,7 @@ $(BUILD_DIR)/assets/mario_anim_data.c: $(wildcard assets/anims/*.inc.c)
|
||||
$(BUILD_DIR)/assets/demo_data.c: assets/demo_data.json $(wildcard assets/demos/*.bin)
|
||||
$(PYTHON) tools/demo_data_converter.py assets/demo_data.json $(VERSION_CFLAGS) > $@
|
||||
|
||||
|
||||
# Source code
|
||||
$(BUILD_DIR)/src/goddard/%.o: OPT_FLAGS := -g
|
||||
$(BUILD_DIR)/src/goddard/%.o: MIPSISET := -mips1
|
||||
@ -471,11 +472,6 @@ $(GLOBAL_ASM_DEP).$(NON_MATCHING):
|
||||
@rm -f $(GLOBAL_ASM_DEP).*
|
||||
touch $@
|
||||
|
||||
$(BUILD_DIR)/lib/src/math/%.o: lib/src/math/%.c
|
||||
@$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/lib/src/math/$*.d $<
|
||||
$(CC) -c $(CFLAGS) -o $@ $<
|
||||
tools/patch_libultra_math $@
|
||||
|
||||
$(BUILD_DIR)/%.o: %.c
|
||||
@$(CC_CHECK) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
|
||||
$(CC) -c $(CFLAGS) -o $@ $<
|
||||
@ -493,6 +489,7 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
|
||||
|
||||
$(BUILD_DIR)/libultra.a: $(ULTRA_O_FILES)
|
||||
$(AR) rcs -o $@ $(ULTRA_O_FILES)
|
||||
tools/patch_libultra_math $@
|
||||
|
||||
$(BUILD_DIR)/libgoddard.a: $(GODDARD_O_FILES)
|
||||
$(AR) rcs -o $@ $(GODDARD_O_FILES)
|
||||
|
14
assets.json
14
assets.json
@ -188,7 +188,7 @@
|
||||
"actors/haunted_cage/bbh_cage_floor.rgba16.png": [32,32,2048,{"jp":[1462368,49800],"us":[1469536,49800],"eu":[1341504,49800]}],
|
||||
"actors/haunted_cage/bbh_cage_ornament.rgba16.png": [32,16,1024,{"jp":[1462368,53896],"us":[1469536,53896],"eu":[1341504,53896]}],
|
||||
"actors/haunted_cage/bbh_cage_wooden_base.rgba16.png": [32,16,1024,{"jp":[1462368,54920],"us":[1469536,54920],"eu":[1341504,54920]}],
|
||||
"actors/haunted_cage/bbh_cage_garbage.rgba16.png": [32,32,2048,{"jp:":[1462368,57992],"us":[1469536,57992],"eu":[1341504,57992]}],
|
||||
"actors/haunted_cage/bbh_cage_garbage.rgba16.png": [32,32,2048,{"jp":[1462368,57992],"us":[1469536,57992],"eu":[1341504,57992]}],
|
||||
"actors/heart/spinning_heart.rgba16.png": [32,32,2048,{"jp":[2032944,55264],"us":[2040320,55264],"eu":[1912288,55264]}],
|
||||
"actors/heave_ho/heave-ho_arm_ornament.rgba16.png": [32,32,2048,{"jp":[1215456,68040],"us":[1222624,68040],"eu":[1094592,68040]}],
|
||||
"actors/heave_ho/heave-ho_face.rgba16.png": [32,32,2048,{"jp":[1215456,59848],"us":[1222624,59848],"eu":[1094592,59848]}],
|
||||
@ -1031,8 +1031,7 @@
|
||||
"sound/sequences/us/22_cutscene_lakitu.m64": [313,{"us":[8176864]}],
|
||||
"textures/cave/hmc_textures.00000.rgba16.png": [32,64,4096,{"jp":[3432432,0],"us":[3439184,0],"eu":[3312784,0]}],
|
||||
"textures/cave/hmc_textures.01000.rgba16.png": [32,32,2048,{"jp":[3432432,4096],"us":[3439184,4096],"eu":[3312784,4096]}],
|
||||
"textures/cave/hmc_textures.01800.rgba16.png": [32,32,2048,{"jp":[3432432,6144],"us":[3439184,6144],"eu":[3312784,6144]}],
|
||||
"textures/cave/hmc_textures.02000.rgba16.png": [32,32,2048,{"jp":[3432432,8192],"us":[3439184,8192],"eu":[3312784,8192]}],
|
||||
"textures/cave/hmc_textures.01800.rgba16.png": [32,64,4096,{"jp":[3432432,6144],"us":[3439184,6144],"eu":[3312784,6144]}],
|
||||
"textures/cave/hmc_textures.02800.rgba16.png": [32,32,2048,{"jp":[3432432,10240],"us":[3439184,10240],"eu":[3312784,10240]}],
|
||||
"textures/cave/hmc_textures.03000.rgba16.png": [32,32,2048,{"jp":[3432432,12288],"us":[3439184,12288],"eu":[3312784,12288]}],
|
||||
"textures/cave/hmc_textures.03800.rgba16.png": [32,64,4096,{"jp":[3432432,14336],"us":[3439184,14336],"eu":[3312784,14336]}],
|
||||
@ -1155,8 +1154,7 @@
|
||||
"textures/inside/inside_castle_textures.07000.rgba16.png": [32,64,4096,{"jp":[3555104,28672],"us":[3561856,28672],"eu":[3435456,28672]}],
|
||||
"textures/inside/inside_castle_textures.08000.rgba16.png": [32,32,2048,{"jp":[3555104,32768],"us":[3561856,32768],"eu":[3435456,32768]}],
|
||||
"textures/inside/inside_castle_textures.08800.rgba16.png": [32,32,2048,{"jp":[3555104,34816],"us":[3561856,34816],"eu":[3435456,34816]}],
|
||||
"textures/inside/inside_castle_textures.09000.rgba16.png": [32,32,2048,{"jp":[3555104,36864],"us":[3561856,36864],"eu":[3435456,36864]}],
|
||||
"textures/inside/inside_castle_textures.09800.rgba16.png": [32,32,2048,{"jp":[3555104,38912],"us":[3561856,38912],"eu":[3435456,38912]}],
|
||||
"textures/inside/inside_castle_textures.09000.rgba16.png": [32,64,4096,{"jp":[3555104,36864],"us":[3561856,36864],"eu":[3435456,36864]}],
|
||||
"textures/inside/inside_castle_textures.0A000.rgba16.png": [32,64,4096,{"jp":[3555104,40960],"us":[3561856,40960],"eu":[3435456,40960]}],
|
||||
"textures/inside/inside_castle_textures.0B000.rgba16.png": [32,32,2048,{"jp":[3555104,45056],"us":[3561856,45056],"eu":[3435456,45056]}],
|
||||
"textures/inside/inside_castle_textures.0B800.rgba16.png": [64,32,4096,{"jp":[3555104,47104],"us":[3561856,47104],"eu":[3435456,47104]}],
|
||||
@ -1204,16 +1202,14 @@
|
||||
"textures/machine/ttc_textures.08400.rgba16.png": [32,32,2048,{"jp":[3460352,33792],"us":[3467104,33792],"eu":[3340704,33792]}],
|
||||
"textures/mountain/ttm_textures.00000.rgba16.png": [32,32,2048,{"jp":[3473152,0],"us":[3479904,0],"eu":[3353504,0]}],
|
||||
"textures/mountain/ttm_textures.00800.rgba16.png": [64,32,4096,{"jp":[3473152,2048],"us":[3479904,2048],"eu":[3353504,2048]}],
|
||||
"textures/mountain/ttm_textures.01800.rgba16.png": [32,32,2048,{"jp":[3473152,6144],"us":[3479904,6144],"eu":[3353504,6144]}],
|
||||
"textures/mountain/ttm_textures.02000.rgba16.png": [32,32,2048,{"jp":[3473152,8192],"us":[3479904,8192],"eu":[3353504,8192]}],
|
||||
"textures/mountain/ttm_textures.01800.rgba16.png": [32,64,4096,{"jp":[3473152,6144],"us":[3479904,6144],"eu":[3353504,6144]}],
|
||||
"textures/mountain/ttm_textures.02800.rgba16.png": [32,32,2048,{"jp":[3473152,10240],"us":[3479904,10240],"eu":[3353504,10240]}],
|
||||
"textures/mountain/ttm_textures.03000.rgba16.png": [32,32,2048,{"jp":[3473152,12288],"us":[3479904,12288],"eu":[3353504,12288]}],
|
||||
"textures/mountain/ttm_textures.03800.rgba16.png": [32,32,2048,{"jp":[3473152,14336],"us":[3479904,14336],"eu":[3353504,14336]}],
|
||||
"textures/mountain/ttm_textures.04000.rgba16.png": [32,32,2048,{"jp":[3473152,16384],"us":[3479904,16384],"eu":[3353504,16384]}],
|
||||
"textures/mountain/ttm_textures.04800.rgba16.png": [32,32,2048,{"jp":[3473152,18432],"us":[3479904,18432],"eu":[3353504,18432]}],
|
||||
"textures/mountain/ttm_textures.05000.rgba16.png": [32,32,2048,{"jp":[3473152,20480],"us":[3479904,20480],"eu":[3353504,20480]}],
|
||||
"textures/mountain/ttm_textures.05800.rgba16.png": [32,32,2048,{"jp":[3473152,22528],"us":[3479904,22528],"eu":[3353504,22528]}],
|
||||
"textures/mountain/ttm_textures.06000.rgba16.png": [32,32,2048,{"jp":[3473152,24576],"us":[3479904,24576],"eu":[3353504,24576]}],
|
||||
"textures/mountain/ttm_textures.05800.rgba16.png": [32,64,4096,{"jp":[3473152,22528],"us":[3479904,22528],"eu":[3353504,22528]}],
|
||||
"textures/mountain/ttm_textures.06800.rgba16.png": [32,32,2048,{"jp":[3473152,26624],"us":[3479904,26624],"eu":[3353504,26624]}],
|
||||
"textures/mountain/ttm_textures.07000.rgba16.png": [32,32,2048,{"jp":[3473152,28672],"us":[3479904,28672],"eu":[3353504,28672]}],
|
||||
"textures/mountain/ttm_textures.07800.rgba16.png": [32,32,2048,{"jp":[3473152,30720],"us":[3479904,30720],"eu":[3353504,30720]}],
|
||||
|
@ -17,11 +17,6 @@ ALIGNED8 const u8 cave_09001800[] = {
|
||||
#include "textures/cave/hmc_textures.01800.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09002000
|
||||
ALIGNED8 const u8 cave_09002000[] = {
|
||||
#include "textures/cave/hmc_textures.02000.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09002800
|
||||
ALIGNED8 const u8 cave_09002800[] = {
|
||||
#include "textures/cave/hmc_textures.02800.rgba16.inc.c"
|
||||
|
@ -72,11 +72,6 @@ ALIGNED8 const u8 inside_09009000[] = {
|
||||
#include "textures/inside/inside_castle_textures.09000.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09009800
|
||||
ALIGNED8 const u8 inside_09009800[] = {
|
||||
#include "textures/inside/inside_castle_textures.09800.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x0900A000
|
||||
ALIGNED8 const u8 inside_0900A000[] = {
|
||||
#include "textures/inside/inside_castle_textures.0A000.rgba16.inc.c"
|
||||
|
@ -17,11 +17,6 @@ ALIGNED8 const u8 mountain_09001800[] = {
|
||||
#include "textures/mountain/ttm_textures.01800.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09002000
|
||||
ALIGNED8 const u8 mountain_09002000[] = {
|
||||
#include "textures/mountain/ttm_textures.02000.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09002800
|
||||
ALIGNED8 const u8 mountain_09002800[] = {
|
||||
#include "textures/mountain/ttm_textures.02800.rgba16.inc.c"
|
||||
@ -57,11 +52,6 @@ ALIGNED8 const u8 mountain_09005800[] = {
|
||||
#include "textures/mountain/ttm_textures.05800.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09006000
|
||||
ALIGNED8 const u8 mountain_09006000[] = {
|
||||
#include "textures/mountain/ttm_textures.06000.rgba16.inc.c"
|
||||
};
|
||||
|
||||
// 0x09006800
|
||||
ALIGNED8 const u8 mountain_09006800[] = {
|
||||
#include "textures/mountain/ttm_textures.06800.rgba16.inc.c"
|
||||
|
@ -738,7 +738,7 @@ ALIGNED8 static const u8 texture_font_char_jp_hiragana_small_tsu[] = {
|
||||
#include "textures/segment2/segment2.07710.ia1.inc.c"
|
||||
};
|
||||
|
||||
ALIGNED8 static const u8 texture_font_char_jp_hiragana_small_ka[] = {
|
||||
ALIGNED8 static const u8 texture_font_char_jp_hiragana_small_ya[] = {
|
||||
#include "textures/segment2/segment2.07720.ia1.inc.c"
|
||||
};
|
||||
|
||||
@ -962,7 +962,7 @@ ALIGNED8 static const u8 texture_font_char_jp_katakana_small_tsu[] = {
|
||||
#include "textures/segment2/segment2.07A90.ia1.inc.c"
|
||||
};
|
||||
|
||||
ALIGNED8 static const u8 texture_font_char_jp_katakana_small_ka[] = {
|
||||
ALIGNED8 static const u8 texture_font_char_jp_katakana_small_ya[] = {
|
||||
#include "textures/segment2/segment2.07AA0.ia1.inc.c"
|
||||
};
|
||||
|
||||
@ -2028,7 +2028,7 @@ const u8 *const main_font_lut[] = {
|
||||
texture_font_char_jp_katakana_yu, texture_font_char_jp_katakana_yo, texture_font_char_jp_katakana_ra, texture_font_char_jp_katakana_ri,
|
||||
texture_font_char_jp_katakana_ru, texture_font_char_jp_katakana_re, texture_font_char_jp_katakana_ro, texture_font_char_jp_katakana_wa,
|
||||
0x0, texture_font_char_jp_katakana_n, 0x0, texture_font_char_jp_long_vowel,
|
||||
texture_font_char_jp_hiragana_small_e, texture_font_char_jp_hiragana_small_tsu, texture_font_char_jp_hiragana_small_ka, texture_font_char_jp_hiragana_small_yu,
|
||||
texture_font_char_jp_hiragana_small_e, texture_font_char_jp_hiragana_small_tsu, texture_font_char_jp_hiragana_small_ya, texture_font_char_jp_hiragana_small_yu,
|
||||
texture_font_char_jp_hiragana_small_yo, texture_font_char_jp_hiragana_small_a, texture_font_char_jp_hiragana_small_i, texture_font_char_jp_hiragana_small_u,
|
||||
texture_font_char_jp_hiragana_small_o, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
@ -2040,7 +2040,7 @@ const u8 *const main_font_lut[] = {
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
texture_font_char_jp_katakana_small_e, texture_font_char_jp_katakana_small_tsu, texture_font_char_jp_katakana_small_ka, texture_font_char_jp_katakana_small_yu,
|
||||
texture_font_char_jp_katakana_small_e, texture_font_char_jp_katakana_small_tsu, texture_font_char_jp_katakana_small_ya, texture_font_char_jp_katakana_small_yu,
|
||||
texture_font_char_jp_katakana_small_yo, texture_font_char_jp_katakana_small_a, texture_font_char_jp_katakana_small_i, texture_font_char_jp_katakana_small_u,
|
||||
texture_font_char_jp_katakana_small_o, 0x0, 0x0, 0x0,
|
||||
0x0, 0x0, 0x0, 0x0,
|
||||
|
53
charmap.txt
53
charmap.txt
@ -1,39 +1,75 @@
|
||||
'0' = 0x00
|
||||
'0' = 0x00
|
||||
'1' = 0x01
|
||||
'1' = 0x01
|
||||
'2' = 0x02
|
||||
'2' = 0x02
|
||||
'3' = 0x03
|
||||
'3' = 0x03
|
||||
'4' = 0x04
|
||||
'4' = 0x04
|
||||
'5' = 0x05
|
||||
'5' = 0x05
|
||||
'6' = 0x06
|
||||
'6' = 0x06
|
||||
'7' = 0x07
|
||||
'7' = 0x07
|
||||
'8' = 0x08
|
||||
'8' = 0x08
|
||||
'9' = 0x09
|
||||
'9' = 0x09
|
||||
'A' = 0x0A
|
||||
'A' = 0x0A
|
||||
'B' = 0x0B
|
||||
'B' = 0x0B
|
||||
'C' = 0x0C
|
||||
'C' = 0x0C
|
||||
'D' = 0x0D
|
||||
'D' = 0x0D
|
||||
'E' = 0x0E
|
||||
'E' = 0x0E
|
||||
'F' = 0x0F
|
||||
'F' = 0x0F
|
||||
'G' = 0x10
|
||||
'G' = 0x10
|
||||
'H' = 0x11
|
||||
'H' = 0x11
|
||||
'I' = 0x12
|
||||
'I' = 0x12
|
||||
'J' = 0x13
|
||||
'J' = 0x13
|
||||
'K' = 0x14
|
||||
'K' = 0x14
|
||||
'L' = 0x15
|
||||
'L' = 0x15
|
||||
'M' = 0x16
|
||||
'M' = 0x16
|
||||
'N' = 0x17
|
||||
'N' = 0x17
|
||||
'O' = 0x18
|
||||
'O' = 0x18
|
||||
'P' = 0x19
|
||||
'P' = 0x19
|
||||
'Q' = 0x1A
|
||||
'Q' = 0x1A
|
||||
'R' = 0x1B
|
||||
'R' = 0x1B
|
||||
'S' = 0x1C
|
||||
'S' = 0x1C
|
||||
'T' = 0x1D
|
||||
'T' = 0x1D
|
||||
'U' = 0x1E
|
||||
'U' = 0x1E
|
||||
'V' = 0x1F
|
||||
'V' = 0x1F
|
||||
'W' = 0x20
|
||||
'W' = 0x20
|
||||
'X' = 0x21
|
||||
'X' = 0x21
|
||||
'Y' = 0x22
|
||||
'Y' = 0x22
|
||||
'Z' = 0x23
|
||||
'Z' = 0x23
|
||||
'a' = 0x24
|
||||
'b' = 0x25
|
||||
'c' = 0x26
|
||||
@ -114,6 +150,7 @@
|
||||
'ん' = 0x6D
|
||||
'。' = 0x6E
|
||||
',' = 0x6F
|
||||
'、' = 0x6F
|
||||
'ア' = 0x70
|
||||
'イ' = 0x71
|
||||
'ウ' = 0x72
|
||||
@ -162,7 +199,9 @@
|
||||
'ヲ' = 0x9C
|
||||
'ン' = 0x9D
|
||||
' ' = 0x9E
|
||||
' ' = 0x9E
|
||||
'-' = 0x9F
|
||||
'ー' = 0x9F
|
||||
'ぇ' = 0xA0
|
||||
'っ' = 0xA1
|
||||
'ゃ' = 0xA2
|
||||
@ -183,17 +222,27 @@
|
||||
'ォ' = 0xD8
|
||||
'[%]' = 0xE0
|
||||
'(' = 0xE1
|
||||
'(' = 0xE1
|
||||
')(' = 0xE2
|
||||
')(' = 0xE2
|
||||
')' = 0xE3
|
||||
')' = 0xE3
|
||||
'+' = 0xE4
|
||||
'↔' = 0xE4
|
||||
'&' = 0xE5
|
||||
':' = 0xE6
|
||||
'゛' = 0xF0
|
||||
'゜' = 0xF1
|
||||
'!' = 0xF2
|
||||
'!' = 0xF2
|
||||
'%' = 0xF3
|
||||
'%' = 0xF3
|
||||
'?' = 0xF4
|
||||
'?' = 0xF4
|
||||
'『' = 0xF5
|
||||
'』' = 0xF6
|
||||
'~' = 0xF7
|
||||
'~' = 0xF7
|
||||
'…' = 0xF8
|
||||
'$' = 0xF9
|
||||
'★' = 0xFA
|
||||
@ -202,7 +251,7 @@
|
||||
'☆' = 0xFD
|
||||
'\n' = 0xFE
|
||||
|
||||
# kana or hira with dakuten
|
||||
# hiragana or katakana with dakuten
|
||||
'が' = 0xF0, 0x45
|
||||
'ぎ' = 0xF0, 0x46
|
||||
'ぐ' = 0xF0, 0x47
|
||||
@ -244,7 +293,7 @@
|
||||
'ベ' = 0xF0, 0x8C
|
||||
'ボ' = 0xF0, 0x8D
|
||||
|
||||
# kana or hira with handakuten
|
||||
# hiragana or katakana with handakuten
|
||||
'ぱ' = 0xF1, 0x59
|
||||
'ぴ' = 0xF1, 0x5A
|
||||
'ぷ' = 0xF1, 0x5B
|
||||
|
@ -23,7 +23,7 @@
|
||||
'み' = 0x14
|
||||
'ど' = 0x15
|
||||
'の' = 0x16
|
||||
'?' = 0x17
|
||||
'?' = 0x17
|
||||
'サ' = 0x18
|
||||
'ウ' = 0x19
|
||||
'ン' = 0x1A
|
||||
|
5527
data/behavior_data.c
5527
data/behavior_data.c
File diff suppressed because it is too large
Load Diff
23
enhancements/debug_box.h
Normal file
23
enhancements/debug_box.h
Normal file
@ -0,0 +1,23 @@
|
||||
#ifndef _DEBUG_DRAW_CUBE_H
|
||||
#define _DEBUG_DRAW_CUBE_H
|
||||
|
||||
/**
|
||||
* @file debug_box.h
|
||||
* Draws debug boxes, see debug_box.inc.c for details
|
||||
*/
|
||||
|
||||
#include "types.h"
|
||||
|
||||
/**
|
||||
* The max amount of debug boxes before debug_box() just returns.
|
||||
* You can set this to something higher like 1000, but things like text will stop rendering.
|
||||
*/
|
||||
#define MAX_DEBUG_BOXES 100
|
||||
|
||||
void debug_box(Vec3f center, Vec3f bounds);
|
||||
void debug_box_rot(Vec3f center, Vec3f bounds, s16 yaw);
|
||||
|
||||
void debug_box_pos(Vec3f pMin, Vec3f pMax);
|
||||
void debug_box_pos_rot(Vec3f pMin, Vec3f pMax, s16 yaw);
|
||||
|
||||
#endif /* _DEBUG_DRAW_CUBE_H */
|
248
enhancements/debug_box.inc.c
Normal file
248
enhancements/debug_box.inc.c
Normal file
@ -0,0 +1,248 @@
|
||||
#include <ultra64.h>
|
||||
|
||||
#include "sm64.h"
|
||||
#include "game/game.h"
|
||||
#include "game/geo_misc.h"
|
||||
#include "engine/math_util.h"
|
||||
|
||||
#include "debug_box.h"
|
||||
|
||||
/**
|
||||
* @file debug_box.inc.c
|
||||
* Draws 3D boxes for debugging purposes.
|
||||
*
|
||||
* How to use:
|
||||
*
|
||||
* In area.c, add this to the list of includes:
|
||||
*
|
||||
* #include "enhancements/debug_box.inc.c"
|
||||
*
|
||||
* Then in render_game() in the same file, add a call to render_debug_boxes():
|
||||
*
|
||||
* void render_game(void) {
|
||||
* if (gCurrentArea != NULL && !gWarpTransition.pauseRendering) {
|
||||
* geo_process_root(...);
|
||||
*
|
||||
* render_debug_boxes(); // add here
|
||||
*
|
||||
* gSPViewport(...);
|
||||
* gDPSetScissor(...);
|
||||
* //...
|
||||
*
|
||||
* Now just call debug_box() whenever you want to draw one!
|
||||
*
|
||||
* debug_box by default takes two arguments: a center and bounds vec3f.
|
||||
* This will draw a box starting from the point (center - bounds) to (center + bounds).
|
||||
*
|
||||
* Use debug_box_rot to draw a box rotated in the xz-plane.
|
||||
*
|
||||
* If you want to draw a box by specifying min and max points, use debug_box_pos() instead.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Internal struct containing box info
|
||||
*/
|
||||
struct DebugBox {
|
||||
Vec3s center;
|
||||
Vec3s bounds;
|
||||
s16 yaw;
|
||||
};
|
||||
|
||||
struct DebugBox *sBoxes[MAX_DEBUG_BOXES];
|
||||
s16 sNumBoxes = 0;
|
||||
|
||||
extern Mat4 gMatStack[32]; //XXX: Hack
|
||||
|
||||
/**
|
||||
* The debug boxes' transparency
|
||||
*/
|
||||
#define DBG_BOX_ALPHA 0x7F
|
||||
/**
|
||||
* The debug boxes' color
|
||||
*/
|
||||
#define DBG_BOX_COL 0xFF, 0x00, 0x00, DBG_BOX_ALPHA
|
||||
|
||||
/**
|
||||
* Sets up the RCP for drawing the boxes
|
||||
*/
|
||||
static const Gfx dl_debug_box_begin[] = {
|
||||
gsDPPipeSync(),
|
||||
#if DBG_BOX_ALPHA < 0xFF
|
||||
gsDPSetRenderMode(G_RM_ZB_XLU_SURF, G_RM_NOOP2),
|
||||
#else
|
||||
gsDPSetRenderMode(G_RM_ZB_OPA_SURF, G_RM_NOOP2),
|
||||
#endif
|
||||
gsSPClearGeometryMode(G_LIGHTING | G_CULL_BACK),
|
||||
gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH),
|
||||
gsSPTexture(0, 0, 0, 0, G_OFF),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
/**
|
||||
* Actually draws the box
|
||||
*/
|
||||
static const Gfx dl_debug_draw_box[] = {
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 2, 1, 3, 0x0),
|
||||
gsSP2Triangles( 2, 3, 6, 0x0, 6, 3, 7, 0x0),
|
||||
|
||||
gsSP2Triangles( 4, 0, 2, 0x0, 2, 6, 4, 0x0),
|
||||
gsSP2Triangles( 1, 5, 3, 0x0, 3, 5, 7, 0x0),
|
||||
|
||||
gsSP2Triangles( 1, 0, 4, 0x0, 1, 4, 5, 0x0),
|
||||
gsSP2Triangles( 5, 4, 6, 0x0, 5, 6, 7, 0x0),
|
||||
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds a box to the list to be rendered this frame.
|
||||
*
|
||||
* If there are already MAX_DEBUG_BOXES boxes, does nothing.
|
||||
*/
|
||||
static void append_debug_box(Vec3f center, Vec3f bounds, s16 yaw)
|
||||
{
|
||||
if (sNumBoxes >= MAX_DEBUG_BOXES ||
|
||||
(sBoxes[sNumBoxes] = mem_pool_alloc(gEffectsMemoryPool, sizeof(struct DebugBox))) == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
vec3f_to_vec3s(sBoxes[sNumBoxes]->center, center);
|
||||
vec3f_to_vec3s(sBoxes[sNumBoxes]->bounds, bounds);
|
||||
|
||||
sBoxes[sNumBoxes]->yaw = yaw;
|
||||
|
||||
++sNumBoxes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a debug box from (center - bounds) to (center + bounds)
|
||||
* To draw a rotated box, use debug_box_rot()
|
||||
*
|
||||
* @see debug_box_rot()
|
||||
*/
|
||||
void debug_box(Vec3f center, Vec3f bounds)
|
||||
{
|
||||
append_debug_box(center, bounds, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a debug box from (center - bounds) to (center + bounds), rotating it by `yaw`
|
||||
*/
|
||||
void debug_box_rot(Vec3f center, Vec3f bounds, s16 yaw)
|
||||
{
|
||||
append_debug_box(center, bounds, yaw);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a debug box from pMin to pMax
|
||||
* To draw a rotated box this way, use debug_box_pos_rot()
|
||||
*
|
||||
* @see debug_box_pos_rot()
|
||||
*/
|
||||
void debug_box_pos(Vec3f pMin, Vec3f pMax)
|
||||
{
|
||||
debug_box_pos_rot(pMin, pMax, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a debug box from pMin to pMax, rotating it in the xz-plane by `yaw`
|
||||
*/
|
||||
void debug_box_pos_rot(Vec3f pMin, Vec3f pMax, s16 yaw)
|
||||
{
|
||||
Vec3f center, bounds;
|
||||
|
||||
bounds[0] = pMax[0] - pMin[0] / 2.0f;
|
||||
bounds[1] = pMax[1] - pMin[1] / 2.0f;
|
||||
bounds[2] = pMax[2] - pMin[2] / 2.0f;
|
||||
|
||||
center[0] = pMin[0] + bounds[0];
|
||||
center[1] = pMin[1] + bounds[1];
|
||||
center[2] = pMin[2] + bounds[2];
|
||||
|
||||
append_debug_box(center, bounds, yaw);
|
||||
}
|
||||
|
||||
static void render_box(struct DebugBox *box)
|
||||
{
|
||||
Vtx *verts = alloc_display_list(8 * sizeof(Vtx));
|
||||
Mtx *translate;
|
||||
Mtx *rotate;
|
||||
Mtx *translateback;
|
||||
s32 x0 = box->center[0],
|
||||
y0 = box->center[1],
|
||||
z0 = box->center[2];
|
||||
|
||||
s32 xb = box->bounds[0],
|
||||
yb = box->bounds[1],
|
||||
zb = box->bounds[2];
|
||||
|
||||
if (verts != NULL) {
|
||||
if (box->yaw != 0) {
|
||||
// Translate to the origin, rotate, then translate back, effectively rotating the box about
|
||||
// its center
|
||||
translate = alloc_display_list(sizeof(Mtx));
|
||||
rotate = alloc_display_list(sizeof(Mtx));
|
||||
translateback = alloc_display_list(sizeof(Mtx));
|
||||
|
||||
guTranslate(translate, box->center[0], box->center[1], box->center[2]);
|
||||
guRotate(rotate, box->yaw / (float)0x10000 * 360.0f, 0, 1.0f, 0);
|
||||
guTranslate(translateback, -box->center[0], -box->center[1], -box->center[2]);
|
||||
|
||||
gSPMatrix(gDisplayListHead++, translate, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_PUSH);
|
||||
gSPMatrix(gDisplayListHead++, rotate, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
|
||||
gSPMatrix(gDisplayListHead++, translateback, G_MTX_MODELVIEW | G_MTX_MUL | G_MTX_NOPUSH);
|
||||
}
|
||||
|
||||
#define DBG_BOX_VTX(i, x, y, z) make_vertex(verts, i, x, y, z, 0, 0, DBG_BOX_COL)
|
||||
DBG_BOX_VTX(0, x0 - xb, y0 + yb, z0 - zb);
|
||||
DBG_BOX_VTX(1, x0 + xb, y0 + yb, z0 - zb);
|
||||
DBG_BOX_VTX(2, x0 - xb, y0 - yb, z0 - zb);
|
||||
DBG_BOX_VTX(3, x0 + xb, y0 - yb, z0 - zb);
|
||||
DBG_BOX_VTX(4, x0 - xb, y0 + yb, z0 + zb);
|
||||
DBG_BOX_VTX(5, x0 + xb, y0 + yb, z0 + zb);
|
||||
DBG_BOX_VTX(6, x0 - xb, y0 - yb, z0 + zb);
|
||||
DBG_BOX_VTX(7, x0 + xb, y0 - yb, z0 + zb);
|
||||
#undef DBG_BOX_VTX
|
||||
|
||||
gSPVertex(gDisplayListHead++, VIRTUAL_TO_PHYSICAL(verts), 8, 0);
|
||||
|
||||
gSPDisplayList(gDisplayListHead++, dl_debug_draw_box);
|
||||
|
||||
if (box->yaw != 0) {
|
||||
gSPPopMatrix(gDisplayListHead++, G_MTX_MODELVIEW);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void render_debug_boxes()
|
||||
{
|
||||
s32 i;
|
||||
Mtx *mtx;
|
||||
|
||||
if (sNumBoxes == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
mtx = alloc_display_list(sizeof(Mtx));
|
||||
if (mtx == NULL) {
|
||||
for (i = 0; i < sNumBoxes; ++i) {
|
||||
mem_pool_free(gEffectsMemoryPool, sBoxes[i]);
|
||||
}
|
||||
sNumBoxes = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
//XXX: This is hacky. Ths camera's look-at matrix is stored in gMatStack[1], so this is a simple way
|
||||
// of using it without reconstructing the matrix.
|
||||
mtxf_to_mtx(mtx, gMatStack[1]);
|
||||
gSPMatrix(gDisplayListHead++, mtx, G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
|
||||
gSPDisplayList(gDisplayListHead++, dl_debug_box_begin);
|
||||
|
||||
for (i = 0; i < sNumBoxes; ++i) {
|
||||
render_box(sBoxes[i]);
|
||||
mem_pool_free(gEffectsMemoryPool, sBoxes[i]);
|
||||
}
|
||||
|
||||
sNumBoxes = 0;
|
||||
}
|
@ -9,13 +9,14 @@
|
||||
* Make sure that USE_EXT_RAM is defined in include/segments.h
|
||||
#define USE_EXT_RAM
|
||||
*
|
||||
* There are 6 files you will need to edit:
|
||||
* There are 7 files you will need to edit:
|
||||
* src/game/main.c
|
||||
* src/engine/level_script.h
|
||||
* include/text_strings.h.in
|
||||
* levels/entry.s
|
||||
* levels/intro/script.s
|
||||
* levels/intro/geo.s
|
||||
* levels/entry.c
|
||||
* levels/intro/script.c
|
||||
* levels/intro/geo.c
|
||||
* levels/intro/header.h
|
||||
*
|
||||
* First, in main.c, you will need to add this line below the includes:
|
||||
#include "../enhancements/mem_error_screen.inc.c"
|
||||
@ -45,48 +46,55 @@
|
||||
#define TEXT_PJ64 _("If you are using PJ64 1.6, go to:\nOptions > Settings > Rom Settings Tab > Memory Size\nthen select 8 MB from the drop-down box.")
|
||||
#define TEXT_PJ64_2 _("If you are using PJ64 2.X, go to:\nOptions > Settings > Config: > Memory Size, select 8 MB")
|
||||
*
|
||||
* In levels/entry.s, simply append the following to the file:
|
||||
glabel level_script_entry_error_screen
|
||||
init_level
|
||||
sleep 2
|
||||
blackout FALSE
|
||||
set_reg 0
|
||||
execute 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_error_screen
|
||||
jump level_script_entry_error_screen
|
||||
.align 4
|
||||
* In levels/entry.c, simply append the following to the file:
|
||||
const LevelScript level_script_entry_error_screen[] {
|
||||
INIT_LEVEL(),
|
||||
SLEEP(2),
|
||||
BLACKOUT(FALSE),
|
||||
SET_REG(0),
|
||||
EXECUTE(0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_error_screen),
|
||||
JUMP(level_script_entry_error_screen),
|
||||
};
|
||||
*
|
||||
* In levels/intro/script.s, add the following to the top of the file:
|
||||
glabel level_intro_entry_error_screen
|
||||
init_level
|
||||
fixed_load _goddardSegmentStart, _goddardSegmentRomStart, _goddardSegmentRomEnd
|
||||
load_mio0 0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd
|
||||
alloc_level_pool
|
||||
* In levels/intro/script.c, add the following to the top of the file:
|
||||
const LevelScript level_intro_entry_error_screen[] {
|
||||
INIT_LEVEL(),
|
||||
FIXED_LOAD(_goddardSegmentStart, _goddardSegmentRomStart, _goddardSegmentRomEnd),
|
||||
LOAD_MIO0(0x07, _intro_segment_7SegmentRomStart, _intro_segment_7SegmentRomEnd),
|
||||
ALLOC_LEVEL_POOL(),
|
||||
|
||||
area 1, intro_geo_error_screen
|
||||
end_area
|
||||
AREA(1, intro_geo_error_screen),
|
||||
END_AREA(),
|
||||
|
||||
free_level_pool
|
||||
load_area 1
|
||||
sleep 32767
|
||||
exit_and_execute 0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_error_screen
|
||||
FREE_LEVEL_POOL(),
|
||||
LOAD_AREA(1),
|
||||
SLEEP(32767),
|
||||
EXIT_AND_EXECUTE(0x14, _introSegmentRomStart, _introSegmentRomEnd, level_intro_entry_error_screen),
|
||||
};
|
||||
*
|
||||
* Finally, add the following to the top of levels/intro/geo.s:
|
||||
glabel intro_geo_error_screen
|
||||
geo_node_screen_area 0, 160, 120, 160, 120
|
||||
geo_open_node
|
||||
geo_zbuffer 0
|
||||
geo_open_node
|
||||
geo_node_ortho 100
|
||||
geo_open_node
|
||||
geo_background 0x0001
|
||||
geo_close_node
|
||||
geo_close_node
|
||||
geo_zbuffer 0
|
||||
geo_open_node
|
||||
geo_asm 0, geo18_display_error_message
|
||||
geo_close_node
|
||||
geo_close_node
|
||||
geo_end
|
||||
* Add the following to the top of levels/intro/geo.c:
|
||||
const GeoLayout intro_geo_error_screen[] {
|
||||
GEO_NODE_SCREEN_AREA(0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2, SCREEN_WIDTH/2, SCREEN_HEIGHT/2),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_ZBUFFER(0),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_NODE_ORTHO(100),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_BACKGROUND_COLOR(0x0001),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ZBUFFER(0),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_ASM(0, geo18_display_error_message),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_END(),
|
||||
};
|
||||
|
||||
* Finally, add the following to the bottom of levels/intro/header.h:
|
||||
extern const GeoLayout intro_geo_error_screen[];
|
||||
extern const LevelScript level_intro_entry_error_screen[];
|
||||
extern Gfx *geo18_display_error_message(u32 run, UNUSED struct GraphNode *sp44, UNUSED u32 sp48);
|
||||
*/
|
||||
/* clang-format on */
|
||||
|
||||
|
@ -20,6 +20,12 @@ def read_local_asset_list(f):
|
||||
|
||||
|
||||
def asset_needs_update(asset, version):
|
||||
if version <= 4 and asset in ["textures/mountain/ttm_textures.01800.rgba16.png", "textures/mountain/ttm_textures.05800.rgba16.png"]:
|
||||
return True
|
||||
if version <= 3 and asset == "textures/cave/hmc_textures.01800.rgba16.png":
|
||||
return True
|
||||
if version <= 2 and asset == "textures/inside/inside_castle_textures.09000.rgba16.png":
|
||||
return True
|
||||
if version <= 1 and asset.endswith(".m64"):
|
||||
return True
|
||||
if version <= 0 and asset.endswith(".aiff"):
|
||||
@ -51,7 +57,7 @@ def clean_assets(local_asset_file):
|
||||
def main():
|
||||
# In case we ever need to change formats of generated files, we keep a
|
||||
# revision ID in the local asset file.
|
||||
new_version = 2
|
||||
new_version = 5
|
||||
|
||||
try:
|
||||
local_asset_file = open(".assets-local.txt")
|
||||
|
@ -50,7 +50,7 @@ extern const BehaviorScript bhvWarp[];
|
||||
extern const BehaviorScript bhvWarpPipe[];
|
||||
extern const BehaviorScript bhvWhitePuffExplosion[];
|
||||
extern const BehaviorScript bhvSpawnedStar[];
|
||||
extern const BehaviorScript bhvUnused080C[];
|
||||
extern const BehaviorScript bhvSpawnedStarNoLevelExit[];
|
||||
extern const BehaviorScript bhvMrIBlueCoin[];
|
||||
extern const BehaviorScript bhvCoinInsideBoo[];
|
||||
extern const BehaviorScript bhvCoinFormationSpawn[];
|
||||
|
@ -4,17 +4,16 @@
|
||||
// Start of the 3 cap courses in a row.
|
||||
#define COURSE_CAP_COURSES COURSE_COTMC
|
||||
|
||||
#define DEFINE_COURSE(courseenum, _1, _2, _3, _4) courseenum,
|
||||
#define DEFINE_COURSE(courseenum, _1) courseenum,
|
||||
#define DEFINE_COURSES_END() \
|
||||
COURSE_BONUS_STAGES, \
|
||||
COURSE_STAGES_MAX = COURSE_BONUS_STAGES - 1, \
|
||||
COURSE_STAGES_COUNT = COURSE_STAGES_MAX,
|
||||
|
||||
#define DEFINE_BONUS_COURSE(courseenum, _1, _2, _3, _4) courseenum,
|
||||
#define DEFINE_BONUS_COURSE(courseenum, _1) courseenum,
|
||||
|
||||
enum CourseNum
|
||||
{
|
||||
COURSE_NONE, // (0) Overworld (Castle Grounds, etc)
|
||||
#include "levels/course_defines.h"
|
||||
COURSE_END, // To mark end + 1 for marking max and count.
|
||||
// Todo: clean this up. This is still bad. Which
|
||||
|
@ -163,12 +163,12 @@
|
||||
* 0x0F: Create a camera scene graph node.
|
||||
* 0x01: unused
|
||||
* 0x02: s16 camera type
|
||||
* 0x04: s16 fromX
|
||||
* 0x06: s16 fromY
|
||||
* 0x08: s16 fromZ
|
||||
* 0x0A: s16 toX
|
||||
* 0x0C: s16 toY
|
||||
* 0x0E: s16 toZ
|
||||
* 0x04: s16 posX
|
||||
* 0x06: s16 posY
|
||||
* 0x08: s16 posZ
|
||||
* 0x0A: s16 focusX
|
||||
* 0x0C: s16 focusY
|
||||
* 0x0E: s16 focusZ
|
||||
* 0x10: GraphNodeFunc function
|
||||
*/
|
||||
#define GEO_CAMERA(type, x1, y1, z1, x2, y2, z2, function) \
|
||||
|
@ -46,7 +46,7 @@
|
||||
#define SURFACE_BOSS_FIGHT_CAMERA 0x0065 // Wide camera for BOB and WF bosses
|
||||
#define SURFACE_CAMERA_FREE_ROAM 0x0066 // Free roam camera for THI and TTC
|
||||
#define SURFACE_THI3_WALLKICK 0x0068 // Surface where there's a wall kick section in THI 3rd area, has no action defined
|
||||
#define SURFACE_CAMERA_PLATFORM 0x0069 // Surface that enables far camera for platforms, used in THI
|
||||
#define SURFACE_CAMERA_8_DIR 0x0069 // Surface that enables far camera for platforms, used in THI
|
||||
#define SURFACE_CAMERA_MIDDLE 0x006E // Surface camera that returns to the middle, used on the 4 pillars of SSL
|
||||
#define SURFACE_CAMERA_ROTATE_RIGHT 0x006F // Surface camera that rotates to the right (Bowser 1 & THI)
|
||||
#define SURFACE_CAMERA_ROTATE_LEFT 0x0070 // Surface camera that rotates to the left (BOB & TTM)
|
||||
|
@ -10,7 +10,7 @@
|
||||
*/
|
||||
#define TEXT_JPHUD_MARIO _("マリオ")
|
||||
#define TEXT_JPHUD_SELECT_FILE _("ファイルセレクト")
|
||||
#define TEXT_JPHUD_CHECK_FILE _("どのスコアをみる?")
|
||||
#define TEXT_JPHUD_CHECK_FILE _("どのスコアをみる?")
|
||||
#define TEXT_JPHUD_COPY_FILE _("ファイルコピーする")
|
||||
#define TEXT_JPHUD_ERASE_FILE _("ファイルけす")
|
||||
#define TEXT_JPHUD_SOUND_SELECT _("サウンドセレクト")
|
||||
|
@ -39,14 +39,14 @@
|
||||
#define TEXT_ERASE_FILE TEXT_JPHUD_ERASE_FILE
|
||||
#define TEXT_SOUND_SELECT TEXT_JPHUD_SOUND_SELECT
|
||||
|
||||
#define TEXT_FILE_MARIO_A _("マリオA")
|
||||
#define TEXT_FILE_MARIO_B _("マリオB")
|
||||
#define TEXT_FILE_MARIO_C _("マリオC")
|
||||
#define TEXT_FILE_MARIO_D _("マリオD")
|
||||
#define TEXT_FILE_MARIO_A _("マリオA")
|
||||
#define TEXT_FILE_MARIO_B _("マリオB")
|
||||
#define TEXT_FILE_MARIO_C _("マリオC")
|
||||
#define TEXT_FILE_MARIO_D _("マリオD")
|
||||
|
||||
// Menu Options
|
||||
#define TEXT_SCORE _("スコア")
|
||||
#define TEXT_COPY _("コピ-")
|
||||
#define TEXT_COPY _("コピー")
|
||||
#define TEXT_ERASE _("けす")
|
||||
|
||||
// Sound Options
|
||||
@ -55,72 +55,72 @@
|
||||
#define TEXT_HEADSET _("ヘッドホン")
|
||||
|
||||
// Misc Menu Text
|
||||
#define TEXT_SAVED_DATA_EXISTS _("ファイルにデ-タがはいってます")
|
||||
#define TEXT_NO_SAVED_DATA_EXISTS _("ファイルにデ-タがありません")
|
||||
#define TEXT_SAVED_DATA_EXISTS _("ファイルにデータがはいってます")
|
||||
#define TEXT_NO_SAVED_DATA_EXISTS _("ファイルにデータがありません")
|
||||
|
||||
// Inside a Menu
|
||||
#define TEXT_RETURN _("もどる")
|
||||
#define TEXT_CHECK_SCORE _("スコアをみる")
|
||||
#define TEXT_COPY_FILE_BUTTON _("ファイルコピ-")
|
||||
#define TEXT_COPY_FILE_BUTTON _("ファイルコピー")
|
||||
#define TEXT_ERASE_FILE_BUTTON _("ファイルけす")
|
||||
|
||||
// Score Menu
|
||||
#define TEXT_HI_SCORE _("ハイスコア")
|
||||
#define TEXT_MY_SCORE _("マイスコア")
|
||||
#define TEXT_SCORE_MARIO_A _("マリオA")
|
||||
#define TEXT_SCORE_MARIO_B _("マリオB")
|
||||
#define TEXT_SCORE_MARIO_C _("マリオC")
|
||||
#define TEXT_SCORE_MARIO_D _("マリオD")
|
||||
#define TEXT_SCORE_MARIO_A _("マリオA")
|
||||
#define TEXT_SCORE_MARIO_B _("マリオB")
|
||||
#define TEXT_SCORE_MARIO_C _("マリオC")
|
||||
#define TEXT_SCORE_MARIO_D _("マリオD")
|
||||
|
||||
// Copy Menu
|
||||
#define TEXT_COPY_IT_TO_WHERE _("どこにコピ-しますか?")
|
||||
#define TEXT_COPYING_COMPLETED _("コピ-おわりました")
|
||||
#define TEXT_COPY_IT_TO_WHERE _("どこにコピーしますか?")
|
||||
#define TEXT_COPYING_COMPLETED _("コピーおわりました")
|
||||
#define TEXT_NO_FILE_TO_COPY_FROM _("からのファイルがありません")
|
||||
|
||||
// Erase Menu
|
||||
#define TEXT_SURE _("ほんと?")
|
||||
#define TEXT_SURE _("ほんと?")
|
||||
#define TEXT_YES _("はい")
|
||||
#define TEXT_NO _("いいえ")
|
||||
#define TEXT_FILE_MARIO_A_JUST_ERASED _("マリオAをけしました")
|
||||
#define TEXT_FILE_MARIO_A_JUST_ERASED _("マリオAをけしました")
|
||||
|
||||
/**
|
||||
* Menus Text (Pause, Course Completed)
|
||||
*/
|
||||
// Main Courses
|
||||
#define TEXT_COURSE _("コ-ス")
|
||||
#define TEXT_COURSE _("コース")
|
||||
#define TEXT_MYSCORE _("マイスコア")
|
||||
#define TEXT_CONTINUE _("つづけて マリオする?")
|
||||
#define TEXT_EXIT_COURSE _("コ-スからでる?")
|
||||
#define TEXT_CAMERA_ANGLE_R _("Rボタンのカメラきりかえ")
|
||||
#define TEXT_CONTINUE _("つづけて マリオする?")
|
||||
#define TEXT_EXIT_COURSE _("コースからでる?")
|
||||
#define TEXT_CAMERA_ANGLE_R _("Rボタンのカメラきりかえ")
|
||||
|
||||
// Camera Options
|
||||
#define TEXT_LAKITU_MARIO _("ジュゲム+マリオ")
|
||||
#define TEXT_LAKITU_STOP _("ジュゲム+ストップ")
|
||||
#define TEXT_NORMAL_UPCLOSE _("(おすすめ)(リアル)")
|
||||
#define TEXT_NORMAL_FIXED _("(おすすめ)(とまる)")
|
||||
#define TEXT_LAKITU_MARIO _("ジュゲム↔マリオ")
|
||||
#define TEXT_LAKITU_STOP _("ジュゲム↔ストップ")
|
||||
#define TEXT_NORMAL_UPCLOSE _("(おすすめ)(リアル)")
|
||||
#define TEXT_NORMAL_FIXED _("(おすすめ)(とまる)")
|
||||
|
||||
// Course Completed Misc Text
|
||||
#define TEXT_CATCH _("キャッチ!")
|
||||
#define TEXT_CLEAR _("クリア!")
|
||||
#define TEXT_HUD_HI_SCORE _("HISCORE")
|
||||
#define TEXT_CATCH _("キャッチ!")
|
||||
#define TEXT_CLEAR _("クリア!")
|
||||
#define TEXT_HUD_HI_SCORE _("HISCORE")
|
||||
|
||||
// Save Options
|
||||
#define TEXT_SAVE_AND_CONTINUE _("セ-ブしてつづける?")
|
||||
#define TEXT_SAVE_AND_QUIT _("セ-ブしておわる?")
|
||||
#define TEXT_CONTINUE_WITHOUT_SAVING _("セ-ブしないでつづける?")
|
||||
#define TEXT_SAVE_AND_CONTINUE _("セーブしてつづける?")
|
||||
#define TEXT_SAVE_AND_QUIT _("セーブしておわる?")
|
||||
#define TEXT_CONTINUE_WITHOUT_SAVING _("セーブしないでつづける?")
|
||||
|
||||
/**
|
||||
* Ending Peach cutscene text.
|
||||
*/
|
||||
#define TEXT_FILE_MARIO_EXCLAMATION _("マリオ!!")
|
||||
#define TEXT_POWER_STARS_RESTORED _("おしろにスタ-が もどったのね")
|
||||
#define TEXT_THANKS_TO_YOU _("みんな あなたのおかげだわ!")
|
||||
#define TEXT_THANK_YOU_MARIO _("ありがとう マリオ")
|
||||
#define TEXT_SOMETHING_SPECIAL _("なにか おれいをしなくちゃ・・")
|
||||
#define TEXT_LISTEN_EVERYBODY _("さあ みんな")
|
||||
#define TEXT_LETS_HAVE_CAKE _("おいしいケ-キを やきましょう")
|
||||
#define TEXT_FOR_MARIO _("マリオの ために・・・")
|
||||
#define TEXT_FILE_MARIO_QUESTION _("マリオ?")
|
||||
#define TEXT_FILE_MARIO_EXCLAMATION _("マリオ!!")
|
||||
#define TEXT_POWER_STARS_RESTORED _("おしろにスターが もどったのね")
|
||||
#define TEXT_THANKS_TO_YOU _("みんな あなたのおかげだわ!")
|
||||
#define TEXT_THANK_YOU_MARIO _("ありがとう マリオ")
|
||||
#define TEXT_SOMETHING_SPECIAL _("なにか おれいをしなくちゃ・・")
|
||||
#define TEXT_LISTEN_EVERYBODY _("さあ みんな")
|
||||
#define TEXT_LETS_HAVE_CAKE _("おいしいケーキを やきましょう")
|
||||
#define TEXT_FOR_MARIO _("マリオの ために・・・")
|
||||
#define TEXT_FILE_MARIO_QUESTION _("マリオ?")
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
extern const u8 cave_09000000[];
|
||||
extern const u8 cave_09001000[];
|
||||
extern const u8 cave_09001800[];
|
||||
extern const u8 cave_09002000[];
|
||||
extern const u8 cave_09002800[];
|
||||
extern const u8 cave_09003000[];
|
||||
extern const u8 cave_09003800[];
|
||||
@ -114,7 +113,6 @@ extern const u8 inside_09007000[];
|
||||
extern const u8 inside_09008000[];
|
||||
extern const u8 inside_09008800[];
|
||||
extern const u8 inside_09009000[];
|
||||
extern const u8 inside_09009800[];
|
||||
extern const u8 inside_0900A000[];
|
||||
extern const u8 inside_0900B000[];
|
||||
extern const u8 inside_0900B800[];
|
||||
@ -142,7 +140,6 @@ extern const u8 machine_09008400[];
|
||||
extern const u8 mountain_09000000[];
|
||||
extern const u8 mountain_09000800[];
|
||||
extern const u8 mountain_09001800[];
|
||||
extern const u8 mountain_09002000[];
|
||||
extern const u8 mountain_09002800[];
|
||||
extern const u8 mountain_09003000[];
|
||||
extern const u8 mountain_09003800[];
|
||||
@ -150,7 +147,6 @@ extern const u8 mountain_09004000[];
|
||||
extern const u8 mountain_09004800[];
|
||||
extern const u8 mountain_09005000[];
|
||||
extern const u8 mountain_09005800[];
|
||||
extern const u8 mountain_09006000[];
|
||||
extern const u8 mountain_09006800[];
|
||||
extern const u8 mountain_09007000[];
|
||||
extern const u8 mountain_09007800[];
|
||||
|
@ -309,7 +309,7 @@ struct MarioState
|
||||
/*0x88*/ struct Object *marioObj;
|
||||
/*0x8C*/ struct SpawnInfo *spawnInfo;
|
||||
/*0x90*/ struct Area *area;
|
||||
/*0x94*/ struct CameraPlayerStatus *statusForCamera;
|
||||
/*0x94*/ struct PlayerCameraState *statusForCamera;
|
||||
/*0x98*/ struct MarioBodyState *marioBodyState;
|
||||
/*0x9C*/ struct Controller *controller;
|
||||
/*0xA0*/ struct MarioAnimation *animation;
|
||||
|
@ -479,7 +479,7 @@ const GeoLayout geo_bbh_000F00[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 50, 10000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SWITCH_CASE(32, geo_switch_area),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout geo_bitdw_000618[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, bitdw_seg7_dl_070020C8),
|
||||
GEO_RENDER_OBJ(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bitfs_geo_0007A0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, bitfs_seg7_dl_07002118),
|
||||
GEO_ASM( 0, geo_movtex_pause_control),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bits_geo_000718[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, -4500, -8000, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, bits_seg7_dl_07002918),
|
||||
GEO_RENDER_OBJ(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bob_geo_000488[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 30000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 3072, 0, -4608, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 3072, 0, -4608, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07004390),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, bob_seg7_dl_07009D80),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bowser_1_geo_0000D0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_1_seg7_dl_07002768),
|
||||
GEO_RENDER_OBJ(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bowser_2_geo_000188[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_2_seg7_dl_07001930),
|
||||
GEO_RENDER_OBJ(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout bowser_3_geo_000398[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(11, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, bowser_3_seg7_dl_070046B0),
|
||||
GEO_RENDER_OBJ(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout castle_courtyard_geo_000218[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_courtyard_seg7_dl_070048B8),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT_DECAL, castle_courtyard_seg7_dl_07005698),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout castle_grounds_geo_00073C[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 1500, 2500, 0, 1500, -12000, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 1500, 2500, 0, 1500, -12000, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_07006D70),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, castle_grounds_seg7_dl_070095F0),
|
||||
|
@ -269,7 +269,7 @@ const GeoLayout castle_geo_001400[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 7000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(13, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(13, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SWITCH_CASE(17, geo_switch_area),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -174,7 +174,7 @@ const GeoLayout castle_geo_001858[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 8000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SWITCH_CASE(11, geo_switch_area),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -160,7 +160,7 @@ const GeoLayout castle_geo_001C10[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 50, 6400, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SWITCH_CASE(10, geo_switch_area),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ccm_geo_00051C[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B090),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0700B1D8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ccm_geo_0005E8[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701CE30),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ccm_seg7_dl_0701E558),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout cotmc_geo_0001A0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_07007D48),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, cotmc_seg7_dl_0700A160),
|
||||
|
@ -1,29 +1,39 @@
|
||||
// Define lists for list of course for macros. Each of the following fields are described:
|
||||
// Argument 1: Course macro for define.
|
||||
// Argument 2, 3, 4, 5: Each hex digit is an index into D_8032E8A4 which is for a table of cutscene dance indexes. Defined by course index so we must define these.
|
||||
DEFINE_COURSE(COURSE_BOB, 0x00, 0x20, 0x22, 0x04) // (1) Bob Omb Battlefield
|
||||
DEFINE_COURSE(COURSE_WF, 0x00, 0x00, 0x02, 0x04) // (2) Whomp's Fortress
|
||||
DEFINE_COURSE(COURSE_JRB, 0x22, 0x22, 0x22, 0x04) // (3) Jolly Rodger's Bay
|
||||
DEFINE_COURSE(COURSE_CCM, 0x00, 0x22, 0x00, 0x04) // (4) Cool Cool Mountain
|
||||
DEFINE_COURSE(COURSE_BBH, 0x22, 0x22, 0x22, 0x04) // (5) Big Boo's Haunt
|
||||
DEFINE_COURSE(COURSE_HMC, 0x22, 0x22, 0x22, 0x04) // (6) Hazy Maze Cave
|
||||
DEFINE_COURSE(COURSE_LLL, 0x12, 0x12, 0x12, 0x04) // (7) Lethal Lava Land
|
||||
DEFINE_COURSE(COURSE_SSL, 0x02, 0x22, 0x22, 0x04) // (8) Shifting Sand Land
|
||||
DEFINE_COURSE(COURSE_DDD, 0x22, 0x22, 0x22, 0x04) // (9) Dire Dire Docks
|
||||
DEFINE_COURSE(COURSE_SL, 0x20, 0x20, 0x20, 0x04) // (10) Snowman's Land
|
||||
DEFINE_COURSE(COURSE_WDW, 0x22, 0x01, 0x22, 0x04) // (11) Wet Dry World
|
||||
DEFINE_COURSE(COURSE_TTM, 0x00, 0x00, 0x00, 0x04) // (12) Tall Tall Mountain
|
||||
DEFINE_COURSE(COURSE_THI, 0x11, 0x11, 0x12, 0x04) // (13) Tiny Huge Island
|
||||
DEFINE_COURSE(COURSE_TTC, 0x22, 0x22, 0x22, 0x04) // (14) Tick Tock Clock
|
||||
DEFINE_COURSE(COURSE_RR, 0x00, 0x00, 0x00, 0x04) // (15) Rainbow Ride
|
||||
/* Define lists for list of course for macros. Each of the following fields are described:
|
||||
* Argument 1: Course macro for define.
|
||||
* Argument 2: Star collection dance cutscenes
|
||||
* Each hex digit determines what dance cutscene to play for the stars in the course. The last digit is
|
||||
* unused. See determine_dance_cutscene() in camera.c for details.
|
||||
* Cutscene Digits:
|
||||
* 0: Lakitu flies away after the dance
|
||||
* 1: The camera rotates around mario
|
||||
* 2: The camera goes to a closeup of mario
|
||||
* 3: Bowser keys and the grand star
|
||||
* 4: Default, used for 100 coin stars, 8 red coin stars in bowser levels, and secret stars
|
||||
*/
|
||||
DEFINE_COURSE(COURSE_NONE, 0x44444440) // (0) Course Hub (Castle Grounds)
|
||||
DEFINE_COURSE(COURSE_BOB, 0x00022240) // (1) Bob Omb Battlefield
|
||||
DEFINE_COURSE(COURSE_WF, 0x00002040) // (2) Whomp's Fortress
|
||||
DEFINE_COURSE(COURSE_JRB, 0x22222240) // (3) Jolly Rodger's Bay
|
||||
DEFINE_COURSE(COURSE_CCM, 0x00220040) // (4) Cool Cool Mountain
|
||||
DEFINE_COURSE(COURSE_BBH, 0x22222240) // (5) Big Boo's Haunt
|
||||
DEFINE_COURSE(COURSE_HMC, 0x22222240) // (6) Hazy Maze Cave
|
||||
DEFINE_COURSE(COURSE_LLL, 0x21212140) // (7) Lethal Lava Land
|
||||
DEFINE_COURSE(COURSE_SSL, 0x20222240) // (8) Shifting Sand Land
|
||||
DEFINE_COURSE(COURSE_DDD, 0x22222240) // (9) Dire Dire Docks
|
||||
DEFINE_COURSE(COURSE_SL, 0x02020240) // (10) Snowman's Land
|
||||
DEFINE_COURSE(COURSE_WDW, 0x22102240) // (11) Wet Dry World
|
||||
DEFINE_COURSE(COURSE_TTM, 0x00000040) // (12) Tall Tall Mountain
|
||||
DEFINE_COURSE(COURSE_THI, 0x11112140) // (13) Tiny Huge Island
|
||||
DEFINE_COURSE(COURSE_TTC, 0x22222240) // (14) Tick Tock Clock
|
||||
DEFINE_COURSE(COURSE_RR, 0x00000040) // (15) Rainbow Ride
|
||||
DEFINE_COURSES_END()
|
||||
DEFINE_BONUS_COURSE(COURSE_BITDW, 0x43, 0x44, 0x44, 0x04) // (16) Bowser in the Dark World
|
||||
DEFINE_BONUS_COURSE(COURSE_BITFS, 0x43, 0x44, 0x44, 0x04) // (17) Bowser in the Fire Sea
|
||||
DEFINE_BONUS_COURSE(COURSE_BITS, 0x43, 0x44, 0x44, 0x04) // (18) Bowser in the Sky
|
||||
DEFINE_BONUS_COURSE(COURSE_PSS, 0x42, 0x44, 0x44, 0x04) // (19) Princess's Secret Slide
|
||||
DEFINE_BONUS_COURSE(COURSE_COTMC, 0x44, 0x44, 0x44, 0x04) // (20) Cavern of the Metal Cap
|
||||
DEFINE_BONUS_COURSE(COURSE_TOTWC, 0x40, 0x44, 0x44, 0x04) // (21) Tower of the Wing Cap
|
||||
DEFINE_BONUS_COURSE(COURSE_VCUTM, 0x42, 0x44, 0x44, 0x04) // (22) Vanish Cap Under the Moat
|
||||
DEFINE_BONUS_COURSE(COURSE_WMOTR, 0x40, 0x44, 0x44, 0x04) // (23) Winged Mario over the Rainbow
|
||||
DEFINE_BONUS_COURSE(COURSE_SA, 0x42, 0x44, 0x44, 0x04) // (24) Secret Aquarium
|
||||
DEFINE_BONUS_COURSE(COURSE_CAKE_END, 0x44, 0x44, 0x44, 0x04) // (25) The End (Cake Scene)
|
||||
DEFINE_BONUS_COURSE(COURSE_BITDW, 0x34444440) // (16) Bowser in the Dark World
|
||||
DEFINE_BONUS_COURSE(COURSE_BITFS, 0x34444440) // (17) Bowser in the Fire Sea
|
||||
DEFINE_BONUS_COURSE(COURSE_BITS, 0x34444440) // (18) Bowser in the Sky
|
||||
DEFINE_BONUS_COURSE(COURSE_PSS, 0x24444440) // (19) Princess's Secret Slide
|
||||
DEFINE_BONUS_COURSE(COURSE_COTMC, 0x44444440) // (20) Cavern of the Metal Cap
|
||||
DEFINE_BONUS_COURSE(COURSE_TOTWC, 0x04444440) // (21) Tower of the Wing Cap
|
||||
DEFINE_BONUS_COURSE(COURSE_VCUTM, 0x24444440) // (22) Vanish Cap Under the Moat
|
||||
DEFINE_BONUS_COURSE(COURSE_WMOTR, 0x04444440) // (23) Winged Mario over the Rainbow
|
||||
DEFINE_BONUS_COURSE(COURSE_SA, 0x24444440) // (24) Secret Aquarium
|
||||
DEFINE_BONUS_COURSE(COURSE_CAKE_END, 0x44444440) // (25) The End (Cake Scene)
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ddd_geo_0004C0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 2560, 0, 512, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 2560, 0, 512, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07004D48),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_070057E8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ddd_geo_000570[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 2560, 0, 512, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 2560, 0, 512, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007408),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ddd_seg7_dl_07007CB8),
|
||||
|
@ -26,7 +26,7 @@ const GeoLayout ending_geo_000050[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_CLOSE_NODE(),
|
||||
|
@ -302,7 +302,7 @@ const GeoLayout hmc_geo_000B90[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SWITCH_CASE(18, geo_switch_area),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout jrb_geo_000A18[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_07002FD0),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_07004940),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout jrb_geo_000AFC[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 10000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, jrb_seg7_dl_0700EF00),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, jrb_seg7_dl_0700FE48),
|
||||
|
@ -15,25 +15,23 @@
|
||||
// Argument 10: Specify dynamic music tables for levels, if specified. _ for none.
|
||||
// Argument 11: Specify level camera table, if specified. _ for none.
|
||||
|
||||
// NOTE: Be sure to edit zoomOutAreaMasks in camera.c, as there isnt a good way to macro those right now.
|
||||
// TODO: Figure something out for zoomOutAreaMasks?
|
||||
#ifndef SKIP_FIRST_LAST_STUBS // this is needed for the zoomOutAreaMasks array which has a weird way of doing the bit array packs.
|
||||
// NOTE: Be sure to edit sZoomOutAreaMasks in camera.c, as there isnt a good way to macro those right now.
|
||||
// TODO: Figure something out for sZoomOutAreaMasks?
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_1, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
#endif
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_2, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_3, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
DEFINE_LEVEL("TERESA OBAKE", LEVEL_BBH, COURSE_BBH, bbh, spooky, 28000, 0x28, 0x28, 0x28, sDynBbh, TableCameraBBH)
|
||||
DEFINE_LEVEL("YYAMA1 % YSLD1", LEVEL_CCM, COURSE_CCM, ccm, snow, 17000, 0x10, 0x38, 0x38, _, TableCameraCCM)
|
||||
DEFINE_LEVEL("SELECT ROOM", LEVEL_CASTLE, COURSE_NONE, castle_inside, inside, 20000, 0x20, 0x20, 0x30, _, TableCameraInside)
|
||||
DEFINE_LEVEL("HORROR DUNGEON", LEVEL_HMC, COURSE_HMC, hmc, cave, 16000, 0x28, 0x28, 0x28, sDynHmc, TableCameraHMC)
|
||||
DEFINE_LEVEL("SABAKU % PYRMD", LEVEL_SSL, COURSE_SSL, ssl, generic, 15000, 0x08, 0x30, 0x30, _, TableCameraSSL)
|
||||
DEFINE_LEVEL("TERESA OBAKE", LEVEL_BBH, COURSE_BBH, bbh, spooky, 28000, 0x28, 0x28, 0x28, sDynBbh, sCamBBH)
|
||||
DEFINE_LEVEL("YYAMA1 % YSLD1", LEVEL_CCM, COURSE_CCM, ccm, snow, 17000, 0x10, 0x38, 0x38, _, sCamCCM)
|
||||
DEFINE_LEVEL("SELECT ROOM", LEVEL_CASTLE, COURSE_NONE, castle_inside, inside, 20000, 0x20, 0x20, 0x30, _, sCamCastle)
|
||||
DEFINE_LEVEL("HORROR DUNGEON", LEVEL_HMC, COURSE_HMC, hmc, cave, 16000, 0x28, 0x28, 0x28, sDynHmc, sCamHMC)
|
||||
DEFINE_LEVEL("SABAKU % PYRMD", LEVEL_SSL, COURSE_SSL, ssl, generic, 15000, 0x08, 0x30, 0x30, _, sCamSSL)
|
||||
DEFINE_LEVEL("BATTLE FIELD", LEVEL_BOB, COURSE_BOB, bob, generic, 15000, 0x08, 0x08, 0x08, _, _)
|
||||
DEFINE_LEVEL("YUKIYAMA2", LEVEL_SL, COURSE_SL, sl, snow, 14000, 0x10, 0x28, 0x28, _, TableCameraSL)
|
||||
DEFINE_LEVEL("YUKIYAMA2", LEVEL_SL, COURSE_SL, sl, snow, 14000, 0x10, 0x28, 0x28, _, sCamSL)
|
||||
DEFINE_LEVEL("POOL KAI", LEVEL_WDW, COURSE_WDW, wdw, grass, 17000, 0x10, 0x18, 0x18, sDynWdw, _)
|
||||
DEFINE_LEVEL("WTDG % TINBOTU", LEVEL_JRB, COURSE_JRB, jrb, water, 20000, 0x10, 0x18, 0x18, sDynJrb, _)
|
||||
DEFINE_LEVEL("BIG WORLD", LEVEL_THI, COURSE_THI, thi, grass, 20000, 0x0c, 0x0c, 0x20, _, TableCameraTHI)
|
||||
DEFINE_LEVEL("BIG WORLD", LEVEL_THI, COURSE_THI, thi, grass, 20000, 0x0c, 0x0c, 0x20, _, sCamTHI)
|
||||
DEFINE_LEVEL("CLOCK TOWER", LEVEL_TTC, COURSE_TTC, ttc, machine, 18000, 0x18, 0x18, 0x18, _, _)
|
||||
DEFINE_LEVEL("RAINBOW CRUISE", LEVEL_RR, COURSE_RR, rr, sky, 20000, 0x20, 0x20, 0x20, _, TableCameraRR)
|
||||
DEFINE_LEVEL("RAINBOW CRUISE", LEVEL_RR, COURSE_RR, rr, sky, 20000, 0x20, 0x20, 0x20, _, sCamRR)
|
||||
DEFINE_LEVEL("MAIN MAP", LEVEL_CASTLE_GROUNDS, COURSE_NONE, castle_grounds, outside, 25000, 0x08, 0x08, 0x08, _, _)
|
||||
DEFINE_LEVEL("EXT1 YOKO SCRL", LEVEL_BITDW, COURSE_BITDW, bitdw, sky, 16000, 0x28, 0x28, 0x28, _, _)
|
||||
DEFINE_LEVEL("EXT7 HORI MINI", LEVEL_VCUTM, COURSE_VCUTM, vcutm, outside, 30000, 0x28, 0x28, 0x28, _, _)
|
||||
@ -46,7 +44,7 @@ DEFINE_LEVEL("MOUNTAIN", LEVEL_WF, COURSE_WF, wf,
|
||||
DEFINE_LEVEL("ENDING", LEVEL_ENDING, COURSE_CAKE_END, ending, generic, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
DEFINE_LEVEL("URANIWA", LEVEL_CASTLE_COURTYARD, COURSE_NONE, castle_courtyard, outside, 20000, 0x08, 0x08, 0x08, _, _)
|
||||
DEFINE_LEVEL("EXT4 MINI SLID", LEVEL_PSS, COURSE_PSS, pss, mountain, 20000, 0x28, 0x28, 0x28, _, _)
|
||||
DEFINE_LEVEL("IN THE FALL", LEVEL_COTMC, COURSE_COTMC, cotmc, cave, 18000, 0x28, 0x28, 0x28, _, TableCameraCotMC)
|
||||
DEFINE_LEVEL("IN THE FALL", LEVEL_COTMC, COURSE_COTMC, cotmc, cave, 18000, 0x28, 0x28, 0x28, _, sCamCotMC)
|
||||
DEFINE_LEVEL("EXT6 MARIO FLY", LEVEL_TOTWC, COURSE_TOTWC, totwc, sky, 20000, 0x20, 0x20, 0x20, _, _)
|
||||
DEFINE_LEVEL("KUPPA1", LEVEL_BOWSER_1, COURSE_BITDW, bowser_1, generic, VAL_DIFF, 0x40, 0x40, 0x40, _, _)
|
||||
DEFINE_LEVEL("EXT8 BLUE SKY", LEVEL_WMOTR, COURSE_WMOTR, wmotr, generic, 20000, 0x28, 0x28, 0x28, _, _)
|
||||
@ -56,6 +54,4 @@ DEFINE_LEVEL("KUPPA3", LEVEL_BOWSER_3, COURSE_BITS, bowser_3
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_35, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
DEFINE_LEVEL("DONKEY % SLID2", LEVEL_TTM, COURSE_TTM, ttm, mountain, 15000, 0x08, 0x08, 0x08, _, _)
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_37, COURSE_NONE, 20000, 0x00, 0x00, 0x00, _, _)
|
||||
#ifndef SKIP_FIRST_LAST_STUBS
|
||||
STUB_LEVEL( "", LEVEL_UNKNOWN_38, COURSE_NONE, 20000, 0x00, 0x00, 0x00, sDynUnk38, _)
|
||||
#endif
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout lll_geo_000E00[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(64, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, -8192, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, -8192, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070134E0),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, lll_seg7_dl_070138F8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout lll_geo_000EC0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_070235C8),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, lll_seg7_dl_07024C18),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout pss_geo_000100[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700A7C0),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, pss_seg7_dl_0700AFA8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout rr_geo_0009D0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, -8000, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, -8000, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_ASM(0, geo_exec_flying_carpet_timer_update),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, dl_cruiser_metal_holes),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout sa_geo_000170[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, sa_seg7_dl_07002DE8),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sa_seg7_dl_07002FD0),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout sl_geo_0003A8[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 4400, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 4400, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_07005478),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, sl_seg7_dl_070056B0),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout sl_geo_000484[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BAE8),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, sl_seg7_dl_0700BCF8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ssl_geo_000648[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -2048, 0, -1024, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -2048, 0, -1024, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07009F48),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0700BA78),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ssl_geo_0007CC[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_0701EE80),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, ssl_seg7_dl_0701F920),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ssl_geo_00088C[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(4, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ssl_seg7_dl_07021A08),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, ssl_seg7_dl_07021DE8),
|
||||
|
@ -1232,7 +1232,7 @@ const Collision thi_seg7_area_1_collision[] = {
|
||||
COL_TRI_INIT(SURFACE_CAMERA_FREE_ROAM, 2),
|
||||
COL_TRI(326, 328, 141),
|
||||
COL_TRI(326, 141, 327),
|
||||
COL_TRI_INIT(SURFACE_CAMERA_PLATFORM, 4),
|
||||
COL_TRI_INIT(SURFACE_CAMERA_8_DIR, 4),
|
||||
COL_TRI(288, 86, 193),
|
||||
COL_TRI(256, 288, 193),
|
||||
COL_TRI(256, 193, 27),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout thi_geo_000608[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07005260),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07006968),
|
||||
|
@ -963,7 +963,7 @@ const Collision thi_seg7_area_2_collision[] = {
|
||||
COL_TRI_INIT(SURFACE_VERTICAL_WIND, 2),
|
||||
COL_TRI(353, 354, 355),
|
||||
COL_TRI(353, 355, 356),
|
||||
COL_TRI_INIT(SURFACE_CAMERA_PLATFORM, 4),
|
||||
COL_TRI_INIT(SURFACE_CAMERA_8_DIR, 4),
|
||||
COL_TRI(243, 242, 46),
|
||||
COL_TRI(242, 148, 46),
|
||||
COL_TRI(242, 244, 148),
|
||||
|
@ -15,7 +15,7 @@ const GeoLayout thi_geo_0006D4[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_SCALE(0x00, 19660),
|
||||
GEO_OPEN_NODE(),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout thi_geo_00079C[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, thi_seg7_dl_07007C20),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, thi_seg7_dl_07009670),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout totwc_geo_000188[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, totwc_seg7_dl_07005D28),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, totwc_seg7_dl_07007048),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ttc_geo_0003B8[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(2, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_ASM( 0, geo_movtex_pause_control),
|
||||
GEO_ASM(0x1400, geo_movtex_update_horizontal),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ttm_geo_000A70[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, -2200, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, -2200, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A120),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0700A2E0),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ttm_geo_000B5C[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0701D798),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0701DBB8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ttm_geo_000BEC[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_070249A0),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_07024C78),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout ttm_geo_000C84[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(9, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702A1B8),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, ttm_seg7_dl_0702A8A0),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout vcutm_geo_000208[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 25000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(14, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07007E88),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, vcutm_seg7_dl_07008E10),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout wdw_geo_000658[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07009AB0),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_0700A138),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout wdw_geo_000724[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, -4352, 0, -4352, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, wdw_seg7_dl_07011E48),
|
||||
GEO_DISPLAY_LIST(LAYER_ALPHA, wdw_seg7_dl_07012258),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout wf_geo_000BF8[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 12800, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 2000, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(1, 0, 2000, 6000, 0, 2000, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, wf_seg7_dl_070050C8),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE_DECAL, wf_seg7_dl_070052B8),
|
||||
|
@ -13,7 +13,7 @@ const GeoLayout wmotr_geo_0001F0[] = {
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA_FRUSTUM_WITH_FUNC(45, 100, 20000, geo_camera_fov),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_preset_and_pos),
|
||||
GEO_CAMERA(16, 0, 2000, 6000, 0, 0, 0, geo_camera_main),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, wmotr_seg7_dl_0700C1F8),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, wmotr_seg7_dl_0700EFD8),
|
||||
|
@ -91,13 +91,13 @@ static void Unknown80383E44(void) // ?
|
||||
}
|
||||
}
|
||||
|
||||
static s32 beh_cmd_unhide(void) {
|
||||
static s32 beh_cmd_hide(void) {
|
||||
obj_hide();
|
||||
gBehCommand++;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_graph_clear(void) {
|
||||
static s32 beh_cmd_disable_rendering(void) {
|
||||
gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE;
|
||||
gBehCommand++;
|
||||
return BEH_CONTINUE;
|
||||
@ -109,26 +109,26 @@ static s32 beh_cmd_billboard(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_graph_node(void) {
|
||||
s32 index = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
gCurrentObject->header.gfx.sharedChild = gLoadedGraphNodes[index];
|
||||
static s32 beh_cmd_set_model(void) {
|
||||
s32 modelID = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
gCurrentObject->header.gfx.sharedChild = gLoadedGraphNodes[modelID];
|
||||
gBehCommand++;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_load_chill(void) {
|
||||
static s32 beh_cmd_spawn_child(void) {
|
||||
u32 model = (u32) gBehCommand[1];
|
||||
const BehaviorScript *behavior = (const BehaviorScript *) gBehCommand[2];
|
||||
|
||||
struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, behavior);
|
||||
struct Object *child = spawn_object_at_origin(gCurrentObject, 0, model, behavior);
|
||||
|
||||
copy_object_pos_and_angle(object, gCurrentObject);
|
||||
copy_object_pos_and_angle(child, gCurrentObject);
|
||||
|
||||
gBehCommand += 3;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_spawn(void) {
|
||||
static s32 beh_cmd_spawn_obj(void) {
|
||||
u32 model = (u32) gBehCommand[1];
|
||||
const BehaviorScript *behavior = (const BehaviorScript *) gBehCommand[2];
|
||||
|
||||
@ -142,16 +142,16 @@ static s32 beh_cmd_obj_spawn(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_load_chill_param(void) {
|
||||
static s32 beh_cmd_spawn_child_with_param(void) {
|
||||
u32 behParam = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
u32 model = (u32) gBehCommand[1];
|
||||
const BehaviorScript *behavior = (const BehaviorScript *) gBehCommand[2];
|
||||
|
||||
struct Object *object = spawn_object_at_origin(gCurrentObject, 0, model, behavior);
|
||||
struct Object *child = spawn_object_at_origin(gCurrentObject, 0, model, behavior);
|
||||
|
||||
copy_object_pos_and_angle(object, gCurrentObject);
|
||||
copy_object_pos_and_angle(child, gCurrentObject);
|
||||
|
||||
object->oBehParams2ndByte = behParam;
|
||||
child->oBehParams2ndByte = behParam;
|
||||
|
||||
gBehCommand += 3;
|
||||
return BEH_CONTINUE;
|
||||
@ -259,7 +259,7 @@ static s32 beh_cmd_end_repeat(void) {
|
||||
return BEH_BREAK;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_end_repeat_nobreak(void) {
|
||||
static s32 beh_cmd_end_repeat_continue(void) {
|
||||
u32 count = (u32) cur_object_stack_pop();
|
||||
|
||||
count--;
|
||||
@ -291,7 +291,7 @@ static s32 beh_cmd_end_loop(void) {
|
||||
|
||||
typedef void (*BehaviorCallProc)(void);
|
||||
|
||||
static s32 beh_cmd_callnative(void) {
|
||||
static s32 beh_cmd_call_native(void) {
|
||||
BehaviorCallProc behavior_proc = (BehaviorCallProc) gBehCommand[1];
|
||||
|
||||
behavior_proc();
|
||||
@ -300,7 +300,7 @@ static s32 beh_cmd_callnative(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_float(void) {
|
||||
static s32 beh_cmd_set_float(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
f32 value = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
|
||||
@ -310,7 +310,7 @@ static s32 beh_cmd_obj_set_float(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_int(void) {
|
||||
static s32 beh_cmd_set_int(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s16 value = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
|
||||
@ -331,7 +331,7 @@ static s32 Behavior36(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_float_rand(void) {
|
||||
static s32 beh_cmd_set_random_float(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
f32 min = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
f32 max = (s16)(gBehCommand[1] >> 16);
|
||||
@ -342,7 +342,7 @@ static s32 beh_cmd_obj_set_float_rand(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_int_rand(void) {
|
||||
static s32 beh_cmd_set_random_int(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
s32 max = (s16)(gBehCommand[1] >> 16);
|
||||
@ -353,7 +353,7 @@ static s32 beh_cmd_obj_set_int_rand(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_int_rand_rshift(void) {
|
||||
static s32 beh_cmd_set_int_rand_rshift(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
s32 rshift = (s16)(gBehCommand[1] >> 16);
|
||||
@ -364,7 +364,7 @@ static s32 beh_cmd_obj_set_int_rand_rshift(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_add_float_rand(void) {
|
||||
static s32 beh_cmd_add_random_float(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
f32 min = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
f32 max = (s16)(gBehCommand[1] >> 16);
|
||||
@ -377,7 +377,7 @@ static s32 beh_cmd_obj_add_float_rand(void) {
|
||||
}
|
||||
|
||||
// unused
|
||||
static s32 beh_cmd_obj_add_int_rand_rshift(void) {
|
||||
static s32 beh_cmd_add_int_rand_rshift(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 min = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
s32 rshift = (s16)(gBehCommand[1] >> 16);
|
||||
@ -389,7 +389,7 @@ static s32 beh_cmd_obj_add_int_rand_rshift(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_add_float(void) {
|
||||
static s32 beh_cmd_add_float(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
f32 value = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
|
||||
@ -399,7 +399,7 @@ static s32 beh_cmd_obj_add_float(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_add_int(void) {
|
||||
static s32 beh_cmd_add_int(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s16 value = gBehCommand[0] & 0xFFFF;
|
||||
|
||||
@ -409,7 +409,7 @@ static s32 beh_cmd_obj_add_int(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_or_int(void) {
|
||||
static s32 beh_cmd_or_int(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 value = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
|
||||
@ -421,7 +421,7 @@ static s32 beh_cmd_obj_or_int(void) {
|
||||
}
|
||||
|
||||
// unused
|
||||
static s32 beh_cmd_obj_bit_clear_int(void) {
|
||||
static s32 beh_cmd_bit_clear_int(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 value = (s16)(gBehCommand[0] & 0xFFFF);
|
||||
|
||||
@ -432,7 +432,7 @@ static s32 beh_cmd_obj_bit_clear_int(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_anims(void) {
|
||||
static s32 beh_cmd_load_animations(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
|
||||
cur_object_set_vptr(objectOffset, gBehCommand[1]);
|
||||
@ -441,7 +441,7 @@ static s32 beh_cmd_obj_set_anims(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_animate(void) {
|
||||
static s32 beh_cmd_animate(void) {
|
||||
s32 animIndex = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
struct Animation **animations = gCurrentObject->oAnimations;
|
||||
|
||||
@ -451,7 +451,7 @@ static s32 beh_cmd_obj_animate(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_drop_floor(void) {
|
||||
static s32 beh_cmd_drop_to_floor(void) {
|
||||
f32 x = gCurrentObject->oPosX;
|
||||
f32 y = gCurrentObject->oPosY;
|
||||
f32 z = gCurrentObject->oPosZ;
|
||||
@ -491,7 +491,7 @@ static s32 Behavior19(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_sum_float(void) {
|
||||
static s32 beh_cmd_sum_float(void) {
|
||||
u32 objectOffsetDst = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
u32 objectOffsetSrc1 = (u8)((gBehCommand[0] >> 8) & 0xFF);
|
||||
u32 objectOffsetSrc2 = (u8)((gBehCommand[0]) & 0xFF);
|
||||
@ -504,7 +504,7 @@ static s32 beh_cmd_obj_sum_float(void) {
|
||||
}
|
||||
|
||||
// unused
|
||||
static s32 beh_cmd_obj_sum_int(void) {
|
||||
static s32 beh_cmd_sum_int(void) {
|
||||
u32 objectOffsetDst = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
u32 objectOffsetSrc1 = (u8)((gBehCommand[0] >> 8) & 0xFF);
|
||||
u32 objectOffsetSrc2 = (u8)((gBehCommand[0]) & 0xFF);
|
||||
@ -517,35 +517,35 @@ static s32 beh_cmd_obj_sum_int(void) {
|
||||
}
|
||||
|
||||
static s32 beh_cmd_set_hitbox(void) {
|
||||
s16 colSphereX = (s16)(gBehCommand[1] >> 16);
|
||||
s16 colSphereY = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
s16 radius = (s16)(gBehCommand[1] >> 16);
|
||||
s16 height = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
|
||||
gCurrentObject->hitboxRadius = colSphereX;
|
||||
gCurrentObject->hitboxHeight = colSphereY;
|
||||
gCurrentObject->hitboxRadius = radius;
|
||||
gCurrentObject->hitboxHeight = height;
|
||||
|
||||
gBehCommand += 2;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_float2(void) {
|
||||
s16 arg0 = (s16)(gBehCommand[1] >> 16);
|
||||
s16 arg1 = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
static s32 beh_cmd_set_hurtbox(void) {
|
||||
s16 radius = (s16)(gBehCommand[1] >> 16);
|
||||
s16 height = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
|
||||
gCurrentObject->hurtboxRadius = arg0;
|
||||
gCurrentObject->hurtboxHeight = arg1;
|
||||
gCurrentObject->hurtboxRadius = radius;
|
||||
gCurrentObject->hurtboxHeight = height;
|
||||
|
||||
gBehCommand += 2;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_collision_sphere(void) {
|
||||
s16 colSphereX = (s16)(gBehCommand[1] >> 16);
|
||||
s16 colSphereY = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
s16 unknown = (s16)(gBehCommand[2] >> 16);
|
||||
static s32 beh_cmd_set_hitbox_with_offset(void) {
|
||||
s16 radius = (s16)(gBehCommand[1] >> 16);
|
||||
s16 height = (s16)(gBehCommand[1] & 0xFFFF);
|
||||
s16 downOffset = (s16)(gBehCommand[2] >> 16);
|
||||
|
||||
gCurrentObject->hitboxRadius = colSphereX;
|
||||
gCurrentObject->hitboxHeight = colSphereY;
|
||||
gCurrentObject->hitboxDownOffset = unknown;
|
||||
gCurrentObject->hitboxRadius = radius;
|
||||
gCurrentObject->hitboxHeight = height;
|
||||
gCurrentObject->hitboxDownOffset = downOffset;
|
||||
|
||||
gBehCommand += 3;
|
||||
return BEH_CONTINUE;
|
||||
@ -588,14 +588,14 @@ static void Unknown8038556C(s32 lastIndex) {
|
||||
cur_object_set_int(objectOffset, table[(s32)(lastIndex * RandomFloat())]);
|
||||
}
|
||||
|
||||
static s32 beh_cmd_collision_data(void) {
|
||||
static s32 beh_cmd_load_collision_data(void) {
|
||||
u32 *collisionData = segmented_to_virtual((void *) gBehCommand[1]);
|
||||
gCurrentObject->collisionData = collisionData;
|
||||
gBehCommand += 2;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_pos(void) {
|
||||
static s32 beh_cmd_set_home(void) {
|
||||
gCurrentObject->oHomeX = gCurrentObject->oPosX;
|
||||
gCurrentObject->oHomeY = gCurrentObject->oPosY;
|
||||
gCurrentObject->oHomeZ = gCurrentObject->oPosZ;
|
||||
@ -603,7 +603,7 @@ static s32 beh_cmd_obj_set_pos(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_interact_type(void) {
|
||||
static s32 beh_cmd_set_interact_type(void) {
|
||||
gCurrentObject->oInteractType = (u32) gBehCommand[1];
|
||||
|
||||
gBehCommand += 2;
|
||||
@ -628,7 +628,7 @@ static s32 beh_cmd_scale(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_set_physics(void) {
|
||||
static s32 beh_cmd_set_obj_physics(void) {
|
||||
UNUSED f32 sp04, sp00;
|
||||
|
||||
gCurrentObject->oWallHitboxRadius = (f32)(s16)(gBehCommand[1] >> 16);
|
||||
@ -646,7 +646,7 @@ static s32 beh_cmd_obj_set_physics(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_obj_bit_clear_int32(void) {
|
||||
static s32 beh_cmd_bit_clear_int32(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s32 flags = gBehCommand[1];
|
||||
|
||||
@ -658,18 +658,18 @@ static s32 beh_cmd_obj_bit_clear_int32(void) {
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_spawn_addr(void) {
|
||||
static s32 beh_cmd_spawn_water_splash(void) {
|
||||
struct WaterSplashParams *arg0 = (struct WaterSplashParams *) gBehCommand[1];
|
||||
spawn_water_splash(gCurrentObject, arg0);
|
||||
gBehCommand += 2;
|
||||
return BEH_CONTINUE;
|
||||
}
|
||||
|
||||
static s32 beh_cmd_text_anim_rate(void) {
|
||||
static s32 beh_cmd_tex_anim_rate(void) {
|
||||
u8 objectOffset = (u8)((gBehCommand[0] >> 16) & 0xFF);
|
||||
s16 arg1 = (gBehCommand[0] & 0xFFFF);
|
||||
s16 rate = (gBehCommand[0] & 0xFFFF);
|
||||
|
||||
if ((gGlobalTimer % arg1) == 0) {
|
||||
if ((gGlobalTimer % rate) == 0) {
|
||||
cur_object_add_int(objectOffset, 1);
|
||||
}
|
||||
|
||||
@ -690,55 +690,55 @@ static BehCommandProc BehaviorJumpTable[] = {
|
||||
beh_cmd_goto,
|
||||
beh_cmd_begin_repeat,
|
||||
beh_cmd_end_repeat,
|
||||
beh_cmd_end_repeat_nobreak,
|
||||
beh_cmd_end_repeat_continue,
|
||||
beh_cmd_begin_loop,
|
||||
beh_cmd_end_loop,
|
||||
beh_cmd_break,
|
||||
beh_cmd_break2,
|
||||
beh_cmd_callnative,
|
||||
beh_cmd_obj_add_float,
|
||||
beh_cmd_obj_set_float,
|
||||
beh_cmd_obj_add_int,
|
||||
beh_cmd_obj_set_int,
|
||||
beh_cmd_obj_or_int,
|
||||
beh_cmd_obj_bit_clear_int,
|
||||
beh_cmd_obj_set_int_rand_rshift,
|
||||
beh_cmd_obj_set_float_rand,
|
||||
beh_cmd_obj_set_int_rand,
|
||||
beh_cmd_obj_add_float_rand,
|
||||
beh_cmd_obj_add_int_rand_rshift,
|
||||
beh_cmd_call_native,
|
||||
beh_cmd_add_float,
|
||||
beh_cmd_set_float,
|
||||
beh_cmd_add_int,
|
||||
beh_cmd_set_int,
|
||||
beh_cmd_or_int,
|
||||
beh_cmd_bit_clear_int,
|
||||
beh_cmd_set_int_rand_rshift,
|
||||
beh_cmd_set_random_float,
|
||||
beh_cmd_set_random_int,
|
||||
beh_cmd_add_random_float,
|
||||
beh_cmd_add_int_rand_rshift,
|
||||
Behavior18,
|
||||
Behavior19,
|
||||
Behavior1A,
|
||||
beh_cmd_graph_node,
|
||||
beh_cmd_obj_load_chill,
|
||||
beh_cmd_set_model,
|
||||
beh_cmd_spawn_child,
|
||||
beh_cmd_deactivate,
|
||||
beh_cmd_obj_drop_floor,
|
||||
beh_cmd_obj_sum_float,
|
||||
beh_cmd_obj_sum_int,
|
||||
beh_cmd_drop_to_floor,
|
||||
beh_cmd_sum_float,
|
||||
beh_cmd_sum_int,
|
||||
beh_cmd_billboard,
|
||||
beh_cmd_unhide,
|
||||
beh_cmd_hide,
|
||||
beh_cmd_set_hitbox,
|
||||
Behavior24,
|
||||
beh_cmd_delay_var,
|
||||
Behavior26,
|
||||
beh_cmd_obj_set_anims,
|
||||
beh_cmd_obj_animate,
|
||||
beh_cmd_obj_load_chill_param,
|
||||
beh_cmd_collision_data,
|
||||
beh_cmd_collision_sphere,
|
||||
beh_cmd_obj_spawn,
|
||||
beh_cmd_obj_set_pos,
|
||||
beh_cmd_obj_set_float2,
|
||||
beh_cmd_interact_type,
|
||||
beh_cmd_obj_set_physics,
|
||||
beh_cmd_load_animations,
|
||||
beh_cmd_animate,
|
||||
beh_cmd_spawn_child_with_param,
|
||||
beh_cmd_load_collision_data,
|
||||
beh_cmd_set_hitbox_with_offset,
|
||||
beh_cmd_spawn_obj,
|
||||
beh_cmd_set_home,
|
||||
beh_cmd_set_hurtbox,
|
||||
beh_cmd_set_interact_type,
|
||||
beh_cmd_set_obj_physics,
|
||||
Behavior31,
|
||||
beh_cmd_scale,
|
||||
beh_cmd_obj_bit_clear_int32,
|
||||
beh_cmd_text_anim_rate,
|
||||
beh_cmd_graph_clear,
|
||||
beh_cmd_bit_clear_int32,
|
||||
beh_cmd_tex_anim_rate,
|
||||
beh_cmd_disable_rendering,
|
||||
Behavior36,
|
||||
beh_cmd_spawn_addr,
|
||||
beh_cmd_spawn_water_splash,
|
||||
};
|
||||
|
||||
void cur_object_exec_behavior(void) {
|
||||
|
@ -65,20 +65,20 @@ UNUSED s32 D_8038BCA8;
|
||||
* might be for Mario and Luigi, and the other 10 could be different cameras for
|
||||
* different rooms / boss fights. An area might be structured like this:
|
||||
*
|
||||
* geo_camera preset_player //Mario cam
|
||||
* geo_camera mode_player //Mario cam
|
||||
* geo_open_node
|
||||
* geo_render_obj
|
||||
* geo_assign_as_view 1 // currently unused geo command
|
||||
* geo_close_node
|
||||
*
|
||||
* geo_camera preset_player //Luigi cam
|
||||
* geo_camera mode_player //Luigi cam
|
||||
* geo_open_node
|
||||
* geo_render_obj
|
||||
* geo_copy_view 1 // currently unused geo command
|
||||
* geo_assign_as_view 2
|
||||
* geo_close_node
|
||||
*
|
||||
* geo_camera preset_boss //boss fight cam
|
||||
* geo_camera mode_boss //boss fight cam
|
||||
* geo_assign_as_view 3
|
||||
* ...
|
||||
*
|
||||
@ -348,26 +348,26 @@ void geo_layout_cmd_node_switch_case(void) {
|
||||
}
|
||||
|
||||
/*
|
||||
0x0F: Create a camera scene graph node (GraphNodeCamera)
|
||||
0x0F: Create a camera scene graph node (GraphNodeCamera). The focus sets the Camera's areaCen position.
|
||||
cmd+0x02: s16 camera type (changes from course to course)
|
||||
cmd+0x04: s16 fromX
|
||||
cmd+0x06: s16 fromY
|
||||
cmd+0x08: s16 fromZ
|
||||
cmd+0x0A: s16 toX
|
||||
cmd+0x0C: s16 toY
|
||||
cmd+0x0E: s16 toZ
|
||||
cmd+0x04: s16 posX
|
||||
cmd+0x06: s16 posY
|
||||
cmd+0x08: s16 posZ
|
||||
cmd+0x0A: s16 focusX
|
||||
cmd+0x0C: s16 focusY
|
||||
cmd+0x0E: s16 focusZ
|
||||
cmd+0x10: GraphNodeFunc func
|
||||
*/
|
||||
void geo_layout_cmd_node_camera(void) {
|
||||
struct GraphNodeCamera *graphNode;
|
||||
s16 *cmdPos = (s16 *) &gGeoLayoutCommand[4];
|
||||
|
||||
Vec3f fromPos, toPos;
|
||||
Vec3f pos, focus;
|
||||
|
||||
cmdPos = read_vec3s_to_vec3f(fromPos, cmdPos);
|
||||
cmdPos = read_vec3s_to_vec3f(toPos, cmdPos);
|
||||
cmdPos = read_vec3s_to_vec3f(pos, cmdPos);
|
||||
cmdPos = read_vec3s_to_vec3f(focus, cmdPos);
|
||||
|
||||
graphNode = init_graph_node_camera(gGraphNodePool, NULL, fromPos, toPos,
|
||||
graphNode = init_graph_node_camera(gGraphNodePool, NULL, pos, focus,
|
||||
(GraphNodeFunc) cur_geo_cmd_ptr(0x10), cur_geo_cmd_s16(0x02));
|
||||
|
||||
register_scene_graph_node(&graphNode->fnNode.node);
|
||||
|
@ -187,18 +187,18 @@ struct GraphNodeSwitchCase *init_graph_node_switch_case(struct AllocOnlyPool *po
|
||||
* Allocates and returns a newly created camera node
|
||||
*/
|
||||
struct GraphNodeCamera *init_graph_node_camera(struct AllocOnlyPool *pool,
|
||||
struct GraphNodeCamera *graphNode, f32 *fromPos,
|
||||
f32 *toPos, GraphNodeFunc func, s32 preset) {
|
||||
struct GraphNodeCamera *graphNode, f32 *pos,
|
||||
f32 *focus, GraphNodeFunc func, s32 mode) {
|
||||
if (pool != NULL) {
|
||||
graphNode = alloc_only_pool_alloc(pool, sizeof(struct GraphNodeCamera));
|
||||
}
|
||||
|
||||
if (graphNode != NULL) {
|
||||
init_scene_graph_node_links(&graphNode->fnNode.node, GRAPH_NODE_TYPE_CAMERA);
|
||||
vec3f_copy(graphNode->from, fromPos);
|
||||
vec3f_copy(graphNode->to, toPos);
|
||||
vec3f_copy(graphNode->pos, pos);
|
||||
vec3f_copy(graphNode->focus, focus);
|
||||
graphNode->fnNode.func = func;
|
||||
graphNode->config.preset = preset;
|
||||
graphNode->config.mode = mode;
|
||||
graphNode->roll = 0;
|
||||
graphNode->rollScreen = 0;
|
||||
|
||||
|
@ -192,15 +192,15 @@ struct GraphNodeCamera
|
||||
{
|
||||
/*0x00*/ struct FnGraphNode fnNode;
|
||||
/*0x18*/ union {
|
||||
// When the node is created, a preset is assigned to the node.
|
||||
// Later in geo_camera_preset_and_pos a LevelCamera is allocated,
|
||||
// the preset is passed to the struct, and the field is overridden
|
||||
// When the node is created, a mode is assigned to the node.
|
||||
// Later in geo_camera_main a Camera is allocated,
|
||||
// the mode is passed to the struct, and the field is overridden
|
||||
// by a pointer to the struct. Gotta save those 4 bytes.
|
||||
s32 preset;
|
||||
struct LevelCamera *levelCamera;
|
||||
s32 mode;
|
||||
struct Camera *camera;
|
||||
} config;
|
||||
/*0x1C*/ Vec3f from;
|
||||
/*0x28*/ Vec3f to;
|
||||
/*0x1C*/ Vec3f pos;
|
||||
/*0x28*/ Vec3f focus;
|
||||
/*0x34*/ void *matrixPtr; // pointer to look-at matrix of this camera as a Mat4
|
||||
/*0x38*/ s16 roll; // roll in look at matrix. Doesn't account for light direction unlike rollScreen.
|
||||
/*0x3A*/ s16 rollScreen; // rolls screen while keeping the light direction consistent
|
||||
|
@ -356,7 +356,7 @@ static void level_cmd_begin_area(void) {
|
||||
gAreas[areaIndex].unk04 = (struct GraphNode *) screenArea;
|
||||
|
||||
if (node != NULL) {
|
||||
gAreas[areaIndex].camera = (struct LevelCamera *) node->config.levelCamera;
|
||||
gAreas[areaIndex].camera = (struct Camera *) node->config.camera;
|
||||
} else {
|
||||
gAreas[areaIndex].camera = NULL;
|
||||
}
|
||||
|
@ -625,6 +625,7 @@ void get_pos_from_transform_mtx(Vec3f dest, Mat4 objMtx, Mat4 camMtx) {
|
||||
/**
|
||||
* Take the vector starting at 'from' pointed at 'to' an retrieve the length
|
||||
* of that vector, as well as the yaw and pitch angles.
|
||||
* Basically it converts the direction to spherical coordinates.
|
||||
*/
|
||||
void vec3f_get_dist_and_angle(Vec3f from, Vec3f to, f32 *dist, s16 *pitch, s16 *yaw) {
|
||||
register f32 x = to[0] - from[0];
|
||||
|
@ -1,5 +1,6 @@
|
||||
#ifndef _MATH_UTIL_H_
|
||||
#define _MATH_UTIL_H_
|
||||
#include "types.h"
|
||||
|
||||
/*
|
||||
* The sine and cosine tables overlap, but "#define gCosineTable (gSineTable +
|
||||
@ -58,9 +59,9 @@ void mtxf_to_mtx(Mtx *a, f32 b[4][4]);
|
||||
void mtxf_rotate_xy(Mtx *a, s16 b);
|
||||
void get_pos_from_transform_mtx(Vec3f a, f32 b[4][4], f32 c[4][4]);
|
||||
void vec3f_get_dist_and_angle(Vec3f from, Vec3f to, f32 *dist, s16 *pitch, s16 *yaw);
|
||||
void vec3f_set_dist_and_angle(Vec3f a, Vec3f b, f32 c, s16 d, s16 e);
|
||||
s32 approach_s32(s32 a, s32 b, s32 c, s32 d);
|
||||
f32 approach_f32(f32 a, f32 b, f32 c, f32 d);
|
||||
void vec3f_set_dist_and_angle(Vec3f from, Vec3f to, f32 dist, s16 pitch, s16 yaw);
|
||||
s32 approach_s32(s32 current, s32 target, s32 inc, s32 dec);
|
||||
f32 approach_f32(f32 current, f32 target, f32 inc, f32 dec);
|
||||
s16 atan2s(f32 a, f32 b);
|
||||
f32 atan2f(f32 a, f32 b);
|
||||
void spline_get_weights(Vec4f a, f32 b, UNUSED s32 c);
|
||||
|
@ -41,43 +41,6 @@ struct SpawnInfo
|
||||
/*0x1C*/ struct SpawnInfo *next;
|
||||
};
|
||||
|
||||
// Some of these might need to be renamed at some point.
|
||||
#define CAMERA_PRESET_NONE 0x00
|
||||
#define CAMERA_PRESET_OPEN_CAMERA 0x01
|
||||
#define CAMERA_PRESET_REVERSE_TOWER 0x02
|
||||
#define CAMERA_PRESET_BEHIND_MARIO 0x03
|
||||
#define CAMERA_PRESET_CLOSE 0x04 // Inside Castle / Big Boo's Haunt
|
||||
#define CAMERA_PRESET_C_UP_LOOK 0x06
|
||||
#define CAMERA_PRESET_WATER_SURFACE 0x08
|
||||
#define CAMERA_PRESET_SLIDE_HOOT 0x09
|
||||
#define CAMERA_PRESET_INSIDE_CANNON 0x0A
|
||||
#define CAMERA_PRESET_BOSS_FIGHT 0x0B
|
||||
#define CAMERA_PRESET_PARALLEL_TRACKING 0x0C
|
||||
#define CAMERA_PRESET_FIXED_REF_POINT 0x0D
|
||||
#define CAMERA_PRESET_PLATFORM_LEVEL 0x0E // Bowser Courses / Rainbow Road
|
||||
#define CAMERA_PRESET_FREE_ROAM 0x10
|
||||
#define CAMERA_PRESET_SPIRAL_STAIRS 0x11
|
||||
|
||||
// Used mostly in camera.c
|
||||
struct LevelCamera
|
||||
{
|
||||
/*0x00*/ u8 currPreset; // What type of preset the camera uses (see defines above)
|
||||
/*0x01*/ u8 defPreset;
|
||||
/*0x02*/ s16 trueYaw;
|
||||
/*0x04*/ Vec3f focus;
|
||||
/*0x10*/ Vec3f pos;
|
||||
/*0x1C*/ u8 filler1C[0x28-0x1C];
|
||||
/*0x28*/ f32 xFocus;
|
||||
/*0x2C*/ f32 zFocus;
|
||||
/*0x30*/ u8 cutscene;
|
||||
/*0x31*/ u8 filler31[0x9];
|
||||
/*0x3A*/ s16 storedYaw;
|
||||
/*0x3C*/ u8 filler3C[0x64-0x3C];
|
||||
/*0x64*/ u8 unk64;
|
||||
/*0x65*/ u8 filler65[3];
|
||||
/*0x68*/ f32 unk68;
|
||||
};
|
||||
|
||||
struct UnusedArea28
|
||||
{
|
||||
/*0x00*/ s16 unk00;
|
||||
@ -106,7 +69,7 @@ struct Area
|
||||
/*0x18*/ struct WarpNode *paintingWarpNodes;
|
||||
/*0x1C*/ struct InstantWarp *instantWarps;
|
||||
/*0x20*/ struct SpawnInfo *objectSpawnInfos;
|
||||
/*0x24*/ struct LevelCamera *camera;
|
||||
/*0x24*/ struct Camera *camera;
|
||||
/*0x28*/ struct UnusedArea28 *unused28; // Filled by level script 0x3A, but is unused.
|
||||
/*0x2C*/ struct Whirlpool *whirlpools[2];
|
||||
/*0x34*/ u8 dialog[2]; // Level start dialog number (set by level script cmd 0x30)
|
||||
@ -114,21 +77,6 @@ struct Area
|
||||
/*0x38*/ u16 musicParam2;
|
||||
};
|
||||
|
||||
/**
|
||||
* Helper macro for defining which areas of a level should zoom out the camera when the game is paused.
|
||||
* Because a mask is used by two levels, the pattern will repeat when more than 4 areas are used by a level.
|
||||
*/
|
||||
#define ZOOMOUT_AREA_MASK(level1Area1, level1Area2, level1Area3, level1Area4, \
|
||||
level2Area1, level2Area2, level2Area3, level2Area4) \
|
||||
((level2Area4) << 7 | \
|
||||
(level2Area3) << 6 | \
|
||||
(level2Area2) << 5 | \
|
||||
(level2Area1) << 4 | \
|
||||
(level1Area4) << 3 | \
|
||||
(level1Area3) << 2 | \
|
||||
(level1Area2) << 1 | \
|
||||
(level1Area1) << 0)
|
||||
|
||||
// All the transition data to be used in screen_transition.c
|
||||
struct WarpTransitionData
|
||||
{
|
||||
|
@ -100,8 +100,8 @@ extern s8 gDoorAdjacentRooms[][2];
|
||||
extern u8 inside_castle_seg7_collision_ddd_warp_2[];
|
||||
extern u8 inside_castle_seg7_collision_ddd_warp[];
|
||||
extern s32 gDialogResponse;
|
||||
extern s32 gCutsceneActive;
|
||||
extern u8 gCutsceneNumber;
|
||||
extern s32 gObjCutsceneDone;
|
||||
extern u8 gRecentCutscene;
|
||||
extern s8 *D_8032F96C[];
|
||||
extern s16 bowser_seg6_unkmoveshorts_060576FC[];
|
||||
extern struct Animation *blue_fish_seg3_anims_0301C2B0[];
|
||||
|
@ -2,7 +2,7 @@
|
||||
#define _BEHAVIOR_ACTIONS_H
|
||||
|
||||
extern void func_802AA618(s32,s32,f32);
|
||||
extern void bhv_spawn_star_objects(u32);
|
||||
extern void bhv_spawn_star_no_level_exit(u32);
|
||||
extern void bhv_star_door_loop_2();
|
||||
extern void spawn_triangle_break_particles(s16,s16,f32,s16);
|
||||
extern void func_802ADA94(void);
|
||||
@ -61,8 +61,8 @@ void bhv_koopa_shell_underwater_loop(void);
|
||||
void BehFadingWarpLoop(void);
|
||||
void bhv_warp_loop(void);
|
||||
void bhv_white_puff_exploding_loop(void);
|
||||
void bhv_unused_080c_init(void);
|
||||
void bhv_unused_080c_loop(void);
|
||||
void bhv_spawned_star_init(void);
|
||||
void bhv_spawned_star_loop(void);
|
||||
void bhv_coin_init(void);
|
||||
void bhv_coin_loop(void);
|
||||
void bhv_coin_inside_boo_loop(void);
|
||||
|
@ -66,12 +66,12 @@ static void check_amp_attack(void) {
|
||||
* Unhide the amp and grow until normal size, then begin chasing Mario.
|
||||
*/
|
||||
static void homing_amp_appear_loop(void) {
|
||||
// gCameraStatus.camFocAndPosCurrAndGoal[3] is the camera's goal position.
|
||||
// gLakituState.goalPos is the position lakitu is moving towards.
|
||||
// In Lakitu and Mario cam, it is usually very close to the current camera position.
|
||||
// In Fixed cam, it is the point behind Mario the camera will go to when transitioning
|
||||
// to Lakitu cam. Homing amps will point themselves towards this point when appearing.
|
||||
f32 relativeTargetX = gCameraStatus.camFocAndPosCurrAndGoal[3][0] - o->oPosX;
|
||||
f32 relativeTargetZ = gCameraStatus.camFocAndPosCurrAndGoal[3][2] - o->oPosZ;
|
||||
f32 relativeTargetX = gLakituState.goalPos[0] - o->oPosX;
|
||||
f32 relativeTargetZ = gLakituState.goalPos[2] - o->oPosZ;
|
||||
s16 targetYaw = atan2s(relativeTargetZ, relativeTargetX);
|
||||
|
||||
o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, targetYaw, 0x1000);
|
||||
|
@ -319,7 +319,7 @@ void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) {
|
||||
|
||||
switch (o->oBobombBuddyCannonStatus) {
|
||||
case BOBOMB_BUDDY_CANNON_UNOPENED:
|
||||
buddyText = cutscene_object_with_dialog(CUTSCENE_DIALOG_1, o, dialogFirstText);
|
||||
buddyText = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogFirstText);
|
||||
if (buddyText != 0) {
|
||||
save_file_set_cannon_unlocked();
|
||||
cannonClosed = obj_nearest_object_with_behavior(bhvCannonClosed);
|
||||
@ -338,7 +338,7 @@ void BobombBuddyCannonLoop(s16 dialogFirstText, s16 dialogSecondText) {
|
||||
break;
|
||||
|
||||
case BOBOMB_BUDDY_CANNON_OPENED:
|
||||
buddyText = cutscene_object_with_dialog(CUTSCENE_DIALOG_1, o, dialogSecondText);
|
||||
buddyText = cutscene_object_with_dialog(CUTSCENE_DIALOG, o, dialogSecondText);
|
||||
if (buddyText != 0)
|
||||
o->oBobombBuddyCannonStatus = BOBOMB_BUDDY_CANNON_STOP_TALKING;
|
||||
break;
|
||||
@ -361,7 +361,7 @@ void BobombBuddyTalkLoop(void) {
|
||||
|
||||
switch (o->oBobombBuddyRole) {
|
||||
case BOBOMB_BUDDY_ROLE_ADVICE:
|
||||
if (cutscene_object_with_dialog(CUTSCENE_DIALOG_1, o, o->oBehParams2ndByte) != BOBOMB_BUDDY_BP_STYPE_GENERIC) {
|
||||
if (cutscene_object_with_dialog(CUTSCENE_DIALOG, o, o->oBehParams2ndByte) != BOBOMB_BUDDY_BP_STYPE_GENERIC) {
|
||||
set_mario_npc_dialog(0);
|
||||
|
||||
o->activeFlags &= ~0x20; /* bit 5 */
|
||||
|
@ -142,7 +142,7 @@ void bhv_bowling_ball_loop(void) {
|
||||
}
|
||||
|
||||
if (o->oBehParams2ndByte != 4)
|
||||
func_8027F440(4, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
|
||||
set_object_visibility(o, 4000);
|
||||
}
|
||||
@ -222,7 +222,7 @@ void bhv_bob_pit_bowling_ball_loop(void) {
|
||||
o->oForwardVel = 28.0f;
|
||||
|
||||
func_802EDA14();
|
||||
func_8027F440(4, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
PlaySound(SOUND_ENV_UNKNOWN2);
|
||||
set_object_visibility(o, 3000);
|
||||
}
|
||||
@ -243,7 +243,7 @@ void bhv_free_bowling_ball_roll_loop(void) {
|
||||
func_802EDA14();
|
||||
|
||||
if (o->oForwardVel > 10.0f) {
|
||||
func_8027F440(4, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_BOWLING_BALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
PlaySound(SOUND_ENV_UNKNOWN2);
|
||||
}
|
||||
|
||||
|
@ -109,7 +109,7 @@ void func_802B392C(s32 *a) {
|
||||
if (o->oMoveFlags & 1) {
|
||||
a[0]++;
|
||||
if (a[0] < 4) {
|
||||
func_802A11B4(o, 8);
|
||||
obj_start_cam_event(o, CAM_EVENT_BOWSER_THROW_BOUNCE);
|
||||
func_802AA618(0, 0, 60.0f);
|
||||
PlaySound2(SOUND_OBJ_BOWSER_WALK);
|
||||
}
|
||||
@ -459,7 +459,7 @@ s32 func_802B4A94(void) {
|
||||
func_802AA618(0, 0, 60.0f);
|
||||
set_obj_animation_and_sound_state(8);
|
||||
o->header.gfx.unk38.animFrame = 0;
|
||||
func_802A11B4(o, 7);
|
||||
obj_start_cam_event(o, CAM_EVENT_BOWSER_JUMP);
|
||||
if (BITDW) {
|
||||
if (o->oDistanceToMario < 850.0f)
|
||||
gMarioObject->oInteractStatus |= INTERACT_GRABBABLE;
|
||||
@ -1161,7 +1161,7 @@ void bhv_bowser_init(void) {
|
||||
o->oBehParams2ndByte = level;
|
||||
o->oBowserUnk1B2 = D_8032F690[level];
|
||||
o->oHealth = D_8032F694[level];
|
||||
func_802A11B4(o, 4);
|
||||
obj_start_cam_event(o, CAM_EVENT_BOWSER_INIT);
|
||||
o->oAction = 5;
|
||||
o->oBowserUnk1AE = 0;
|
||||
o->oBowserEyesShut = 0;
|
||||
@ -1325,7 +1325,7 @@ void ActionFallingBowserPlatform2(void) {
|
||||
if (o->oTimer == 0 || o->oTimer == 22)
|
||||
PlaySound2(SOUND_GENERAL_BOWSER_PLATFORM_2);
|
||||
if (o->oTimer < 22) {
|
||||
set_camera_shake_2(SHAKE_2_FALLING_BITS_PLAT);
|
||||
set_environmental_camera_shake(SHAKE_ENV_FALLING_BITS_PLAT);
|
||||
o->oVelY = 8.0f;
|
||||
o->oGravity = 0.0f;
|
||||
} else
|
||||
|
@ -11,7 +11,7 @@ void bhv_bowser_bomb_loop(void) {
|
||||
{
|
||||
spawn_object(o, MODEL_BOWSER_FLAMES, bhvBowserBombExplosion);
|
||||
create_sound_spawner(SOUND_GENERAL_BOWSER_BOMB_EXPLOSION);
|
||||
func_8027F440(3, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_LARGE, o->oPosX, o->oPosY, o->oPosZ);
|
||||
o->activeFlags = 0;
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ void ActionBulletBill2(void) {
|
||||
obj_rotate_yaw_toward(o->oAngleToMario, 0x100);
|
||||
if (o->oTimer == 50) {
|
||||
PlaySound2(SOUND_OBJ_POUNDING_CANNON);
|
||||
ShakeScreen(1);
|
||||
ShakeScreen(SHAKE_POS_SMALL);
|
||||
}
|
||||
if (o->oTimer > 150 || o->oMoveFlags & 0x200) {
|
||||
o->oAction = 3;
|
||||
|
@ -349,7 +349,7 @@ void bhv_big_bully_with_minions_loop(void) {
|
||||
|
||||
if (collisionFlags == 1) {
|
||||
PlaySound2(SOUND_OBJ_THWOMP);
|
||||
func_8027F440(1, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
func_802A3004();
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ static void camera_lakitu_intro_act_show_dialog(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0, CUTSCENE_DIALOG_1, DIALOG_034) != 0) {
|
||||
} else if (obj_update_dialog_with_cutscene(2, DIALOG_UNK2_FLAG_0, CUTSCENE_DIALOG, DIALOG_034) != 0) {
|
||||
o->oCameraLakituFinishedDialog = TRUE;
|
||||
}
|
||||
}
|
||||
@ -151,22 +151,22 @@ void bhv_camera_lakitu_update(void) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
f32 val0C = (f32) 0x875C3D / 0x800 - gCameraStatus.camFocAndPosCurrAndGoal[1][0];
|
||||
if (gCameraStatus.camFocAndPosCurrAndGoal[1][0] < 1700.0f || val0C < 0.0f) {
|
||||
f32 val0C = (f32) 0x875C3D / 0x800 - gLakituState.curPos[0];
|
||||
if (gLakituState.curPos[0] < 1700.0f || val0C < 0.0f) {
|
||||
obj_hide();
|
||||
} else {
|
||||
obj_unhide();
|
||||
|
||||
o->oPosX = gCameraStatus.camFocAndPosCurrAndGoal[1][0];
|
||||
o->oPosY = gCameraStatus.camFocAndPosCurrAndGoal[1][1];
|
||||
o->oPosZ = gCameraStatus.camFocAndPosCurrAndGoal[1][2];
|
||||
o->oPosX = gLakituState.curPos[0];
|
||||
o->oPosY = gLakituState.curPos[1];
|
||||
o->oPosZ = gLakituState.curPos[2];
|
||||
|
||||
o->oHomeX = gCameraStatus.camFocAndPosCurrAndGoal[0][0];
|
||||
o->oHomeZ = gCameraStatus.camFocAndPosCurrAndGoal[0][2];
|
||||
o->oHomeX = gLakituState.curFocus[0];
|
||||
o->oHomeZ = gLakituState.curFocus[2];
|
||||
|
||||
o->oFaceAngleYaw = -obj_angle_to_home();
|
||||
o->oFaceAnglePitch = atan2s(obj_lateral_dist_to_home(),
|
||||
o->oPosY - gCameraStatus.camFocAndPosCurrAndGoal[0][1]);
|
||||
o->oPosY - gLakituState.curFocus[1]);
|
||||
|
||||
o->oPosX = (f32) 0x875C3D / 0x800 + val0C;
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ void ActionActivateCapSwitch2(void) {
|
||||
if (o->oTimer < 5) {
|
||||
func_802A3398(2, 4, 0.5f, 0.1f);
|
||||
if (o->oTimer == 4) {
|
||||
ShakeScreen(1);
|
||||
ShakeScreen(SHAKE_POS_SMALL);
|
||||
func_802A3004();
|
||||
spawn_triangle_break_particles(60, 139, 0.3f, o->oBehParams2ndByte);
|
||||
}
|
||||
|
@ -336,7 +336,7 @@ static void chain_chomp_released_break_gate(void) {
|
||||
*/
|
||||
static void chain_chomp_released_jump_away(void) {
|
||||
if (o->oMoveFlags & OBJ_MOVE_MASK_ON_GROUND) {
|
||||
gCutsceneActive = TRUE;
|
||||
gObjCutsceneDone = TRUE;
|
||||
o->oChainChompReleaseStatus = CHAIN_CHOMP_RELEASED_END_CUTSCENE;
|
||||
}
|
||||
}
|
||||
@ -538,7 +538,7 @@ void bhv_chain_chomp_gate_init(void) {
|
||||
void bhv_chain_chomp_gate_update(void) {
|
||||
if (o->parentObj->oChainChompHitGate) {
|
||||
func_802A3034(SOUND_GENERAL_WALL_EXPLOSION);
|
||||
func_8027F440(1, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
func_802AA618(0, 0x7F, 200.0f);
|
||||
spawn_triangle_break_particles(30, 0x8A, 3.0f, 4);
|
||||
mark_object_for_deletion(o);
|
||||
|
@ -14,10 +14,10 @@ void func_802AC070(s32 sp18) {
|
||||
|
||||
void func_802AC0B8(void) {
|
||||
if (segmented_to_virtual(bhvDoor) == o->behavior)
|
||||
gPlayerStatusForCamera->unk1C[1] = 6;
|
||||
gPlayerCameraState->cameraEvent = CAM_EVENT_DOOR;
|
||||
else
|
||||
gPlayerStatusForCamera->unk1C[1] = 5;
|
||||
gPlayerStatusForCamera->usedObj = o;
|
||||
gPlayerCameraState->cameraEvent = CAM_EVENT_DOOR_WARP;
|
||||
gPlayerCameraState->usedObj = o;
|
||||
}
|
||||
|
||||
void func_802AC130(void) {
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
void func_802AD01C(void) {
|
||||
PlaySound2(SOUND_GENERAL_QUIET_POUND1);
|
||||
ShakeScreen(1);
|
||||
ShakeScreen(SHAKE_POS_SMALL);
|
||||
}
|
||||
|
||||
void ActionElevator0(void) {
|
||||
@ -65,7 +65,7 @@ void ActionElevator2() // Pretty similar code to action 1
|
||||
void ActionElevator4() {
|
||||
o->oVelY = 0;
|
||||
if (o->oTimer == 0) {
|
||||
ShakeScreen(1);
|
||||
ShakeScreen(SHAKE_POS_SMALL);
|
||||
PlaySound2(SOUND_GENERAL_METAL_POUND);
|
||||
}
|
||||
if (!mario_is_in_air_action() && !obj_is_mario_on_platform())
|
||||
@ -76,7 +76,7 @@ void ActionElevator3() // nearly identical to action 2
|
||||
{
|
||||
o->oVelY = 0;
|
||||
if (o->oTimer == 0) {
|
||||
ShakeScreen(1);
|
||||
ShakeScreen(SHAKE_POS_SMALL);
|
||||
PlaySound2(SOUND_GENERAL_METAL_POUND);
|
||||
}
|
||||
if (!mario_is_in_air_action() && !obj_is_mario_on_platform())
|
||||
|
@ -17,7 +17,7 @@ void bhv_end_birds_1_loop(void) {
|
||||
gCurrentObject->oIntroLakituUnk108);
|
||||
|
||||
if (gCurrentObject->oTimer < 100)
|
||||
func_8029A7DC(gCurrentObject, sp34, 0, 0, 0x20, 0x20);
|
||||
obj_rotate_towards_point(gCurrentObject, sp34, 0, 0, 0x20, 0x20);
|
||||
if ((gCurrentObject->oEndBirdUnk104 == 0.f) && (gCurrentObject->oTimer == 0))
|
||||
PlaySound2(SOUND_GENERAL_BIRDS_FLY_AWAY);
|
||||
if (gCutsceneTimer == 0)
|
||||
|
@ -15,12 +15,12 @@ void bhv_end_birds_2_loop(void) {
|
||||
gCurrentObject->oAction += 1;
|
||||
break;
|
||||
case 1:
|
||||
vec3f_get_dist_and_angle(gCurrLevelCamera->pos, gCurrLevelCamera->focus, &sp34, &sp32,
|
||||
vec3f_get_dist_and_angle(gCamera->pos, gCamera->focus, &sp34, &sp32,
|
||||
&sp30);
|
||||
sp30 += 0x1000;
|
||||
sp32 += 0; // nice work, Nintendo
|
||||
vec3f_set_dist_and_angle(gCurrLevelCamera->pos, sp3C, 14000.f, sp32, sp30);
|
||||
func_8029A7DC(gCurrentObject, sp3C, 0, 0, 8, 8);
|
||||
vec3f_set_dist_and_angle(gCamera->pos, sp3C, 14000.f, sp32, sp30);
|
||||
obj_rotate_towards_point(gCurrentObject, sp3C, 0, 0, 8, 8);
|
||||
|
||||
if ((gCurrentObject->oEndBirdUnk104 == 0.f) && (gCurrentObject->oTimer == 0))
|
||||
PlaySound2(SOUND_GENERAL_BIRDS_FLY_AWAY);
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
void bhv_explosion_init(void) {
|
||||
create_sound_spawner(SOUND_GENERAL2_BOBOMB_EXPLOSION);
|
||||
set_camera_shake_2(SHAKE_2_UNKNOWN_1);
|
||||
set_environmental_camera_shake(SHAKE_ENV_EXPLOSION);
|
||||
|
||||
o->oOpacity = 255;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ static void eyerok_boss_act_wake_up(void) {
|
||||
}
|
||||
|
||||
static void eyerok_boss_act_show_intro_text(void) {
|
||||
if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG_1, DIALOG_117)) {
|
||||
if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_117)) {
|
||||
o->oAction = EYEROK_BOSS_ACT_FIGHT;
|
||||
}
|
||||
}
|
||||
@ -117,7 +117,7 @@ static void eyerok_boss_act_fight(void) {
|
||||
|
||||
static void eyerok_boss_act_die(void) {
|
||||
if (o->oTimer == 60) {
|
||||
if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG_1, DIALOG_118)) {
|
||||
if (obj_update_dialog_with_cutscene(2, 0, CUTSCENE_DIALOG, DIALOG_118)) {
|
||||
create_star(0.0f, -900.0f, -3700.0f);
|
||||
} else {
|
||||
o->oTimer -= 1;
|
||||
@ -175,7 +175,7 @@ static s32 eyerok_hand_check_attacked(void) {
|
||||
|
||||
static void func_8030DBA8(void) {
|
||||
PlaySound2(SOUND_OBJ_POUNDING_LOUD);
|
||||
func_8027F440(1, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_SMALL, o->oPosX, o->oPosY, o->oPosZ);
|
||||
func_802ADA94();
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ void bhv_falling_pillar_loop(void) {
|
||||
o->oPosZ += coss(o->oFaceAngleYaw) * 500.0f;
|
||||
|
||||
// Make the camera shake and spawn dust clouds.
|
||||
func_8027F440(2, o->oPosX, o->oPosY, o->oPosZ);
|
||||
set_camera_shake_from_point(SHAKE_POS_MEDIUM, o->oPosX, o->oPosY, o->oPosZ);
|
||||
func_802AA618(0, 0, 92.0f);
|
||||
|
||||
// Go invisible.
|
||||
|
@ -50,7 +50,7 @@ void bhv_grand_star_loop(void) {
|
||||
} else if (o->oVelY < 0.0f && o->oPosY < o->oHomeY + 200.0f) {
|
||||
o->oPosY = o->oHomeY + 200.0f;
|
||||
func_802B29B0();
|
||||
gCutsceneActive = 1;
|
||||
gObjCutsceneDone = 1;
|
||||
set_mario_npc_dialog(0);
|
||||
o->oAction++;
|
||||
o->oInteractStatus = 0;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user