mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-12-22 16:30:23 +00:00
Separated held objects, made Bobombs Luigi-aware
This commit is contained in:
parent
e99ca8cfce
commit
c437e075ff
3 changed files with 42 additions and 33 deletions
|
@ -81,11 +81,11 @@ const GeoLayout luigi_geo_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -200,11 +200,11 @@ const GeoLayout luigi_geo_medium_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_medium_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -367,11 +367,11 @@ const GeoLayout luigi_geo_low_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_low_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -536,11 +536,11 @@ const GeoLayout luigi_vanish_geo_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -655,11 +655,11 @@ const GeoLayout luigi_vanish_geo_medium_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_medium_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -822,11 +822,11 @@ const GeoLayout luigi_vanish_geo_low_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_low_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_cap),
|
||||
|
@ -971,11 +971,11 @@ const GeoLayout luigi_metal_geo_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
@ -1090,11 +1090,11 @@ const GeoLayout luigi_metal_geo_medium_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_medium_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
@ -1237,11 +1237,11 @@ const GeoLayout luigi_metal_geo_low_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_OPAQUE, mario_metal_low_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_OPAQUE, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
@ -1386,11 +1386,11 @@ const GeoLayout luigi_metal_vanish_geo_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
@ -1505,11 +1505,11 @@ const GeoLayout luigi_metal_vanish_geo_medium_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_medium_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
@ -1655,11 +1655,11 @@ const GeoLayout luigi_metal_vanish_geo_low_poly_right_hand[] = {
|
|||
GEO_OPEN_NODE(),
|
||||
GEO_DISPLAY_LIST(LAYER_TRANSPARENT, mario_metal_low_poly_right_hand_closed),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_open),
|
||||
GEO_OPEN_NODE(),
|
||||
GEO_HELD_OBJECT(0x00, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_HELD_OBJECT(0x01, 0, 0, 0, geo_switch_mario_hand_grab_pos),
|
||||
GEO_CLOSE_NODE(),
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_right_hand_peace_shared_dl), // here we go hand
|
||||
GEO_ANIMATED_PART(LAYER_TRANSPARENT, 60, 0, 0, mario_metal_right_hand_cap_shared_dl),
|
||||
|
|
|
@ -89,6 +89,8 @@ static const LevelScript script_func_local_4[] = {
|
|||
OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1504, 326, 3196, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly),
|
||||
OBJECT(/*model*/ MODEL_BUTTERFLY, /*pos*/ -1204, 326, 3296, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvButterfly),
|
||||
OBJECT(/*model*/ MODEL_YOSHI, /*pos*/ 0, 3174, -5625, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvYoshi),
|
||||
// TESTING BELOW
|
||||
OBJECT(/*model*/ MODEL_BLACK_BOBOMB, /*pos*/ -2028, 260, 4664, /*angle*/ 0, 0, 0, /*behParam*/ 0x00000000, /*beh*/ bhvBobomb),
|
||||
RETURN(),
|
||||
};
|
||||
|
||||
|
|
|
@ -48,7 +48,8 @@ void bobomb_check_interactions(void) {
|
|||
{
|
||||
if ((o->oInteractStatus & INT_STATUS_MARIO_UNK1) != 0)
|
||||
{
|
||||
o->oMoveAngleYaw = gMarioObject->header.gfx.angle[1];
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
o->oMoveAngleYaw = player->header.gfx.angle[1];
|
||||
o->oForwardVel = 25.0;
|
||||
o->oVelY = 30.0;
|
||||
o->oAction = BOBOMB_ACT_LAUNCHED;
|
||||
|
@ -73,8 +74,9 @@ void bobomb_act_patrol(void) {
|
|||
o->oForwardVel = 5.0;
|
||||
|
||||
collisionFlags = object_step();
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
if ((obj_return_home_if_safe(o, o->oHomeX, o->oHomeY, o->oHomeZ, 400) == 1)
|
||||
&& (obj_check_if_facing_toward_angle(o->oMoveAngleYaw, o->oAngleToMario, 0x2000) == 1)) {
|
||||
&& (obj_check_if_facing_toward_angle(o->oMoveAngleYaw, obj_angle_to_object(o, player), 0x2000) == 1)) {
|
||||
o->oBobombFuseLit = 1;
|
||||
o->oAction = BOBOMB_ACT_CHASE_MARIO;
|
||||
}
|
||||
|
@ -93,7 +95,8 @@ void bobomb_act_chase_mario(void) {
|
|||
if (sp1a == 5 || sp1a == 16)
|
||||
cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK);
|
||||
|
||||
obj_turn_toward_object(o, gMarioObject, 16, 0x800);
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
obj_turn_toward_object(o, player, 16, 0x800);
|
||||
obj_check_floor_death(collisionFlags, sObjFloor);
|
||||
}
|
||||
|
||||
|
@ -176,14 +179,15 @@ void bobomb_free_loop(void) {
|
|||
void bobomb_held_loop(void) {
|
||||
o->header.gfx.node.flags |= GRAPH_RENDER_INVISIBLE;
|
||||
cur_obj_init_animation(1);
|
||||
cur_obj_set_pos_relative(gMarioObject, 0, 60.0f, 100.0);
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
cur_obj_set_pos_relative(player, 0, 60.0f, 100.0);
|
||||
|
||||
o->oBobombFuseLit = 1;
|
||||
if (o->oBobombFuseTimer >= 151) {
|
||||
//! Although the Bob-omb's action is set to explode when the fuse timer expires,
|
||||
// bobomb_act_explode() will not execute until the bob-omb's held state changes.
|
||||
// This allows the Bob-omb to be regrabbed indefinitely.
|
||||
gMarioObject->oInteractStatus |= INT_STATUS_MARIO_DROP_OBJECT;
|
||||
player->oInteractStatus |= INT_STATUS_MARIO_DROP_OBJECT;
|
||||
o->oAction = BOBOMB_ACT_EXPLODE;
|
||||
}
|
||||
}
|
||||
|
@ -298,8 +302,9 @@ void bobomb_buddy_act_idle(void) {
|
|||
if ((sp1a == 5) || (sp1a == 16))
|
||||
cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK);
|
||||
|
||||
if (o->oDistanceToMario < 1000.0f)
|
||||
o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x140);
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
if (dist_between_objects(o, player) < 1000.0f)
|
||||
o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, obj_angle_to_object(o, player), 0x140);
|
||||
|
||||
if (o->oInteractStatus == INT_STATUS_INTERACTED)
|
||||
o->oAction = BOBOMB_BUDDY_ACT_TURN_TO_TALK;
|
||||
|
@ -387,8 +392,10 @@ void bobomb_buddy_act_turn_to_talk(void) {
|
|||
if ((sp1e == 5) || (sp1e == 16))
|
||||
cur_obj_play_sound_2(SOUND_OBJ_BOBOMB_WALK);
|
||||
|
||||
o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, o->oAngleToMario, 0x1000);
|
||||
if ((s16) o->oMoveAngleYaw == (s16) o->oAngleToMario)
|
||||
struct Object* player = nearest_player_object(o->oPosX, o->oPosY, o->oPosZ);
|
||||
int angleToPlayer = obj_angle_to_object(o, player);
|
||||
o->oMoveAngleYaw = approach_s16_symmetric(o->oMoveAngleYaw, angleToPlayer, 0x1000);
|
||||
if ((s16) o->oMoveAngleYaw == (s16) angleToPlayer)
|
||||
o->oAction = BOBOMB_BUDDY_ACT_TALK;
|
||||
|
||||
cur_obj_play_sound_2(SOUND_ACTION_READ_SIGN);
|
||||
|
|
Loading…
Reference in a new issue