L is real 2020

Added Luigi model.
Renamed all previous references to 'Luigi' to 'Mario2' since player 1
isn't always mario, and player 2 isn't always luigi.
Now server is always mario and client is always Luigi.

Luigi model credits:
Original model by Cjes, converted by AloXado320, textures added/fixed by
SunlitSpace542.
This commit is contained in:
MysterD 2020-08-08 21:36:49 -07:00
parent b07aa565d4
commit eeec6aae49
50 changed files with 9812 additions and 308 deletions

View file

@ -7,6 +7,7 @@
// Note: This bin does not use bin IDs, unlike the other segmented bins.
#include "mario/model.inc.c"
#include "luigi/model.inc.c"
#include "bubble/model.inc.c"

View file

@ -16,57 +16,6 @@ extern const Gfx burn_smoke_seg4_dl_04022028[];
extern const Gfx burn_smoke_seg4_dl_04022048[];
extern const Gfx burn_smoke_seg4_dl_04022070[];
// luigi
extern const GeoLayout luigi_geo_face_and_wings[];
extern const GeoLayout luigi_geo_left_hand[];
extern const GeoLayout luigi_geo_right_hand[];
extern const GeoLayout luigi_geo_body[];
extern const GeoLayout luigi_geo_medium_poly_left_hand[];
extern const GeoLayout luigi_geo_medium_poly_right_hand[];
extern const GeoLayout luigi_geo_medium_poly_body[];
extern const GeoLayout luigi_geo_low_poly_face_and_wings[];
extern const GeoLayout luigi_geo_low_poly_left_hand[];
extern const GeoLayout luigi_geo_low_poly_right_hand[];
extern const GeoLayout luigi_geo_low_poly_body[];
extern const GeoLayout luigi_vanish_geo_face_and_wings[];
extern const GeoLayout luigi_vanish_geo_left_hand[];
extern const GeoLayout luigi_vanish_geo_right_hand[];
extern const GeoLayout luigi_vanish_geo_body[];
extern const GeoLayout luigi_vanish_geo_medium_poly_left_hand[];
extern const GeoLayout luigi_vanish_geo_medium_poly_right_hand[];
extern const GeoLayout luigi_vanish_geo_medium_poly_body[];
extern const GeoLayout luigi_vanish_geo_low_poly_face_and_wings[];
extern const GeoLayout luigi_vanish_geo_low_poly_left_hand[];
extern const GeoLayout luigi_vanish_geo_low_poly_right_hand[];
extern const GeoLayout luigi_vanish_geo_low_poly_body[];
extern const GeoLayout luigi_metal_geo_face_and_wings[];
extern const GeoLayout luigi_metal_geo_left_hand[];
extern const GeoLayout luigi_metal_geo_right_hand[];
extern const GeoLayout luigi_metal_geo_body[];
extern const GeoLayout luigi_metal_geo_medium_poly_left_hand[];
extern const GeoLayout luigi_metal_geo_medium_poly_right_hand[];
extern const GeoLayout luigi_metal_geo_medium_poly_body[];
extern const GeoLayout luigi_metal_geo_low_poly_face_and_wings[];
extern const GeoLayout luigi_metal_geo_low_poly_left_hand[];
extern const GeoLayout luigi_metal_geo_low_poly_right_hand[];
extern const GeoLayout luigi_metal_geo_low_poly_body[];
extern const GeoLayout luigi_metal_vanish_geo_face_and_wings[];
extern const GeoLayout luigi_metal_vanish_geo_left_hand[];
extern const GeoLayout luigi_metal_vanish_geo_right_hand[];
extern const GeoLayout luigi_metal_vanish_geo_body[];
extern const GeoLayout luigi_metal_vanish_geo_medium_poly_left_hand[];
extern const GeoLayout luigi_metal_vanish_geo_medium_poly_right_hand[];
extern const GeoLayout luigi_metal_vanish_geo_medium_poly_body[];
extern const GeoLayout luigi_metal_vanish_geo_low_poly_face_and_wings[];
extern const GeoLayout luigi_metal_vanish_geo_low_poly_left_hand[];
extern const GeoLayout luigi_metal_vanish_geo_low_poly_right_hand[];
extern const GeoLayout luigi_metal_vanish_geo_low_poly_body[];
extern const GeoLayout luigi_geo_load_body[];
extern const GeoLayout luigi_geo_load_medium_poly_body[];
extern const GeoLayout luigi_geo_load_low_poly_body[];
extern const GeoLayout luigi_geo_render_body[];
extern const GeoLayout luigi_geo[];
// mario
extern const GeoLayout mario_geo_face_and_wings[];
extern const GeoLayout mario_geo_left_hand[];
@ -314,6 +263,60 @@ extern const Gfx mario_cap_wings_transparent[];
extern const Gfx mario_metal_cap_wings[];
extern const Gfx mario_metal_cap_wings_transparent[];
// mario (player 2)
extern const GeoLayout mario2_geo_face_and_wings[];
extern const GeoLayout mario2_geo_left_hand[];
extern const GeoLayout mario2_geo_right_hand[];
extern const GeoLayout mario2_geo_body[];
extern const GeoLayout mario2_geo_medium_poly_left_hand[];
extern const GeoLayout mario2_geo_medium_poly_right_hand[];
extern const GeoLayout mario2_geo_medium_poly_body[];
extern const GeoLayout mario2_geo_low_poly_face_and_wings[];
extern const GeoLayout mario2_geo_low_poly_left_hand[];
extern const GeoLayout mario2_geo_low_poly_right_hand[];
extern const GeoLayout mario2_geo_low_poly_body[];
extern const GeoLayout mario2_vanish_geo_face_and_wings[];
extern const GeoLayout mario2_vanish_geo_left_hand[];
extern const GeoLayout mario2_vanish_geo_right_hand[];
extern const GeoLayout mario2_vanish_geo_body[];
extern const GeoLayout mario2_vanish_geo_medium_poly_left_hand[];
extern const GeoLayout mario2_vanish_geo_medium_poly_right_hand[];
extern const GeoLayout mario2_vanish_geo_medium_poly_body[];
extern const GeoLayout mario2_vanish_geo_low_poly_face_and_wings[];
extern const GeoLayout mario2_vanish_geo_low_poly_left_hand[];
extern const GeoLayout mario2_vanish_geo_low_poly_right_hand[];
extern const GeoLayout mario2_vanish_geo_low_poly_body[];
extern const GeoLayout mario2_metal_geo_face_and_wings[];
extern const GeoLayout mario2_metal_geo_left_hand[];
extern const GeoLayout mario2_metal_geo_right_hand[];
extern const GeoLayout mario2_metal_geo_body[];
extern const GeoLayout mario2_metal_geo_medium_poly_left_hand[];
extern const GeoLayout mario2_metal_geo_medium_poly_right_hand[];
extern const GeoLayout mario2_metal_geo_medium_poly_body[];
extern const GeoLayout mario2_metal_geo_low_poly_face_and_wings[];
extern const GeoLayout mario2_metal_geo_low_poly_left_hand[];
extern const GeoLayout mario2_metal_geo_low_poly_right_hand[];
extern const GeoLayout mario2_metal_geo_low_poly_body[];
extern const GeoLayout mario2_metal_vanish_geo_face_and_wings[];
extern const GeoLayout mario2_metal_vanish_geo_left_hand[];
extern const GeoLayout mario2_metal_vanish_geo_right_hand[];
extern const GeoLayout mario2_metal_vanish_geo_body[];
extern const GeoLayout mario2_metal_vanish_geo_medium_poly_left_hand[];
extern const GeoLayout mario2_metal_vanish_geo_medium_poly_right_hand[];
extern const GeoLayout mario2_metal_vanish_geo_medium_poly_body[];
extern const GeoLayout mario2_metal_vanish_geo_low_poly_face_and_wings[];
extern const GeoLayout mario2_metal_vanish_geo_low_poly_left_hand[];
extern const GeoLayout mario2_metal_vanish_geo_low_poly_right_hand[];
extern const GeoLayout mario2_metal_vanish_geo_low_poly_body[];
extern const GeoLayout mario2_geo_load_body[];
extern const GeoLayout mario2_geo_load_medium_poly_body[];
extern const GeoLayout mario2_geo_load_low_poly_body[];
extern const GeoLayout mario2_geo_render_body[];
extern const GeoLayout mario2_geo[];
// luigi
#include "actors/luigi/geo_header.h"
// sparkle
extern const GeoLayout sparkles_geo[];
extern const Gfx sparkles_seg4_dl_0402A490[];

View file

@ -17,3 +17,5 @@
#include "sparkle_animation/geo.inc.c"
#include "mario/geo.inc.c"
#include "mario/geo2.inc.c"
#include "luigi/geo.inc.c"
#include "luigi/geo2.inc.c"

954
actors/luigi/geo.inc.c Normal file
View file

@ -0,0 +1,954 @@
#include "src/game/envfx_snow.h"
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_006_switch_option_left_hand_wing_cap_wings_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_006_switch_option_left_hand_wing_cap_wings_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_mesh),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 74, 0, 0, luigi_000_offset_001_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_001_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_002_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_003_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_004_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_003_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_006_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_007_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_004_mesh),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_009_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_010_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 67, 0, 0, luigi_000_offset_011_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_012_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_013_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_005_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_006_switch_option_left_hand_wing_cap_wings_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 74, 0, 0, luigi_000_offset_001_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_001_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_002_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_003_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_004_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_003_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_006_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_007_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_004_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_009_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_010_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, luigi_000_offset_011_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_012_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_013_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_005_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_006_switch_option_left_hand_wing_cap_wings_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 74, 0, 0, luigi_000_offset_001_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_001_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_002_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_003_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_004_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_003_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_006_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_007_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_004_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_009_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_010_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 67, 0, 0, luigi_000_offset_011_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_012_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_013_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_005_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi_geo[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SHADOW(0, 180, 100),
GEO_OPEN_NODE(),
GEO_SCALE(0, 16384),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mirror_mario_backface_culling),
GEO_ASM(0, geo_mirror_mario_set_alpha),
GEO_SWITCH_CASE(0, geo_switch_mario_stand_run),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_mesh),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 74, 0, 0, luigi_000_offset_001_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_001_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_002_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_003_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_004_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_003_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_006_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_007_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_004_mesh),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_009_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_010_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, luigi_000_offset_011_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_012_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_013_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_005_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt1),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ASM(1, geo_mirror_mario_backface_culling),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_DISPLAY_LIST(0, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(1, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(2, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(3, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(4, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(5, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(6, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(7, luigi_material_revert_render_settings),
GEO_CLOSE_NODE(),
GEO_END(),
};

954
actors/luigi/geo2.inc.c Normal file
View file

@ -0,0 +1,954 @@
#include "src/game/envfx_snow.h"
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_006_switch_option_left_hand_wing_cap_wings_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_006_switch_option_left_hand_wing_cap_wings_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_mesh),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(1, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 74, 0, 0, luigi_000_offset_001_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_001_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(3, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_002_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_003_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_004_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(5, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_003_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_006_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_007_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(4, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_004_mesh),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_009_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_010_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 67, 0, 0, luigi_000_offset_011_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_012_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_013_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(6, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_005_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_002_switch_option_head__no_cap__mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_006_switch_option_left_hand_wing_cap_wings_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(1, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 74, 0, 0, luigi_000_offset_001_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_001_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(3, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_002_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_003_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_004_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(5, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_003_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_006_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_007_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(4, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_004_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_009_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_010_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, luigi_000_offset_011_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_012_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_013_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(6, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_005_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_002_switch_option_head__no_cap__mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_right_hand_open_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_002_switch_option_left_hand_open_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_004_switch_option_left_hand_peace_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_005_switch_option_left_hand_cap_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 60, 0, 0, luigi_006_switch_option_left_hand_wing_cap_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_006_switch_option_left_hand_wing_cap_wings_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(1, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 74, 0, 0, luigi_000_offset_001_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_001_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(3, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_002_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_003_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_004_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(5, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_003_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_006_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 65, 0, 0, luigi_000_offset_007_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(4, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_004_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_009_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_010_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 67, 0, 0, luigi_000_offset_011_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 0, 0, 0, luigi_000_offset_012_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(5, 89, 0, 0, luigi_000_offset_013_mesh_mat_override_metal_0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(6, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(5, luigi_000_displaylist_005_mesh_mat_override_metal_0),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_1___eye_half_1),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_2___eye_closed_2),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh_mat_override_face_7___eye_X_3),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
const GeoLayout luigi2_geo[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SHADOW(0, 180, 100),
GEO_OPEN_NODE(),
GEO_SCALE(0, 16384),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mirror_mario_backface_culling),
GEO_ASM(0, geo_mirror_mario_set_alpha),
GEO_SWITCH_CASE(1, geo_switch_mario_stand_run),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_mesh),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(1, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 74, 0, 0, luigi_000_offset_001_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(1, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_mesh),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_armature_002_switch_option_002),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, -126, 15, -33, -133),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_001_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 142, -51, 126, -15, 33, -133),
GEO_OPEN_NODE(),
GEO_ASM(3, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(4, luigi_000_displaylist_002_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 67, -10, 70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_003_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_004_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(5, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_003_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_right_hand_open_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 68, -10, -70, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_006_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 65, 0, 0, luigi_000_offset_007_mesh),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 60, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(4, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_004_mesh),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(1, 0, 0, 2, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_left_hand_open_armature),
GEO_BRANCH(1, luigi2_left_hand_peace_armature),
GEO_BRANCH(1, luigi2_left_hand_cap_armature),
GEO_BRANCH(1, luigi2_left_hand_wing_cap_armature),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, 38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_009_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_010_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, luigi_000_offset_011_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(1, 13, -8, -38, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 0, 0, 0, luigi_000_offset_012_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 89, 0, 0, luigi_000_offset_013_mesh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(1, 67, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ASM(6, geo_mario_hand_foot_scaler),
GEO_SCALE(0, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(1, luigi_000_displaylist_005_mesh),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt1),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt2),
GEO_BRANCH(1, luigi2_002_switch_opt0_001_switch_opt3),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ASM(1, geo_mirror_mario_backface_culling),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_DISPLAY_LIST(0, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(1, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(2, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(3, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(4, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(5, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(6, luigi_material_revert_render_settings),
GEO_DISPLAY_LIST(7, luigi_material_revert_render_settings),
GEO_CLOSE_NODE(),
GEO_END(),
};

229
actors/luigi/geo_header.h Normal file
View file

@ -0,0 +1,229 @@
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi_right_hand_open_armature[];
extern const GeoLayout luigi_left_hand_open_armature[];
extern const GeoLayout luigi_left_hand_peace_armature[];
extern const GeoLayout luigi_left_hand_cap_armature[];
extern const GeoLayout luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt1[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt2[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt3[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout luigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout luigi_geo[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout luigi2_armature_002_switch_option_002[];
extern const GeoLayout luigi2_right_hand_open_armature[];
extern const GeoLayout luigi2_left_hand_open_armature[];
extern const GeoLayout luigi2_left_hand_peace_armature[];
extern const GeoLayout luigi2_left_hand_cap_armature[];
extern const GeoLayout luigi2_left_hand_wing_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt1[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt2[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_armature_002_switch_option_002[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_right_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_open_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_peace_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3_jump_luigi_left_hand_wing_cap_armature[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt3[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout luigi2_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout luigi2_geo[];
extern Vtx luigi_000_offset_mesh_vtx_0[76];
extern Gfx luigi_000_offset_mesh_tri_0[];
extern Vtx luigi_000_offset_001_mesh_vtx_0[106];
extern Gfx luigi_000_offset_001_mesh_tri_0[];
extern Vtx luigi_000_offset_001_mesh_vtx_1[31];
extern Gfx luigi_000_offset_001_mesh_tri_1[];
extern Vtx luigi_000_displaylist_mesh_vtx_0[95];
extern Gfx luigi_000_displaylist_mesh_tri_0[];
extern Vtx luigi_000_displaylist_mesh_vtx_1[12];
extern Gfx luigi_000_displaylist_mesh_tri_1[];
extern Vtx luigi_000_displaylist_mesh_vtx_2[27];
extern Gfx luigi_000_displaylist_mesh_tri_2[];
extern Vtx luigi_000_displaylist_mesh_vtx_3[29];
extern Gfx luigi_000_displaylist_mesh_tri_3[];
extern Vtx luigi_000_displaylist_mesh_vtx_4[56];
extern Gfx luigi_000_displaylist_mesh_tri_4[];
extern Vtx luigi_002_switch_option_head__no_cap__mesh_vtx_0[96];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_tri_0[];
extern Vtx luigi_002_switch_option_head__no_cap__mesh_vtx_1[30];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_tri_1[];
extern Vtx luigi_002_switch_option_head__no_cap__mesh_vtx_2[12];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_tri_2[];
extern Vtx luigi_002_switch_option_head__no_cap__mesh_vtx_3[100];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_tri_3[];
extern Vtx luigi_000_displaylist_001_mesh_vtx_0[4];
extern Gfx luigi_000_displaylist_001_mesh_tri_0[];
extern Vtx luigi_000_displaylist_001_mesh_vtx_1[4];
extern Gfx luigi_000_displaylist_001_mesh_tri_1[];
extern Vtx luigi_000_displaylist_002_mesh_vtx_0[4];
extern Gfx luigi_000_displaylist_002_mesh_tri_0[];
extern Vtx luigi_000_displaylist_002_mesh_vtx_1[4];
extern Gfx luigi_000_displaylist_002_mesh_tri_1[];
extern Vtx luigi_000_offset_003_mesh_vtx_0[31];
extern Gfx luigi_000_offset_003_mesh_tri_0[];
extern Vtx luigi_000_offset_004_mesh_vtx_0[16];
extern Gfx luigi_000_offset_004_mesh_tri_0[];
extern Vtx luigi_000_displaylist_003_mesh_vtx_0[46];
extern Gfx luigi_000_displaylist_003_mesh_tri_0[];
extern Vtx luigi_002_switch_option_right_hand_open_mesh_vtx_0[58];
extern Gfx luigi_002_switch_option_right_hand_open_mesh_tri_0[];
extern Vtx luigi_000_offset_006_mesh_vtx_0[30];
extern Gfx luigi_000_offset_006_mesh_tri_0[];
extern Vtx luigi_000_offset_007_mesh_vtx_0[16];
extern Gfx luigi_000_offset_007_mesh_tri_0[];
extern Vtx luigi_000_displaylist_004_mesh_vtx_0[36];
extern Gfx luigi_000_displaylist_004_mesh_tri_0[];
extern Vtx luigi_002_switch_option_left_hand_open_mesh_vtx_0[57];
extern Gfx luigi_002_switch_option_left_hand_open_mesh_tri_0[];
extern Vtx luigi_004_switch_option_left_hand_peace_mesh_vtx_0[84];
extern Gfx luigi_004_switch_option_left_hand_peace_mesh_tri_0[];
extern Vtx luigi_005_switch_option_left_hand_cap_mesh_vtx_0[36];
extern Gfx luigi_005_switch_option_left_hand_cap_mesh_tri_0[];
extern Vtx luigi_005_switch_option_left_hand_cap_mesh_vtx_1[71];
extern Gfx luigi_005_switch_option_left_hand_cap_mesh_tri_1[];
extern Vtx luigi_006_switch_option_left_hand_wing_cap_mesh_vtx_0[36];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_mesh_tri_0[];
extern Vtx luigi_006_switch_option_left_hand_wing_cap_mesh_vtx_1[71];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_mesh_tri_1[];
extern Vtx luigi_006_switch_option_left_hand_wing_cap_wings_mesh_vtx_0[8];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_wings_mesh_tri_0[];
extern Vtx luigi_006_switch_option_left_hand_wing_cap_wings_mesh_vtx_1[8];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_wings_mesh_tri_1[];
extern Vtx luigi_000_offset_009_mesh_vtx_0[22];
extern Gfx luigi_000_offset_009_mesh_tri_0[];
extern Vtx luigi_000_offset_010_mesh_vtx_0[12];
extern Gfx luigi_000_offset_010_mesh_tri_0[];
extern Vtx luigi_000_offset_011_mesh_vtx_0[29];
extern Gfx luigi_000_offset_011_mesh_tri_0[];
extern Vtx luigi_000_offset_012_mesh_vtx_0[22];
extern Gfx luigi_000_offset_012_mesh_tri_0[];
extern Vtx luigi_000_offset_013_mesh_vtx_0[12];
extern Gfx luigi_000_offset_013_mesh_tri_0[];
extern Vtx luigi_000_displaylist_005_mesh_vtx_0[28];
extern Gfx luigi_000_displaylist_005_mesh_tri_0[];
extern Gfx luigi_000_offset_mesh[];
extern Gfx luigi_000_offset_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_001_mesh[];
extern Gfx luigi_000_offset_001_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_mesh[];
extern Gfx luigi_000_displaylist_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_mesh_mat_override_face_1___eye_half_1[];
extern Gfx luigi_000_displaylist_mesh_mat_override_face_2___eye_closed_2[];
extern Gfx luigi_000_displaylist_mesh_mat_override_face_7___eye_X_3[];
extern Gfx luigi_002_switch_option_head__no_cap__mesh[];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_mat_override_metal_0[];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_mat_override_face_1___eye_half_1[];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_mat_override_face_2___eye_closed_2[];
extern Gfx luigi_002_switch_option_head__no_cap__mesh_mat_override_face_7___eye_X_3[];
extern Gfx luigi_000_displaylist_001_mesh[];
extern Gfx luigi_000_displaylist_001_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_002_mesh[];
extern Gfx luigi_000_displaylist_002_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_003_mesh[];
extern Gfx luigi_000_offset_003_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_004_mesh[];
extern Gfx luigi_000_offset_004_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_003_mesh[];
extern Gfx luigi_000_displaylist_003_mesh_mat_override_metal_0[];
extern Gfx luigi_002_switch_option_right_hand_open_mesh[];
extern Gfx luigi_002_switch_option_right_hand_open_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_006_mesh[];
extern Gfx luigi_000_offset_006_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_007_mesh[];
extern Gfx luigi_000_offset_007_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_004_mesh[];
extern Gfx luigi_000_displaylist_004_mesh_mat_override_metal_0[];
extern Gfx luigi_002_switch_option_left_hand_open_mesh[];
extern Gfx luigi_002_switch_option_left_hand_open_mesh_mat_override_metal_0[];
extern Gfx luigi_004_switch_option_left_hand_peace_mesh[];
extern Gfx luigi_004_switch_option_left_hand_peace_mesh_mat_override_metal_0[];
extern Gfx luigi_005_switch_option_left_hand_cap_mesh[];
extern Gfx luigi_005_switch_option_left_hand_cap_mesh_mat_override_metal_0[];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_mesh[];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_mesh_mat_override_metal_0[];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_wings_mesh[];
extern Gfx luigi_006_switch_option_left_hand_wing_cap_wings_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_009_mesh[];
extern Gfx luigi_000_offset_009_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_010_mesh[];
extern Gfx luigi_000_offset_010_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_011_mesh[];
extern Gfx luigi_000_offset_011_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_012_mesh[];
extern Gfx luigi_000_offset_012_mesh_mat_override_metal_0[];
extern Gfx luigi_000_offset_013_mesh[];
extern Gfx luigi_000_offset_013_mesh_mat_override_metal_0[];
extern Gfx luigi_000_displaylist_005_mesh[];
extern Gfx luigi_000_displaylist_005_mesh_mat_override_metal_0[];
extern Gfx luigi_material_revert_render_settings[];

6907
actors/luigi/model.inc.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,81 @@
// 0x16000CA4
const GeoLayout luigis_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_seg3_dl_03022F48),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_seg3_dl_03022F48),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000CF0
const GeoLayout luigis_metal_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_seg3_dl_03022FF8),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_seg3_dl_03022FF8),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000D3C
const GeoLayout luigis_wing_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_seg3_dl_03022F48),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_cap_seg3_dl_030230B0),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_seg3_dl_03023160),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000DA8
const GeoLayout luigis_winged_metal_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_seg3_dl_03022FF8),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_cap_seg3_dl_03023108),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_seg3_dl_03023298),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};

View file

@ -0,0 +1,416 @@
// Luigi Cap (Normal Cap, Metal, Winged, etc)
// 0x0301CF08
static const Lights1 luigi_cap_seg3_lights_0301CF08 = gdSPDefLights1(
0x00, 0x46, 0x00,
0x00, 0x8C, 0x00, 0x28, 0x28, 0x28
);
// 0x0301CF20
static const Lights1 luigi_cap_seg3_lights_0301CF20 = gdSPDefLights1(
0x00, 0x46, 0x00,
0x00, 0x8C, 0x00, 0x28, 0x28, 0x28
);
// 0x0301CF38
static const Lights1 luigi_cap_seg3_lights_0301CF38 = gdSPDefLights1(
0x00, 0x46, 0x00,
0x00, 0x8C, 0x00, 0x28, 0x28, 0x28
);
// 0x0301CF50
ALIGNED8 static const u8 luigi_cap_seg3_texture_0301CF50[] = {
#include "actors/luigi_cap/luigi_cap_metal.rgba16.inc.c"
};
// 0x0301DF50
ALIGNED8 static const u8 luigi_cap_seg3_texture_0301DF50[] = {
#include "actors/luigi_cap/luigi_cap_logo.rgba16.inc.c"
};
// 0x0301E750
ALIGNED8 static const u8 luigi_cap_seg3_texture_0301E750[] = {
#include "actors/luigi_cap/luigi_cap_wing.rgba16.inc.c"
};
// 0x0301F750
ALIGNED8 static const u8 luigi_cap_seg3_texture_0301F750[] = {
#include "actors/luigi_cap/luigi_cap_wing_tip.rgba16.inc.c"
};
// 0x03020750
ALIGNED8 static const u8 luigi_cap_seg3_texture_03020750[] = {
#include "actors/luigi_cap/luigi_cap_metal_wing_unused.rgba16.inc.c"
};
// 0x03021750
ALIGNED8 static const u8 luigi_cap_seg3_texture_03021750[] = {
#include "actors/luigi_cap/luigi_cap_metal_wing_tip_unused.rgba16.inc.c"
};
// 0x03022750
static const Vtx luigi_cap_seg3_vertex_03022750[] = {
{{{ 33, 35, 118}, 0, { 728, 758}, {0x30, 0x26, 0x6e, 0xff}}},
{{{ 96, 22, 45}, 0, { 1240, 876}, {0x48, 0xa4, 0x31, 0xff}}},
{{{ 71, 101, 113}, 0, { 1028, 148}, {0x55, 0x16, 0x5b, 0xff}}},
{{{ 0, 110, 143}, 0, { 460, 68}, {0x00, 0x34, 0x73, 0xff}}},
{{{ -31, 35, 118}, 0, { 206, 762}, {0xd0, 0x26, 0x6f, 0xff}}},
{{{ -70, 101, 113}, 0, { -106, 158}, {0xab, 0x16, 0x5b, 0xff}}},
{{{ -95, 22, 46}, 0, { -302, 890}, {0xa8, 0xb9, 0x38, 0xff}}},
};
// 0x030227C0
static const Vtx luigi_cap_seg3_vertex_030227C0[] = {
{{{ -66, 2, 139}, 0, { 0, 0}, {0xb0, 0xbb, 0x45, 0xff}}},
{{{ 0, 0, 163}, 0, { 0, 0}, {0x00, 0xba, 0x69, 0xff}}},
{{{ -31, 35, 118}, 0, { 0, 0}, {0xd0, 0x26, 0x6f, 0xff}}},
{{{ -32, 17, 109}, 0, { 0, 0}, {0x00, 0x83, 0xf0, 0xff}}},
{{{ 33, 17, 109}, 0, { 0, 0}, {0xfb, 0x84, 0xea, 0xff}}},
{{{ -95, 22, 46}, 0, { 0, 0}, {0xa8, 0xb9, 0x38, 0xff}}},
{{{ -101, 10, -7}, 0, { 0, 0}, {0xd8, 0x89, 0x11, 0xff}}},
{{{ -70, 101, 113}, 0, { 0, 0}, {0xab, 0x16, 0x5b, 0xff}}},
{{{ -135, 70, 23}, 0, { 0, 0}, {0x84, 0x15, 0x10, 0xff}}},
{{{ -125, 38, -45}, 0, { 0, 0}, {0x8d, 0xec, 0xd1, 0xff}}},
{{{ -86, 1, -60}, 0, { 0, 0}, {0xce, 0x8c, 0xf6, 0xff}}},
{{{ -41, 144, 64}, 0, { 0, 0}, {0xdc, 0x79, 0x00, 0xff}}},
{{{ -76, 84, -60}, 0, { 0, 0}, {0xd5, 0x6e, 0xd3, 0xff}}},
{{{ 136, 70, 22}, 0, { 0, 0}, {0x7b, 0x16, 0x10, 0xff}}},
{{{ 71, 101, 113}, 0, { 0, 0}, {0x55, 0x16, 0x5b, 0xff}}},
{{{ 96, 22, 45}, 0, { 0, 0}, {0x48, 0xa4, 0x31, 0xff}}},
};
// 0x030228C0
static const Vtx luigi_cap_seg3_vertex_030228C0[] = {
{{{ 42, 144, 64}, 0, { 0, 0}, {0x2b, 0x76, 0x0d, 0xff}}},
{{{ 136, 70, 22}, 0, { 0, 0}, {0x7b, 0x16, 0x10, 0xff}}},
{{{ 76, 84, -60}, 0, { 0, 0}, {0x2a, 0x6c, 0xcf, 0xff}}},
{{{ 103, 10, -6}, 0, { 0, 0}, {0x42, 0x96, 0x12, 0xff}}},
{{{ 126, 38, -46}, 0, { 0, 0}, {0x73, 0xec, 0xd0, 0xff}}},
{{{ 71, 101, 113}, 0, { 0, 0}, {0x55, 0x16, 0x5b, 0xff}}},
{{{ 96, 22, 45}, 0, { 0, 0}, {0x48, 0xa4, 0x31, 0xff}}},
{{{ 67, 2, 139}, 0, { 0, 0}, {0x50, 0xba, 0x44, 0xff}}},
{{{ 33, 17, 109}, 0, { 0, 0}, {0xfb, 0x84, 0xea, 0xff}}},
{{{ 33, 35, 118}, 0, { 0, 0}, {0x30, 0x26, 0x6e, 0xff}}},
{{{ 86, 1, -60}, 0, { 0, 0}, {0x20, 0x86, 0xfe, 0xff}}},
{{{ 0, 0, 163}, 0, { 0, 0}, {0x00, 0xba, 0x69, 0xff}}},
{{{ -31, 35, 118}, 0, { 0, 0}, {0xd0, 0x26, 0x6f, 0xff}}},
{{{ 53, 0, -118}, 0, { 0, 0}, {0x2c, 0xb5, 0xa5, 0xff}}},
{{{ 49, 62, -139}, 0, { 0, 0}, {0x32, 0x49, 0xa6, 0xff}}},
};
// 0x030229B0
static const Vtx luigi_cap_seg3_vertex_030229B0[] = {
{{{ -76, 84, -60}, 0, { 0, 0}, {0xd5, 0x6e, 0xd3, 0xff}}},
{{{ -41, 144, 64}, 0, { 0, 0}, {0xdc, 0x79, 0x00, 0xff}}},
{{{ 76, 84, -60}, 0, { 0, 0}, {0x2a, 0x6c, 0xcf, 0xff}}},
{{{ 0, 110, 143}, 0, { 0, 0}, {0x00, 0x34, 0x73, 0xff}}},
{{{ 42, 144, 64}, 0, { 0, 0}, {0x2b, 0x76, 0x0d, 0xff}}},
{{{ -70, 101, 113}, 0, { 0, 0}, {0xab, 0x16, 0x5b, 0xff}}},
{{{ 71, 101, 113}, 0, { 0, 0}, {0x55, 0x16, 0x5b, 0xff}}},
{{{ 49, 62, -139}, 0, { 0, 0}, {0x32, 0x49, 0xa6, 0xff}}},
{{{ 126, 38, -46}, 0, { 0, 0}, {0x73, 0xec, 0xd0, 0xff}}},
{{{ -52, 0, -118}, 0, { 0, 0}, {0xd2, 0x9d, 0xc1, 0xff}}},
{{{ -49, 62, -138}, 0, { 0, 0}, {0xce, 0x1a, 0x8f, 0xff}}},
{{{ 53, 0, -118}, 0, { 0, 0}, {0x2c, 0xb5, 0xa5, 0xff}}},
{{{ -125, 38, -45}, 0, { 0, 0}, {0x8d, 0xec, 0xd1, 0xff}}},
{{{ 86, 1, -60}, 0, { 0, 0}, {0x20, 0x86, 0xfe, 0xff}}},
{{{ -86, 1, -60}, 0, { 0, 0}, {0xce, 0x8c, 0xf6, 0xff}}},
};
// 0x03022AA0
static const Vtx luigi_cap_seg3_vertex_03022AA0[] = {
{{{ 86, 1, -60}, 0, { 0, 0}, {0x20, 0x86, 0xfe, 0xff}}},
{{{ -86, 1, -60}, 0, { 0, 0}, {0xce, 0x8c, 0xf6, 0xff}}},
{{{ -52, 0, -118}, 0, { 0, 0}, {0xd2, 0x9d, 0xc1, 0xff}}},
{{{ 33, 17, 109}, 0, { 0, 0}, {0xfb, 0x84, 0xea, 0xff}}},
{{{ -32, 17, 109}, 0, { 0, 0}, {0x00, 0x83, 0xf0, 0xff}}},
{{{ -101, 10, -7}, 0, { 0, 0}, {0xd8, 0x89, 0x11, 0xff}}},
{{{ 96, 22, 45}, 0, { 0, 0}, {0x48, 0xa4, 0x31, 0xff}}},
{{{ 103, 10, -6}, 0, { 0, 0}, {0x42, 0x96, 0x12, 0xff}}},
{{{ 53, 0, -118}, 0, { 0, 0}, {0x2c, 0xb5, 0xa5, 0xff}}},
};
// 0x03022B30 - 0x03022B68
const Gfx luigi_cap_seg3_dl_03022B30[] = {
gsSPVertex(luigi_cap_seg3_vertex_03022750, 7, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 0, 0x0),
gsSP2Triangles( 3, 5, 4, 0x0, 2, 3, 0, 0x0),
gsSP1Triangle( 5, 6, 4, 0x0),
gsSPEndDisplayList(),
};
// 0x03022B68 - 0x03022CC8
const Gfx luigi_cap_seg3_dl_03022B68[] = {
gsSPVertex(luigi_cap_seg3_vertex_030227C0, 16, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 1, 0x0),
gsSP2Triangles( 3, 1, 0, 0x0, 3, 5, 6, 0x0),
gsSP2Triangles( 3, 0, 5, 0x0, 5, 7, 8, 0x0),
gsSP2Triangles( 5, 8, 6, 0x0, 0, 2, 5, 0x0),
gsSP2Triangles( 6, 9, 10, 0x0, 8, 9, 6, 0x0),
gsSP2Triangles(11, 8, 7, 0x0, 8, 12, 9, 0x0),
gsSP2Triangles(12, 8, 11, 0x0, 13, 14, 15, 0x0),
gsSPVertex(luigi_cap_seg3_vertex_030228C0, 15, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 1, 0x0),
gsSP2Triangles( 4, 2, 1, 0x0, 5, 1, 0, 0x0),
gsSP2Triangles( 1, 6, 3, 0x0, 6, 7, 8, 0x0),
gsSP2Triangles( 9, 7, 6, 0x0, 10, 4, 3, 0x0),
gsSP2Triangles( 9, 11, 7, 0x0, 7, 11, 8, 0x0),
gsSP2Triangles(12, 11, 9, 0x0, 13, 14, 4, 0x0),
gsSPVertex(luigi_cap_seg3_vertex_030229B0, 15, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 4, 0x0),
gsSP2Triangles( 5, 3, 1, 0x0, 1, 4, 2, 0x0),
gsSP2Triangles( 4, 3, 6, 0x0, 0, 2, 7, 0x0),
gsSP2Triangles( 8, 7, 2, 0x0, 9, 10, 11, 0x0),
gsSP2Triangles(12, 10, 9, 0x0, 7, 10, 0, 0x0),
gsSP2Triangles(10, 7, 11, 0x0, 0, 10, 12, 0x0),
gsSP2Triangles(11, 8, 13, 0x0, 14, 12, 9, 0x0),
gsSPEndDisplayList(),
};
// 0x03022CC8 - 0x03022D10
const Gfx luigi_cap_seg3_dl_03022CC8[] = {
gsSPVertex(luigi_cap_seg3_vertex_03022AA0, 9, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
gsSP2Triangles( 6, 3, 5, 0x0, 7, 6, 5, 0x0),
gsSP2Triangles( 0, 7, 5, 0x0, 0, 5, 1, 0x0),
gsSP1Triangle( 2, 8, 0, 0x0),
gsSPEndDisplayList(),
};
// 0x03022D10 - 0x03022D38
const Gfx luigi_cap_seg3_dl_03022D10[] = {
gsSPDisplayList(luigi_cap_seg3_dl_03022B68),
gsSPLight(&luigi_cap_seg3_lights_0301CF08.l, 1),
gsSPLight(&luigi_cap_seg3_lights_0301CF08.a, 2),
gsSPDisplayList(luigi_cap_seg3_dl_03022CC8),
gsSPEndDisplayList(),
};
// 0x03022D38
static const Vtx luigi_cap_seg3_vertex_03022D38[] = {
{{{ 199, 247, -55}, 0, { 990, 0}, {0x59, 0xed, 0x58, 0xff}}},
{{{ 131, 274, 20}, 0, { 0, 0}, {0x59, 0xed, 0x58, 0xff}}},
{{{ 69, 71, 38}, 0, { 0, 2012}, {0x59, 0xed, 0x58, 0xff}}},
{{{ 199, 247, -55}, 0, { 990, 0}, {0x58, 0xee, 0x58, 0xff}}},
{{{ 69, 71, 38}, 0, { 0, 2012}, {0x58, 0xee, 0x58, 0xff}}},
{{{ 138, 44, -37}, 0, { 990, 2012}, {0x58, 0xee, 0x58, 0xff}}},
{{{ -137, 44, -37}, 0, { 990, 2012}, {0xa8, 0xee, 0x58, 0xff}}},
{{{ -68, 71, 38}, 0, { 0, 2012}, {0xa8, 0xee, 0x58, 0xff}}},
{{{ -198, 247, -55}, 0, { 990, 0}, {0xa8, 0xee, 0x58, 0xff}}},
{{{ -68, 71, 38}, 0, { 0, 2012}, {0xa7, 0xed, 0x58, 0xff}}},
{{{ -130, 274, 20}, 0, { 0, 0}, {0xa7, 0xed, 0x58, 0xff}}},
{{{ -198, 247, -55}, 0, { 990, 0}, {0xa7, 0xed, 0x58, 0xff}}},
};
// 0x03022DF8
static const Vtx luigi_cap_seg3_vertex_03022DF8[] = {
{{{ 268, 219, -132}, 0, { 990, 0}, {0x59, 0xed, 0x57, 0xff}}},
{{{ 199, 247, -55}, 0, { 0, 0}, {0x59, 0xed, 0x57, 0xff}}},
{{{ 138, 44, -37}, 0, { 0, 2012}, {0x59, 0xed, 0x57, 0xff}}},
{{{ 207, 16, -114}, 0, { 990, 2012}, {0x59, 0xed, 0x57, 0xff}}},
{{{ -206, 16, -114}, 0, { 990, 2012}, {0xa7, 0xed, 0x57, 0xff}}},
{{{ -137, 44, -37}, 0, { 0, 2012}, {0xa7, 0xed, 0x57, 0xff}}},
{{{ -267, 219, -132}, 0, { 990, 0}, {0xa7, 0xed, 0x57, 0xff}}},
{{{ -198, 247, -55}, 0, { 0, 0}, {0xa7, 0xed, 0x57, 0xff}}},
};
// 0x03022E78 - 0x03022EA8
const Gfx luigi_cap_seg3_dl_03022E78[] = {
gsSPVertex(luigi_cap_seg3_vertex_03022D38, 12, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
gsSP2Triangles( 6, 7, 8, 0x0, 9, 10, 11, 0x0),
gsSPEndDisplayList(),
};
// 0x03022EA8 - 0x03022ED8
const Gfx luigi_cap_seg3_dl_03022EA8[] = {
gsSPVertex(luigi_cap_seg3_vertex_03022DF8, 8, 0),
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
gsSP2Triangles( 4, 5, 6, 0x0, 5, 7, 6, 0x0),
gsSPEndDisplayList(),
};
// 0x03022ED8 - 0x03022F20
const Gfx luigi_cap_seg3_dl_03022ED8[] = {
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
gsSPClearGeometryMode(G_LIGHTING | G_CULL_BACK),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (64 - 1) << G_TEXTURE_IMAGE_FRAC),
gsSPEndDisplayList(),
};
// 0x03022F20 - 0x03022F48
const Gfx luigi_cap_seg3_dl_03022F20[] = {
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsSPSetGeometryMode(G_LIGHTING | G_CULL_BACK),
gsSPEndDisplayList(),
};
// 0x03022F48 - 0x03022FF8
const Gfx luigi_cap_seg3_dl_03022F48[] = {
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_BLENDRGBFADEA, G_CC_BLENDRGBFADEA),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301DF50),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPLight(&luigi_cap_seg3_lights_0301CF38.l, 1),
gsSPLight(&luigi_cap_seg3_lights_0301CF38.a, 2),
gsSPDisplayList(luigi_cap_seg3_dl_03022B30),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA),
gsSPDisplayList(luigi_cap_seg3_dl_03022D10),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsDPSetAlphaCompare(G_AC_NONE),
gsDPSetEnvColor(255, 255, 255, 255),
gsSPEndDisplayList(),
};
// 0x03022FF8 - 0x030230B0
const Gfx luigi_cap_seg3_dl_03022FF8[] = {
gsDPPipeSync(),
gsSPSetGeometryMode(G_TEXTURE_GEN),
gsDPSetCombineMode(G_CC_MODULATERGBFADE, G_CC_MODULATERGBFADE),
gsDPLoadTextureBlock(luigi_cap_seg3_texture_0301CF50, G_IM_FMT_RGBA, G_IM_SIZ_16b, 64, 32, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, 6, 5, G_TX_NOLOD, G_TX_NOLOD),
gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_ON),
gsSPLight(&luigi_cap_seg3_lights_0301CF20.l, 1),
gsSPLight(&luigi_cap_seg3_lights_0301CF20.a, 2),
gsSPDisplayList(luigi_cap_seg3_dl_03022B30),
gsSPDisplayList(luigi_cap_seg3_dl_03022B68),
gsSPDisplayList(luigi_cap_seg3_dl_03022CC8),
gsDPPipeSync(),
gsSPClearGeometryMode(G_TEXTURE_GEN),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_OFF),
gsDPSetAlphaCompare(G_AC_NONE),
gsDPSetEnvColor(255, 255, 255, 255),
gsSPEndDisplayList(),
};
// 0x030230B0 - 0x03023108
const Gfx luigi_cap_seg3_dl_030230B0[] = {
gsSPDisplayList(luigi_cap_seg3_dl_03022ED8),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301E750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301F750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022EA8),
gsSPDisplayList(luigi_cap_seg3_dl_03022F20),
gsSPEndDisplayList(),
};
// 0x03023108 - 0x03023160
const Gfx luigi_cap_seg3_dl_03023108[] = {
gsSPDisplayList(luigi_cap_seg3_dl_03022ED8),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_03020750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_03021750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022EA8),
gsSPDisplayList(luigi_cap_seg3_dl_03022F20),
gsSPEndDisplayList(),
};
// 0x03023160 - 0x03023298
const Gfx luigi_cap_seg3_dl_03023160[] = {
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_BLENDRGBFADEA, G_CC_BLENDRGBFADEA),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301DF50),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPLight(&luigi_cap_seg3_lights_0301CF38.l, 1),
gsSPLight(&luigi_cap_seg3_lights_0301CF38.a, 2),
gsSPDisplayList(luigi_cap_seg3_dl_03022B30),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA),
gsSPDisplayList(luigi_cap_seg3_dl_03022D10),
gsDPPipeSync(),
gsSPClearGeometryMode(G_LIGHTING | G_CULL_BACK),
gsDPSetCombineMode(G_CC_DECALFADEA, G_CC_DECALFADEA),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (64 - 1) << G_TEXTURE_IMAGE_FRAC),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301E750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301F750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022EA8),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsSPSetGeometryMode(G_LIGHTING | G_CULL_BACK),
gsDPSetAlphaCompare(G_AC_NONE),
gsDPSetEnvColor(255, 255, 255, 255),
gsSPEndDisplayList(),
};
// 0x03023298 - 0x030233D0
const Gfx luigi_cap_seg3_dl_03023298[] = {
gsDPPipeSync(),
gsSPSetGeometryMode(G_TEXTURE_GEN),
gsDPSetCombineMode(G_CC_MODULATERGBFADE, G_CC_MODULATERGBFADE),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_0301CF50),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, 6, G_TX_NOLOD),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)),
gsDPPipeSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0, G_TX_RENDERTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, 5, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, 6, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (64 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_ON),
gsSPLight(&luigi_cap_seg3_lights_0301CF20.l, 1),
gsSPLight(&luigi_cap_seg3_lights_0301CF20.a, 2),
gsSPDisplayList(luigi_cap_seg3_dl_03022B30),
gsSPDisplayList(luigi_cap_seg3_dl_03022B68),
gsSPDisplayList(luigi_cap_seg3_dl_03022CC8),
gsSPTexture(0x0F80, 0x07C0, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsSPClearGeometryMode(G_TEXTURE_GEN | G_LIGHTING | G_CULL_BACK),
gsDPSetCombineMode(G_CC_DECALFADEA, G_CC_DECALFADEA),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
gsDPTileSync(),
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (64 - 1) << G_TEXTURE_IMAGE_FRAC),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_03020750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, luigi_cap_seg3_texture_03021750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(luigi_cap_seg3_dl_03022EA8),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
gsSPSetGeometryMode(G_LIGHTING | G_CULL_BACK),
gsDPSetAlphaCompare(G_AC_NONE),
gsDPSetEnvColor(255, 255, 255, 255),
gsSPEndDisplayList(),
};

View file

@ -1,7 +1,7 @@
// Normal Luigi Geo
// Player 2's Mario Geo
// 0x170002E0
const GeoLayout luigi_geo_face_and_wings[] = {
const GeoLayout mario2_geo_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -51,7 +51,7 @@ const GeoLayout luigi_geo_face_and_wings[] = {
};
// 0x1700041C
const GeoLayout luigi_geo_left_hand[] = {
const GeoLayout mario2_geo_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -71,7 +71,7 @@ const GeoLayout luigi_geo_left_hand[] = {
};
// 0x17000494
const GeoLayout luigi_geo_right_hand[] = {
const GeoLayout mario2_geo_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -100,7 +100,7 @@ const GeoLayout luigi_geo_right_hand[] = {
// The body loads all the parts with some shared dls to apply the solid color of the dl that has it, the same rule applies to the medium and low poly geos
// 0x1700053C
const GeoLayout luigi_geo_body[] = {
const GeoLayout mario2_geo_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_butt), // starts sharing solid color with mario_torso (blue)
@ -113,7 +113,7 @@ const GeoLayout luigi_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_face_and_wings), // stops sharing because faces has its own dl
GEO_BRANCH(1, mario2_geo_face_and_wings), // stops sharing because faces has its own dl
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -121,7 +121,7 @@ const GeoLayout luigi_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_left_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_left_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -131,7 +131,7 @@ const GeoLayout luigi_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_right_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_right_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -170,7 +170,7 @@ const GeoLayout luigi_geo_body[] = {
};
// 0x170006F8
const GeoLayout luigi_geo_medium_poly_left_hand[] = {
const GeoLayout mario2_geo_medium_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -190,7 +190,7 @@ const GeoLayout luigi_geo_medium_poly_left_hand[] = {
};
// 0x17000770
const GeoLayout luigi_geo_medium_poly_right_hand[] = {
const GeoLayout mario2_geo_medium_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -217,7 +217,7 @@ const GeoLayout luigi_geo_medium_poly_right_hand[] = {
};
// 0x17000818
const GeoLayout luigi_geo_medium_poly_body[] = {
const GeoLayout mario2_geo_medium_poly_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_medium_poly_butt), // starts sharing solid color with mario_torso (blue)
@ -230,7 +230,7 @@ const GeoLayout luigi_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_face_and_wings), // stops sharing because faces has its own dl - medium poly mario uses high poly face
GEO_BRANCH(1, mario2_geo_face_and_wings), // stops sharing because faces has its own dl - medium poly mario uses high poly face
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -238,7 +238,7 @@ const GeoLayout luigi_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_medium_poly_left_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_medium_poly_left_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -248,7 +248,7 @@ const GeoLayout luigi_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_medium_poly_right_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_medium_poly_right_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -287,7 +287,7 @@ const GeoLayout luigi_geo_medium_poly_body[] = {
};
// 0x170009D4
const GeoLayout luigi_geo_low_poly_face_and_wings[] = {
const GeoLayout mario2_geo_low_poly_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -337,7 +337,7 @@ const GeoLayout luigi_geo_low_poly_face_and_wings[] = {
};
// 0x17000B10
const GeoLayout luigi_geo_low_poly_left_hand[] = {
const GeoLayout mario2_geo_low_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -357,7 +357,7 @@ const GeoLayout luigi_geo_low_poly_left_hand[] = {
};
// 0x17000B88
const GeoLayout luigi_geo_low_poly_right_hand[] = {
const GeoLayout mario2_geo_low_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -384,7 +384,7 @@ const GeoLayout luigi_geo_low_poly_right_hand[] = {
};
// 0x17000C30
const GeoLayout luigi_geo_low_poly_body[] = {
const GeoLayout mario2_geo_low_poly_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_low_poly_butt), // starts sharing solid color with mario_torso (blue)
@ -397,7 +397,7 @@ const GeoLayout luigi_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_low_poly_face_and_wings), // stops sharing because faces has its own dl
GEO_BRANCH(1, mario2_geo_low_poly_face_and_wings), // stops sharing because faces has its own dl
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -405,7 +405,7 @@ const GeoLayout luigi_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_low_poly_left_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_low_poly_left_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -415,7 +415,7 @@ const GeoLayout luigi_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_low_poly_right_hand), // stops sharing because hand has its solid color (white)
GEO_BRANCH(1, mario2_geo_low_poly_right_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -456,7 +456,7 @@ const GeoLayout luigi_geo_low_poly_body[] = {
// Vanish Mario Geo
// 0x17000DEC
const GeoLayout luigi_vanish_geo_face_and_wings[] = {
const GeoLayout mario2_vanish_geo_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -506,7 +506,7 @@ const GeoLayout luigi_vanish_geo_face_and_wings[] = {
};
// 0x17000F28
const GeoLayout luigi_vanish_geo_left_hand[] = {
const GeoLayout mario2_vanish_geo_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -526,7 +526,7 @@ const GeoLayout luigi_vanish_geo_left_hand[] = {
};
// 0x17000FA0
const GeoLayout luigi_vanish_geo_right_hand[] = {
const GeoLayout mario2_vanish_geo_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -555,7 +555,7 @@ const GeoLayout luigi_vanish_geo_right_hand[] = {
// Same rule body as Normal Mario
// 0x17001048
const GeoLayout luigi_vanish_geo_body[] = {
const GeoLayout mario2_vanish_geo_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_butt),
@ -568,7 +568,7 @@ const GeoLayout luigi_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_face_and_wings),
GEO_BRANCH(1, mario2_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -576,7 +576,7 @@ const GeoLayout luigi_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_left_hand),
GEO_BRANCH(1, mario2_vanish_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -586,7 +586,7 @@ const GeoLayout luigi_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_right_hand),
GEO_BRANCH(1, mario2_vanish_geo_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -625,7 +625,7 @@ const GeoLayout luigi_vanish_geo_body[] = {
};
// 0x17001204
const GeoLayout luigi_vanish_geo_medium_poly_left_hand[] = {
const GeoLayout mario2_vanish_geo_medium_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -645,7 +645,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_left_hand[] = {
};
// 0x1700127C
const GeoLayout luigi_vanish_geo_medium_poly_right_hand[] = {
const GeoLayout mario2_vanish_geo_medium_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -672,7 +672,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_right_hand[] = {
};
// 0x17001324
const GeoLayout luigi_vanish_geo_medium_poly_body[] = {
const GeoLayout mario2_vanish_geo_medium_poly_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_medium_poly_butt),
@ -685,7 +685,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_face_and_wings),
GEO_BRANCH(1, mario2_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -693,7 +693,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_medium_poly_left_hand),
GEO_BRANCH(1, mario2_vanish_geo_medium_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -703,7 +703,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_medium_poly_right_hand),
GEO_BRANCH(1, mario2_vanish_geo_medium_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -742,7 +742,7 @@ const GeoLayout luigi_vanish_geo_medium_poly_body[] = {
};
// 0x170014E0
const GeoLayout luigi_vanish_geo_low_poly_face_and_wings[] = {
const GeoLayout mario2_vanish_geo_low_poly_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -792,7 +792,7 @@ const GeoLayout luigi_vanish_geo_low_poly_face_and_wings[] = {
};
// 0x1700161C
const GeoLayout luigi_vanish_geo_low_poly_left_hand[] = {
const GeoLayout mario2_vanish_geo_low_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -812,7 +812,7 @@ const GeoLayout luigi_vanish_geo_low_poly_left_hand[] = {
};
// 0x17001694
const GeoLayout luigi_vanish_geo_low_poly_right_hand[] = {
const GeoLayout mario2_vanish_geo_low_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -839,7 +839,7 @@ const GeoLayout luigi_vanish_geo_low_poly_right_hand[] = {
};
// 0x1700173C
const GeoLayout luigi_vanish_geo_low_poly_body[] = {
const GeoLayout mario2_vanish_geo_low_poly_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_low_poly_butt),
@ -852,7 +852,7 @@ const GeoLayout luigi_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_low_poly_face_and_wings),
GEO_BRANCH(1, mario2_vanish_geo_low_poly_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -860,7 +860,7 @@ const GeoLayout luigi_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_low_poly_left_hand),
GEO_BRANCH(1, mario2_vanish_geo_low_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -870,7 +870,7 @@ const GeoLayout luigi_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_low_poly_right_hand),
GEO_BRANCH(1, mario2_vanish_geo_low_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -911,7 +911,7 @@ const GeoLayout luigi_vanish_geo_low_poly_body[] = {
// Metal Mario Geo
// 0x170018F8
const GeoLayout luigi_metal_geo_face_and_wings[] = {
const GeoLayout mario2_metal_geo_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -941,7 +941,7 @@ const GeoLayout luigi_metal_geo_face_and_wings[] = {
};
// 0x170019A4
const GeoLayout luigi_metal_geo_left_hand[] = {
const GeoLayout mario2_metal_geo_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -961,7 +961,7 @@ const GeoLayout luigi_metal_geo_left_hand[] = {
};
// 0x17001A1C
const GeoLayout luigi_metal_geo_right_hand[] = {
const GeoLayout mario2_metal_geo_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -990,7 +990,7 @@ const GeoLayout luigi_metal_geo_right_hand[] = {
// A difference from Normal Mario is that the dls after the butt and left thigh shares the metal texture of it, same rule applies to the medium and low poly geos
// 0x17001AC4
const GeoLayout luigi_metal_geo_body[] = {
const GeoLayout mario2_metal_geo_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_butt), // starts sharing metal texture with the dls below
@ -1003,7 +1003,7 @@ const GeoLayout luigi_metal_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_face_and_wings), // unlike normal mario geo, these dls still share the metal texture
GEO_BRANCH(1, mario2_metal_geo_face_and_wings), // unlike normal mario geo, these dls still share the metal texture
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1011,7 +1011,7 @@ const GeoLayout luigi_metal_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_left_hand),
GEO_BRANCH(1, mario2_metal_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1021,7 +1021,7 @@ const GeoLayout luigi_metal_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_right_hand), // stop sharing because the wing metal cap of it
GEO_BRANCH(1, mario2_metal_geo_right_hand), // stop sharing because the wing metal cap of it
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1060,7 +1060,7 @@ const GeoLayout luigi_metal_geo_body[] = {
};
// 0x17001C80
const GeoLayout luigi_metal_geo_medium_poly_left_hand[] = {
const GeoLayout mario2_metal_geo_medium_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -1080,7 +1080,7 @@ const GeoLayout luigi_metal_geo_medium_poly_left_hand[] = {
};
// 0x17001CF8
const GeoLayout luigi_metal_geo_medium_poly_right_hand[] = {
const GeoLayout mario2_metal_geo_medium_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -1107,7 +1107,7 @@ const GeoLayout luigi_metal_geo_medium_poly_right_hand[] = {
};
// 0x17001DA0
const GeoLayout luigi_metal_geo_medium_poly_body[] = {
const GeoLayout mario2_metal_geo_medium_poly_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_medium_poly_butt),
@ -1120,7 +1120,7 @@ const GeoLayout luigi_metal_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_face_and_wings),
GEO_BRANCH(1, mario2_metal_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1128,7 +1128,7 @@ const GeoLayout luigi_metal_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_medium_poly_left_hand),
GEO_BRANCH(1, mario2_metal_geo_medium_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1138,7 +1138,7 @@ const GeoLayout luigi_metal_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_medium_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_medium_poly_right_hand),
GEO_BRANCH(1, mario2_metal_geo_medium_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1177,7 +1177,7 @@ const GeoLayout luigi_metal_geo_medium_poly_body[] = {
};
// 0x17001F5C
const GeoLayout luigi_metal_geo_low_poly_face_and_wings[] = {
const GeoLayout mario2_metal_geo_low_poly_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -1207,7 +1207,7 @@ const GeoLayout luigi_metal_geo_low_poly_face_and_wings[] = {
};
// 0x17002008
const GeoLayout luigi_metal_geo_low_poly_left_hand[] = {
const GeoLayout mario2_metal_geo_low_poly_left_hand[] = {
GEO_SWITCH_CASE(3, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -1227,7 +1227,7 @@ const GeoLayout luigi_metal_geo_low_poly_left_hand[] = {
};
// 0x17002080
const GeoLayout luigi_metal_geo_low_poly_right_hand[] = {
const GeoLayout mario2_metal_geo_low_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, NULL),
@ -1254,7 +1254,7 @@ const GeoLayout luigi_metal_geo_low_poly_right_hand[] = {
};
// 0x17002128
const GeoLayout luigi_metal_geo_low_poly_body[] = {
const GeoLayout mario2_metal_geo_low_poly_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, mario_metal_low_poly_butt),
@ -1267,7 +1267,7 @@ const GeoLayout luigi_metal_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_low_poly_face_and_wings),
GEO_BRANCH(1, mario2_metal_geo_low_poly_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1275,7 +1275,7 @@ const GeoLayout luigi_metal_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_low_poly_left_hand),
GEO_BRANCH(1, mario2_metal_geo_low_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1285,7 +1285,7 @@ const GeoLayout luigi_metal_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, mario_low_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_low_poly_right_hand),
GEO_BRANCH(1, mario2_metal_geo_low_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1326,7 +1326,7 @@ const GeoLayout luigi_metal_geo_low_poly_body[] = {
// Metal Vanish Mario Geo
// 0x170022E4
const GeoLayout luigi_metal_vanish_geo_face_and_wings[] = {
const GeoLayout mario2_metal_vanish_geo_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -1356,7 +1356,7 @@ const GeoLayout luigi_metal_vanish_geo_face_and_wings[] = {
};
// 0x17002390
const GeoLayout luigi_metal_vanish_geo_left_hand[] = {
const GeoLayout mario2_metal_vanish_geo_left_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1376,7 +1376,7 @@ const GeoLayout luigi_metal_vanish_geo_left_hand[] = {
};
// 0x17002408
const GeoLayout luigi_metal_vanish_geo_right_hand[] = {
const GeoLayout mario2_metal_vanish_geo_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1405,7 +1405,7 @@ const GeoLayout luigi_metal_vanish_geo_right_hand[] = {
// Same rules as Metal Mario
// 0x170024B0
const GeoLayout luigi_metal_vanish_geo_body[] = {
const GeoLayout mario2_metal_vanish_geo_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_butt),
@ -1418,7 +1418,7 @@ const GeoLayout luigi_metal_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_face_and_wings),
GEO_BRANCH(1, mario2_metal_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1426,7 +1426,7 @@ const GeoLayout luigi_metal_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_left_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1436,7 +1436,7 @@ const GeoLayout luigi_metal_vanish_geo_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_right_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1475,7 +1475,7 @@ const GeoLayout luigi_metal_vanish_geo_body[] = {
};
// 0x1700266C
const GeoLayout luigi_metal_vanish_geo_medium_poly_left_hand[] = {
const GeoLayout mario2_metal_vanish_geo_medium_poly_left_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1495,7 +1495,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_left_hand[] = {
};
// 0x170026E4
const GeoLayout luigi_metal_vanish_geo_medium_poly_right_hand[] = {
const GeoLayout mario2_metal_vanish_geo_medium_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1522,7 +1522,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_right_hand[] = {
};
// 0x1700278C
const GeoLayout luigi_metal_vanish_geo_medium_poly_body[] = {
const GeoLayout mario2_metal_vanish_geo_medium_poly_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_medium_poly_butt),
@ -1535,7 +1535,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_face_and_wings),
GEO_BRANCH(1, mario2_metal_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1543,7 +1543,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_medium_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_medium_poly_left_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_medium_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1555,7 +1555,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_body[] = {
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_medium_poly_right_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_medium_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1595,7 +1595,7 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_body[] = {
};
// 0x17002958
const GeoLayout luigi_metal_vanish_geo_low_poly_face_and_wings[] = {
const GeoLayout mario2_metal_vanish_geo_low_poly_face_and_wings[] = {
GEO_ASM(1, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
@ -1625,7 +1625,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_face_and_wings[] = {
};
// 0x17002A04
const GeoLayout luigi_metal_vanish_geo_low_poly_left_hand[] = {
const GeoLayout mario2_metal_vanish_geo_low_poly_left_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1645,7 +1645,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_left_hand[] = {
};
// 0x17002A7C
const GeoLayout luigi_metal_vanish_geo_low_poly_right_hand[] = {
const GeoLayout mario2_metal_vanish_geo_low_poly_right_hand[] = {
GEO_SWITCH_CASE(2, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, NULL),
@ -1672,7 +1672,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_right_hand[] = {
};
// 0x17002B24
const GeoLayout luigi_metal_vanish_geo_low_poly_body[] = {
const GeoLayout mario2_metal_vanish_geo_low_poly_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, mario_metal_low_poly_butt),
@ -1685,7 +1685,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 87, 0, 0, NULL),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_low_poly_face_and_wings),
GEO_BRANCH(1, mario2_metal_vanish_geo_low_poly_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 67, -10, 79, NULL),
GEO_OPEN_NODE(),
@ -1693,7 +1693,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_left_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_low_poly_left_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_low_poly_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1703,7 +1703,7 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_body[] = {
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, mario_low_poly_right_forearm_shared_dl),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_low_poly_right_hand),
GEO_BRANCH(1, mario2_metal_vanish_geo_low_poly_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
@ -1744,13 +1744,13 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_body[] = {
// High Poly
// 0x17002CE0
const GeoLayout luigi_geo_load_body[] = {
const GeoLayout mario2_geo_load_body[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_body),
GEO_BRANCH(1, luigi_vanish_geo_body),
GEO_BRANCH(1, luigi_metal_geo_body),
GEO_BRANCH(1, luigi_metal_vanish_geo_body),
GEO_BRANCH(1, mario2_geo_body),
GEO_BRANCH(1, mario2_vanish_geo_body),
GEO_BRANCH(1, mario2_metal_geo_body),
GEO_BRANCH(1, mario2_metal_vanish_geo_body),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
@ -1758,13 +1758,13 @@ const GeoLayout luigi_geo_load_body[] = {
// Medium Poly
// 0x17002D14
const GeoLayout luigi_geo_load_medium_poly_body[] = {
const GeoLayout mario2_geo_load_medium_poly_body[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_medium_poly_body),
GEO_BRANCH(1, luigi_vanish_geo_medium_poly_body),
GEO_BRANCH(1, luigi_metal_geo_medium_poly_body),
GEO_BRANCH(1, luigi_metal_vanish_geo_medium_poly_body),
GEO_BRANCH(1, mario2_geo_medium_poly_body),
GEO_BRANCH(1, mario2_vanish_geo_medium_poly_body),
GEO_BRANCH(1, mario2_metal_geo_medium_poly_body),
GEO_BRANCH(1, mario2_metal_vanish_geo_medium_poly_body),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
@ -1772,32 +1772,32 @@ const GeoLayout luigi_geo_load_medium_poly_body[] = {
// Low Poly
// 0x17002D48
const GeoLayout luigi_geo_load_low_poly_body[] = {
const GeoLayout mario2_geo_load_low_poly_body[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_low_poly_body),
GEO_BRANCH(1, luigi_vanish_geo_low_poly_body),
GEO_BRANCH(1, luigi_metal_geo_low_poly_body),
GEO_BRANCH(1, luigi_metal_vanish_geo_low_poly_body),
GEO_BRANCH(1, mario2_geo_low_poly_body),
GEO_BRANCH(1, mario2_vanish_geo_low_poly_body),
GEO_BRANCH(1, mario2_metal_geo_low_poly_body),
GEO_BRANCH(1, mario2_metal_vanish_geo_low_poly_body),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
// 0x17002D7C
const GeoLayout luigi_geo_render_body[] = {
const GeoLayout mario2_geo_render_body[] = {
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_RENDER_RANGE(-2048, 600),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_load_body),
GEO_BRANCH(1, mario2_geo_load_body),
GEO_CLOSE_NODE(),
GEO_RENDER_RANGE(600, 1600),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_load_medium_poly_body),
GEO_BRANCH(1, mario2_geo_load_medium_poly_body),
GEO_CLOSE_NODE(),
GEO_RENDER_RANGE(1600, 32767),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_load_low_poly_body),
GEO_BRANCH(1, mario2_geo_load_low_poly_body),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
@ -1806,7 +1806,7 @@ const GeoLayout luigi_geo_render_body[] = {
// This last geo is used to load all of Mario Geo in the Level Scripts
// 0x17002DD4
const GeoLayout luigi_geo[] = {
const GeoLayout mario2_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0xB4, 100),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
@ -1815,8 +1815,8 @@ const GeoLayout luigi_geo[] = {
GEO_ASM(1, geo_mirror_mario_set_alpha),
GEO_SWITCH_CASE(1, geo_switch_mario_stand_run),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_load_body),
GEO_BRANCH(1, luigi_geo_render_body),
GEO_BRANCH(1, mario2_geo_load_body),
GEO_BRANCH(1, mario2_geo_render_body),
GEO_CLOSE_NODE(),
GEO_ASM(1, geo_mirror_mario_backface_culling),
GEO_CLOSE_NODE(),

View file

@ -3522,14 +3522,14 @@ const BehaviorScript bhvMario[] = {
END_LOOP(),
};
const BehaviorScript bhvLuigi[] = {
const BehaviorScript bhvMario2[] = {
BEGIN(OBJ_LIST_PLAYER),
SET_INT(oIntangibleTimer, 0),
OR_INT(oFlags, OBJ_FLAG_0100),
OR_INT(oUnk94, 0x0001),
SET_HITBOX(/*Radius*/ 37, /*Height*/ 160),
BEGIN_LOOP(),
CALL_NATIVE(bhv_luigi_update),
CALL_NATIVE(bhv_mario2_update),
END_LOOP(),
};

View file

@ -300,7 +300,7 @@ extern const BehaviorScript bhvSLSnowmanWind[];
extern const BehaviorScript bhvSLWalkingPenguin[];
extern const BehaviorScript bhvYellowBall[];
extern const BehaviorScript bhvMario[];
extern const BehaviorScript bhvLuigi[];
extern const BehaviorScript bhvMario2[];
extern const BehaviorScript bhvToadMessage[];
extern const BehaviorScript bhvUnlockDoorStar[];
extern const BehaviorScript bhvInstantActiveWarp[];

View file

@ -188,7 +188,7 @@
CMD_W(behArg), \
CMD_PTR(beh)
#define LUIGI(unk3, behArg, beh) \
#define MARIO2(unk3, behArg, beh) \
CMD_BBBB(0x3F, 0x0C, 0x00, unk3), \
CMD_W(behArg), \
CMD_PTR(beh)
@ -282,7 +282,7 @@
#define ADV_DEMO() \
CMD_BBH(0x3D, 0x04, 0x0000)
#define CLEAR_DEMO_PTR() \
CMD_BBH(0x3E, 0x04, 0x0000)

View file

@ -24,7 +24,10 @@
/* Global models that are loaded for every level */
#define MODEL_MARIO 0x01 // mario_geo
#define MODEL_LUIGI 0x02 // luigi_geo
#define MODEL_MARIO2 0x02 // mario2_geo
#define MODEL_LUIGI 0xE2 // luigi_geo
#define MODEL_LUIGI2 0xE3 // luigi2_geo
/* Various static level geometry, the geo layout differs but terrain object presets treat them the same.*/

View file

@ -382,10 +382,10 @@ struct MarioState
// things that base priority on whether they are the host or not would need priority based on player index instead
// player 2's mario2.geo file will need a different one for player 3, 4, 5, etc... and will need values within it adjusted in a similar manner (diff them)
// read all of the code surrounding a search through the entire codebase of the following:
// gLuigiObject
// gMarioObject
// gMario2Object
// gMarioState[0]
// gMarioState[1]
// luigi
// two-player hack
#endif // _SM64_TYPES_H_

View file

@ -65,8 +65,8 @@ const LevelScript level_bob_entry[] = {
LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
LUIGI(/*model*/ MODEL_LUIGI, /*behParam*/ 0x00000002, /*beh*/ bhvLuigi),
MARIO (/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
MARIO2(/*model*/ MODEL_MARIO2, /*behParam*/ 0x00000002, /*beh*/ bhvMario2),
JUMP_LINK(script_func_global_1),
JUMP_LINK(script_func_global_4),
JUMP_LINK(script_func_global_15),

View file

@ -39,8 +39,8 @@ const LevelScript level_castle_courtyard_entry[] = {
LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
LUIGI(/*model*/ MODEL_LUIGI, /*behParam*/ 0x00000002, /*beh*/ bhvLuigi),
MARIO (/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
MARIO2(/*model*/ MODEL_MARIO2, /*behParam*/ 0x00000002, /*beh*/ bhvMario2),
JUMP_LINK(script_func_global_1),
JUMP_LINK(script_func_global_10),
LOAD_MODEL_FROM_GEO(MODEL_COURTYARD_SPIKY_TREE, spiky_tree_geo),

View file

@ -108,8 +108,8 @@ const LevelScript level_castle_grounds_entry[] = {
LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
LUIGI(/*model*/ MODEL_LUIGI, /*behParam*/ 0x00000002, /*beh*/ bhvLuigi),
MARIO (/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
MARIO2(/*model*/ MODEL_MARIO2, /*behParam*/ 0x00000002, /*beh*/ bhvMario2),
JUMP_LINK(script_func_global_1),
JUMP_LINK(script_func_global_11),
JUMP_LINK(script_func_global_16),

View file

@ -226,8 +226,8 @@ const LevelScript level_castle_inside_entry[] = {
LOAD_MIO0( /*seg*/ 0x06, _group15_mio0SegmentRomStart, _group15_mio0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0D, _group15_geoSegmentRomStart, _group15_geoSegmentRomEnd),
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
LUIGI(/*model*/ MODEL_LUIGI, /*behParam*/ 0x00000002, /*beh*/ bhvLuigi),
MARIO (/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
MARIO2(/*model*/ MODEL_MARIO2, /*behParam*/ 0x00000002, /*beh*/ bhvMario2),
JUMP_LINK(script_func_global_16),
LOAD_MODEL_FROM_GEO(MODEL_CASTLE_BOWSER_TRAP, castle_geo_000F18),
LOAD_MODEL_FROM_GEO(MODEL_CASTLE_WATER_LEVEL_PILLAR, castle_geo_001940),

View file

@ -66,7 +66,9 @@ const LevelScript level_main_scripts_entry[] = {
LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
ALLOC_LEVEL_POOL(),
LOAD_MODEL_FROM_GEO(MODEL_MARIO, mario_geo),
LOAD_MODEL_FROM_GEO(MODEL_MARIO2, mario2_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGI, luigi_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGI2, luigi2_geo),
LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo),
LOAD_MODEL_FROM_GEO(MODEL_SPARKLES, sparkles_geo),
LOAD_MODEL_FROM_GEO(MODEL_BUBBLE, bubble_geo),

View file

@ -103,8 +103,8 @@ const LevelScript level_wf_entry[] = {
LOAD_MIO0( /*seg*/ 0x08, _common0_mio0SegmentRomStart, _common0_mio0SegmentRomEnd),
LOAD_RAW( /*seg*/ 0x0F, _common0_geoSegmentRomStart, _common0_geoSegmentRomEnd),
ALLOC_LEVEL_POOL(),
MARIO(/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
LUIGI(/*model*/ MODEL_LUIGI, /*behParam*/ 0x00000002, /*beh*/ bhvLuigi),
MARIO (/*model*/ MODEL_MARIO, /*behParam*/ 0x00000001, /*beh*/ bhvMario),
MARIO2(/*model*/ MODEL_MARIO2, /*behParam*/ 0x00000002, /*beh*/ bhvMario2),
JUMP_LINK(script_func_global_1),
JUMP_LINK(script_func_global_2),
JUMP_LINK(script_func_global_15),

View file

@ -438,7 +438,7 @@ static void level_cmd_init_mario(void) {
sCurrentCmd = CMD_NEXT;
}
static void level_cmd_init_luigi(void) {
static void level_cmd_init_mario2(void) {
vec3s_set(gPlayerSpawnInfos[1].startPos, 0, 0, 0);
vec3s_set(gPlayerSpawnInfos[1].startAngle, 0, 0, 0);
@ -747,8 +747,8 @@ static void level_cmd_get_or_set_var(void) {
case 4:
gCurrAreaIndex = sRegister;
break;
case 5:
gPressedStart = sRegister;
case 5:
gPressedStart = sRegister;
break;
}
} else {
@ -768,8 +768,8 @@ static void level_cmd_get_or_set_var(void) {
case 4:
sRegister = gCurrAreaIndex;
break;
case 5:
sRegister = gPressedStart;
case 5:
sRegister = gPressedStart;
break;
}
}
@ -874,7 +874,7 @@ static void (*LevelScriptJumpTable[])(void) = {
/*3C*/ level_cmd_get_or_set_var,
/*3D*/ level_cmd_advdemo,
/*3E*/ level_cmd_cleardemoptr,
/*3F*/ level_cmd_init_luigi,
/*3F*/ level_cmd_init_mario2,
};
struct LevelCommand *level_script_execute(struct LevelCommand *cmd) {

View file

@ -765,7 +765,7 @@ void load_object_collision_model(void) {
s16 *collisionData = gCurrentObject->collisionData;
f32 marioDist = gCurrentObject->oDistanceToMario;
f32 luigiDist = gCurrentObject->oDistanceToMario;
f32 mario2Dist = gCurrentObject->oDistanceToMario;
f32 tangibleDist = gCurrentObject->oCollisionDistance;
// On an object's first frame, the distance is set to 19000.0f.
@ -773,7 +773,7 @@ void load_object_collision_model(void) {
if (gCurrentObject->oDistanceToMario == 19000.0f) {
marioDist = dist_between_objects(gCurrentObject, gMarioObject);
}
luigiDist = dist_between_objects(gCurrentObject, gLuigiObject);
mario2Dist = dist_between_objects(gCurrentObject, gMario2Object);
// If the object collision is supposed to be loaded more than the
// drawing distance of 4000, extend the drawing range.
@ -783,7 +783,7 @@ void load_object_collision_model(void) {
// Update if no Time Stop, in range, and in the current room.
if (!(gTimeStopState & TIME_STOP_ACTIVE)
&& (marioDist < tangibleDist || luigiDist < tangibleDist)
&& (marioDist < tangibleDist || mario2Dist < tangibleDist)
&& !(gCurrentObject->activeFlags & ACTIVE_FLAG_IN_DIFFERENT_ROOM)) {
collisionData++;
transform_object_vertices(&collisionData, vertexData);

View file

@ -34,7 +34,6 @@ void bhv_beta_chest_bottom_init(void) {
*/
void bhv_beta_chest_bottom_loop(void) {
cur_obj_push_mario_away_from_cylinder(200.0f, 200.0f);
cur_obj_push_luigi_away_from_cylinder(200.0f, 200.0f);
}
/**

View file

@ -299,6 +299,5 @@ void bhv_book_switch_loop(void) {
o->oPosX += o->parentObj->oForwardVel;
o->oPosZ = o->oHomeZ - o->oBookSwitchUnkF4;
cur_obj_push_mario_away_from_cylinder(70.0f, 70.0f);
cur_obj_push_luigi_away_from_cylinder(70.0f, 70.0f);
}
}

View file

@ -90,7 +90,6 @@ void haunted_chair_act_0(void) {
}
cur_obj_push_mario_away_from_cylinder(80.0f, 120.0f);
cur_obj_push_luigi_away_from_cylinder(80.0f, 120.0f);
}
void haunted_chair_act_1(void) {

View file

@ -631,7 +631,6 @@ static void koopa_the_quick_act_race(void) {
if (obj_begin_race(FALSE)) {
// Hitbox is slightly larger while racing
cur_obj_push_mario_away_from_cylinder(180.0f, 300.0f);
cur_obj_push_luigi_away_from_cylinder(180.0f, 300.0f);
if (cur_obj_follow_path(0) == PATH_REACHED_END) {
o->oAction = KOOPA_THE_QUICK_ACT_DECELERATE;
@ -817,7 +816,6 @@ static void koopa_the_quick_update(void) {
}
cur_obj_push_mario_away_from_cylinder(140.0f, 300.0f);
cur_obj_push_luigi_away_from_cylinder(140.0f, 300.0f);
cur_obj_move_standard(-78);
}

View file

@ -26,7 +26,6 @@ static void mad_piano_act_wait(void) {
}
cur_obj_push_mario_away_from_cylinder(280.0f, 150.0f);
cur_obj_push_luigi_away_from_cylinder(280.0f, 150.0f);
}
static void mad_piano_act_attack(void) {

View file

@ -6,10 +6,4 @@ void bhv_pole_base_loop(void) {
if (o->oTimer > 10)
if (!(gMarioStates->action & MARIO_PUNCHING))
cur_obj_push_mario_away(70.0f);
if (o->oPosY - 10.0f < gLuigiObject->oPosY
&& gLuigiObject->oPosY < o->oPosY + o->hitboxHeight + 30.0f)
if (o->oTimer > 10)
if (!(gMarioStates[1].action & MARIO_PUNCHING))
cur_obj_push_luigi_away(70.0f);
}

View file

@ -186,8 +186,6 @@ void bhv_racing_penguin_update(void) {
cur_obj_align_gfx_with_floor();
cur_obj_push_mario_away_from_cylinder(sRacingPenguinData[o->oBehParams2ndByte].radius,
sRacingPenguinData[o->oBehParams2ndByte].height);
cur_obj_push_luigi_away_from_cylinder(sRacingPenguinData[o->oBehParams2ndByte].radius,
sRacingPenguinData[o->oBehParams2ndByte].height);
}
void bhv_penguin_race_finish_line_update(void) {

View file

@ -152,7 +152,6 @@ void bhv_snowmans_bottom_loop(void) {
case 4:
cur_obj_push_mario_away_from_cylinder(210.0f, 550);
cur_obj_push_luigi_away_from_cylinder(210.0f, 550);
break;
}
@ -224,7 +223,6 @@ void bhv_snowmans_head_loop(void) {
}
cur_obj_push_mario_away_from_cylinder(180.0f, 150.0f);
cur_obj_push_luigi_away_from_cylinder(180.0f, 150.0f);
}
void bhv_snowmans_body_checkpoint_loop(void) {

View file

@ -98,7 +98,6 @@ void bhv_treasure_chest_bottom_loop(void) {
}
cur_obj_push_mario_away_from_cylinder(150.0f, 150.0f);
cur_obj_push_luigi_away_from_cylinder(150.0f, 150.0f);
o->oInteractStatus = 0;
}

View file

@ -91,7 +91,6 @@ void water_bomb_cannon_act_2(void) {
void bhv_water_bomb_cannon_loop(void) {
cur_obj_push_mario_away_from_cylinder(220.0f, 300.0f);
cur_obj_push_luigi_away_from_cylinder(220.0f, 300.0f);
switch (o->oAction) {
case 0:

View file

@ -434,7 +434,7 @@ u8 sFramesSinceCutsceneEnded = 0;
*/
u8 sCutsceneDialogResponse = 0;
struct PlayerCameraState *sMarioCamState = &gPlayerCameraState[0];
struct PlayerCameraState *sLuigiCamState = &gPlayerCameraState[1];
struct PlayerCameraState *sMario2CamState = &gPlayerCameraState[1];
u32 unused8032D008 = 0;
Vec3f sFixedModeBasePosition = { 646.0f, 143.0f, -1513.0f };
Vec3f sUnusedModeBasePosition_2 = { 646.0f, 143.0f, -1513.0f };
@ -3297,8 +3297,8 @@ void reset_camera(struct Camera *c) {
c->doorStatus = DOOR_DEFAULT;
sMarioCamState->headRotation[0] = 0;
sMarioCamState->headRotation[1] = 0;
sLuigiCamState->headRotation[0] = 0;
sLuigiCamState->headRotation[1] = 0;
sMario2CamState->headRotation[0] = 0;
sMario2CamState->headRotation[1] = 0;
sMarioCamState->cameraEvent = 0;
sMarioCamState->usedObj = NULL;
gLakituState.shakeMagnitude[0] = 0;

View file

@ -711,7 +711,7 @@ u32 take_damage_from_interact_object(struct MarioState *m) {
int get_invincibility_flag(struct MarioState *m) {
return (m == &gMarioStates[0])
? INT_SUBTYPE_DELAY_INVINCIBILITY
: INT_SUBTYPE_DELAY_INVINCIBILITY_LUIGI;
: INT_SUBTYPE_DELAY_INVINCIBILITY_MARIO2;
}
u32 take_damage_and_knock_back(struct MarioState *m, struct Object *o) {

View file

@ -44,7 +44,7 @@
// Damaging interactions
#define INT_SUBTYPE_DELAY_INVINCIBILITY 0x00000002
#define INT_SUBTYPE_DELAY_INVINCIBILITY_LUIGI 0x00008000
#define INT_SUBTYPE_DELAY_INVINCIBILITY_MARIO2 0x00008000
#define INT_SUBTYPE_BIG_KNOCKBACK 0x00000008 /* Used by Bowser, sets Mario's forward velocity to 40 on hit */
// INTERACT_GRABBABLE

View file

@ -1253,6 +1253,16 @@ s32 init_level(void) {
if (networkType != NT_NONE) {
set_play_mode(PLAY_MODE_SYNC_LEVEL);
}
// set mario/luigi model
for (int i = 0; i < MAX_PLAYERS; i++) {
if (i == 0) {
gMarioState[i].marioObj->header.gfx.sharedChild = gLoadedGraphNodes[(networkType == NT_SERVER) ? MODEL_MARIO : MODEL_LUIGI];
} else {
gMarioState[i].marioObj->header.gfx.sharedChild = gLoadedGraphNodes[(networkType == NT_SERVER) ? MODEL_LUIGI2 : MODEL_MARIO2];
}
}
return 1;
}

View file

@ -1280,7 +1280,7 @@ void debug_print_speed_action_normal(struct MarioState *m) {
* Update the button inputs for Mario.
*/
void update_mario_button_inputs(struct MarioState *m) {
// don't update Luigi inputs
// don't update remote inputs
if (m != &gMarioStates[0]) { return; }
if (m->controller->buttonPressed & A_BUTTON) {
@ -1332,7 +1332,7 @@ void update_mario_joystick_inputs(struct MarioState *m) {
m->intendedMag = mag / 8.0f;
}
// don't update Luigi inputs past this point
// don't update remote inputs past this point
if (m != &gMarioStates[0]) { return; }
if (m->intendedMag > 0.0f) {
@ -1857,9 +1857,9 @@ s32 execute_mario_action(UNUSED struct Object *o) {
void init_mario(void) {
gInsidePainting = false;
bool isMario = (gMarioState == &gMarioStates[0]);
if (isMario && gMarioObject == NULL) { goto skippy; }
if (!isMario && gLuigiObject == NULL) { goto skippy; }
bool isLocal = (gMarioState == &gMarioStates[0]);
if (isLocal && gMarioObject == NULL) { goto skippy; }
if (!isLocal && gMario2Object == NULL) { goto skippy; }
Vec3s capPos;
struct Object *capObject;
@ -1897,13 +1897,13 @@ void init_mario(void) {
find_water_level(gMarioSpawnInfo->startPos[0], gMarioSpawnInfo->startPos[2]);
gMarioState->area = gCurrentArea;
gMarioState->marioObj = isMario ? gMarioObject : gLuigiObject;
gMarioState->marioObj = isLocal ? gMarioObject : gMario2Object;
gMarioState->marioObj->header.gfx.unk38.animID = -1;
vec3s_copy(gMarioState->faceAngle, gMarioSpawnInfo->startAngle);
vec3s_set(gMarioState->angleVel, 0, 0, 0);
vec3s_to_vec3f(gMarioState->pos, gMarioSpawnInfo->startPos);
vec3f_set(gMarioState->vel, 0, 0, 0);
if (!isMario) { gMarioState->pos[0] -= 150; }
if (!isLocal) { gMarioState->pos[0] -= 150; }
gMarioState->floorHeight =
find_floor(gMarioState->pos[0], gMarioState->pos[1], gMarioState->pos[2], &gMarioState->floor);
@ -1944,7 +1944,7 @@ void init_mario(void) {
}
skippy:
if (isMario) {
if (isLocal) {
gMarioState = &gMarioStates[1];
init_mario();
gMarioState = &gMarioStates[0];
@ -1952,11 +1952,11 @@ skippy:
}
void init_mario_from_save_file(void) {
bool isMario = (gMarioState == &gMarioStates[0]);
gMarioState->unk00 = isMario ? 0 : 1;
bool isLocal = (gMarioState == &gMarioStates[0]);
gMarioState->unk00 = isLocal ? 0 : 1;
gMarioState->flags = 0;
gMarioState->action = 0;
int i = isMario ? 0 : 1;
int i = isLocal ? 0 : 1;
gMarioState->spawnInfo = &gPlayerSpawnInfos[i];
gMarioState->statusForCamera = &gPlayerCameraState[i];
gMarioState->marioBodyState = &gBodyStates[i];
@ -1977,7 +1977,7 @@ void init_mario_from_save_file(void) {
gHudDisplay.coins = 0;
gHudDisplay.wedges = 8;
if (isMario) {
if (isLocal) {
gMarioState = &gMarioStates[1];
init_mario_from_save_file();
gMarioState = &gMarioStates[0];

View file

@ -69,7 +69,7 @@ static s8 gMarioAttackScaleAnimation[3 * 6] = {
10, 12, 16, 24, 10, 10, 10, 14, 20, 30, 10, 10, 10, 16, 20, 26, 26, 20,
};
struct MarioBodyState gBodyStates[MAX_PLAYERS]; // 2nd is never accessed in practice, most likely Luigi related
struct MarioBodyState gBodyStates[MAX_PLAYERS];
struct GraphNodeObject gMirrorMario; // copy of Mario's geo node for drawing mirror Mario
// This whole file is weirdly organized. It has to be the same file due

View file

@ -495,28 +495,23 @@ void obj_move_xyz_using_fvel_and_yaw(struct Object *obj) {
* Checks if a point is within distance from Mario's graphical position. Test is exclusive.
*/
s32 is_point_within_radius_of_mario(f32 x, f32 y, f32 z, s32 dist) {
f32 mGfxX = gMarioObject->header.gfx.pos[0];
f32 mGfxY = gMarioObject->header.gfx.pos[1];
f32 mGfxZ = gMarioObject->header.gfx.pos[2];
for (int i = 0; i < MAX_PLAYERS; i++) {
struct Object* player = gMarioStates[i].marioObj;
f32 mGfxX = player->header.gfx.pos[0];
f32 mGfxY = player->header.gfx.pos[1];
f32 mGfxZ = player->header.gfx.pos[2];
if ((x - mGfxX) * (x - mGfxX) + (y - mGfxY) * (y - mGfxY) + (z - mGfxZ) * (z - mGfxZ)
< (f32)(dist * dist)) {
return TRUE;
if ((x - mGfxX) * (x - mGfxX) + (y - mGfxY) * (y - mGfxY) + (z - mGfxZ) * (z - mGfxZ)
< (f32)(dist * dist)) {
return TRUE;
}
}
mGfxX = gLuigiObject->header.gfx.pos[0];
mGfxY = gLuigiObject->header.gfx.pos[1];
mGfxZ = gLuigiObject->header.gfx.pos[2];
if ((x - mGfxX) * (x - mGfxX) + (y - mGfxY) * (y - mGfxY) + (z - mGfxZ) * (z - mGfxZ)
< (f32)(dist * dist)) {
return TRUE;
}
return FALSE;
}
/**
* Returns either gMarioObject or gLuigiObject depending on what is closer
* Returns closest MarioState
*/
struct MarioState* nearest_mario_state_to_object(struct Object *obj) {
struct MarioState* nearest = NULL;
@ -533,7 +528,7 @@ struct MarioState* nearest_mario_state_to_object(struct Object *obj) {
}
/**
* Returns either gMarioObject or gLuigiObject depending on what is closer
* Returns closest marioObj
*/
struct Object* nearest_player_to_object(struct Object *obj) {
struct MarioState* nearest = nearest_mario_state_to_object(obj);

View file

@ -559,7 +559,7 @@ static s32 obj_resolve_object_collisions(s32 *targetYaw) {
if (o->numCollidedObjs != 0) {
otherObject = o->collidedObjs[0];
if (otherObject != gMarioObject && otherObject != gLuigiObject) {
if (otherObject != gMarioObject && otherObject != gMario2Object) {
//! If one object moves after collisions are detected and this code
// runs, the objects can move toward each other (transport cloning)

View file

@ -69,8 +69,8 @@ int detect_object_hurtbox_overlap(struct Object *a, struct Object *b) {
f32 sp24 = sqrtf(sp34 * sp34 + sp2C * sp2C);
if (a == gMarioObject) { b->oInteractionSubtype |= INT_SUBTYPE_DELAY_INVINCIBILITY; }
if (a == gLuigiObject) { b->oInteractionSubtype |= INT_SUBTYPE_DELAY_INVINCIBILITY_LUIGI; }
if (a == gMario2Object) { b->oInteractionSubtype |= INT_SUBTYPE_DELAY_INVINCIBILITY_MARIO2; }
if (sp28 > sp24) {
f32 sp20 = a->hitboxHeight + sp3C;
f32 sp1C = b->hurtboxHeight + sp38;
@ -82,7 +82,7 @@ int detect_object_hurtbox_overlap(struct Object *a, struct Object *b) {
return 0;
}
if (a == gMarioObject) { b->oInteractionSubtype &= ~INT_SUBTYPE_DELAY_INVINCIBILITY; }
if (a == gLuigiObject) { b->oInteractionSubtype &= ~INT_SUBTYPE_DELAY_INVINCIBILITY_LUIGI; }
if (a == gMario2Object) { b->oInteractionSubtype &= ~INT_SUBTYPE_DELAY_INVINCIBILITY_MARIO2; }
return 1;
}

View file

@ -2233,52 +2233,33 @@ void spawn_mist_particles_with_sound(u32 sp18) {
}
void cur_obj_push_mario_away(f32 radius) {
f32 marioRelX = gMarioObject->oPosX - o->oPosX;
f32 marioRelZ = gMarioObject->oPosZ - o->oPosZ;
f32 marioDist = sqrtf(sqr(marioRelX) + sqr(marioRelZ));
for (int i = 0; i < MAX_PLAYERS; i++) {
struct Object* player = gMarioStates[i].marioObj;
f32 marioRelX = player->oPosX - o->oPosX;
f32 marioRelZ = player->oPosZ - o->oPosZ;
f32 marioDist = sqrtf(sqr(marioRelX) + sqr(marioRelZ));
if (marioDist < radius) {
//! If this function pushes Mario out of bounds, it will trigger Mario's
// oob failsafe
gMarioStates[0].pos[0] += (radius - marioDist) / radius * marioRelX;
gMarioStates[0].pos[2] += (radius - marioDist) / radius * marioRelZ;
}
}
void cur_obj_push_luigi_away(f32 radius) {
f32 luigiRelX = gLuigiObject->oPosX - o->oPosX;
f32 luigiRelZ = gLuigiObject->oPosZ - o->oPosZ;
f32 luigiDist = sqrtf(sqr(luigiRelX) + sqr(luigiRelZ));
if (luigiDist < radius) {
//! If this function pushes luigi out of bounds, it will trigger luigi's
// oob failsafe
gMarioStates[1].pos[0] += (radius - luigiDist) / radius * luigiRelX;
gMarioStates[1].pos[2] += (radius - luigiDist) / radius * luigiRelZ;
if (marioDist < radius) {
//! If this function pushes Mario out of bounds, it will trigger Mario's
// oob failsafe
gMarioStates[i].pos[0] += (radius - marioDist) / radius * marioRelX;
gMarioStates[i].pos[2] += (radius - marioDist) / radius * marioRelZ;
}
}
}
void cur_obj_push_mario_away_from_cylinder(f32 radius, f32 extentY) {
f32 marioRelY = gMarioObject->oPosY - o->oPosY;
for (int i = 0; i < MAX_PLAYERS; i++) {
struct Object* player = gMarioStates[i].marioObj;
f32 marioRelY = player->oPosY - o->oPosY;
if (marioRelY < 0) {
marioRelY = -marioRelY;
}
if (marioRelY < 0) {
marioRelY = -marioRelY;
}
if (marioRelY < extentY) {
cur_obj_push_mario_away(radius);
}
}
void cur_obj_push_luigi_away_from_cylinder(f32 radius, f32 extentY) {
f32 marioRelY = gLuigiObject->oPosY - o->oPosY;
if (marioRelY < 0) {
marioRelY = -marioRelY;
}
if (marioRelY < extentY) {
cur_obj_push_luigi_away(radius);
if (marioRelY < extentY) {
cur_obj_push_mario_away(radius);
}
}
}
@ -2840,7 +2821,7 @@ s32 obj_attack_collided_from_other_object(struct Object *obj) {
if (numCollidedObjs != 0) {
other = obj->collidedObjs[0];
if (other != gMarioObject && other != gLuigiObject) {
if (other != gMarioObject && other != gMario2Object) {
other->oInteractStatus |= ATTACK_PUNCH | INT_STATUS_WAS_ATTACKED | INT_STATUS_INTERACTED
| INT_STATUS_TOUCHED_BOB_OMB;
touchedOtherObject = TRUE;

View file

@ -247,9 +247,7 @@ s32 cur_obj_is_mario_ground_pounding_platform(void);
void spawn_mist_particles(void);
void spawn_mist_particles_with_sound(u32 sp18);
void cur_obj_push_mario_away(f32 radius);
void cur_obj_push_luigi_away(f32 radius);
void cur_obj_push_mario_away_from_cylinder(f32 radius, f32 extentY);
void cur_obj_push_luigi_away_from_cylinder(f32 radius, f32 extentY);
s32 cur_obj_set_direction_table(s8 *a0);
s32 cur_obj_progress_direction_table(void);
void stub_obj_helpers_3(UNUSED s32 sp0, UNUSED s32 sp4);

View file

@ -95,7 +95,7 @@ struct Object *gMarioObject;
* second player. This is speculation, based on its position and its usage in
* shadow.c.
*/
struct Object *gLuigiObject;
struct Object *gMario2Object;
/**
* The object whose behavior script is currently being updated.
@ -286,7 +286,7 @@ void bhv_mario_update(void) {
}
}
void bhv_luigi_update(void) {
void bhv_mario2_update(void) {
gMarioState = &gMarioStates[1];
bhv_mario_update();
gMarioState = &gMarioStates[0];
@ -507,7 +507,7 @@ void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo) {
}
if (spawnInfo->behaviorArg & 0x02) {
gLuigiObject = object;
gMario2Object = object;
geo_make_first_child(&object->header.gfx.node);
}
@ -542,7 +542,7 @@ void clear_objects(void) {
gTHIWaterDrained = 0;
gTimeStopState = 0;
gMarioObject = NULL;
gLuigiObject = NULL;
gMario2Object = NULL;
gMarioCurrentRoom = 0;
for (i = 0; i < 60; i++) {

View file

@ -90,7 +90,7 @@ extern struct ObjectNode *gObjectLists;
extern struct ObjectNode gFreeObjectList;
extern struct Object *gMarioObject;
extern struct Object *gLuigiObject;
extern struct Object *gMario2Object;
extern struct Object *gCurrentObject;
extern const BehaviorScript *gCurBhvCommand;
@ -122,7 +122,7 @@ extern s16 gMarioOnMerryGoRound;
void bhv_mario_update(void);
void bhv_luigi_update(void);
void bhv_mario2_update(void);
void set_object_respawn_info_bits(struct Object *obj, u8 bits);
void unload_objects_from_area(UNUSED s32 unused, s32 areaIndex);
void spawn_objects_from_info(UNUSED s32 unused, struct SpawnInfo *spawnInfo);

View file

@ -521,27 +521,13 @@ void linearly_interpolate_solidity_negative(struct Shadow *s, u8 initialSolidity
/**
* Change a shadow's solidity based on the player's current animation frame.
*/
s8 correct_shadow_solidity_for_animations(s32 isLuigi, u8 initialSolidity, struct Shadow *shadow) {
s8 correct_shadow_solidity_for_animations(s32 playerIndex, u8 initialSolidity, struct Shadow *shadow) {
struct Object *player;
s8 ret;
s16 animFrame;
switch (isLuigi) {
case 0:
player = gMarioObject;
break;
case 1:
/**
* This is evidence of a removed second player, likely Luigi.
* This variable lies in memory just after the gMarioObject and
* has the same type of shadow that Mario does. The `isLuigi`
* variable is never 1 in the game. Note that since this was a
* switch-case, not an if-statement, the programmers possibly
* intended there to be even more than 2 characters.
*/
player = gLuigiObject;
break;
}
extern struct MarioState gMarioStates[];
player = gMarioStates[playerIndex].marioObj;
animFrame = player->header.gfx.unk38.animFrame;
switch (player->header.gfx.unk38.animID) {
@ -590,7 +576,7 @@ void correct_lava_shadow_height(struct Shadow *s) {
* Create a shadow under a player, correcting that shadow's opacity during
* appropriate animations and other states.
*/
Gfx *create_shadow_player(f32 xPos, f32 yPos, f32 zPos, s16 shadowScale, u8 solidity, s32 isLuigi) {
Gfx *create_shadow_player(f32 xPos, f32 yPos, f32 zPos, s16 shadowScale, u8 solidity, s32 playerIndex) {
Vtx *verts;
Gfx *displayList;
struct Shadow shadow;
@ -610,7 +596,7 @@ Gfx *create_shadow_player(f32 xPos, f32 yPos, f32 zPos, s16 shadowScale, u8 soli
}
}
switch (correct_shadow_solidity_for_animations(isLuigi, solidity, &shadow)) {
switch (correct_shadow_solidity_for_animations(playerIndex, solidity, &shadow)) {
case SHADOW_SOLIDITY_NO_SHADOW:
return NULL;
break;
@ -889,7 +875,7 @@ Gfx *create_shadow_below_xyz(f32 xPos, f32 yPos, f32 zPos, s16 shadowScale, u8 s
break;
case SHADOW_CIRCLE_PLAYER:
displayList = create_shadow_player(xPos, yPos, zPos, shadowScale, shadowSolidity,
/* isLuigi */ FALSE);
/* playerIndex */ 0);
break;
default:
displayList = create_shadow_hardcoded_rectangle(xPos, yPos, zPos, shadowScale,

View file

@ -8,7 +8,7 @@
static u8 localCoinId = 1;
// the remoteCoinId stuff is only valid for 'luigi' aka the one remote player
// two-player hack: the remoteCoinId stuff is only valid for the one remote player
// will need to be extended if MAX_PLAYERS is ever increased
#define MAX_REMOTE_COIN_IDS 16
static u8 remoteCoinIds[MAX_REMOTE_COIN_IDS] = { 0 };

View file

@ -6,7 +6,7 @@
static u8 localSpawnId = 1;
// the remoteSpawnId stuff is only valid for 'luigi' aka the one remote player
// two-player hack: the remoteSpawnId stuff is only valid for the one remote player
// will need to be extended if MAX_PLAYERS is ever increased
#define MAX_REMOTE_SPAWN_IDS 16
static u8 remoteSpawnIds[MAX_REMOTE_SPAWN_IDS] = { 0 };

View file

@ -250,7 +250,7 @@ void main_func(void) {
gfx_init(wm_api, rendering_api, window_title);
wm_api->set_keyboard_callbacks(keyboard_on_key_down, keyboard_on_key_up, keyboard_on_all_keys_up);
if (audio_api == NULL && audio_sdl.init())
if (audio_api == NULL && audio_sdl.init())
audio_api = &audio_sdl;
if (audio_api == NULL) {