Geo2 removal wip

This commit is contained in:
MysterD 2020-09-06 13:54:01 -07:00
parent 975c68ae1e
commit df7904e288
14 changed files with 164 additions and 2913 deletions

View file

@ -16,6 +16,4 @@
#include "water_splash/geo.inc.c" #include "water_splash/geo.inc.c"
#include "sparkle_animation/geo.inc.c" #include "sparkle_animation/geo.inc.c"
#include "mario/geo.inc.c" #include "mario/geo.inc.c"
#include "mario/geo2.inc.c"
#include "luigi/geo.inc.c" #include "luigi/geo.inc.c"
#include "luigi/geo2.inc.c"

View file

@ -1,954 +0,0 @@
#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, 17202),
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(),
};

File diff suppressed because it is too large Load diff

View file

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

View file

@ -66,9 +66,7 @@ const LevelScript level_main_scripts_entry[] = {
LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd), LOAD_RAW( /*seg*/ 0x13, _behaviorSegmentRomStart, _behaviorSegmentRomEnd),
ALLOC_LEVEL_POOL(), ALLOC_LEVEL_POOL(),
LOAD_MODEL_FROM_GEO(MODEL_MARIO, mario_geo), 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_LUIGI, luigi_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGI2, luigi2_geo),
LOAD_MODEL_FROM_GEO(MODEL_BUBBLE_PLAYER, water_bomb_geo), LOAD_MODEL_FROM_GEO(MODEL_BUBBLE_PLAYER, water_bomb_geo),
LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo), LOAD_MODEL_FROM_GEO(MODEL_SMOKE, smoke_geo),
LOAD_MODEL_FROM_GEO(MODEL_SPARKLES, sparkles_geo), LOAD_MODEL_FROM_GEO(MODEL_SPARKLES, sparkles_geo),

View file

@ -1,8 +1,8 @@
set -e set -e
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 -j
else else
make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 STRICT=1 make BETTERCAMERA=1 NODRAWINGDISTANCE=1 DEBUG=1 IMMEDIATELOAD=1 STRICT=1 -j
fi fi
# find file # find file

View file

@ -425,15 +425,28 @@ static void level_cmd_23(void) {
} }
static void level_cmd_init_mario(void) { static void level_cmd_init_mario(void) {
vec3s_set(gMarioSpawnInfo->startPos, 0, 0, 0); u32 behaviorArg = CMD_GET(u32, 4);
vec3s_set(gMarioSpawnInfo->startAngle, 0, 0, 0); void* behaviorScript = CMD_GET(void*, 8);
struct GraphNode* unk18 = gLoadedGraphNodes[CMD_GET(u8, 3)];
gMarioSpawnInfo->activeAreaIndex = -1; struct SpawnInfo* lastSpawnInfo = NULL;
gMarioSpawnInfo->areaIndex = 0; for (int i = 0; i < MAX_PLAYERS; i++) {
gMarioSpawnInfo->behaviorArg = CMD_GET(u32, 4); struct SpawnInfo* spawnInfo = &gPlayerSpawnInfos[i];
gMarioSpawnInfo->behaviorScript = CMD_GET(void *, 8); vec3s_set(spawnInfo->startPos, 0, 0, 0);
gMarioSpawnInfo->unk18 = gLoadedGraphNodes[CMD_GET(u8, 3)]; vec3s_set(spawnInfo->startAngle, 0, 0, 0);
gMarioSpawnInfo->next = NULL;
spawnInfo->activeAreaIndex = -1;
spawnInfo->areaIndex = 0;
spawnInfo->behaviorArg = i;
spawnInfo->behaviorScript = behaviorScript;
spawnInfo->unk18 = unk18;
spawnInfo->next = NULL;
if (lastSpawnInfo != NULL) {
lastSpawnInfo->next = spawnInfo;
}
lastSpawnInfo = spawnInfo;
}
sCurrentCmd = CMD_NEXT; sCurrentCmd = CMD_NEXT;
} }

View file

@ -2075,11 +2075,7 @@ void init_mario(void) {
} }
// set mario/luigi model // set mario/luigi model
if (isLocal) { gMarioState->marioObj->header.gfx.sharedChild = gLoadedGraphNodes[(gNetworkType == NT_SERVER) ? MODEL_MARIO : MODEL_LUIGI];
gMarioState->marioObj->header.gfx.sharedChild = gLoadedGraphNodes[(gNetworkType == NT_SERVER) ? MODEL_MARIO : MODEL_LUIGI];
} else {
gMarioState->marioObj->header.gfx.sharedChild = gLoadedGraphNodes[(gNetworkType == NT_SERVER) ? MODEL_LUIGI2 : MODEL_MARIO2];
}
skippy: skippy:
if (isLocal) { if (isLocal) {

View file

@ -19,6 +19,7 @@
#include "object_helpers.h" #include "object_helpers.h"
#include "obj_behaviors.h" #include "obj_behaviors.h"
#include "level_update.h" #include "level_update.h"
#include "mario_step.h"
#define POLE_NONE 0 #define POLE_NONE 0
#define POLE_TOUCHED_FLOOR 1 #define POLE_TOUCHED_FLOOR 1

View file

@ -318,14 +318,20 @@ static Gfx *make_gfx_mario_alpha(struct GraphNodeGenerated *node, s16 alpha) {
return gfxHead; return gfxHead;
} }
struct MarioBodyState* geo_get_body_state(void) {
return (gCurGraphNodeProcessingObject == NULL)
? &gBodyStates[0]
: &gBodyStates[gCurGraphNodeProcessingObject->oBehParams - 1];
}
/** /**
* Sets the correct blend mode and color for mirror Mario. * Sets the correct blend mode and color for mirror Mario.
*/ */
Gfx *geo_mirror_mario_set_alpha(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_mirror_mario_set_alpha(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
UNUSED u8 unused1[4]; UNUSED u8 unused1[4];
Gfx *gfx = NULL; Gfx* gfx = NULL;
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
struct MarioBodyState *bodyState = &gBodyStates[asGenerated->parameter]; struct MarioBodyState* bodyState = geo_get_body_state();
s16 alpha; s16 alpha;
UNUSED u8 unused2[4]; UNUSED u8 unused2[4];
@ -341,9 +347,9 @@ Gfx *geo_mirror_mario_set_alpha(s32 callContext, struct GraphNode *node, UNUSED
* If Mario is standing still, he is always high poly. If he is running, * If Mario is standing still, he is always high poly. If he is running,
* his level of detail depends on the distance to the camera. * his level of detail depends on the distance to the camera.
*/ */
Gfx *geo_switch_mario_stand_run(s32 callContext, struct GraphNode *node, UNUSED Mat4 *mtx) { Gfx* geo_switch_mario_stand_run(s32 callContext, struct GraphNode* node, UNUSED Mat4* mtx) {
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node; struct GraphNodeSwitchCase* switchCase = (struct GraphNodeSwitchCase*) node;
struct MarioBodyState *bodyState = &gBodyStates[switchCase->numCases]; struct MarioBodyState* bodyState = geo_get_body_state();
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
// assign result. 0 if moving, 1 if stationary. // assign result. 0 if moving, 1 if stationary.
@ -355,9 +361,9 @@ Gfx *geo_switch_mario_stand_run(s32 callContext, struct GraphNode *node, UNUSED
/** /**
* Geo node script that makes Mario blink * Geo node script that makes Mario blink
*/ */
Gfx *geo_switch_mario_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_switch_mario_eyes(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node; struct GraphNodeSwitchCase* switchCase = (struct GraphNodeSwitchCase*) node;
struct MarioBodyState *bodyState = &gBodyStates[switchCase->numCases]; struct MarioBodyState* bodyState = geo_get_body_state();
s16 blinkFrame; s16 blinkFrame;
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
@ -365,10 +371,12 @@ Gfx *geo_switch_mario_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4
blinkFrame = ((switchCase->numCases * 32 + gAreaUpdateCounter) >> 1) & 0x1F; blinkFrame = ((switchCase->numCases * 32 + gAreaUpdateCounter) >> 1) & 0x1F;
if (blinkFrame < 7) { if (blinkFrame < 7) {
switchCase->selectedCase = gMarioBlinkAnimation[blinkFrame]; switchCase->selectedCase = gMarioBlinkAnimation[blinkFrame];
} else { }
else {
switchCase->selectedCase = 0; switchCase->selectedCase = 0;
} }
} else { }
else {
switchCase->selectedCase = bodyState->eyeState - 1; switchCase->selectedCase = bodyState->eyeState - 1;
} }
} }
@ -378,14 +386,14 @@ Gfx *geo_switch_mario_eyes(s32 callContext, struct GraphNode *node, UNUSED Mat4
/** /**
* Makes Mario's upper body tilt depending on the rotation stored in his bodyState * Makes Mario's upper body tilt depending on the rotation stored in his bodyState
*/ */
Gfx *geo_mario_tilt_torso(s32 callContext, struct GraphNode *node, Mat4 *mtx) { Gfx* geo_mario_tilt_torso(s32 callContext, struct GraphNode* node, Mat4* mtx) {
Mat4* curTransform = mtx; Mat4 * curTransform = mtx;
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
struct MarioBodyState *bodyState = &gBodyStates[asGenerated->parameter]; struct MarioBodyState* bodyState = geo_get_body_state();
s32 action = bodyState->action; s32 action = bodyState->action;
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
struct GraphNodeRotation *rotNode = (struct GraphNodeRotation *) node->next; struct GraphNodeRotation* rotNode = (struct GraphNodeRotation*) node->next;
if (action != ACT_BUTT_SLIDE && action != ACT_HOLD_BUTT_SLIDE && action != ACT_WALKING if (action != ACT_BUTT_SLIDE && action != ACT_HOLD_BUTT_SLIDE && action != ACT_WALKING
&& action != ACT_RIDING_SHELL_GROUND) { && action != ACT_RIDING_SHELL_GROUND) {
@ -404,23 +412,25 @@ Gfx *geo_mario_tilt_torso(s32 callContext, struct GraphNode *node, Mat4 *mtx) {
/** /**
* Makes Mario's head rotate with the camera angle when in C-up mode * Makes Mario's head rotate with the camera angle when in C-up mode
*/ */
Gfx *geo_mario_head_rotation(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_mario_head_rotation(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
struct MarioBodyState *bodyState = &gBodyStates[asGenerated->parameter]; struct MarioBodyState* bodyState = geo_get_body_state();
s32 action = bodyState->action; s32 action = bodyState->action;
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
struct GraphNodeRotation *rotNode = (struct GraphNodeRotation *) node->next; struct GraphNodeRotation* rotNode = (struct GraphNodeRotation*) node->next;
struct Camera *camera = gCurGraphNodeCamera->config.camera; struct Camera* camera = gCurGraphNodeCamera->config.camera;
if (camera->mode == CAMERA_MODE_C_UP) { if (camera->mode == CAMERA_MODE_C_UP) {
rotNode->rotation[0] = gPlayerCameraState->headRotation[1]; rotNode->rotation[0] = gPlayerCameraState->headRotation[1];
rotNode->rotation[2] = gPlayerCameraState->headRotation[0]; rotNode->rotation[2] = gPlayerCameraState->headRotation[0];
} else if (action & ACT_FLAG_WATER_OR_TEXT) { }
else if (action & ACT_FLAG_WATER_OR_TEXT) {
rotNode->rotation[0] = bodyState->headAngle[1]; rotNode->rotation[0] = bodyState->headAngle[1];
rotNode->rotation[1] = bodyState->headAngle[2]; rotNode->rotation[1] = bodyState->headAngle[2];
rotNode->rotation[2] = bodyState->headAngle[0]; rotNode->rotation[2] = bodyState->headAngle[0];
} else { }
else {
vec3s_set(bodyState->headAngle, 0, 0, 0); vec3s_set(bodyState->headAngle, 0, 0, 0);
vec3s_set(rotNode->rotation, 0, 0, 0); vec3s_set(rotNode->rotation, 0, 0, 0);
} }
@ -432,19 +442,21 @@ Gfx *geo_mario_head_rotation(s32 callContext, struct GraphNode *node, UNUSED Mat
* Switch between hand models. * Switch between hand models.
* Possible options are described in the MarioHandGSCId enum. * Possible options are described in the MarioHandGSCId enum.
*/ */
Gfx *geo_switch_mario_hand(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_switch_mario_hand(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node; struct GraphNodeSwitchCase* switchCase = (struct GraphNodeSwitchCase*) node;
struct MarioBodyState *bodyState = &gBodyStates[switchCase->numCases >> 1]; struct MarioBodyState* bodyState = geo_get_body_state();
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
if (bodyState->handState == MARIO_HAND_FISTS) { if (bodyState->handState == MARIO_HAND_FISTS) {
// switch between fists (0) and open (1) // switch between fists (0) and open (1)
switchCase->selectedCase = ((bodyState->action & ACT_FLAG_SWIMMING_OR_FLYING) != 0); switchCase->selectedCase = ((bodyState->action & ACT_FLAG_SWIMMING_OR_FLYING) != 0);
} else { }
if ((switchCase->numCases & 0x01) == 0) { else {
if (switchCase->numCases == 0) {
switchCase->selectedCase = switchCase->selectedCase =
(bodyState->handState < 5) ? bodyState->handState : MARIO_HAND_OPEN; (bodyState->handState < 5) ? bodyState->handState : MARIO_HAND_OPEN;
} else { }
else {
switchCase->selectedCase = switchCase->selectedCase =
(bodyState->handState < 2) ? bodyState->handState : MARIO_HAND_FISTS; (bodyState->handState < 2) ? bodyState->handState : MARIO_HAND_FISTS;
} }
@ -461,28 +473,29 @@ Gfx *geo_switch_mario_hand(s32 callContext, struct GraphNode *node, UNUSED Mat4
* ! Since the animation gets updated in GEO_CONTEXT_RENDER, drawing Mario multiple times * ! Since the animation gets updated in GEO_CONTEXT_RENDER, drawing Mario multiple times
* (such as in the mirror room) results in a faster and desynced punch / kick animation. * (such as in the mirror room) results in a faster and desynced punch / kick animation.
*/ */
Gfx *geo_mario_hand_foot_scaler(s32 callContext, struct GraphNode *node, Mat4 *mtx) { Gfx* geo_mario_hand_foot_scaler(s32 callContext, struct GraphNode* node, Mat4* mtx) {
Mat4* curTransform = mtx; Mat4 * curTransform = mtx;
static s16 sMarioAttackAnimCounter = 0; static s16 sMarioAttackAnimCounter = 0;
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
struct GraphNodeScale *scaleNode = (struct GraphNodeScale *) node->next; struct GraphNodeScale* scaleNode = (struct GraphNodeScale*) node->next;
struct MarioBodyState *bodyState = &gBodyStates[asGenerated->parameter >> 2]; struct MarioBodyState* bodyState = geo_get_body_state();
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
scaleNode->scale = 1.0f; scaleNode->scale = 1.0f;
if ((asGenerated->parameter & 0x03) == bodyState->punchState >> 6) { if (asGenerated->parameter == bodyState->punchState >> 6) {
if (sMarioAttackAnimCounter != gAreaUpdateCounter && (bodyState->punchState & 0x3F) > 0) { if (sMarioAttackAnimCounter != gAreaUpdateCounter && (bodyState->punchState & 0x3F) > 0) {
bodyState->punchState -= 1; bodyState->punchState -= 1;
sMarioAttackAnimCounter = gAreaUpdateCounter; sMarioAttackAnimCounter = gAreaUpdateCounter;
} }
scaleNode->scale = scaleNode->scale =
gMarioAttackScaleAnimation[(asGenerated->parameter & 0x03) * 6 + (bodyState->punchState & 0x3F)] gMarioAttackScaleAnimation[asGenerated->parameter * 6 + (bodyState->punchState & 0x3F)]
/ 10.0f; / 10.0f;
} }
// update hand/foot position in bodyState // update hand/foot position in bodyState
get_pos_from_transform_mtx(bodyState->handFootPos[(asGenerated->parameter & 0x03)], get_pos_from_transform_mtx(bodyState->handFootPos[(asGenerated->parameter & 0x03)],
*curTransform, *curTransform,
*gCurGraphNodeCamera->matrixPtr); *gCurGraphNodeCamera->matrixPtr);
} }
return NULL; return NULL;
} }
@ -490,9 +503,9 @@ Gfx *geo_mario_hand_foot_scaler(s32 callContext, struct GraphNode *node, Mat4 *m
/** /**
* Switch between normal cap, wing cap, vanish cap and metal cap. * Switch between normal cap, wing cap, vanish cap and metal cap.
*/ */
Gfx *geo_switch_mario_cap_effect(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_switch_mario_cap_effect(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node; struct GraphNodeSwitchCase* switchCase = (struct GraphNodeSwitchCase*) node;
struct MarioBodyState *bodyState = &gBodyStates[switchCase->numCases]; struct MarioBodyState* bodyState = geo_get_body_state();
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
switchCase->selectedCase = bodyState->modelState >> 8; switchCase->selectedCase = bodyState->modelState >> 8;
@ -504,10 +517,10 @@ Gfx *geo_switch_mario_cap_effect(s32 callContext, struct GraphNode *node, UNUSED
* Determine whether Mario's head is drawn with or without a cap on. * Determine whether Mario's head is drawn with or without a cap on.
* Also sets the visibility of the wing cap wings on or off. * Also sets the visibility of the wing cap wings on or off.
*/ */
Gfx *geo_switch_mario_cap_on_off(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_switch_mario_cap_on_off(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNode *next = node->next; struct GraphNode* next = node->next;
struct GraphNodeSwitchCase *switchCase = (struct GraphNodeSwitchCase *) node; struct GraphNodeSwitchCase* switchCase = (struct GraphNodeSwitchCase*) node;
struct MarioBodyState *bodyState = &gBodyStates[switchCase->numCases]; struct MarioBodyState* bodyState = geo_get_body_state();
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
switchCase->selectedCase = bodyState->capState & 1; switchCase->selectedCase = bodyState->capState & 1;
@ -515,7 +528,8 @@ Gfx *geo_switch_mario_cap_on_off(s32 callContext, struct GraphNode *node, UNUSED
if (next->type == GRAPH_NODE_TYPE_TRANSLATION_ROTATION) { if (next->type == GRAPH_NODE_TYPE_TRANSLATION_ROTATION) {
if (bodyState->capState & 2) { if (bodyState->capState & 2) {
next->flags |= GRAPH_RENDER_ACTIVE; next->flags |= GRAPH_RENDER_ACTIVE;
} else { }
else {
next->flags &= ~GRAPH_RENDER_ACTIVE; next->flags &= ~GRAPH_RENDER_ACTIVE;
} }
} }
@ -529,21 +543,23 @@ Gfx *geo_switch_mario_cap_on_off(s32 callContext, struct GraphNode *node, UNUSED
* Geo node script that makes the wings on Mario's wing cap flap. * Geo node script that makes the wings on Mario's wing cap flap.
* Should be placed before a rotation node. * Should be placed before a rotation node.
*/ */
Gfx *geo_mario_rotate_wing_cap_wings(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_mario_rotate_wing_cap_wings(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
s16 rotX; s16 rotX;
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
struct GraphNodeRotation *rotNode = (struct GraphNodeRotation *) node->next; struct GraphNodeRotation* rotNode = (struct GraphNodeRotation*) node->next;
if (gBodyStates[asGenerated->parameter >> 1].wingFlutter == FALSE) { if (gBodyStates[asGenerated->parameter >> 1].wingFlutter == FALSE) {
rotX = (coss((gAreaUpdateCounter & 0xF) << 12) + 1.0f) * 4096.0f; rotX = (coss((gAreaUpdateCounter & 0xF) << 12) + 1.0f) * 4096.0f;
} else { }
else {
rotX = (coss((gAreaUpdateCounter & 7) << 13) + 1.0f) * 6144.0f; rotX = (coss((gAreaUpdateCounter & 7) << 13) + 1.0f) * 6144.0f;
} }
if (!(asGenerated->parameter & 1)) { if (!(asGenerated->parameter & 1)) {
rotNode->rotation[0] = -rotX; rotNode->rotation[0] = -rotX;
} else { }
else {
rotNode->rotation[0] = rotX; rotNode->rotation[0] = rotX;
} }
} }
@ -553,37 +569,39 @@ Gfx *geo_mario_rotate_wing_cap_wings(s32 callContext, struct GraphNode *node, UN
/** /**
* Geo node that updates the held object node and the HOLP. * Geo node that updates the held object node and the HOLP.
*/ */
Gfx *geo_switch_mario_hand_grab_pos(s32 callContext, struct GraphNode *b, Mat4 *mtx) { Gfx* geo_switch_mario_hand_grab_pos(s32 callContext, struct GraphNode* b, Mat4* mtx) {
struct GraphNodeHeldObject *asHeldObj = (struct GraphNodeHeldObject *) b; struct GraphNodeHeldObject* asHeldObj = (struct GraphNodeHeldObject*) b;
Mat4 *curTransform = mtx; Mat4* curTransform = mtx;
struct MarioState *marioState = &gMarioStates[asHeldObj->playerIndex]; struct MarioState* marioState = &gMarioStates[asHeldObj->playerIndex];
if (callContext == GEO_CONTEXT_RENDER) { if (callContext == GEO_CONTEXT_RENDER) {
asHeldObj->objNode = NULL; asHeldObj->objNode = NULL;
if (marioState->heldObj != NULL) { if (marioState->heldObj != NULL) {
asHeldObj->objNode = marioState->heldObj; asHeldObj->objNode = marioState->heldObj;
switch (marioState->marioBodyState->grabPos) { switch (marioState->marioBodyState->grabPos) {
case GRAB_POS_LIGHT_OBJ: case GRAB_POS_LIGHT_OBJ:
if (marioState->action & ACT_FLAG_THROWING) { if (marioState->action & ACT_FLAG_THROWING) {
vec3s_set(asHeldObj->translation, 50, 0, 0); vec3s_set(asHeldObj->translation, 50, 0, 0);
} else { }
vec3s_set(asHeldObj->translation, 50, 0, 110); else {
} vec3s_set(asHeldObj->translation, 50, 0, 110);
break; }
case GRAB_POS_HEAVY_OBJ: break;
vec3s_set(asHeldObj->translation, 145, -173, 180); case GRAB_POS_HEAVY_OBJ:
break; vec3s_set(asHeldObj->translation, 145, -173, 180);
case GRAB_POS_BOWSER: break;
vec3s_set(asHeldObj->translation, 80, -270, 1260); case GRAB_POS_BOWSER:
break; vec3s_set(asHeldObj->translation, 80, -270, 1260);
break;
} }
} }
} else if (callContext == GEO_CONTEXT_HELD_OBJ) { }
else if (callContext == GEO_CONTEXT_HELD_OBJ) {
// ! The HOLP is set here, which is why it only updates when the held object is drawn. // ! The HOLP is set here, which is why it only updates when the held object is drawn.
// This is why it won't update during a pause buffered hitstun or when the camera is very far // This is why it won't update during a pause buffered hitstun or when the camera is very far
// away. // away.
get_pos_from_transform_mtx(marioState->marioBodyState->heldObjLastPosition, *curTransform, get_pos_from_transform_mtx(marioState->marioBodyState->heldObjLastPosition, *curTransform,
*gCurGraphNodeCamera->matrixPtr); gCurGraphNodeCamera->matrixPtr);
} }
return NULL; return NULL;
} }
@ -595,44 +613,45 @@ Gfx *geo_switch_mario_hand_grab_pos(s32 callContext, struct GraphNode *b, Mat4 *
* Geo node that creates a clone of Mario's geo node and updates it to becomes * Geo node that creates a clone of Mario's geo node and updates it to becomes
* a mirror image of the player. * a mirror image of the player.
*/ */
Gfx *geo_render_mirror_mario(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_render_mirror_mario(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
f32 mirroredX; f32 mirroredX;
struct Object *mario = gMarioStates->marioObj; struct Object* mario = gMarioStates->marioObj;
switch (callContext) { switch (callContext) {
case GEO_CONTEXT_CREATE: case GEO_CONTEXT_CREATE:
init_graph_node_object(NULL, &gMirrorMario, NULL, gVec3fZero, gVec3sZero, gVec3fOne); init_graph_node_object(NULL, &gMirrorMario, NULL, gVec3fZero, gVec3sZero, gVec3fOne);
break; break;
case GEO_CONTEXT_AREA_LOAD: case GEO_CONTEXT_AREA_LOAD:
geo_add_child(node, &gMirrorMario.node); geo_add_child(node, &gMirrorMario.node);
break; break;
case GEO_CONTEXT_AREA_UNLOAD: case GEO_CONTEXT_AREA_UNLOAD:
geo_remove_child(&gMirrorMario.node); geo_remove_child(&gMirrorMario.node);
break; break;
case GEO_CONTEXT_RENDER: case GEO_CONTEXT_RENDER:
if (mario->header.gfx.pos[0] > 1700.0f) { if (mario->header.gfx.pos[0] > 1700.0f) {
// TODO: Is this a geo layout copy or a graph node copy? // TODO: Is this a geo layout copy or a graph node copy?
gMirrorMario.sharedChild = mario->header.gfx.sharedChild; gMirrorMario.sharedChild = mario->header.gfx.sharedChild;
gMirrorMario.unk18 = mario->header.gfx.unk18; gMirrorMario.unk18 = mario->header.gfx.unk18;
vec3s_copy(gMirrorMario.angle, mario->header.gfx.angle); vec3s_copy(gMirrorMario.angle, mario->header.gfx.angle);
vec3f_copy(gMirrorMario.pos, mario->header.gfx.pos); vec3f_copy(gMirrorMario.pos, mario->header.gfx.pos);
vec3f_copy(gMirrorMario.scale, mario->header.gfx.scale); vec3f_copy(gMirrorMario.scale, mario->header.gfx.scale);
// FIXME: why does this set unk38, an inline struct, to a ptr to another one? wrong // FIXME: why does this set unk38, an inline struct, to a ptr to another one? wrong
// GraphNode types again? // GraphNode types again?
gMirrorMario.unk38 = *(struct GraphNodeObject_sub *) &mario->header.gfx.unk38.animID; gMirrorMario.unk38 = *(struct GraphNodeObject_sub*) & mario->header.gfx.unk38.animID;
mirroredX = MIRROR_X - gMirrorMario.pos[0]; mirroredX = MIRROR_X - gMirrorMario.pos[0];
gMirrorMario.pos[0] = mirroredX + MIRROR_X; gMirrorMario.pos[0] = mirroredX + MIRROR_X;
gMirrorMario.angle[1] = -gMirrorMario.angle[1]; gMirrorMario.angle[1] = -gMirrorMario.angle[1];
gMirrorMario.scale[0] *= -1.0f; gMirrorMario.scale[0] *= -1.0f;
// FIXME: Why doesn't this match? // FIXME: Why doesn't this match?
// gMirrorMario.node.flags |= 1; // gMirrorMario.node.flags |= 1;
((s16 *) &gMirrorMario)[1] |= 1; ((s16*)&gMirrorMario)[1] |= 1;
} else { }
// FIXME: Why doesn't this match? else {
// gMirrorMario.node.flags &= ~1; // FIXME: Why doesn't this match?
((s16 *) &gMirrorMario)[1] &= ~1; // gMirrorMario.node.flags &= ~1;
} ((s16*)&gMirrorMario)[1] &= ~1;
break; }
break;
} }
return NULL; return NULL;
} }
@ -641,9 +660,9 @@ Gfx *geo_render_mirror_mario(s32 callContext, struct GraphNode *node, UNUSED Mat
* Since Mirror Mario has an x scale of -1, the mesh becomes inside out. * Since Mirror Mario has an x scale of -1, the mesh becomes inside out.
* This node corrects that by changing the culling mode accordingly. * This node corrects that by changing the culling mode accordingly.
*/ */
Gfx *geo_mirror_mario_backface_culling(s32 callContext, struct GraphNode *node, UNUSED Mat4 *c) { Gfx* geo_mirror_mario_backface_culling(s32 callContext, struct GraphNode* node, UNUSED Mat4* c) {
struct GraphNodeGenerated *asGenerated = (struct GraphNodeGenerated *) node; struct GraphNodeGenerated* asGenerated = (struct GraphNodeGenerated*) node;
Gfx *gfx = NULL; Gfx* gfx = NULL;
if (callContext == GEO_CONTEXT_RENDER && gCurGraphNodeObject == &gMirrorMario) { if (callContext == GEO_CONTEXT_RENDER && gCurGraphNodeObject == &gMirrorMario) {
gfx = alloc_display_list(3 * sizeof(*gfx)); gfx = alloc_display_list(3 * sizeof(*gfx));
@ -652,7 +671,8 @@ Gfx *geo_mirror_mario_backface_culling(s32 callContext, struct GraphNode *node,
gSPClearGeometryMode(&gfx[0], G_CULL_BACK); gSPClearGeometryMode(&gfx[0], G_CULL_BACK);
gSPSetGeometryMode(&gfx[1], G_CULL_FRONT); gSPSetGeometryMode(&gfx[1], G_CULL_FRONT);
gSPEndDisplayList(&gfx[2]); gSPEndDisplayList(&gfx[2]);
} else { }
else {
gSPClearGeometryMode(&gfx[0], G_CULL_FRONT); gSPClearGeometryMode(&gfx[0], G_CULL_FRONT);
gSPSetGeometryMode(&gfx[1], G_CULL_BACK); gSPSetGeometryMode(&gfx[1], G_CULL_BACK);
gSPEndDisplayList(&gfx[2]); gSPEndDisplayList(&gfx[2]);

View file

@ -33,4 +33,6 @@ s32 stationary_ground_step(struct MarioState *);
s32 perform_ground_step(struct MarioState *); s32 perform_ground_step(struct MarioState *);
s32 perform_air_step(struct MarioState *, u32); s32 perform_air_step(struct MarioState *, u32);
void set_vel_from_pitch_and_yaw(struct MarioState* m);
#endif // MARIO_STEP_H #endif // MARIO_STEP_H

View file

@ -146,6 +146,8 @@ s32 gMtxTblSize;
static Gfx *sViewportPos; static Gfx *sViewportPos;
static Vp sPrevViewport; static Vp sPrevViewport;
struct Object* gCurGraphNodeProcessingObject;
void mtx_patch_interpolated(void) { void mtx_patch_interpolated(void) {
s32 i; s32 i;
@ -1065,10 +1067,10 @@ static void interpolate_matrix(Mat4 result, Mat4 a, Mat4 b) {
* Process an object node. * Process an object node.
*/ */
static void geo_process_object(struct Object *node) { static void geo_process_object(struct Object *node) {
gCurGraphNodeProcessingObject = node;
Mat4 mtxf; Mat4 mtxf;
s32 hasAnimation = (node->header.gfx.node.flags & GRAPH_RENDER_HAS_ANIMATION) != 0; s32 hasAnimation = (node->header.gfx.node.flags & GRAPH_RENDER_HAS_ANIMATION) != 0;
Vec3f scaleInterpolated; Vec3f scaleInterpolated;
if (node->header.gfx.unk18 == gCurGraphNodeRoot->areaIndex) { if (node->header.gfx.unk18 == gCurGraphNodeRoot->areaIndex) {
if (node->header.gfx.throwMatrix != NULL) { if (node->header.gfx.throwMatrix != NULL) {
mtxf_mul(gMatStack[gMatStackIndex + 1], *node->header.gfx.throwMatrix, mtxf_mul(gMatStack[gMatStackIndex + 1], *node->header.gfx.throwMatrix,
@ -1184,6 +1186,7 @@ static void geo_process_object(struct Object *node) {
node->header.gfx.throwMatrix = NULL; node->header.gfx.throwMatrix = NULL;
node->header.gfx.throwMatrixInterpolated = NULL; node->header.gfx.throwMatrixInterpolated = NULL;
} }
gCurGraphNodeProcessingObject = NULL;
} }
/** /**

View file

@ -12,6 +12,7 @@ extern struct GraphNodeCamera *gCurGraphNodeCamera;
extern struct GraphNodeObject *gCurGraphNodeObject; extern struct GraphNodeObject *gCurGraphNodeObject;
extern struct GraphNodeHeldObject *gCurGraphNodeHeldObject; extern struct GraphNodeHeldObject *gCurGraphNodeHeldObject;
extern u16 gAreaUpdateCounter; extern u16 gAreaUpdateCounter;
extern struct Object* gCurGraphNodeProcessingObject;
// after processing an object, the type is reset to this // after processing an object, the type is reset to this
#define ANIM_TYPE_NONE 0 #define ANIM_TYPE_NONE 0

View file

@ -42,6 +42,7 @@ void network_receive_player(struct Packet* p) {
u16 oldActionState = gMarioStates[1].actionState; u16 oldActionState = gMarioStates[1].actionState;
u16 oldActionArg = gMarioStates[1].actionArg; u16 oldActionArg = gMarioStates[1].actionArg;
u16 playerIndex = gMarioStates[1].playerIndex; u16 playerIndex = gMarioStates[1].playerIndex;
u32 oldBehParams = gMarioStates[1].marioObj->oBehParams;
// load mario information from packet // load mario information from packet
packet_read(p, &gMarioStates[1], sizeof(u32) * 24); packet_read(p, &gMarioStates[1], sizeof(u32) * 24);
@ -59,6 +60,7 @@ void network_receive_player(struct Packet* p) {
// reset player index // reset player index
gMarioStates[1].playerIndex = playerIndex; gMarioStates[1].playerIndex = playerIndex;
gMarioStates[1].marioObj->oBehParams = oldBehParams;
// reset mario sound play flag so that their jump sounds work // reset mario sound play flag so that their jump sounds work
if (gMarioStates[1].action != oldAction) { if (gMarioStates[1].action != oldAction) {