refresh 5

master
n64 2020-01-03 10:38:57 -05:00
parent 04732af90b
commit 9273f38df1
165 changed files with 12516 additions and 10252 deletions

15
CHANGES
View File

@ -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)

View File

@ -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)

View File

@ -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]}],

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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,

View File

@ -1,39 +1,75 @@
'0' = 0x00
'' = 0x00
'1' = 0x01
'' = 0x01
'2' = 0x02
'' = 0x02
'3' = 0x03
'' = 0x03
'4' = 0x04
'' = 0x04
'5' = 0x05
'' = 0x05
'6' = 0x06
'' = 0x06
'7' = 0x07
'' = 0x07
'8' = 0x08
'' = 0x08
'9' = 0x09
'' = 0x09
'A' = 0x0A
'' = 0x0A
'B' = 0x0B
'' = 0x0B
'C' = 0x0C
'' = 0x0C
'D' = 0x0D
'' = 0x0D
'E' = 0x0E
'' = 0x0E
'F' = 0x0F
'' = 0x0F
'G' = 0x10
'' = 0x10
'H' = 0x11
'' = 0x11
'I' = 0x12
'' = 0x12
'J' = 0x13
'' = 0x13
'K' = 0x14
'' = 0x14
'L' = 0x15
'' = 0x15
'M' = 0x16
'' = 0x16
'N' = 0x17
'' = 0x17
'O' = 0x18
'' = 0x18
'P' = 0x19
'' = 0x19
'Q' = 0x1A
'' = 0x1A
'R' = 0x1B
'' = 0x1B
'S' = 0x1C
'' = 0x1C
'T' = 0x1D
'' = 0x1D
'U' = 0x1E
'' = 0x1E
'V' = 0x1F
'' = 0x1F
'W' = 0x20
'' = 0x20
'X' = 0x21
'' = 0x21
'Y' = 0x22
'' = 0x22
'Z' = 0x23
'' = 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

View File

@ -23,7 +23,7 @@
'み' = 0x14
'ど' = 0x15
'の' = 0x16
'?' = 0x17
'' = 0x17
'サ' = 0x18
'ウ' = 0x19
'ン' = 0x1A

File diff suppressed because it is too large Load Diff

23
enhancements/debug_box.h Normal file
View 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 */

View 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;
}

View File

@ -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 */

View File

@ -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")

View File

@ -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[];

View File

@ -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

View File

@ -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) \

View File

@ -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)

View File

@ -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 _("サウンドセレクト")

View File

@ -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 _("マリオ")
#define TEXT_FILE_MARIO_B _("マリオ")
#define TEXT_FILE_MARIO_C _("マリオ")
#define TEXT_FILE_MARIO_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 _("マリオ")
#define TEXT_SCORE_MARIO_B _("マリオ")
#define TEXT_SCORE_MARIO_C _("マリオ")
#define TEXT_SCORE_MARIO_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 _("マリオをけしました")
/**
* 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 _("ボタンのカメラきりかえ")
// 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 _("")
// 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

View File

@ -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[];

View File

@ -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;

View File

@ -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(),

View File

@ -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(),

View File

@ -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),

View File

@ -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(),

View File

@ -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),

View File

@ -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(),

View File

@ -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(),

View File

@ -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(),

View File

@ -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),

View File

@ -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),

View File

@ -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(),

View File

@ -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(),

View File

@ -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(),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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)

View File

@ -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),

View File

@ -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),

View File

@ -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(),

View File

@ -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(),

View File

@ -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),

View File

@ -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),

View File

@ -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

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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(),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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),

View File

@ -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) {

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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];

View File

@ -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);

View File

@ -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
{

View File

@ -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[];

View File

@ -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);

View File

@ -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);

View File

@ -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 */

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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();
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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) {

View File

@ -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())

View File

@ -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)

View File

@ -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);

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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.

View File

@ -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