You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Merge branch 'Reonu:master' into colored-text
This commit is contained in:
@@ -5,6 +5,9 @@ This repo needs gcc in order to be able to build it. To install it, run `sudo ap
|
||||
|
||||
This is a fork of the ultrasm64 repo by CrashOveride which includes the following commonly used patches (patches marked with `*` are toggleable in `config.h`):
|
||||
|
||||
**About Puppycam**
|
||||
- Puppycam is available **on a dedicated branch**. If you want puppycam in your hack, clone the `puppycamera2` branch instead of `master`.
|
||||
|
||||
**Collision:**
|
||||
- Slope fix and exposed ceilings fix
|
||||
- No false ledgegrabs fix *
|
||||
@@ -29,6 +32,8 @@ This is a fork of the ultrasm64 repo by CrashOveride which includes the followin
|
||||
- You can increase the number of frames that you have to perform a firsty *
|
||||
- Ability to set Mario's movement speed when hanging from a ceiling *
|
||||
- Tighter hanging controls (mario will face the direction of the analog stick directly while hanging from a ceiling) *
|
||||
- reonucam3: custom camera by me. This is included as a .patch file in the enhancements folder, you need to apply it if you want this camera.
|
||||
This video shows a rundown of the features: https://youtu.be/TQNkznX9Z3k
|
||||
|
||||
**Hacker QOL:**
|
||||
- Global, non-level based, star IDs (off by default) *
|
||||
@@ -46,6 +51,7 @@ This is a fork of the ultrasm64 repo by CrashOveride which includes the followin
|
||||
- The internal ROM name is now set with a define in `config.h` to make it simpler
|
||||
- There is a `gIsConsole` variable that is 1 when running on console and 0 when running on emulator. This way you can wrap your code in a console check.
|
||||
- Expanded audio heap allows for a larger concurrent note count and the importing of more m64 sequences and sound banks (By ArcticJaguar725) *
|
||||
- You can set a test level in config.h in order to boot straight into it, so you can quickly test the level you're working on. *
|
||||
|
||||
**Other Bugfixes:**
|
||||
- Castle music fix (Fixes the castle music sometimes triggering after getting a dialog) *
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
diff --git a/src/game/camera.c b/src/game/camera.c
|
||||
index 13d3fe2..be49880 100644
|
||||
--- a/src/game/camera.c
|
||||
+++ b/src/game/camera.c
|
||||
@@ -259,6 +259,7 @@ s16 sCameraSoundFlags;
|
||||
* Stores what C-Buttons are pressed this frame.
|
||||
*/
|
||||
u16 sCButtonsPressed;
|
||||
+u16 stoppedMovingCamera;
|
||||
/**
|
||||
* A copy of gDialogID, the dialog displayed during the cutscene.
|
||||
*/
|
||||
@@ -433,6 +434,9 @@ u8 sFramesSinceCutsceneEnded = 0;
|
||||
* 3 = Dialog doesn't have a response
|
||||
*/
|
||||
u8 sCutsceneDialogResponse = 0;
|
||||
+u8 stickReset = 1;
|
||||
+u8 cButtonCounter;
|
||||
+u8 lastCameraMove;
|
||||
struct PlayerCameraState *sMarioCamState = &gPlayerCameraState[0];
|
||||
struct PlayerCameraState *sLuigiCamState = &gPlayerCameraState[1];
|
||||
u32 unused8032D008 = 0;
|
||||
@@ -442,6 +446,9 @@ Vec3f sUnusedModeBasePosition_3 = { 646.0f, 143.0f, -1513.0f };
|
||||
Vec3f sUnusedModeBasePosition_4 = { 646.0f, 143.0f, -1513.0f };
|
||||
Vec3f sUnusedModeBasePosition_5 = { 646.0f, 143.0f, -1513.0f };
|
||||
|
||||
+#define MOVED_LEFT 1
|
||||
+#define MOVED_RIGHT 2
|
||||
+
|
||||
s32 update_radial_camera(struct Camera *c, Vec3f, Vec3f);
|
||||
s32 update_outward_radial_camera(struct Camera *c, Vec3f, Vec3f);
|
||||
s32 update_behind_mario_camera(struct Camera *c, Vec3f, Vec3f);
|
||||
@@ -1176,14 +1183,39 @@ void mode_8_directions_camera(struct Camera *c) {
|
||||
|
||||
radial_camera_input(c, 0.f);
|
||||
|
||||
- if (gPlayer1Controller->buttonPressed & R_CBUTTONS) {
|
||||
- s8DirModeYawOffset += DEGREES(45);
|
||||
- play_sound_cbutton_side();
|
||||
- }
|
||||
- if (gPlayer1Controller->buttonPressed & L_CBUTTONS) {
|
||||
- s8DirModeYawOffset -= DEGREES(45);
|
||||
- play_sound_cbutton_side();
|
||||
+ if (gPlayer1Controller->buttonDown & L_CBUTTONS) {
|
||||
+ s8DirModeYawOffset -= DEGREES(4);
|
||||
+ cButtonCounter++;
|
||||
+ stoppedMovingCamera = 0;
|
||||
+ lastCameraMove = MOVED_LEFT;
|
||||
+
|
||||
+ }
|
||||
+ else if (gPlayer1Controller->buttonDown & R_CBUTTONS) {
|
||||
+ s8DirModeYawOffset += DEGREES(4);
|
||||
+ cButtonCounter++;
|
||||
+ stoppedMovingCamera = 0;
|
||||
+ lastCameraMove = MOVED_RIGHT;
|
||||
+ }
|
||||
+ else if (gPlayer2Controller->rawStickX) {
|
||||
+ s8DirModeYawOffset += DEGREES(gPlayer2Controller->rawStickX * 4 / 64);
|
||||
+ } else {
|
||||
+ stoppedMovingCamera = 1;
|
||||
+ }
|
||||
+
|
||||
+ if (stoppedMovingCamera == 1) {
|
||||
+ if ((cButtonCounter < 5) && (cButtonCounter > 0)) {
|
||||
+ if (lastCameraMove == MOVED_RIGHT) {
|
||||
+ s8DirModeYawOffset += DEGREES(45);
|
||||
+ cButtonCounter = 0;
|
||||
+ } else {
|
||||
+ s8DirModeYawOffset -= DEGREES(45);
|
||||
+ cButtonCounter = 0;
|
||||
+ }
|
||||
+ } else {
|
||||
+ cButtonCounter = 0;
|
||||
+ }
|
||||
}
|
||||
+
|
||||
|
||||
lakitu_zoom(400.f, 0x900);
|
||||
c->nextYaw = update_8_directions_camera(c, c->focus, pos);
|
||||
@@ -2760,7 +2792,7 @@ s32 mode_c_up_camera(struct Camera *c) {
|
||||
sPanDistance = 0.f;
|
||||
|
||||
// Exit C-Up mode
|
||||
- if (gPlayer1Controller->buttonPressed & (A_BUTTON | B_BUTTON | D_CBUTTONS | L_CBUTTONS | R_CBUTTONS)) {
|
||||
+ if ((gPlayer1Controller->buttonPressed & (A_BUTTON | B_BUTTON | D_CBUTTONS | L_CBUTTONS | R_CBUTTONS)) || (gPlayer2Controller->rawStickY < -10)) {
|
||||
exit_c_up(c);
|
||||
}
|
||||
return 0;
|
||||
@@ -3015,14 +3047,11 @@ void update_camera(struct Camera *c) {
|
||||
// Only process R_TRIG if 'fixed' is not selected in the menu
|
||||
if (cam_select_alt_mode(0) == CAM_SELECTION_MARIO) {
|
||||
if (gPlayer1Controller->buttonPressed & R_TRIG) {
|
||||
- if (set_cam_angle(0) == CAM_ANGLE_LAKITU) {
|
||||
- set_cam_angle(CAM_ANGLE_MARIO);
|
||||
- } else {
|
||||
- set_cam_angle(CAM_ANGLE_LAKITU);
|
||||
- }
|
||||
+ s8DirModeYawOffset = gMarioState->faceAngle[1]-0x8000;
|
||||
+ play_sound_rbutton_changed();
|
||||
}
|
||||
}
|
||||
- play_sound_if_cam_switched_to_lakitu_or_mario();
|
||||
+ //play_sound_if_cam_switched_to_lakitu_or_mario();
|
||||
}
|
||||
|
||||
// Initialize the camera
|
||||
@@ -3865,7 +3894,7 @@ s32 find_c_buttons_pressed(u16 currentState, u16 buttonsPressed, u16 buttonsDown
|
||||
currentState &= ~R_CBUTTONS;
|
||||
}
|
||||
|
||||
- if (buttonsPressed & U_CBUTTONS) {
|
||||
+ if ((buttonsPressed & U_CBUTTONS)) {
|
||||
currentState |= U_CBUTTONS;
|
||||
currentState &= ~D_CBUTTONS;
|
||||
}
|
||||
@@ -4816,19 +4845,19 @@ void play_camera_buzz_if_c_sideways(void) {
|
||||
}
|
||||
|
||||
void play_sound_cbutton_up(void) {
|
||||
- play_sound(SOUND_MENU_CAMERA_ZOOM_IN, gGlobalSoundSource);
|
||||
+ //play_sound(SOUND_MENU_CAMERA_ZOOM_IN, gGlobalSoundSource);
|
||||
}
|
||||
|
||||
void play_sound_cbutton_down(void) {
|
||||
- play_sound(SOUND_MENU_CAMERA_ZOOM_OUT, gGlobalSoundSource);
|
||||
+ //play_sound(SOUND_MENU_CAMERA_ZOOM_OUT, gGlobalSoundSource);
|
||||
}
|
||||
|
||||
void play_sound_cbutton_side(void) {
|
||||
- play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource);
|
||||
+ //play_sound(SOUND_MENU_CAMERA_TURN, gGlobalSoundSource);
|
||||
}
|
||||
|
||||
void play_sound_button_change_blocked(void) {
|
||||
- play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource);
|
||||
+ //play_sound(SOUND_MENU_CAMERA_BUZZ, gGlobalSoundSource);
|
||||
}
|
||||
|
||||
void play_sound_rbutton_changed(void) {
|
||||
@@ -4925,7 +4954,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) {
|
||||
}
|
||||
|
||||
// Zoom in / enter C-Up
|
||||
- if (gPlayer1Controller->buttonPressed & U_CBUTTONS) {
|
||||
+ if (((gPlayer1Controller->buttonPressed & U_CBUTTONS) || (gPlayer2Controller->rawStickY > 40)) && (stickReset)) {
|
||||
if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) {
|
||||
gCameraMovementFlags &= ~CAM_MOVE_ZOOMED_OUT;
|
||||
play_sound_cbutton_up();
|
||||
@@ -4935,7 +4964,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) {
|
||||
}
|
||||
|
||||
// Zoom out
|
||||
- if (gPlayer1Controller->buttonPressed & D_CBUTTONS) {
|
||||
+ if ((gPlayer1Controller->buttonPressed & D_CBUTTONS) || (gPlayer2Controller->rawStickY < -40)) {
|
||||
if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) {
|
||||
gCameraMovementFlags |= CAM_MOVE_ALREADY_ZOOMED_OUT;
|
||||
#ifndef VERSION_JP
|
||||
@@ -4946,7 +4975,11 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) {
|
||||
play_sound_cbutton_down();
|
||||
}
|
||||
}
|
||||
-
|
||||
+ if ((gPlayer2Controller->rawStickY > 40) || (gPlayer2Controller->rawStickY < -40)) {
|
||||
+ stickReset = 0;
|
||||
+ } else {
|
||||
+ stickReset = 1;
|
||||
+ }
|
||||
//! returning uninitialized variable
|
||||
return dummy;
|
||||
}
|
||||
diff --git a/src/game/hud.c b/src/game/hud.c
|
||||
index f11b626..003a634 100644
|
||||
--- a/src/game/hud.c
|
||||
+++ b/src/game/hud.c
|
||||
@@ -506,7 +506,7 @@ void render_hud(void) {
|
||||
|
||||
if (hudDisplayFlags & HUD_DISPLAY_FLAG_CAMERA_AND_POWER) {
|
||||
render_hud_power_meter();
|
||||
- render_hud_camera_status();
|
||||
+ //render_hud_camera_status();
|
||||
}
|
||||
|
||||
if (hudDisplayFlags & HUD_DISPLAY_FLAG_TIMER) {
|
||||
572
enhancements/reonucam3.patch
Normal file
572
enhancements/reonucam3.patch
Normal file
File diff suppressed because it is too large
Load Diff
@@ -54,6 +54,12 @@
|
||||
|
||||
// -- ultrasm64-extbounds specific settings --
|
||||
|
||||
// TEST LEVEL
|
||||
// Uncomment this define and set a test level in order to boot straight into said level.
|
||||
// This allows you to quickly test the level you're working on.
|
||||
// If you want the game to boot normally, just comment out the define again.
|
||||
//#define TEST_LEVEL LEVEL_BOB
|
||||
|
||||
// COMMON HACK CHANGES
|
||||
// Internal ROM name. NEEDS TO BE **EXACTLY** 20 CHARACTERS. Can't be 19 characters, can't be 21 characters. You can fill it with spaces.
|
||||
// The end quote should be here: "
|
||||
@@ -79,7 +85,7 @@
|
||||
// Number of coins to spawn the "100 coin" star. If you remove the define altogether, then there won't be a 100 coin star at all.
|
||||
#define X_COIN_STAR 100
|
||||
// Platform displacement 2 also known as momentum patch. Makes Mario keep the momemtum from moving platforms. Breaks treadmills.
|
||||
#define PLATFORM_DISPLACEMENT_2
|
||||
//#define PLATFORM_DISPLACEMENT_2
|
||||
// Stars don't kick you out of the level
|
||||
// #define NON_STOP_STARS
|
||||
// Uncomment this if you want global star IDs (useful for creating an open world hack ala MVC)
|
||||
@@ -88,25 +94,15 @@
|
||||
//#define SKIP_TITLE_SCREEN
|
||||
// Uncomment this if you want to keep the mario head and not skip it
|
||||
//#define KEEP_MARIO_HEAD
|
||||
// Makes the coins ia8 64x64 instead of ia16 32x32. Uses new ia8 textures so that vanilla coins look better.
|
||||
#define IA8_COINS
|
||||
// Enables "parallel lakitu camera" or "aglab cam" which lets you move the camera smoothly with the dpad
|
||||
#define PARALLEL_LAKITU_CAM
|
||||
// Allows Mario to ledgegrab sloped floors
|
||||
#define NO_FALSE_LEDGEGRABS
|
||||
|
||||
|
||||
// HACKER QOL
|
||||
// Enable widescreen (16:9) support
|
||||
#define WIDE
|
||||
// When this option is enabled, LODs will ONLY work on console.
|
||||
// When this option is disabled, LODs will work regardless of whether console or emulator is used.
|
||||
// Regardless of whether this setting is enabled or not, you can use gIsConsole to wrap your own code in a console check.
|
||||
#define AUTO_LOD
|
||||
// Increase the maximum pole length (it will treat bparam1 and bparam2 as a single value)
|
||||
#define LONGER_POLES
|
||||
// Disable AA (Recommended: it changes nothing on emulator, and it makes console run better)
|
||||
#define DISABLE_AA
|
||||
// Allows Mario to ledgegrab sloped floors
|
||||
#define NO_FALSE_LEDGEGRABS
|
||||
// Number of possible unique model ID's (keep it higher than 256)
|
||||
#define MODEL_ID_COUNT 256
|
||||
// Increase audio heap size to allow for more concurrent notes to be played and for more custom sequences/banks to be imported (does nothing with EU and SH versions)
|
||||
@@ -141,10 +137,20 @@
|
||||
#define EXIT_COURSE_NODE 0x1F
|
||||
|
||||
// OTHER ENHANCEMENTS
|
||||
// Enable widescreen (16:9) support
|
||||
#define WIDE
|
||||
// Skybox size modifier, changing this will add support for larger skybox images. NOTE: Vanilla skyboxes may break if you change this option. Be sure to rescale them accordingly.
|
||||
// Whenever you change this, make sure to run "make -C tools clean" to rebuild the skybox tool (alternatively go into skyconv.c and change the file in any way (like adding/deleting a space) to specifically rebuild that tool).
|
||||
// When increasing this, you should probably also increase the GFX pool size. (the GFX_POOL_SIZE define in src/game/game_init.h)
|
||||
#define SKYBOX_SIZE 1
|
||||
// When this option is enabled, LODs will ONLY work on console.
|
||||
// When this option is disabled, LODs will work regardless of whether console or emulator is used.
|
||||
// Regardless of whether this setting is enabled or not, you can use gIsConsole to wrap your own code in a console check.
|
||||
#define AUTO_LOD
|
||||
// Disable AA (Recommended: it changes nothing on emulator, and it makes console run better)
|
||||
#define DISABLE_AA
|
||||
// Makes the coins ia8 64x64 instead of ia16 32x32. Uses new ia8 textures so that vanilla coins look better.
|
||||
#define IA8_COINS
|
||||
|
||||
// If you want to change the extended boundaries mode, go to engine/extended_bounds.h and change EXTENDED_BOUNDS_MODE
|
||||
|
||||
|
||||
@@ -7,11 +7,19 @@
|
||||
|
||||
#include "make_const_nonconst.h"
|
||||
|
||||
#include "config.h"
|
||||
|
||||
extern const LevelScript level_main_scripts_entry[];
|
||||
const LevelScript level_script_entry[] = {
|
||||
INIT_LEVEL(),
|
||||
SLEEP(/*frames*/ 2),
|
||||
BLACKOUT(/*active*/ FALSE),
|
||||
SET_REG(/*value*/ 0),
|
||||
#ifdef TEST_LEVEL
|
||||
SET_REG(TEST_LEVEL),
|
||||
EXECUTE(/*seg*/ 0x15, _scriptsSegmentRomStart, _scriptsSegmentRomEnd, level_main_scripts_entry),
|
||||
#else
|
||||
SET_REG(0),
|
||||
EXECUTE(/*seg*/ 0x14, /*script*/ _introSegmentRomStart, /*scriptEnd*/ _introSegmentRomEnd, /*entry*/ level_intro_splash_screen),
|
||||
#endif
|
||||
JUMP(/*target*/ level_script_entry),
|
||||
};
|
||||
};
|
||||
@@ -1498,6 +1498,10 @@ void render_widescreen_setting(void) {
|
||||
print_generic_string(10, 200, textWideInfo2);
|
||||
}
|
||||
gSPDisplayList(gDisplayListHead++, dl_ia_text_end);
|
||||
if (gPlayer1Controller->buttonPressed & L_TRIG){
|
||||
gWidescreen ^= 1;
|
||||
save_file_set_widescreen_mode(gWidescreen);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1854,10 +1858,6 @@ s16 render_pause_courses_and_castle(void) {
|
||||
}
|
||||
#ifdef WIDE
|
||||
render_widescreen_setting();
|
||||
if (gPlayer1Controller->buttonPressed & L_TRIG){
|
||||
gWidescreen ^= 1;
|
||||
save_file_set_widescreen_mode(gWidescreen);
|
||||
}
|
||||
#endif
|
||||
if (gDialogTextAlpha < 250) {
|
||||
gDialogTextAlpha += 25;
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define WIDESCREEN
|
||||
|
||||
/**
|
||||
* This file contains the code that processes the scene graph for rendering.
|
||||
* The scene graph is responsible for drawing everything except the HUD / text boxes.
|
||||
@@ -297,14 +295,9 @@ static void geo_process_perspective(struct GraphNodePerspective *node) {
|
||||
u16 perspNorm;
|
||||
Mtx *mtx = alloc_display_list(sizeof(*mtx));
|
||||
#ifdef WIDE
|
||||
if (gWidescreen){
|
||||
if (gCurrLevelNum == 0x01) {
|
||||
aspect = 1.33333f;
|
||||
} else {
|
||||
aspect = 1.775f;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (gWidescreen && (gCurrLevelNum != 0x01)){
|
||||
aspect = 1.775f;
|
||||
} else {
|
||||
aspect = 1.33333f;
|
||||
}
|
||||
#else
|
||||
@@ -836,11 +829,10 @@ static s32 obj_is_in_view(struct GraphNodeObject *node, Mat4 matrix) {
|
||||
// the amount of units between the center of the screen and the horizontal edge
|
||||
// given the distance from the object to the camera.
|
||||
|
||||
#ifdef WIDESCREEN
|
||||
// This multiplication should really be performed on 4:3 as well,
|
||||
// but the issue will be more apparent on widescreen.
|
||||
// HackerSM64: This multiplication is done regardless of aspect ratio to fix object pop-in on the edges of the screen (which happens at 4:3 too)
|
||||
hScreenEdge *= GFX_DIMENSIONS_ASPECT_RATIO;
|
||||
#endif
|
||||
|
||||
if (geo != NULL && geo->type == GRAPH_NODE_TYPE_CULLING_RADIUS) {
|
||||
cullingRadius =
|
||||
|
||||
@@ -64,7 +64,7 @@ struct MainMenuSaveData
|
||||
#endif
|
||||
|
||||
#ifdef VERSION_EU
|
||||
u16 language;
|
||||
u8 language: 2;
|
||||
#define SUBTRAHEND 8
|
||||
#else
|
||||
#define SUBTRAHEND 6
|
||||
|
||||
@@ -53,8 +53,7 @@ static s8 sSelectableStarIndex = 0;
|
||||
|
||||
// Act Selector menu timer that keeps counting until you choose an act.
|
||||
static s32 sActSelectorMenuTimer = 0;
|
||||
#ifdef WIDE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Act Selector Star Type Loop Action
|
||||
* Defines a select type for a star in the act selector.
|
||||
@@ -95,11 +94,10 @@ void render_100_coin_star(u8 stars) {
|
||||
if (stars & (1 << 6)) {
|
||||
// If the 100 coin star has been collected, create a new star selector next to the coin score.
|
||||
#ifdef WIDE
|
||||
if (gWidescreen){
|
||||
if (gWidescreen) {
|
||||
sStarSelectorModels[6] = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR,
|
||||
bhvActSelectorStarType, ((370*4.0f)/3), 24, -300, 0, 0, 0);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
sStarSelectorModels[6] = spawn_object_abs_with_rot(gCurrentObject, 0, MODEL_STAR,
|
||||
bhvActSelectorStarType, 370, 24, -300, 0, 0, 0);
|
||||
}
|
||||
@@ -169,8 +167,7 @@ void bhv_act_selector_init(void) {
|
||||
(((75 + sVisibleStars * -75 + i * 152)*4.0f)/3), 248, -300, 0, 0, 0);
|
||||
sStarSelectorModels[i]->oStarSelectorSize = 1.0f;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
for (i = 0; i < sVisibleStars; i++) {
|
||||
sStarSelectorModels[i] =
|
||||
spawn_object_abs_with_rot(gCurrentObject, 0, selectorModelIDs[i], bhvActSelectorStarType,
|
||||
|
||||
Reference in New Issue
Block a user