mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 05:25:14 +00:00
Some bug fixes. (#67)
* Some bug fixes. Fix Bully Star Spawning Cutscene to be player dependent. Add missing line to Makefile. Fix compile error with Clang in save_file.c * Fix DDD Chests Star spawining in the wrong location.
This commit is contained in:
parent
2347ab61c1
commit
8b9b33f0af
6 changed files with 49 additions and 20 deletions
3
Makefile
3
Makefile
|
@ -1496,7 +1496,8 @@ ifeq ($(TARGET_N64),1)
|
||||||
$(OBJDUMP) -D $< > $@
|
$(OBJDUMP) -D $< > $@
|
||||||
else
|
else
|
||||||
$(EXE): $(O_FILES) $(MIO0_FILES:.mio0=.o) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(BUILD_DIR)/$(RPC_LIBS) $(BUILD_DIR)/$(DISCORD_SDK_LIBS) $(BUILD_DIR)/$(MOD_DIR)
|
$(EXE): $(O_FILES) $(MIO0_FILES:.mio0=.o) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(BUILD_DIR)/$(RPC_LIBS) $(BUILD_DIR)/$(DISCORD_SDK_LIBS) $(BUILD_DIR)/$(MOD_DIR)
|
||||||
$(LD) $(PROF_FLAGS) -L $(BUILD_DIR) -o $@ $(O_FILES) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(LDFLAGS) $(EXTRA_INCLUDES)
|
@$(PRINT) "$(GREEN)Linking executable: $(BLUE)$@ $(NO_COL)\n"
|
||||||
|
$(V)$(LD) $(PROF_FLAGS) -L $(BUILD_DIR) -o $@ $(O_FILES) $(ULTRA_O_FILES) $(GODDARD_O_FILES) $(LDFLAGS) $(EXTRA_INCLUDES)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -316,12 +316,13 @@
|
||||||
#define /*0x0F8*/ oBulletBillInitialMoveYaw OBJECT_FIELD_S32(0x1C)
|
#define /*0x0F8*/ oBulletBillInitialMoveYaw OBJECT_FIELD_S32(0x1C)
|
||||||
|
|
||||||
/* Bully (all variants) */
|
/* Bully (all variants) */
|
||||||
#define /*0x0F4*/ oBullySubtype OBJECT_FIELD_S32(0x1B)
|
#define /*0x0F4*/ oBullySubtype OBJECT_FIELD_S32(0x1B)
|
||||||
#define /*0x0F8*/ oBullyPrevX OBJECT_FIELD_F32(0x1C)
|
#define /*0x0F8*/ oBullyPrevX OBJECT_FIELD_F32(0x1C)
|
||||||
#define /*0x0FC*/ oBullyPrevY OBJECT_FIELD_F32(0x1D)
|
#define /*0x0FC*/ oBullyPrevY OBJECT_FIELD_F32(0x1D)
|
||||||
#define /*0x100*/ oBullyPrevZ OBJECT_FIELD_F32(0x1E)
|
#define /*0x100*/ oBullyPrevZ OBJECT_FIELD_F32(0x1E)
|
||||||
#define /*0x104*/ oBullyKBTimerAndMinionKOCounter OBJECT_FIELD_S32(0x1F)
|
#define /*0x104*/ oBullyKBTimerAndMinionKOCounter OBJECT_FIELD_S32(0x1F)
|
||||||
#define /*0x108*/ oBullyMarioCollisionAngle OBJECT_FIELD_S32(0x20)
|
#define /*0x108*/ oBullyMarioCollisionAngle OBJECT_FIELD_S32(0x20)
|
||||||
|
#define /*0x10C*/ oBullyLastNetworkPlayerIndex OBJECT_FIELD_S16(0x21, 0)
|
||||||
|
|
||||||
/* Butterfly */
|
/* Butterfly */
|
||||||
#define /*0x0F4*/ oButterflyYPhase OBJECT_FIELD_S32(0x1B)
|
#define /*0x0F4*/ oButterflyYPhase OBJECT_FIELD_S32(0x1B)
|
||||||
|
|
|
@ -47,6 +47,7 @@ static void bhv_bully_network_init(void) {
|
||||||
network_init_object_field(o, &o->oBullyPrevY);
|
network_init_object_field(o, &o->oBullyPrevY);
|
||||||
network_init_object_field(o, &o->oBullyPrevZ);
|
network_init_object_field(o, &o->oBullyPrevZ);
|
||||||
network_init_object_field(o, &o->oBullyMarioCollisionAngle);
|
network_init_object_field(o, &o->oBullyMarioCollisionAngle);
|
||||||
|
network_init_object_field(o, &o->oBullyLastNetworkPlayerIndex);
|
||||||
so->syncDeathEvent = FALSE;
|
so->syncDeathEvent = FALSE;
|
||||||
so->ignore_if_true = bhv_bully_ignore_if_true;
|
so->ignore_if_true = bhv_bully_ignore_if_true;
|
||||||
so->override_ownership = bhv_bully_override_ownership;
|
so->override_ownership = bhv_bully_override_ownership;
|
||||||
|
@ -63,6 +64,11 @@ void bhv_small_bully_init(void) {
|
||||||
o->oFriction = 0.91;
|
o->oFriction = 0.91;
|
||||||
o->oBuoyancy = 1.3;
|
o->oBuoyancy = 1.3;
|
||||||
|
|
||||||
|
// We only set this here so it has a set value just in case.
|
||||||
|
// A mod may make a small bully spawn a star.
|
||||||
|
// For whatever reason that may be.
|
||||||
|
o->oBullyLastNetworkPlayerIndex = UNKNOWN_GLOBAL_INDEX;
|
||||||
|
|
||||||
obj_set_hitbox(o, &sSmallBullyHitbox);
|
obj_set_hitbox(o, &sSmallBullyHitbox);
|
||||||
bhv_bully_network_init();
|
bhv_bully_network_init();
|
||||||
}
|
}
|
||||||
|
@ -78,6 +84,14 @@ void bhv_big_bully_init(void) {
|
||||||
o->oFriction = 0.93;
|
o->oFriction = 0.93;
|
||||||
o->oBuoyancy = 1.3;
|
o->oBuoyancy = 1.3;
|
||||||
|
|
||||||
|
// We haven't interacted with a player yet.
|
||||||
|
// We also don't sync this as not only is it not required
|
||||||
|
// but it also is only set for an interaction.
|
||||||
|
// Therefore this object must already be loaded for it to be set
|
||||||
|
// and if it wasn't. You couldn't of possibly been the one
|
||||||
|
// who last interacted to begin with.
|
||||||
|
o->oBullyLastNetworkPlayerIndex = UNKNOWN_GLOBAL_INDEX;
|
||||||
|
|
||||||
obj_set_hitbox(o, &sBigBullyHitbox);
|
obj_set_hitbox(o, &sBigBullyHitbox);
|
||||||
bhv_bully_network_init();
|
bhv_bully_network_init();
|
||||||
|
|
||||||
|
@ -94,16 +108,21 @@ void bully_check_mario_collision(void) {
|
||||||
o->oAction != BULLY_ACT_LAVA_DEATH && o->oAction != BULLY_ACT_DEATH_PLANE_DEATH &&
|
o->oAction != BULLY_ACT_LAVA_DEATH && o->oAction != BULLY_ACT_DEATH_PLANE_DEATH &&
|
||||||
#endif
|
#endif
|
||||||
o->oInteractStatus & INT_STATUS_INTERACTED) {
|
o->oInteractStatus & INT_STATUS_INTERACTED) {
|
||||||
if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL)
|
if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) {
|
||||||
cur_obj_play_sound_2(SOUND_OBJ2_BULLY_ATTACKED);
|
cur_obj_play_sound_2(SOUND_OBJ2_BULLY_ATTACKED);
|
||||||
else
|
} else {
|
||||||
cur_obj_play_sound_2(SOUND_OBJ2_LARGE_BULLY_ATTACKED);
|
cur_obj_play_sound_2(SOUND_OBJ2_LARGE_BULLY_ATTACKED);
|
||||||
|
}
|
||||||
|
|
||||||
o->oInteractStatus &= ~INT_STATUS_INTERACTED;
|
o->oInteractStatus &= ~INT_STATUS_INTERACTED;
|
||||||
o->oAction = BULLY_ACT_KNOCKBACK;
|
o->oAction = BULLY_ACT_KNOCKBACK;
|
||||||
o->oFlags &= ~0x8; /* bit 3 */
|
o->oFlags &= ~0x8; /* bit 3 */
|
||||||
cur_obj_init_animation(3);
|
cur_obj_init_animation(3);
|
||||||
o->oBullyMarioCollisionAngle = o->oMoveAngleYaw;
|
o->oBullyMarioCollisionAngle = o->oMoveAngleYaw;
|
||||||
|
|
||||||
|
// Get the player who interacted with us.
|
||||||
|
struct MarioState *player = nearest_interacting_mario_state_to_object(o);
|
||||||
|
o->oBullyLastNetworkPlayerIndex = gNetworkPlayers[player->playerIndex].globalIndex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,12 +138,14 @@ void bully_act_chase_mario(void) {
|
||||||
obj_turn_toward_object(o, player, 16, 4096);
|
obj_turn_toward_object(o, player, 16, 4096);
|
||||||
} else if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) {
|
} else if (o->oBehParams2ndByte == BULLY_BP_SIZE_SMALL) {
|
||||||
o->oForwardVel = 20.0;
|
o->oForwardVel = 20.0;
|
||||||
if (o->oTimer >= 31)
|
if (o->oTimer >= 31) {
|
||||||
o->oTimer = 0;
|
o->oTimer = 0;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
o->oForwardVel = 30.0;
|
o->oForwardVel = 30.0;
|
||||||
if (o->oTimer >= 36)
|
if (o->oTimer >= 36) {
|
||||||
o->oTimer = 0;
|
o->oTimer = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_point_within_radius_of_mario(homeX, posY, homeZ, 1000)) {
|
if (!is_point_within_radius_of_mario(homeX, posY, homeZ, 1000)) {
|
||||||
|
@ -141,8 +162,9 @@ void bully_act_knockback(void) {
|
||||||
o->oFlags |= 0x8; /* bit 3 */
|
o->oFlags |= 0x8; /* bit 3 */
|
||||||
o->oMoveAngleYaw = o->oFaceAngleYaw;
|
o->oMoveAngleYaw = o->oFaceAngleYaw;
|
||||||
obj_turn_toward_object(o, player, 16, 1280);
|
obj_turn_toward_object(o, player, 16, 1280);
|
||||||
} else
|
} else {
|
||||||
o->header.gfx.animInfo.animFrame = 0;
|
o->header.gfx.animInfo.animFrame = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (o->oBullyKBTimerAndMinionKOCounter == 18) {
|
if (o->oBullyKBTimerAndMinionKOCounter == 18) {
|
||||||
o->oAction = BULLY_ACT_CHASE_MARIO;
|
o->oAction = BULLY_ACT_CHASE_MARIO;
|
||||||
|
@ -214,8 +236,9 @@ void bully_step(void) {
|
||||||
obj_check_floor_death(collisionFlags, sObjFloor);
|
obj_check_floor_death(collisionFlags, sObjFloor);
|
||||||
|
|
||||||
if (o->oBullySubtype & BULLY_STYPE_CHILL) {
|
if (o->oBullySubtype & BULLY_STYPE_CHILL) {
|
||||||
if (o->oPosY < 1030.0f)
|
if (o->oPosY < 1030.0f) {
|
||||||
o->oAction = BULLY_ACT_LAVA_DEATH;
|
o->oAction = BULLY_ACT_LAVA_DEATH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,10 +269,10 @@ void bully_act_level_death(void) {
|
||||||
|
|
||||||
if (o->oBullySubtype == BULLY_STYPE_CHILL) {
|
if (o->oBullySubtype == BULLY_STYPE_CHILL) {
|
||||||
f32* starPos = gLevelValues.starPositions.ChillBullyStarPos;
|
f32* starPos = gLevelValues.starPositions.ChillBullyStarPos;
|
||||||
spawn_default_star(starPos[0], starPos[1], starPos[2]);
|
spawn_networked_default_star(starPos[0], starPos[1], starPos[2], o->oBullyLastNetworkPlayerIndex);
|
||||||
} else {
|
} else {
|
||||||
f32* starPos = gLevelValues.starPositions.BigBullyTrioStarPos;
|
f32* starPos = gLevelValues.starPositions.BigBullyTrioStarPos;
|
||||||
spawn_default_star(starPos[0], starPos[1], starPos[2]);
|
spawn_networked_default_star(starPos[0], starPos[1], starPos[2], o->oBullyLastNetworkPlayerIndex);
|
||||||
struct Object* lllTumblingBridge = cur_obj_nearest_object_with_behavior(bhvLllTumblingBridge);
|
struct Object* lllTumblingBridge = cur_obj_nearest_object_with_behavior(bhvLllTumblingBridge);
|
||||||
if (lllTumblingBridge != NULL) {
|
if (lllTumblingBridge != NULL) {
|
||||||
lllTumblingBridge->oIntangibleTimer = 0;
|
lllTumblingBridge->oIntangibleTimer = 0;
|
||||||
|
@ -341,7 +364,7 @@ void big_bully_spawn_star(void) {
|
||||||
if (obj_lava_death() == 1) {
|
if (obj_lava_death() == 1) {
|
||||||
spawn_mist_particles();
|
spawn_mist_particles();
|
||||||
f32* starPos = gLevelValues.starPositions.BigBullyStarPos;
|
f32* starPos = gLevelValues.starPositions.BigBullyStarPos;
|
||||||
spawn_default_star(starPos[0], starPos[1], starPos[2]);
|
spawn_networked_default_star(starPos[0], starPos[1], starPos[2], o->oBullyLastNetworkPlayerIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
// treasure_chest.c.inc
|
// treasure_chest.c.inc
|
||||||
|
|
||||||
#include "pc/network/network_player.h"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hitbox for treasure chest bottom.
|
* Hitbox for treasure chest bottom.
|
||||||
*/
|
*/
|
||||||
|
@ -323,7 +321,7 @@ void bhv_treasure_chest_loop(void) {
|
||||||
if (o->oTimer == 60) {
|
if (o->oTimer == 60) {
|
||||||
spawn_mist_particles();
|
spawn_mist_particles();
|
||||||
|
|
||||||
f32* starPos = gLevelValues.starPositions.TreasureJrbStarPos;
|
f32* starPos = gLevelValues.starPositions.TreasureChestStarPos;
|
||||||
spawn_networked_default_star(starPos[0], starPos[1], starPos[2], o->oTreasureChestLastNetworkPlayerIndex);
|
spawn_networked_default_star(starPos[0], starPos[1], starPos[2], o->oTreasureChestLastNetworkPlayerIndex);
|
||||||
|
|
||||||
o->oAction = 2;
|
o->oAction = 2;
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "hardcoded.h"
|
#include "hardcoded.h"
|
||||||
#include "engine/surface_load.h"
|
#include "engine/surface_load.h"
|
||||||
#include "pc/network/network.h"
|
#include "pc/network/network.h"
|
||||||
|
#include "pc/network/network_player.h"
|
||||||
#include "pc/network/reservation_area.h"
|
#include "pc/network/reservation_area.h"
|
||||||
#include "pc/lua/utils/smlua_model_utils.h"
|
#include "pc/lua/utils/smlua_model_utils.h"
|
||||||
#include "game/rng_position.h"
|
#include "game/rng_position.h"
|
||||||
|
@ -949,6 +950,8 @@ s8 UNUSED debug_sequence_tracker(s16 debugInputSequence[]) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We need the spawn_star file first so the spawn_star functions can be accessed by below behaviors.
|
||||||
|
#include "behaviors/spawn_star.inc.c"
|
||||||
#include "behaviors/moving_coin.inc.c"
|
#include "behaviors/moving_coin.inc.c"
|
||||||
#include "behaviors/seaweed.inc.c"
|
#include "behaviors/seaweed.inc.c"
|
||||||
#include "behaviors/bobomb.inc.c"
|
#include "behaviors/bobomb.inc.c"
|
||||||
|
@ -986,7 +989,6 @@ s8 UNUSED debug_sequence_tracker(s16 debugInputSequence[]) {
|
||||||
#include "behaviors/snowman.inc.c"
|
#include "behaviors/snowman.inc.c"
|
||||||
#include "behaviors/boulder.inc.c"
|
#include "behaviors/boulder.inc.c"
|
||||||
#include "behaviors/cap.inc.c"
|
#include "behaviors/cap.inc.c"
|
||||||
#include "behaviors/spawn_star.inc.c"
|
|
||||||
#include "behaviors/red_coin.inc.c"
|
#include "behaviors/red_coin.inc.c"
|
||||||
#include "behaviors/hidden_star.inc.c"
|
#include "behaviors/hidden_star.inc.c"
|
||||||
#include "behaviors/rolling_log.inc.c"
|
#include "behaviors/rolling_log.inc.c"
|
||||||
|
|
|
@ -14,6 +14,10 @@
|
||||||
#include "pc/ini.h"
|
#include "pc/ini.h"
|
||||||
#include "pc/network/network.h"
|
#include "pc/network/network.h"
|
||||||
|
|
||||||
|
#ifndef bcopy
|
||||||
|
#define bcopy(b1,b2,len) (memmove((b2), (b1), (len)), (void) 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define MENU_DATA_MAGIC 0x4849
|
#define MENU_DATA_MAGIC 0x4849
|
||||||
#define SAVE_FILE_MAGIC 0x4441
|
#define SAVE_FILE_MAGIC 0x4441
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue