Added Waluigi - model provided by Super Keeberghrh

This commit is contained in:
MysterD 2021-09-05 14:17:20 -07:00
parent 4b3276afbf
commit 4cebce4864
27 changed files with 6333 additions and 19 deletions

View file

@ -75,6 +75,10 @@ ZCUSTOM_DIRS := luigi
CUSTOM_DIRS += toad_cap
ZCUSTOM_DIRS += toad_player
# Add Waluigi
CUSTOM_DIRS += waluigi_cap
ZCUSTOM_DIRS += waluigi
# Actor Files
CUSTOM_FILES := $(foreach dir,$(addprefix $(ACTOR_DIR)/,$(CUSTOM_DIRS)),$(patsubst %.png,%.inc.c,$(wildcard $(dir)/*.png)))
AMP_CHUCKYA_FILES := $(foreach dir,$(addprefix $(ACTOR_DIR)/,$(AMP_DIRS)),$(patsubst %.png,%.inc.c,$(wildcard $(dir)/*.png)))

View file

@ -6,3 +6,6 @@
// luigi_cap
#include "luigi_cap/model.inc.c"
// waluigi_cap
#include "waluigi_cap/model.inc.c"

View file

@ -28,4 +28,16 @@ extern const GeoLayout toads_cap_geo[];
extern const GeoLayout toads_metal_cap_geo[];
extern const GeoLayout toads_wing_cap_geo[];
// waluigi_cap
extern const GeoLayout waluigis_cap_geo[];
extern const GeoLayout waluigis_metal_cap_geo[];
extern const GeoLayout waluigis_wing_cap_geo[];
extern const GeoLayout waluigis_winged_metal_cap_geo[];
extern const Gfx waluigi_cap_seg3_dl_03022F48[];
extern const Gfx waluigi_cap_seg3_dl_03022FF8[];
extern const Gfx waluigi_cap_seg3_dl_030230B0[];
extern const Gfx waluigi_cap_seg3_dl_03023160[];
extern const Gfx waluigi_cap_seg3_dl_03023108[];
extern const Gfx waluigi_cap_seg3_dl_03023298[];
#endif

View file

@ -6,3 +6,4 @@
#include "luigi_cap/geo.inc.c" // custom luigi_cap
#include "toad_cap/geo.inc.c" // custom toad_cap
#include "waluigi_cap/geo.inc.c" // custom waluigi_cap

Binary file not shown.

After

Width:  |  Height:  |  Size: 411 B

1068
actors/waluigi/geo.inc.c Normal file

File diff suppressed because it is too large Load diff

243
actors/waluigi/geo_header.h Normal file
View file

@ -0,0 +1,243 @@
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout waluigi_armature_002_switch_option_002[];
extern const GeoLayout waluigi_right_hand_open_armature[];
extern const GeoLayout waluigi_left_hand_open_armature[];
extern const GeoLayout waluigi_left_hand_peace_armature[];
extern const GeoLayout waluigi_left_hand_cap_armature[];
extern const GeoLayout waluigi_left_hand_wing_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt1[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt2[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt3[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt4[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt5[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt6[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt1_switch_face_opt7[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_armature_002_switch_option_002[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_right_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_left_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_left_hand_peace_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_left_hand_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_jump_waluigi_left_hand_wing_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt4[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt5[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt6[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1_000_switch_opt0_000_switch_001_opt7[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt1[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_armature_002_switch_option_002[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_right_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_left_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_left_hand_peace_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_left_hand_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2_jump_waluigi_left_hand_wing_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt2[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_armature_002_switch_option_002[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_right_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_left_hand_open_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_left_hand_peace_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_left_hand_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3_jump_waluigi_left_hand_wing_cap_armature[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt3[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt1[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt2[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt3[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt4[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt5[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt6[];
extern const GeoLayout waluigi_002_switch_opt0_001_switch_opt0_000_switch_opt0_000_switch_001_opt7[];
extern const GeoLayout waluigi_geo[];
extern Lights1 waluigi_body_v3_lights;
extern Lights1 waluigi_cap_v3_lights;
extern Lights1 waluigi_face_0___eye_open_v3_lights;
extern Lights1 waluigi_hair_v3_lights;
extern Lights1 waluigi_sideburns_v3_lights;
extern Lights1 waluigi_mustache_v3_lights;
extern Lights1 waluigi_nose_v3_lights;
extern Lights1 waluigi_mouth_v3_lights;
extern Lights1 waluigi_mustache_wah_lights;
extern Lights1 waluigi_face_1___eye_half_v3_lights;
extern Lights1 waluigi_face_2___eye_closed_v3_lights;
extern Lights1 waluigi_face_7___eye_X_v3_lights;
extern Lights1 waluigi_gloves_v3_lights;
extern Lights1 waluigi_shoes_v3_lights;
extern u8 waluigi_mario_button_rgba16[];
extern u8 waluigi_metal_rgba16[];
extern u8 waluigi_custom_waluigi_cap_rgba16[];
extern u8 waluigi_waluigi_eyes0_rgba16[];
extern u8 waluigi_mario_sideburn_rgba16[];
extern u8 waluigi_waluigi_mouth_rgba16[];
extern u8 waluigi_waluigi_eyes1_rgba16[];
extern u8 waluigi_waluigi_eyes2_rgba16[];
extern u8 waluigi_waluigi_eyes3_rgba16[];
extern u8 waluigi_wing_2_rgba16[];
extern u8 waluigi_wing1_rgba16[];
extern u8 waluigi_waluigi_glove_rgba16[];
extern Vtx waluigi_000_offset_mesh_layer_1_vtx_0[76];
extern Gfx waluigi_000_offset_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_001_mesh_layer_1_vtx_0[118];
extern Gfx waluigi_000_offset_001_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_001_mesh_layer_1_vtx_1[23];
extern Gfx waluigi_000_offset_001_mesh_layer_1_tri_1[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_0[57];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_1[45];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_1[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_2[46];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_2[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_3[17];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_3[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_4[31];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_4[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_5[15];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_5[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_6[11];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_6[];
extern Vtx waluigi_000_displaylist_mesh_layer_1_vtx_7[34];
extern Gfx waluigi_000_displaylist_mesh_layer_1_tri_7[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_0[45];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_0[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_1[31];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_1[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_2[15];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_2[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_3[11];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_3[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_4[19];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_4[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_5[103];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_5[];
extern Vtx waluigi_002_switch_option_head__no_cap__mesh_layer_1_vtx_6[42];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_tri_6[];
extern Vtx waluigi_000_displaylist_001_mesh_layer_4_vtx_0[4];
extern Gfx waluigi_000_displaylist_001_mesh_layer_4_tri_0[];
extern Vtx waluigi_000_displaylist_001_mesh_layer_4_vtx_1[4];
extern Gfx waluigi_000_displaylist_001_mesh_layer_4_tri_1[];
extern Vtx waluigi_000_displaylist_002_mesh_layer_4_vtx_0[4];
extern Gfx waluigi_000_displaylist_002_mesh_layer_4_tri_0[];
extern Vtx waluigi_000_displaylist_002_mesh_layer_4_vtx_1[4];
extern Gfx waluigi_000_displaylist_002_mesh_layer_4_tri_1[];
extern Vtx waluigi_000_offset_003_mesh_layer_1_vtx_0[31];
extern Gfx waluigi_000_offset_003_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_004_mesh_layer_1_vtx_0[16];
extern Gfx waluigi_000_offset_004_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_displaylist_003_mesh_layer_1_vtx_0[56];
extern Gfx waluigi_000_displaylist_003_mesh_layer_1_tri_0[];
extern Vtx waluigi_002_switch_option_right_hand_open_mesh_layer_1_vtx_0[74];
extern Gfx waluigi_002_switch_option_right_hand_open_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_006_mesh_layer_1_vtx_0[28];
extern Gfx waluigi_000_offset_006_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_007_mesh_layer_1_vtx_0[16];
extern Gfx waluigi_000_offset_007_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_displaylist_004_mesh_layer_1_vtx_0[60];
extern Gfx waluigi_000_displaylist_004_mesh_layer_1_tri_0[];
extern Vtx waluigi_002_switch_option_left_hand_open_mesh_layer_1_vtx_0[73];
extern Gfx waluigi_002_switch_option_left_hand_open_mesh_layer_1_tri_0[];
extern Vtx waluigi_004_switch_option_left_hand_peace_mesh_layer_1_vtx_0[85];
extern Gfx waluigi_004_switch_option_left_hand_peace_mesh_layer_1_tri_0[];
extern Vtx waluigi_005_switch_option_left_hand_cap_mesh_layer_1_vtx_0[59];
extern Gfx waluigi_005_switch_option_left_hand_cap_mesh_layer_1_tri_0[];
extern Vtx waluigi_005_switch_option_left_hand_cap_mesh_layer_1_vtx_1[46];
extern Gfx waluigi_005_switch_option_left_hand_cap_mesh_layer_1_tri_1[];
extern Vtx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1_vtx_0[59];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1_tri_0[];
extern Vtx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1_vtx_1[46];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1_tri_1[];
extern Vtx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4_vtx_0[8];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4_tri_0[];
extern Vtx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4_vtx_1[8];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4_tri_1[];
extern Vtx waluigi_000_offset_009_mesh_layer_1_vtx_0[22];
extern Gfx waluigi_000_offset_009_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_010_LEFT_KNEE_mesh_layer_1_vtx_0[12];
extern Gfx waluigi_000_offset_010_LEFT_KNEE_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_011_BOTTOM_LEG_mesh_layer_1_vtx_0[29];
extern Gfx waluigi_000_offset_011_BOTTOM_LEG_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_012_mesh_layer_1_vtx_0[22];
extern Gfx waluigi_000_offset_012_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_offset_013_RIGHT_KNEE_mesh_layer_1_vtx_0[12];
extern Gfx waluigi_000_offset_013_RIGHT_KNEE_mesh_layer_1_tri_0[];
extern Vtx waluigi_000_displaylist_005_mesh_layer_1_vtx_0[28];
extern Gfx waluigi_000_displaylist_005_mesh_layer_1_tri_0[];
extern Gfx mat_waluigi_body_v3[];
extern Gfx mat_waluigi_metal_v3[];
extern Gfx mat_revert_waluigi_metal_v3[];
extern Gfx mat_waluigi_cap_v3[];
extern Gfx mat_waluigi_face_0___eye_open_v3[];
extern Gfx mat_waluigi_hair_v3[];
extern Gfx mat_waluigi_sideburns_v3[];
extern Gfx mat_waluigi_mustache_v3[];
extern Gfx mat_waluigi_nose_v3[];
extern Gfx mat_waluigi_mouth_v3[];
extern Gfx mat_waluigi_mustache_wah[];
extern Gfx mat_waluigi_face_1___eye_half_v3[];
extern Gfx mat_waluigi_face_2___eye_closed_v3[];
extern Gfx mat_waluigi_face_7___eye_X_v3[];
extern Gfx mat_waluigi_wing_2_v3[];
extern Gfx mat_revert_waluigi_wing_2_v3[];
extern Gfx mat_waluigi_wing_1_v3[];
extern Gfx mat_revert_waluigi_wing_1_v3[];
extern Gfx mat_waluigi_gloves_v3[];
extern Gfx mat_waluigi_shoes_v3[];
extern Gfx waluigi_000_offset_mesh_layer_1[];
extern Gfx waluigi_000_offset_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_001_mesh_layer_1[];
extern Gfx waluigi_000_offset_001_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_mesh_layer_1[];
extern Gfx waluigi_000_displaylist_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_mesh_layer_1_mat_override_face_1___eye_half_v3_1[];
extern Gfx waluigi_000_displaylist_mesh_layer_1_mat_override_face_2___eye_closed_v3_2[];
extern Gfx waluigi_000_displaylist_mesh_layer_1_mat_override_face_7___eye_X_v3_3[];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1[];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_mat_override_face_1___eye_half_v3_1[];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_mat_override_face_2___eye_closed_v3_2[];
extern Gfx waluigi_002_switch_option_head__no_cap__mesh_layer_1_mat_override_face_7___eye_X_v3_3[];
extern Gfx waluigi_000_displaylist_001_mesh_layer_4[];
extern Gfx waluigi_000_displaylist_001_mesh_layer_4_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_002_mesh_layer_4[];
extern Gfx waluigi_000_displaylist_002_mesh_layer_4_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_003_mesh_layer_1[];
extern Gfx waluigi_000_offset_003_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_004_mesh_layer_1[];
extern Gfx waluigi_000_offset_004_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_003_mesh_layer_1[];
extern Gfx waluigi_000_displaylist_003_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_002_switch_option_right_hand_open_mesh_layer_1[];
extern Gfx waluigi_002_switch_option_right_hand_open_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_006_mesh_layer_1[];
extern Gfx waluigi_000_offset_006_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_007_mesh_layer_1[];
extern Gfx waluigi_000_offset_007_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_004_mesh_layer_1[];
extern Gfx waluigi_000_displaylist_004_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_002_switch_option_left_hand_open_mesh_layer_1[];
extern Gfx waluigi_002_switch_option_left_hand_open_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_004_switch_option_left_hand_peace_mesh_layer_1[];
extern Gfx waluigi_004_switch_option_left_hand_peace_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_005_switch_option_left_hand_cap_mesh_layer_1[];
extern Gfx waluigi_005_switch_option_left_hand_cap_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1[];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4[];
extern Gfx waluigi_006_switch_option_left_hand_wing_cap_wings_mesh_layer_4_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_009_mesh_layer_1[];
extern Gfx waluigi_000_offset_009_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_010_LEFT_KNEE_mesh_layer_1[];
extern Gfx waluigi_000_offset_010_LEFT_KNEE_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_011_BOTTOM_LEG_mesh_layer_1[];
extern Gfx waluigi_000_offset_011_BOTTOM_LEG_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_012_mesh_layer_1[];
extern Gfx waluigi_000_offset_012_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_offset_013_RIGHT_KNEE_mesh_layer_1[];
extern Gfx waluigi_000_offset_013_RIGHT_KNEE_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_000_displaylist_005_mesh_layer_1[];
extern Gfx waluigi_000_displaylist_005_mesh_layer_1_mat_override_metal_v3_0[];
extern Gfx waluigi_material_revert_render_settings[];

4246
actors/waluigi/model.inc.c Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,85 @@
// 0x16000CA4
const GeoLayout waluigis_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_set_player_colors),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, waluigi_cap_seg3_dl_03022F48),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, waluigi_cap_seg3_dl_03022F48),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000CF0
const GeoLayout waluigis_metal_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_set_player_colors),
GEO_ASM(10, geo_update_layer_transparency),
GEO_SWITCH_CASE(2, geo_switch_anim_state),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, waluigi_cap_seg3_dl_03022FF8),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, waluigi_cap_seg3_dl_03022FF8),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000D3C
const GeoLayout waluigis_wing_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_set_player_colors),
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, waluigi_cap_seg3_dl_03022F48),
GEO_DISPLAY_LIST(LAYER_ALPHA, waluigi_cap_seg3_dl_030230B0),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, waluigi_cap_seg3_dl_03023160),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};
// 0x16000DA8
const GeoLayout waluigis_winged_metal_cap_geo[] = {
GEO_SHADOW(SHADOW_CIRCLE_9_VERTS, 0xB4, 75),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_set_player_colors),
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, waluigi_cap_seg3_dl_03022FF8),
GEO_DISPLAY_LIST(LAYER_ALPHA, waluigi_cap_seg3_dl_03023108),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, waluigi_cap_seg3_dl_03023298),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};

View file

@ -0,0 +1,416 @@
// Mario Cap (Normal Cap, Metal, Winged, etc)
// 0x0301CF08
static const Lights1 waluigi_cap_seg3_lights_0301CF08 = gdSPDefLights1(
0x39, 0x03, 0x00,
0x73, 0x06, 0x00, 0x28, 0x28, 0x28
);
// 0x0301CF20
static const Lights1 waluigi_cap_seg3_lights_0301CF20 = gdSPDefLights1(
0x7f, 0x7f, 0x7f,
0xff, 0xff, 0xff, 0x28, 0x28, 0x28
);
// 0x0301CF38
static const Lights1 waluigi_cap_seg3_lights_0301CF38 = gdSPDefLights1(
0x7f, 0x00, 0x00,
0xff, 0x00, 0x00, 0x28, 0x28, 0x28
);
// 0x0301CF50
ALIGNED8 static const u8 waluigi_cap_seg3_texture_0301CF50[] = {
#include "actors/mario/mario_metal.rgba16.inc.c"
};
// 0x0301DF50
ALIGNED8 static const u8 waluigi_cap_seg3_texture_0301DF50[] = {
#include "actors/waluigi/custom_waluigi_cap.rgba16.inc.c"
};
// 0x0301E750
ALIGNED8 static const u8 waluigi_cap_seg3_texture_0301E750[] = {
#include "actors/mario/mario_wing.rgba16.inc.c"
};
// 0x0301F750
ALIGNED8 static const u8 waluigi_cap_seg3_texture_0301F750[] = {
#include "actors/mario/mario_wing_tip.rgba16.inc.c"
};
// 0x03020750
ALIGNED8 static const u8 waluigi_cap_seg3_texture_03020750[] = {
#include "actors/mario/mario_metal_wing_unused.rgba16.inc.c"
};
// 0x03021750
ALIGNED8 static const u8 waluigi_cap_seg3_texture_03021750[] = {
#include "actors/mario/mario_metal_wing_tip_unused.rgba16.inc.c"
};
// 0x03022750
static const Vtx waluigi_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 waluigi_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 waluigi_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 waluigi_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 waluigi_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 waluigi_cap_seg3_dl_03022B30[] = {
gsSPVertex(waluigi_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 waluigi_cap_seg3_dl_03022B68[] = {
gsSPVertex(waluigi_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(waluigi_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(waluigi_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 waluigi_cap_seg3_dl_03022CC8[] = {
gsSPVertex(waluigi_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 waluigi_cap_seg3_dl_03022D10[] = {
gsSPDisplayList(waluigi_cap_seg3_dl_03022B68),
gsSPCopyLightEXT(1, 5), //gsSPLight(&waluigi_cap_seg3_lights_0301CF08.l, 1),
gsSPCopyLightEXT(2, 6), //gsSPLight(&waluigi_cap_seg3_lights_0301CF08.a, 2),
gsSPDisplayList(waluigi_cap_seg3_dl_03022CC8),
gsSPEndDisplayList(),
};
// 0x03022D38
static const Vtx waluigi_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 waluigi_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 waluigi_cap_seg3_dl_03022E78[] = {
gsSPVertex(waluigi_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 waluigi_cap_seg3_dl_03022EA8[] = {
gsSPVertex(waluigi_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 waluigi_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 waluigi_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 waluigi_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, waluigi_cap_seg3_texture_0301DF50),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPCopyLightEXT(1, 5), //gsSPLight(&waluigi_cap_seg3_lights_0301CF38.l, 1),
gsSPCopyLightEXT(2, 6), //gsSPLight(&waluigi_cap_seg3_lights_0301CF38.a, 2),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B30),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA),
gsSPDisplayList(waluigi_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 waluigi_cap_seg3_dl_03022FF8[] = {
gsDPPipeSync(),
gsSPSetGeometryMode(G_TEXTURE_GEN),
gsDPSetCombineMode(G_CC_MODULATERGBFADE, G_CC_MODULATERGBFADE),
gsDPLoadTextureBlock(waluigi_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(&waluigi_cap_seg3_lights_0301CF20.l, 1),
gsSPLight(&waluigi_cap_seg3_lights_0301CF20.a, 2),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B30),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B68),
gsSPDisplayList(waluigi_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 waluigi_cap_seg3_dl_030230B0[] = {
gsSPDisplayList(waluigi_cap_seg3_dl_03022ED8),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_0301E750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_0301F750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022EA8),
gsSPDisplayList(waluigi_cap_seg3_dl_03022F20),
gsSPEndDisplayList(),
};
// 0x03023108 - 0x03023160
const Gfx waluigi_cap_seg3_dl_03023108[] = {
gsSPDisplayList(waluigi_cap_seg3_dl_03022ED8),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_03020750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_03021750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022EA8),
gsSPDisplayList(waluigi_cap_seg3_dl_03022F20),
gsSPEndDisplayList(),
};
// 0x03023160 - 0x03023298
const Gfx waluigi_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, waluigi_cap_seg3_texture_0301DF50),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPCopyLightEXT(1, 5), //gsSPLight(&waluigi_cap_seg3_lights_0301CF38.l, 1),
gsSPCopyLightEXT(2, 6), //gsSPLight(&waluigi_cap_seg3_lights_0301CF38.a, 2),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B30),
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
gsDPPipeSync(),
gsDPSetCombineMode(G_CC_SHADEFADEA, G_CC_SHADEFADEA),
gsSPDisplayList(waluigi_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, waluigi_cap_seg3_texture_0301E750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_0301F750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_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 waluigi_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, waluigi_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),
gsSPCopyLightEXT(1, 5), //gsSPLight(&waluigi_cap_seg3_lights_0301CF20.l, 1),
gsSPCopyLightEXT(2, 6), //gsSPLight(&waluigi_cap_seg3_lights_0301CF20.a, 2),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B30),
gsSPDisplayList(waluigi_cap_seg3_dl_03022B68),
gsSPDisplayList(waluigi_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, waluigi_cap_seg3_texture_03020750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_cap_seg3_dl_03022E78),
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, waluigi_cap_seg3_texture_03021750),
gsDPLoadSync(),
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
gsSPDisplayList(waluigi_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

@ -9,3 +9,6 @@
// toad model
#include "toad_player/model.inc.c"
// waluigi model
#include "waluigi/model.inc.c"

View file

@ -9,4 +9,7 @@
// toad_player
#include "actors/toad_player/geo_header.h"
// waluigi
#include "actors/waluigi/geo_header.h"
#endif

View file

@ -7,3 +7,5 @@
#include "luigi/geo.inc.c"
#include "toad_player/geo.inc.c"
#include "waluigi/geo.inc.c"

View file

@ -221,6 +221,10 @@ ALIGNED8 static const u8 texture_hud_char_toad_head[] = {
#include "textures/segment2/custom_toad_head.rgba16.inc.c"
};
ALIGNED8 static const u8 texture_hud_char_waluigi_head[] = {
#include "textures/segment2/custom_waluigi_head.rgba16.inc.c"
};
ALIGNED8 static const u8 texture_hud_char_star[] = {
#include "textures/segment2/segment2.05C00.rgba16.inc.c"
};
@ -1840,7 +1844,7 @@ const u8 *const main_hud_lut[] = {
texture_hud_char_K, texture_hud_char_L, texture_hud_char_M, texture_hud_char_N,
texture_hud_char_O, texture_hud_char_P, 0x0, texture_hud_char_R,
texture_hud_char_S, texture_hud_char_T, texture_hud_char_U, 0x0,
texture_hud_char_W, 0x0, texture_hud_char_Y, 0x0,
texture_hud_char_W, 0x0, texture_hud_char_Y, texture_hud_char_waluigi_head,
0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0,
@ -2085,7 +2089,8 @@ const u8 *const main_credits_font_lut[] = {
// HUD camera table 0x020087CC-0x020087E3
const u8 *const main_hud_camera_lut[] = {
texture_hud_char_camera, texture_hud_char_mario_head, texture_hud_char_lakitu, texture_hud_char_no_camera,
texture_hud_char_arrow_up, texture_hud_char_arrow_down, texture_hud_char_luigi_head, texture_hud_char_toad_head
texture_hud_char_arrow_up, texture_hud_char_arrow_down, texture_hud_char_luigi_head, texture_hud_char_toad_head,
texture_hud_char_waluigi_head,
};
// If you change the language here, the following Makefile rule also needs to

View file

@ -19,8 +19,8 @@ fi
# no debug, direct
$FILE --server 27015 --configfile sm64config_server.txt &
sleep 7
$FILE --client 127.0.0.1 27015 --configfile sm64config_client.txt &
#sleep 7
#$FILE --client 127.0.0.1 27015 --configfile sm64config_client.txt &
exit
# debug on server

View file

@ -600,4 +600,10 @@
#define MODEL_TOADS_METAL_CAP 0xEA // toads_metal_cap_geo
#define MODEL_TOADS_WING_CAP 0xEB // toads_wing_cap_geo
#define MODEL_WALUIGI 0xEC // waluigi_geo
#define MODEL_WALUIGIS_CAP 0xED // waluigis_cap_geo
#define MODEL_WALUIGIS_METAL_CAP 0xEE // waluigis_metal_cap_geo
#define MODEL_WALUIGIS_WING_CAP 0xEF // waluigis_wing_cap_geo
#define MODEL_WALUIGIS_WINGED_METAL_CAP 0xF0 // waluigis_winged_metal_cap_geo
#endif // MODEL_IDS_H

View file

@ -392,6 +392,8 @@ struct MarioState
/*????*/ Vec3f nonInstantWarpPos;
/*????*/ struct Character* character;
/*????*/ u8 wasNetworkVisible;
/*????*/ f32 minimumBoneY;
/*????*/ f32 curAnimOffset;
};
#define PLAY_MODE_NORMAL 0

View file

@ -119,16 +119,22 @@ const LevelScript level_main_scripts_entry[] = {
LOAD_MODEL_FROM_GEO(MODEL_BUBBLE_PLAYER, water_bomb_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGI, luigi_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_CAP, luigis_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_METAL_CAP, luigis_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WING_CAP, luigis_wing_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WINGED_METAL_CAP, luigis_winged_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGI, luigi_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_CAP, luigis_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_METAL_CAP, luigis_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WING_CAP, luigis_wing_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_LUIGIS_WINGED_METAL_CAP, luigis_winged_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOAD_PLAYER, toad_player_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_CAP, toads_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_METAL_CAP, toads_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_WING_CAP, toads_wing_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOAD_PLAYER, toad_player_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_CAP, toads_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_METAL_CAP, toads_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_TOADS_WING_CAP, toads_wing_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_WALUIGI, waluigi_geo),
LOAD_MODEL_FROM_GEO(MODEL_WALUIGIS_CAP, waluigis_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_WALUIGIS_METAL_CAP, waluigis_metal_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_WALUIGIS_WING_CAP, waluigis_wing_cap_geo),
LOAD_MODEL_FROM_GEO(MODEL_WALUIGIS_WINGED_METAL_CAP, waluigis_winged_metal_cap_geo),
// CUSTOM MODELS END

View file

@ -14,6 +14,7 @@
#define GRAPH_RENDER_INVISIBLE (1 << 4)
#define GRAPH_RENDER_HAS_ANIMATION (1 << 5)
#define GRAPH_RENDER_CYLBOARD (1 << 6)
#define GRAPH_RENDER_PLAYER (1 << 7)
// Whether the node type has a function pointer of type GraphNodeFunc
#define GRAPH_NODE_TYPE_FUNCTIONAL 0x100

View file

@ -8,11 +8,13 @@
#include "luigi_audio_defines.h"
#include "pc/configfile.h"
#include "audio/external.h"
#include "engine/graph_node.h"
extern Gfx mario_cap_seg3_dl_03022F48[];
extern Gfx luigi_cap_seg3_dl_03022F48[];
extern Gfx toad_player_dl_cap[];
extern Gfx toad_player_dl_cap_decal[];
extern Gfx waluigi_cap_seg3_dl_03022F48[];
struct Character gCharacters[CT_MAX] = {
[CT_MARIO] = {
@ -27,8 +29,10 @@ struct Character gCharacters[CT_MAX] = {
.capEnemyLayer = LAYER_OPAQUE,
.capEnemyGfx = mario_cap_seg3_dl_03022F48,
.capEnemyDecalGfx = NULL,
.soundFreqScale = 1.0f,
// anim
.animOffsetEnabled = false,
// sounds
.soundFreqScale = 1.0f,
.soundYahWahHoo = SOUND_MARIO_YAH_WAH_HOO,
.soundHoohoo = SOUND_MARIO_HOOHOO,
.soundYahoo = SOUND_MARIO_YAHOO,
@ -85,8 +89,10 @@ struct Character gCharacters[CT_MAX] = {
.capEnemyLayer = LAYER_OPAQUE,
.capEnemyGfx = luigi_cap_seg3_dl_03022F48,
.capEnemyDecalGfx = NULL,
.soundFreqScale = 1.0f,
// anim
.animOffsetEnabled = false,
// sounds
.soundFreqScale = 1.0f,
.soundYahWahHoo = SOUND_LUIGI_YAH_WAH_HOO,
.soundHoohoo = SOUND_LUIGI_HOOHOO,
.soundYahoo = SOUND_LUIGI_YAHOO,
@ -139,12 +145,14 @@ struct Character gCharacters[CT_MAX] = {
.capModelId = MODEL_TOADS_CAP,
.capMetalModelId = MODEL_TOADS_METAL_CAP,
.capWingModelId = MODEL_TOADS_WING_CAP,
.capMetalWingModelId = MODEL_TOADS_CAP,
.capMetalWingModelId = MODEL_TOADS_WING_CAP,
.capEnemyLayer = LAYER_TRANSPARENT,
.capEnemyGfx = toad_player_dl_cap,
.capEnemyDecalGfx = toad_player_dl_cap_decal,
.soundFreqScale = 1.25f,
// anim
.animOffsetEnabled = false,
// sounds
.soundFreqScale = 1.25f,
.soundYahWahHoo = SOUND_MARIO_YAH_WAH_HOO,
.soundHoohoo = SOUND_MARIO_HOOHOO,
.soundYahoo = SOUND_MARIO_YAHOO,
@ -188,6 +196,122 @@ struct Character gCharacters[CT_MAX] = {
.soundSoLongaBowser = SOUND_MARIO_SO_LONGA_BOWSER,
.soundImaTired = SOUND_MARIO_IMA_TIRED,
},
[CT_WALUIGI] = {
.name = "Waluigi",
.hudHead = 'z',
.cameraHudHead = GLYPH_CAM_WALUIGI_HEAD,
.modelId = MODEL_WALUIGI,
.capModelId = MODEL_WALUIGIS_CAP,
.capMetalModelId = MODEL_WALUIGIS_METAL_CAP,
.capWingModelId = MODEL_WALUIGIS_WING_CAP,
.capMetalWingModelId = MODEL_WALUIGIS_WINGED_METAL_CAP,
.capEnemyLayer = LAYER_OPAQUE,
.capEnemyGfx = waluigi_cap_seg3_dl_03022F48,
.capEnemyDecalGfx = NULL,
// anim
.animOffsetEnabled = true,
.animOffsetLowYPoint = 11,
.animOffsetFeet = 25,
.animOffsetHand = -10,
// sounds
.soundFreqScale = 0.99f,
.soundYahWahHoo = SOUND_LUIGI_YAH_WAH_HOO,
.soundHoohoo = SOUND_LUIGI_HOOHOO,
.soundYahoo = SOUND_LUIGI_YAHOO,
.soundUh = SOUND_LUIGI_UH,
.soundHrmm = SOUND_LUIGI_HRMM,
.soundWah2 = SOUND_LUIGI_WAH2,
.soundWhoa = SOUND_LUIGI_WHOA,
.soundEeuh = SOUND_LUIGI_EEUH,
.soundAttacked = SOUND_LUIGI_ATTACKED,
.soundOoof = SOUND_LUIGI_OOOF,
.soundOoof2 = SOUND_LUIGI_OOOF2,
.soundHereWeGo = SOUND_LUIGI_HERE_WE_GO,
.soundYawning = SOUND_LUIGI_YAWNING,
.soundSnoring1 = SOUND_LUIGI_SNORING1,
.soundSnoring2 = SOUND_LUIGI_SNORING2,
.soundWaaaooow = SOUND_LUIGI_WAAAOOOW,
.soundHaha = SOUND_LUIGI_HAHA,
.soundHaha_2 = SOUND_LUIGI_HAHA_2,
.soundUh2 = SOUND_LUIGI_UH2,
.soundUh2_2 = SOUND_LUIGI_UH2_2,
.soundOnFire = SOUND_LUIGI_ON_FIRE,
.soundDying = SOUND_LUIGI_DYING,
.soundPantingCold = SOUND_LUIGI_PANTING_COLD,
.soundPanting = SOUND_LUIGI_PANTING,
.soundCoughing1 = SOUND_LUIGI_COUGHING1,
.soundCoughing2 = SOUND_LUIGI_COUGHING2,
.soundCoughing3 = SOUND_LUIGI_COUGHING3,
.soundPunchYah = SOUND_LUIGI_PUNCH_YAH,
.soundPunchHoo = SOUND_LUIGI_PUNCH_HOO,
.soundMamaMia = SOUND_LUIGI_MAMA_MIA,
.soundGroundPoundWah = SOUND_LUIGI_GROUND_POUND_WAH,
.soundDrowning = SOUND_LUIGI_DROWNING,
.soundPunchWah = SOUND_LUIGI_PUNCH_WAH,
.soundYahooWahaYippee = SOUND_LUIGI_YAHOO_WAHA_YIPPEE,
.soundDoh = SOUND_LUIGI_DOH,
.soundGameOver = SOUND_LUIGI_GAME_OVER,
.soundHello = SOUND_LUIGI_HELLO,
.soundPressStartToPlay = SOUND_LUIGI_PRESS_START_TO_PLAY,
.soundTwirlBounce = SOUND_LUIGI_TWIRL_BOUNCE,
.soundSnoring3 = SOUND_LUIGI_SNORING3,
.soundSoLongaBowser = SOUND_LUIGI_SO_LONGA_BOWSER,
.soundImaTired = SOUND_LUIGI_IMA_TIRED,
},
};
enum AnimType {
ANIM_TYPE_NONE,
ANIM_TYPE_LOWY,
ANIM_TYPE_FEET,
ANIM_TYPE_HAND,
};
#define ANIM_TYPE_MAX 209
u8 sAnimTypes[ANIM_TYPE_MAX] = {
ANIM_TYPE_HAND, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_FEET,
ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_FEET, ANIM_TYPE_FEET, ANIM_TYPE_FEET,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_FEET, ANIM_TYPE_FEET, ANIM_TYPE_FEET, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_HAND, ANIM_TYPE_LOWY,
ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_HAND, ANIM_TYPE_FEET, ANIM_TYPE_HAND, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_FEET, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_FEET, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_FEET,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_FEET, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_HAND, ANIM_TYPE_HAND, ANIM_TYPE_LOWY,
ANIM_TYPE_FEET, ANIM_TYPE_FEET, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_FEET,
ANIM_TYPE_FEET, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_FEET, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_FEET, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_HAND, ANIM_TYPE_HAND,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_FEET, ANIM_TYPE_LOWY, ANIM_TYPE_LOWY,
ANIM_TYPE_LOWY, ANIM_TYPE_LOWY, ANIM_TYPE_NONE, ANIM_TYPE_NONE,
};
struct Character* get_character(struct MarioState* m) {
@ -265,4 +389,51 @@ void play_character_sound_if_no_flag(struct MarioState* m, enum CharacterSound c
play_character_sound(m, characterSound);
m->flags |= flags;
}
}
f32 get_character_anim_offset(struct MarioState* m) {
if (m == NULL || m->marioObj == NULL) { return 0; }
struct Object* marioObj = m->marioObj;
struct Character* c = get_character(m);
if (!c->animOffsetEnabled) { return 0; }
s32 animID = marioObj->header.gfx.unk38.animID;
if (animID < 0 || animID >= ANIM_TYPE_MAX) { return 0; }
switch (sAnimTypes[animID]) {
case ANIM_TYPE_LOWY:
if (m->minimumBoneY < c->animOffsetLowYPoint) {
return -(m->minimumBoneY - c->animOffsetLowYPoint);
}
break;
case ANIM_TYPE_FEET:
return c->animOffsetFeet;
break;
case ANIM_TYPE_HAND:
return c->animOffsetHand;
break;
}
return 0;
}
void update_character_anim_offset(struct MarioState* m) {
if (m == NULL || m->marioObj == NULL) { return; }
struct Object* marioObj = m->marioObj;
struct Character* c = get_character(m);
if (!c->animOffsetEnabled) { return; }
f32 targetOffset = get_character_anim_offset(m);
// smooth
f32 alpha = (fabs(targetOffset - m->curAnimOffset) / 80.0f) + 0.5f;
alpha = (alpha + 0.5f) / 2.0f;
alpha *= alpha;
m->curAnimOffset = (m->curAnimOffset * alpha) + (targetOffset * (1.0f - alpha));
if (m->curAnimOffset > 40) { m->curAnimOffset = 40; }
if (m->curAnimOffset < -40) { m->curAnimOffset = -40; }
//s32 animID = marioObj->header.gfx.unk38.animID;
//LOG_INFO(">>> [%d] : %d :: %f, %f", animID, sAnimTypes[animID], m->curAnimOffset, m->minimumBoneY);
marioObj->header.gfx.pos[1] = m->pos[1] + m->curAnimOffset;
marioObj->header.gfx.node.flags |= GRAPH_RENDER_PLAYER;
}

View file

@ -7,6 +7,7 @@ enum CharacterType {
CT_MARIO,
CT_LUIGI,
CT_TOAD,
CT_WALUIGI,
// must be last
CT_MAX
@ -24,8 +25,13 @@ struct Character {
u8 capEnemyLayer;
Gfx* capEnemyGfx;
Gfx* capEnemyDecalGfx;
f32 soundFreqScale;
// anim
u8 animOffsetEnabled;
f32 animOffsetLowYPoint;
f32 animOffsetFeet;
f32 animOffsetHand;
// sounds
f32 soundFreqScale;
s32 soundYahWahHoo;
s32 soundHoohoo;
s32 soundYahoo;
@ -119,8 +125,12 @@ enum CharacterSound {
struct MarioState;
extern struct Character gCharacters[];
struct Character* get_character(struct MarioState* m);
void play_character_sound(struct MarioState* m, enum CharacterSound characterSound);
void play_character_sound_offset(struct MarioState* m, enum CharacterSound characterSound, u32 offset);
void play_character_sound_if_no_flag(struct MarioState* m, enum CharacterSound characterSound, u32 flags);
f32 get_character_anim_offset(struct MarioState* m);
void update_character_anim_offset(struct MarioState* m);
#endif // CHARACTERS_H

View file

@ -21,6 +21,7 @@ enum CameraHUDLut {
GLYPH_CAM_ARROW_DOWN,
GLYPH_CAM_LUIGI_HEAD,
GLYPH_CAM_TOAD_HEAD,
GLYPH_CAM_WALUIGI_HEAD,
};
// Functions

View file

@ -89,7 +89,7 @@ void play_step_sound(struct MarioState *m, s16 frame1, s16 frame2) {
}
void align_with_floor(struct MarioState *m) {
m->pos[1] = m->floorHeight;
m->pos[1] = m->floorHeight + get_character_anim_offset(m);
mtxf_align_terrain_triangle(sFloorAlignMatrix[m->playerIndex], m->pos, m->faceAngle[1], 40.0f);
m->marioObj->header.gfx.throwMatrix = &sFloorAlignMatrix[m->playerIndex];
}

View file

@ -299,6 +299,8 @@ void bhv_mario_update(void) {
i++;
}
update_character_anim_offset(gMarioState);
// reset mario state to the local player
gMarioState = &gMarioStates[0];
}

View file

@ -10,6 +10,7 @@
#include "rendering_graph_node.h"
#include "shadow.h"
#include "sm64.h"
#include "game/level_update.h"
/**
* This file contains the code that processes the scene graph for rendering.
@ -147,6 +148,7 @@ static Gfx *sViewportPos;
static Vp sPrevViewport;
struct Object* gCurGraphNodeProcessingObject;
struct MarioState* gCurGraphNodeMarioState;
void mtx_patch_interpolated(void) {
s32 i;
@ -797,6 +799,12 @@ static void geo_process_animated_part(struct GraphNodeAnimatedPart *node) {
gMatStackFixed[gMatStackIndex] = matrixPtr;
mtxf_to_mtx(mtxInterpolated, gMatStackInterpolated[gMatStackIndex]);
gMatStackInterpolatedFixed[gMatStackIndex] = mtxInterpolated;
if (gCurGraphNodeMarioState != NULL) {
Vec3f translated = { 0 };
get_pos_from_transform_mtx(translated, gMatStack[gMatStackIndex], *gCurGraphNodeCamera->matrixPtr);
gCurGraphNodeMarioState->minimumBoneY = fmin(gCurGraphNodeMarioState->minimumBoneY, translated[1] - gCurGraphNodeMarioState->marioObj->header.gfx.pos[1]);
}
if (node->displayList != NULL) {
geo_append_display_list(node->displayList, node->node.flags >> 8);
}
@ -1069,10 +1077,23 @@ static void interpolate_matrix(Mat4 result, Mat4 a, Mat4 b) {
*/
static void geo_process_object(struct Object *node) {
struct Object* lastProcessingObject = gCurGraphNodeProcessingObject;
struct MarioState* lastMarioState = gCurGraphNodeMarioState;
gCurGraphNodeProcessingObject = node;
Mat4 mtxf;
s32 hasAnimation = (node->header.gfx.node.flags & GRAPH_RENDER_HAS_ANIMATION) != 0;
Vec3f scaleInterpolated;
if (node->header.gfx.node.flags & GRAPH_RENDER_PLAYER) {
gCurGraphNodeMarioState = NULL;
for (int i = 0; i < MAX_PLAYERS; i++) {
if (gMarioStates[i].marioObj == node) {
gCurGraphNodeMarioState = &gMarioStates[i];
break;
}
}
if (gCurGraphNodeMarioState != NULL) {
gCurGraphNodeMarioState->minimumBoneY = 999;
}
}
if (node->header.gfx.unk18 == gCurGraphNodeRoot->areaIndex) {
if (node->header.gfx.throwMatrix != NULL) {
mtxf_mul(gMatStack[gMatStackIndex + 1], *node->header.gfx.throwMatrix,
@ -1194,6 +1215,7 @@ static void geo_process_object(struct Object *node) {
node->header.gfx.throwMatrixInterpolated = NULL;
}
gCurGraphNodeProcessingObject = lastProcessingObject;
gCurGraphNodeMarioState = lastMarioState;
}
/**

View file

@ -213,6 +213,8 @@ void main_func(void) {
fs_init(sys_ropaths, gamedir, userpath);
configfile_load(configfile_name());
if (configPlayerModel >= CT_MAX) { configPlayerModel = 0; }
if (configPlayerPalette >= 16) { configPlayerPalette = 0; }
if (gCLIOpts.FullScreen == 1)
configWindow.fullscreen = true;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB