Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ASM/training-mode/Misc/Character Randomness/Common.s
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
.set CharRng_Setting_Luigi_Misfire, 0x2
.set CharRng_Setting_GnW_Hammer, 0x3
.set CharRng_Setting_Nana_Throw, 0x4
.set CharRng_Setting_Nana_Pummel_Enable, 0x5
.set CharRng_Setting_Nana_Pummel_Min, 0x6
.set CharRng_Setting_Nana_Pummel_Max, 0x7

.macro CharRng_FetchSetting reg, setting, default_branch
load \reg, EventVars_Ptr
Expand Down
38 changes: 38 additions & 0 deletions ASM/training-mode/Misc/Character Randomness/Nana Pummels.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# To be inserted at 800b6dec

.include "Common.s"

lwz r3, 0x4(r29)
cmpwi r3, 0xb
bne Exit

CharRng_FetchSetting r3, CharRng_Setting_Nana_Pummel_Enable, Exit
cmpwi r3, 0
beq Exit

lwz r4, 0x94(r31)

CharRng_FetchSetting r3, CharRng_Setting_Nana_Pummel_Min, Exit
cmpw r4, r3
blt ForceContinue

CharRng_FetchSetting r5, CharRng_Setting_Nana_Pummel_Max, Exit
cmpw r4, r5
bge ForceStop

subf r3, r4, r5
addi r3, r3, 1
branchl r12, HSD_Randi
cmpwi r3, 0
beq ForceStop
b ForceContinue

ForceContinue:
fsubs f1, f1, f1
b Exit

ForceStop:
lfd f1, -0x6FD8(rtoc)

Exit:
lwz r3, 0x94(r31)
3 changes: 3 additions & 0 deletions src/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,9 @@ typedef struct RNGControl
u8 luigi_misfire; // 0x2
u8 gnw_hammer; // 0x3
u8 nana_throw; // 0x4
u8 nana_pummel_enable;
u8 nana_pummel_min;
u8 nana_pummel_max;
} RNGControl;

typedef struct HUDCamData {
Expand Down
42 changes: 42 additions & 0 deletions src/lab.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,48 @@ void Lab_ChangeCharacterRng_NanaThrow(GOBJ *menu_gobj, int value) {
event_vars->rng->nana_throw = value;
}

static EventOption *Lab_FindCharRngOption(void (*OnChange)(GOBJ *menu_gobj, int value)) {
MenuData *menu_data = event_vars->menu_gobj->userdata;
EventMenu *menu = menu_data->curr_menu;
for (int i = 0; i < menu->option_num; ++i) {
if (menu->options[i].OnChange == OnChange)
return &menu->options[i];
}
return NULL;
}

void Lab_ChangeCharacterRng_NanaPummelEnable(GOBJ *menu_gobj, int value) {
event_vars->rng->nana_pummel_enable = value;

EventOption *min_opt = Lab_FindCharRngOption(Lab_ChangeCharacterRng_NanaPummelMin);
if (min_opt) min_opt->disable = !value;
EventOption *max_opt = Lab_FindCharRngOption(Lab_ChangeCharacterRng_NanaPummelMax);
if (max_opt) max_opt->disable = !value;

if (value) {
if (min_opt) event_vars->rng->nana_pummel_min = min_opt->val;
if (max_opt) event_vars->rng->nana_pummel_max = max_opt->val;
}
}

void Lab_ChangeCharacterRng_NanaPummelMin(GOBJ *menu_gobj, int value) {
event_vars->rng->nana_pummel_min = value;
if (value > event_vars->rng->nana_pummel_max) {
event_vars->rng->nana_pummel_max = value;
EventOption *max_opt = Lab_FindCharRngOption(Lab_ChangeCharacterRng_NanaPummelMax);
if (max_opt) max_opt->val = value;
}
}

void Lab_ChangeCharacterRng_NanaPummelMax(GOBJ *menu_gobj, int value) {
event_vars->rng->nana_pummel_max = value;
if (value < event_vars->rng->nana_pummel_min) {
event_vars->rng->nana_pummel_min = value;
EventOption *min_opt = Lab_FindCharRngOption(Lab_ChangeCharacterRng_NanaPummelMin);
if (min_opt) min_opt->val = value;
}
}

// --------------------------------------------------------

void Lab_StartMoveCPU(GOBJ *menu_gobj) {
Expand Down
34 changes: 33 additions & 1 deletion src/lab.h
Original file line number Diff line number Diff line change
Expand Up @@ -1511,7 +1511,39 @@ static EventOption LabOptions_CharacterRngIcies[] = {
.value_num = countof(LabValues_CharacterRng_NanaThrow),
.values = LabValues_CharacterRng_NanaThrow,
.OnChange = Lab_ChangeCharacterRng_NanaThrow,
}
},
{
.kind = OPTKIND_TOGGLE,
.name = "Custom Pummel RNG",
.desc = {"Force Nana to pummel a random number of",
"times within the range below, instead",
"of her default AI behaviour."},
.OnChange = Lab_ChangeCharacterRng_NanaPummelEnable,
},
{
.kind = OPTKIND_INT,
.disable = 1,
.value_min = 0,
.value_num = 21,
.val = 0,
.name = "Nana Min Pummels",
.desc = {"Adjust the minimum number of times",
"Nana will pummel."},
.format = "%d",
.OnChange = Lab_ChangeCharacterRng_NanaPummelMin,
},
{
.kind = OPTKIND_INT,
.disable = 1,
.value_min = 0,
.value_num = 21,
.val = 3,
.name = "Nana Max Pummels",
.desc = {"Adjust the maximum number of times",
"Nana will pummel."},
.format = "%d",
.OnChange = Lab_ChangeCharacterRng_NanaPummelMax,
},
};

#define OPTCHARRNG_MAXCOUNT 8
Expand Down
3 changes: 3 additions & 0 deletions src/lab_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,9 @@ void Lab_ChangeCharacterRng_PeachFSmash(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_Hammer(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_Misfire(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_NanaThrow(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_NanaPummelEnable(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_NanaPummelMin(GOBJ *menu_gobj, int value);
void Lab_ChangeCharacterRng_NanaPummelMax(GOBJ *menu_gobj, int value);
void Lab_ChangeFrameAdvanceButton(GOBJ *menu_gobj, int value);
void Lab_ChangeFrameDecrementButton(GOBJ *menu_gobj, int value);
void Lab_ChangeCPUPercent(GOBJ *menu_gobj, int value);
Expand Down