sm64coopdx/actors/luigi/geo.inc.c

703 lines
31 KiB
C
Raw Normal View History

2022-04-15 05:02:33 +00:00
// Normal Mario Geo
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_geo_face_and_wings[] = {
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mirror_mario_backface_culling),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_hair_sideburn_decal_cap_on_dl),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_l_logo_decal_dl),
GEO_ASM(3, geo_mirror_mario_backface_culling),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_front),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_half_closed),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_closed),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_right), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_left), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_up), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_down), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_on_eyes_dead),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mirror_mario_backface_culling),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_hair_sideburn_decal_cap_off_dl),
GEO_ASM(3, geo_mirror_mario_backface_culling),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_front),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_half_closed),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_closed),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_right), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_left), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_up), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_down), // unused
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_cap_off_eyes_dead),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, -110, 22, -40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_cap_wings), // left
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, 110, -22, 40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_cap_wings), // right
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_geo_left_hand[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_left_hand_closed),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_open),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_geo_right_hand[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_right_hand_closed),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_right_hand_open),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_right_hand_peace), // here we go hand
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, luigi_right_hand_cap),
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mirror_mario_backface_culling),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_cap_decal_dl),
GEO_ASM(3, geo_mirror_mario_backface_culling),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, luigi_right_hand_cap),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mirror_mario_backface_culling),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_cap_decal_dl),
GEO_ASM(3, geo_mirror_mario_backface_culling),
2022-04-15 05:02:33 +00:00
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_right_hand_cap_wings),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// The body loads all the parts with some shared dls to apply the solid color of the dl that has it, the same rule applies to the medium and low poly geos
const GeoLayout luigi_geo_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 22, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_butt), // starts sharing solid color with mario_torso (blue)
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 0, 0, luigi_torso),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_face_and_wings), // stops sharing because faces has its own dl
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -10, 69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_left_arm), // starts sharing solid color with mario_left_forearm (red)
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 70, 0, 0, luigi_left_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_left_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -10, -69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_right_arm), // starts sharing solid color of his dl with mario_right_forearm (red)
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 70, 0, 0, luigi_right_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_right_hand), // stops sharing because hand has its solid color (white)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_left_thigh), // starts sharing solid color of his dl with mario_left_leg (blue)
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 98, 0, 0, luigi_left_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, luigi_left_foot), // stops sharing because foot has its solid color (brown)
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_right_thigh), // starts sharing solid color of his dl with mario_left_leg (blue)
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 98, 0, 0, luigi_right_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_right_foot), // stops sharing because foot has its solid color (brown)
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// Vanish Mario Geo
const GeoLayout luigi_vanish_geo_face_and_wings[] = {
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_NODE_START(),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_hair_sideburn_decal_cap_on_dl),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_l_logo_decal_dl),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_front),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_half_closed),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_closed),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_right), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_left), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_up), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_down), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_on_eyes_dead),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_NODE_START(),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_hair_sideburn_decal_cap_off_dl),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_eyes),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_front),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_half_closed),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_closed),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_right), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_left), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_up), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_down), // unused
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_off_eyes_dead),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, -110, 22, -40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_wings_transparent),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, 110, -22, 40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_cap_wings_transparent),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_vanish_geo_left_hand[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_left_hand_closed),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_open),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_vanish_geo_right_hand[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_closed),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_right_hand_open),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_right_hand_peace), // here we go hand
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, luigi_right_hand_cap),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_cap_decal_dl),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, luigi_right_hand_cap),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_cap_decal_dl),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_hand_cap_wings_transparent),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// Same rule body as Normal Mario
const GeoLayout luigi_vanish_geo_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 22, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_butt),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 80, 0, 0, luigi_torso),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 91, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -10, 69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_left_arm),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 70, 0, 0, luigi_left_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -10, -69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_right_arm),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 70, 0, 0, luigi_right_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_vanish_geo_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_left_thigh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 98, 0, 0, luigi_left_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, luigi_left_foot),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_right_thigh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 98, 0, 0, luigi_right_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_right_foot),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// Metal Mario Geo
const GeoLayout luigi_metal_geo_face_and_wings[] = {
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_metal_cap_on_shared_dl),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_metal_cap_off_shared_dl),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, -110, 22, -40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_metal_cap_wings), // left
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, 110, -22, 40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_metal_cap_wings), // right
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_metal_geo_left_hand[] = {
GEO_SWITCH_CASE(1, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_left_hand_closed_shared_dl),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_open_shared_dl),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed_shared_dl),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed_shared_dl),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_left_hand_closed_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_metal_geo_right_hand[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_metal_right_hand_closed),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_metal_right_hand_open),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_right_hand_peace_shared_dl), // here we go hand
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_metal_right_hand_cap_shared_dl),
GEO_ANIMATED_PART(LAYER_OPAQUE, 65, 0, 0, luigi_metal_right_hand_cap_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_metal_right_hand_cap_shared_dl_wings),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// A difference from Normal Mario is that the dls after the butt and left thigh shares the metal texture of it, same rule applies to the medium and low poly geos
const GeoLayout luigi_metal_geo_body[] = {
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 22, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_metal_butt), // starts sharing metal texture with the dls below
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 80, 0, 0, luigi_metal_torso_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 91, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_face_and_wings), // unlike normal mario geo, these dls still share the metal texture
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, -10, 69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_left_arm_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 70, 0, 0, luigi_left_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 61, -10, -69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_right_arm_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 70, 0, 0, luigi_right_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_geo_right_hand), // stop sharing because the wing metal cap of it
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, 39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_metal_left_thigh), // starts sharing metal texture with the dls below
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 98, 0, 0, luigi_left_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, luigi_left_foot_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 13, -8, -39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 0, 0, 0, luigi_right_thigh_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 98, 0, 0, luigi_right_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_OPAQUE, 78, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_OPAQUE, luigi_metal_right_foot),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// Metal Vanish Mario Geo
const GeoLayout luigi_metal_vanish_geo_face_and_wings[] = {
GEO_ASM(0, geo_mario_head_rotation),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_SWITCH_CASE(0, geo_switch_mario_cap_on_off),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_cap_on_shared_dl),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_cap_off_shared_dl),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, -110, 22, -40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_cap_wings_transparent),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_TRANSLATE_ROTATE(0, 140, -45, 110, -22, 40, -135),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_rotate_wing_cap_wings),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_cap_wings_transparent),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_metal_vanish_geo_left_hand[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(1, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_left_hand_closed_shared_dl),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_open_shared_dl),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed_shared_dl),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed_shared_dl),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_left_hand_closed_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
const GeoLayout luigi_metal_vanish_geo_right_hand[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_hand),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_right_hand_closed),
GEO_CLOSE_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_metal_right_hand_open),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_right_hand_peace_shared_dl), // here we go hand
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_metal_right_hand_cap_shared_dl),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 65, 0, 0, luigi_metal_right_hand_cap_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_ALPHA, luigi_metal_right_hand_cap_shared_dl_wings_transparent),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// Same rules as Metal Mario
const GeoLayout luigi_metal_vanish_geo_body[] = {
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 22, 0, NULL),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_metal_butt),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_move_mario_part_from_parent),
GEO_ASM(0, geo_mario_tilt_torso),
GEO_ROTATION_NODE(0x00, 0, 0, 0),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 80, 0, 0, luigi_metal_torso_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 91, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_face_and_wings),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, -10, 69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_left_arm_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 70, 0, 0, luigi_left_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_left_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 61, -10, -69, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_right_arm_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 70, 0, 0, luigi_right_forearm_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_metal_vanish_geo_right_hand),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, 39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_metal_left_thigh),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 98, 0, 0, luigi_left_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, luigi_left_foot_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 13, -8, -39, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 0, 0, 0, luigi_right_thigh_shared_dl),
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 98, 0, 0, luigi_right_leg_shared_dl),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 78, 0, 0, NULL),
2022-04-15 05:02:33 +00:00
GEO_OPEN_NODE(),
GEO_ASM(2, geo_mario_hand_foot_scaler),
GEO_SCALE(0x00, 65536),
GEO_OPEN_NODE(),
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, luigi_metal_right_foot),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// High Poly
const GeoLayout luigi_geo_load_body[] = {
GEO_SWITCH_CASE(0, geo_switch_mario_cap_effect),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_body),
GEO_BRANCH(1, luigi_vanish_geo_body),
GEO_BRANCH(1, luigi_metal_geo_body),
GEO_BRANCH(1, luigi_metal_vanish_geo_body),
GEO_CLOSE_NODE(),
GEO_RETURN(),
};
2022-04-15 05:02:33 +00:00
// This last geo is used to load all of Mario Geo in the Level Scripts
const GeoLayout luigi_geo[] = {
2022-04-15 05:02:33 +00:00
GEO_SHADOW(SHADOW_CIRCLE_PLAYER, 0xB4, 100),
GEO_OPEN_NODE(),
GEO_SCALE(0x00, 16384),
GEO_OPEN_NODE(),
GEO_ASM(0, geo_mario_set_player_colors),
GEO_ASM(LAYER_TRANSPARENT + 3, geo_mario_set_player_colors),
2022-04-15 05:02:33 +00:00
GEO_ASM(0, geo_mirror_mario_backface_culling),
GEO_ASM(0, geo_mirror_mario_set_alpha),
GEO_OPEN_NODE(),
GEO_BRANCH(1, luigi_geo_load_body),
GEO_CLOSE_NODE(),
GEO_ASM(1, geo_mirror_mario_backface_culling),
GEO_CLOSE_NODE(),
GEO_CLOSE_NODE(),
GEO_END(),
};