You've already forked HackerSM64
mirror of
https://github.com/HackerN64/HackerSM64.git
synced 2026-01-21 10:35:32 -08:00
Add COMPLETE_SAVE_FILE config define
This commit is contained in:
@@ -901,6 +901,7 @@ const BehaviorScript bhvCoinFormationSpawnedCoin[] = {
|
||||
BEGIN(OBJ_LIST_LEVEL),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
BILLBOARD(),
|
||||
CALL_NATIVE(bhv_init_room),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_coin_formation_spawned_coin_loop),
|
||||
END_LOOP(),
|
||||
@@ -1983,7 +1984,7 @@ const BehaviorScript bhvTiltingBowserLavaPlatform[] = {
|
||||
LOAD_COLLISION_DATA(bowser_2_seg7_collision_tilting_platform),
|
||||
SET_FLOAT(oDrawingDistance, 20000),
|
||||
SET_FLOAT(oCollisionDistance, 20000),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_HOME(),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(cur_obj_rotate_face_angle_using_vel),
|
||||
@@ -3220,9 +3221,9 @@ const BehaviorScript bhvWaterDroplet[] = {
|
||||
const BehaviorScript bhvWaterDropletSplash[] = {
|
||||
BEGIN(OBJ_LIST_UNIMPORTANT),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
CALL_NATIVE(bhv_water_droplet_splash_init),
|
||||
ADD_FLOAT(oPosY, 5),
|
||||
SET_INT(oAnimState, OBJ_ANIM_STATE_INIT_ANIM),
|
||||
@@ -3236,9 +3237,9 @@ const BehaviorScript bhvWaterDropletSplash[] = {
|
||||
const BehaviorScript bhvBubbleSplash[] = {
|
||||
BEGIN(OBJ_LIST_UNIMPORTANT),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
SET_INT(oAnimState, OBJ_ANIM_STATE_INIT_ANIM),
|
||||
CALL_NATIVE(bhv_bubble_splash_init),
|
||||
BEGIN_REPEAT(6),
|
||||
@@ -3251,9 +3252,9 @@ const BehaviorScript bhvBubbleSplash[] = {
|
||||
const BehaviorScript bhvIdleWaterWave[] = {
|
||||
BEGIN(OBJ_LIST_DEFAULT),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
BEGIN_LOOP(),
|
||||
CALL_NATIVE(bhv_idle_water_wave_loop),
|
||||
ADD_INT(oAnimState, 1),
|
||||
@@ -3268,9 +3269,9 @@ const BehaviorScript bhvIdleWaterWave[] = {
|
||||
const BehaviorScript bhvObjectWaterSplash[] = {
|
||||
BEGIN(OBJ_LIST_UNIMPORTANT),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
SET_INT(oAnimState, OBJ_ANIM_STATE_INIT_ANIM),
|
||||
BEGIN_REPEAT(6),
|
||||
ADD_INT(oAnimState, 1),
|
||||
@@ -3320,9 +3321,9 @@ const BehaviorScript bhvWaveTrail[] = {
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
PARENT_BIT_CLEAR(oActiveParticleFlags, ACTIVE_PARTICLE_WAVE_TRAIL),
|
||||
// Wave trail - common:
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
SET_INT(oAnimState, OBJ_ANIM_STATE_INIT_ANIM),
|
||||
BEGIN_REPEAT(8),
|
||||
ADD_INT(oAnimState, 1),
|
||||
@@ -3823,9 +3824,9 @@ const BehaviorScript bhvObjectBubble[] = {
|
||||
const BehaviorScript bhvObjectWaterWave[] = {
|
||||
BEGIN(OBJ_LIST_UNIMPORTANT),
|
||||
OR_INT(oFlags, OBJ_FLAG_UPDATE_GFX_POS_AND_ANGLE),
|
||||
SET_INT(oFaceAnglePitch, 0),
|
||||
SET_INT(oFaceAngleYaw, 0),
|
||||
SET_INT(oFaceAngleRoll, 0),
|
||||
SET_INT(oFaceAnglePitch, 0x0),
|
||||
SET_INT(oFaceAngleYaw, 0x0),
|
||||
SET_INT(oFaceAngleRoll, 0x0),
|
||||
CALL_NATIVE(bhv_object_water_wave_init),
|
||||
DELAY(6),
|
||||
BEGIN_LOOP(),
|
||||
@@ -5621,7 +5622,7 @@ const BehaviorScript bhvFlyingBookend[] = {
|
||||
LOAD_ANIMATIONS(oAnimations, bookend_seg5_anims_05002540),
|
||||
ANIMATE(FLYING_BOOKEND_ANIM_SPAWN),
|
||||
SET_OBJ_PHYSICS(/*Wall hitbox radius*/ 60, /*Gravity*/ 0, /*Bounciness*/ -50, /*Drag strength*/ 1000, /*Friction*/ 1000, /*Buoyancy*/ 200, /*Unused*/ 0, 0),
|
||||
SET_INT(oMoveFlags, 0),
|
||||
SET_INT(oMoveFlags, OBJ_MOVE_NONE),
|
||||
SCALE(/*Unused*/ 0, /*Field*/ 70),
|
||||
CALL_NATIVE(bhv_init_room),
|
||||
BEGIN_LOOP(),
|
||||
|
||||
@@ -43,6 +43,10 @@
|
||||
// Open all courses and doors. Used for debugging purposes to unlock all content.
|
||||
#define UNLOCK_ALL
|
||||
|
||||
// Same as above, but also reads all save file flags as complete.
|
||||
// This will not overwrite existing save file data unless you save over it.
|
||||
//#define COMPLETE_SAVE_FILE
|
||||
|
||||
// Removes the limit on FPS
|
||||
//#define UNLOCK_FPS
|
||||
|
||||
@@ -51,6 +55,10 @@
|
||||
|
||||
// -- Compatibility safeguards. Don't mess with these unless you know what you're doing. --
|
||||
|
||||
#ifdef COMPLETE_SAVE_FILE
|
||||
#define UNLOCK_ALL
|
||||
#endif // COMPLETE_SAVE_FILE
|
||||
|
||||
#ifdef DEBUG_ALL
|
||||
#define DEBUG_LEVEL_SELECT
|
||||
#define ENABLE_DEBUG_FREE_MOVE
|
||||
@@ -58,6 +66,7 @@
|
||||
#define PUPPYPRINT_DEBUG 1
|
||||
#define VISUAL_DEBUG
|
||||
#define UNLOCK_ALL
|
||||
#define COMPLETE_SAVE_FILE
|
||||
#endif // DEBUG_ALL
|
||||
|
||||
#ifdef DISABLE_ALL
|
||||
@@ -71,5 +80,6 @@
|
||||
#undef PUPPYPRINT_DEBUG_CYCLES
|
||||
#undef VISUAL_DEBUG
|
||||
#undef UNLOCK_ALL
|
||||
#undef COMPLETE_SAVE_FILE
|
||||
#undef DEBUG_FORCE_CRASH_ON_BOOT
|
||||
#endif // DISABLE_ALL
|
||||
|
||||
@@ -140,7 +140,6 @@ void bhv_coin_formation_spawned_coin_loop(void) {
|
||||
if (o->oTimer == 0) {
|
||||
cur_obj_set_behavior(bhvYellowCoin);
|
||||
obj_set_hitbox(o, &sYellowCoinHitbox);
|
||||
bhv_init_room();
|
||||
if (o->oCoinSnapToGround) {
|
||||
o->oPosY += 300.0f;
|
||||
cur_obj_update_floor_height();
|
||||
|
||||
@@ -46,7 +46,7 @@ void bhv_rotating_exclamation_mark_loop(void) {
|
||||
}
|
||||
|
||||
void exclamation_box_act_init(void) {
|
||||
if (o->oBehParams2ndByte < 3) {
|
||||
if (o->oBehParams2ndByte < EXCLAMATION_BOX_BP_KOOPA_SHELL) {
|
||||
o->oAnimState = o->oBehParams2ndByte;
|
||||
if ((save_file_get_flags() & sCapSaveFlags[o->oBehParams2ndByte]) || GET_BPARAM1(o->oBehParams) != 0x00) {
|
||||
o->oAction = EXCLAMATION_BOX_ACT_ACTIVE;
|
||||
|
||||
@@ -73,13 +73,12 @@ static void spiny_act_walk(void) {
|
||||
o->oSpinyTurningAwayFromWall =
|
||||
obj_resolve_collisions_and_turn(o->oSpinyTargetYaw, 0x80);
|
||||
} else {
|
||||
if (!(o->oSpinyTurningAwayFromWall =
|
||||
obj_bounce_off_walls_edges_objects(&o->oSpinyTargetYaw))) {
|
||||
if (!(o->oSpinyTurningAwayFromWall = obj_bounce_off_walls_edges_objects(&o->oSpinyTargetYaw))) {
|
||||
// Walk and occasionally randomly change direction
|
||||
if (o->oSpinyTimeUntilTurn != 0) {
|
||||
o->oSpinyTimeUntilTurn--;
|
||||
} else {
|
||||
o->oSpinyTargetYaw = o->oMoveAngleYaw + (s16) random_sign() * 0x2000;
|
||||
o->oSpinyTargetYaw = (o->oMoveAngleYaw + ((s16) random_sign() * 0x2000));
|
||||
o->oSpinyTimeUntilTurn = random_linear_offset(100, 100);
|
||||
}
|
||||
}
|
||||
@@ -98,7 +97,7 @@ static void spiny_act_walk(void) {
|
||||
// When attacked by mario, lessen the knockback
|
||||
o->oAction = SPINY_ACT_WALK;
|
||||
o->oForwardVel *= 0.1f;
|
||||
o->oVelY *= 0.7f;
|
||||
o->oVelY *= 0.7f;
|
||||
|
||||
o->oMoveFlags = 0; // weird flex but okay
|
||||
|
||||
@@ -118,8 +117,8 @@ static void spiny_act_held_by_lakitu(void) {
|
||||
o->oGraphYOffset = 15.0f;
|
||||
cur_obj_init_animation_with_sound(0);
|
||||
|
||||
o->oParentRelativePosX = -50.0f;
|
||||
o->oParentRelativePosY = 35.0f;
|
||||
o->oParentRelativePosX = -50.0f;
|
||||
o->oParentRelativePosY = 35.0f;
|
||||
o->oParentRelativePosZ = -100.0f;
|
||||
|
||||
if (o->parentObj->prevObj == NULL) {
|
||||
@@ -127,8 +126,7 @@ static void spiny_act_held_by_lakitu(void) {
|
||||
o->oMoveAngleYaw = o->parentObj->oFaceAngleYaw;
|
||||
|
||||
// Move more quickly if the lakitu is moving forward
|
||||
o->oForwardVel =
|
||||
o->parentObj->oForwardVel * coss(o->oMoveAngleYaw - o->parentObj->oMoveAngleYaw) + 10.0f;
|
||||
o->oForwardVel = ((o->parentObj->oForwardVel * coss(o->oMoveAngleYaw - o->parentObj->oMoveAngleYaw)) + 10.0f);
|
||||
o->oVelY = 30.0f;
|
||||
|
||||
o->oMoveFlags = 0; // you do you, spiny
|
||||
@@ -161,7 +159,7 @@ static void spiny_act_thrown_by_lakitu(void) {
|
||||
|
||||
cur_obj_move_standard(-78);
|
||||
|
||||
if (obj_check_attacks(&sSpinyHitbox, o->oAction) != 0 && o->parentObj != o) {
|
||||
if ((obj_check_attacks(&sSpinyHitbox, o->oAction) != 0) && (o->parentObj != o)) {
|
||||
o->parentObj->oEnemyLakituNumSpinies--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,7 +464,8 @@ void ukiki_free_loop(void) {
|
||||
cur_obj_update_floor_and_walls();
|
||||
cur_obj_call_action_function(sUkikiActions);
|
||||
|
||||
if (o->oAction == UKIKI_ACT_GO_TO_CAGE || o->oAction == UKIKI_ACT_RETURN_HOME) {
|
||||
if ((o->oAction == UKIKI_ACT_GO_TO_CAGE)
|
||||
|| (o->oAction == UKIKI_ACT_RETURN_HOME)) {
|
||||
steepSlopeAngleDegrees = -88;
|
||||
} else {
|
||||
steepSlopeAngleDegrees = -20;
|
||||
|
||||
@@ -540,6 +540,10 @@ u32 save_file_get_max_coin_score(s32 courseIndex) {
|
||||
return ((maxScoreFileNum << 16) + MAX(maxCoinScore, 0));
|
||||
}
|
||||
|
||||
#ifdef COMPLETE_SAVE_FILE
|
||||
s32 save_file_get_course_star_count(UNUSED s32 fileIndex, UNUSED s32 courseIndex) {
|
||||
return 7;
|
||||
#else
|
||||
s32 save_file_get_course_star_count(s32 fileIndex, s32 courseIndex) {
|
||||
s32 i;
|
||||
s32 count = 0;
|
||||
@@ -552,6 +556,7 @@ s32 save_file_get_course_star_count(s32 fileIndex, s32 courseIndex) {
|
||||
}
|
||||
}
|
||||
return count;
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 save_file_get_total_star_count(s32 fileIndex, s32 minCourse, s32 maxCourse) {
|
||||
@@ -578,26 +583,49 @@ void save_file_clear_flags(u32 flags) {
|
||||
}
|
||||
|
||||
u32 save_file_get_flags(void) {
|
||||
#ifdef COMPLETE_SAVE_FILE
|
||||
return (SAVE_FLAG_FILE_EXISTS |
|
||||
SAVE_FLAG_HAVE_WING_CAP |
|
||||
SAVE_FLAG_HAVE_METAL_CAP |
|
||||
SAVE_FLAG_HAVE_VANISH_CAP |
|
||||
SAVE_FLAG_UNLOCKED_BASEMENT_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR |
|
||||
SAVE_FLAG_DDD_MOVED_BACK |
|
||||
SAVE_FLAG_MOAT_DRAINED |
|
||||
SAVE_FLAG_UNLOCKED_PSS_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_WF_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_CCM_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_JRB_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_BITDW_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_BITFS_DOOR |
|
||||
SAVE_FLAG_UNLOCKED_50_STAR_DOOR |
|
||||
SAVE_FLAG_COLLECTED_TOAD_STAR_1 |
|
||||
SAVE_FLAG_COLLECTED_TOAD_STAR_2 |
|
||||
SAVE_FLAG_COLLECTED_TOAD_STAR_3 |
|
||||
SAVE_FLAG_COLLECTED_MIPS_STAR_1 |
|
||||
SAVE_FLAG_COLLECTED_MIPS_STAR_2);
|
||||
#else
|
||||
if ((gCurrCreditsEntry != NULL) || (gCurrDemoInput != NULL)) {
|
||||
return 0;
|
||||
}
|
||||
return gSaveBuffer.files[gCurrSaveFileNum - 1][0].flags;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the bitset of obtained stars in the specified course.
|
||||
* If course is COURSE_NONE, return the bitset of obtained castle secret stars.
|
||||
*/
|
||||
#ifdef COMPLETE_SAVE_FILE
|
||||
u32 save_file_get_star_flags(UNUSED s32 fileIndex, UNUSED s32 courseIndex) {
|
||||
return 0x7F;
|
||||
#else
|
||||
u32 save_file_get_star_flags(s32 fileIndex, s32 courseIndex) {
|
||||
u32 starFlags;
|
||||
|
||||
if (courseIndex == COURSE_NUM_TO_INDEX(COURSE_NONE)) {
|
||||
starFlags = SAVE_FLAG_TO_STAR_FLAG(gSaveBuffer.files[fileIndex][0].flags);
|
||||
} else {
|
||||
starFlags = (gSaveBuffer.files[fileIndex][0].courseStars[courseIndex] & 0x7F);
|
||||
return SAVE_FLAG_TO_STAR_FLAG(gSaveBuffer.files[fileIndex][0].flags);
|
||||
}
|
||||
|
||||
return starFlags;
|
||||
return (gSaveBuffer.files[fileIndex][0].courseStars[courseIndex] & 0x7F);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -615,15 +643,24 @@ void save_file_set_star_flags(s32 fileIndex, s32 courseIndex, u32 starFlags) {
|
||||
gSaveFileModified = TRUE;
|
||||
}
|
||||
|
||||
#ifdef COMPLETE_SAVE_FILE
|
||||
s32 save_file_get_course_coin_score(UNUSED s32 fileIndex, UNUSED s32 courseIndex) {
|
||||
return MAX_NUM_COINS;
|
||||
#else
|
||||
s32 save_file_get_course_coin_score(s32 fileIndex, s32 courseIndex) {
|
||||
return gSaveBuffer.files[fileIndex][0].courseCoinScores[courseIndex];
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Return TRUE if the cannon is unlocked in the current course.
|
||||
*/
|
||||
s32 save_file_is_cannon_unlocked(void) {
|
||||
#ifdef UNLOCK_ALL
|
||||
return TRUE;
|
||||
#else
|
||||
return ((gSaveBuffer.files[gCurrSaveFileNum - 1][0].courseStars[gCurrCourseNum] & COURSE_FLAG_CANNON_UNLOCKED) != 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -631,7 +668,7 @@ s32 save_file_is_cannon_unlocked(void) {
|
||||
*/
|
||||
void save_file_set_cannon_unlocked(void) {
|
||||
gSaveBuffer.files[gCurrSaveFileNum - 1][0].courseStars[gCurrCourseNum] |= COURSE_FLAG_CANNON_UNLOCKED;
|
||||
gSaveBuffer.files[gCurrSaveFileNum - 1][0].flags |= SAVE_FLAG_FILE_EXISTS;
|
||||
gSaveBuffer.files[gCurrSaveFileNum - 1][0].flags |= SAVE_FLAG_FILE_EXISTS;
|
||||
gSaveFileModified = TRUE;
|
||||
}
|
||||
|
||||
@@ -669,9 +706,9 @@ s32 save_file_get_cap_pos(Vec3s capPos) {
|
||||
#ifdef SAVE_NUM_LIVES
|
||||
void save_file_set_num_lives(s8 numLives) {
|
||||
struct SaveFile *saveFile = &gSaveBuffer.files[gCurrSaveFileNum - 1][0];
|
||||
saveFile->numLives = numLives;
|
||||
saveFile->flags |= SAVE_FLAG_FILE_EXISTS;
|
||||
gSaveFileModified = TRUE;
|
||||
saveFile->numLives = numLives;
|
||||
saveFile->flags |= SAVE_FLAG_FILE_EXISTS;
|
||||
gSaveFileModified = TRUE;
|
||||
}
|
||||
|
||||
s32 save_file_get_num_lives(void) {
|
||||
|
||||
@@ -108,7 +108,9 @@ extern u8 gCurrCourseStarFlags;
|
||||
extern u8 gSpecialTripleJump;
|
||||
extern s8 gLevelToCourseNumTable[];
|
||||
|
||||
#define COURSE_FLAG_CANNON_UNLOCKED /* 0x00000080 */ (1 << 7)
|
||||
enum CourseFlags {
|
||||
COURSE_FLAG_CANNON_UNLOCKED = (1 << 7), /* 0x00000080 */
|
||||
};
|
||||
|
||||
// game progress flags
|
||||
enum SaveProgressFlags {
|
||||
|
||||
Reference in New Issue
Block a user