mirror of
https://github.com/jugeeya/UltimateTrainingModpack.git
synced 2025-03-14 02:16:10 +00:00
code-side menu changes
This commit is contained in:
parent
ad825c9261
commit
a6560a460f
6 changed files with 95 additions and 40 deletions
2
Makefile
2
Makefile
|
@ -47,7 +47,7 @@ CFLAGS := -Wall -O2 \
|
|||
|
||||
CFLAGS += $(INCLUDE) -DSWITCH
|
||||
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -fpermissive -Wno-parentheses -Wno-write-strings -Wno-pointer-arith -Wno-int-to-pointer-cast -std=gnu++11
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -Wno-parentheses -Wno-write-strings -Wno-int-to-pointer-cast -std=gnu++11
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=$(TOPDIR)/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <math.h>
|
||||
|
||||
#include "useful/useful.h"
|
||||
#include "useful/crc32.h"
|
||||
#include "useful/visual.h"
|
||||
|
||||
#include "acmd_wrapper.hpp"
|
||||
|
@ -45,8 +46,7 @@ void clear_all_replace(u64 module_accessor) {
|
|||
int status_kind = StatusModule::status_kind(module_accessor);
|
||||
if (!(status_kind >= FIGHTER_STATUS_KIND_GUARD_ON &&
|
||||
status_kind <= FIGHTER_STATUS_KIND_GUARD_OFF)) {
|
||||
Hash40 shieldEffectHash = {.hash = 0xAFAE75F05LL};
|
||||
EffectModule::kill_kind(module_accessor, shieldEffectHash.hash, 0, 1);
|
||||
EffectModule::kill_kind(module_accessor, hash40("sys_shield"), 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,8 +67,7 @@ void set_rebound_replace(u64 module_accessor, bool rebound) {
|
|||
int status_kind = StatusModule::status_kind(module_accessor);
|
||||
if (!(status_kind >= FIGHTER_STATUS_KIND_GUARD_ON &&
|
||||
status_kind <= FIGHTER_STATUS_KIND_GUARD_OFF)) {
|
||||
Hash40 shieldEffectHash = {.hash = 0xAFAE75F05LL};
|
||||
EffectModule::kill_kind(module_accessor, shieldEffectHash.hash, 0, 1);
|
||||
EffectModule::kill_kind(module_accessor, hash40("sys_shield"), 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,7 +105,7 @@ void generate_hitbox_effects(L2CAgent *l2c_agent, L2CValue *bone,
|
|||
L2CValue blue(color->z);
|
||||
|
||||
float size_mult = 19.0f / 200.0f;
|
||||
Hash40 shield_effect_hash = {.hash = 0xAFAE75F05LL};
|
||||
Hash40 shield_effect_hash = {.hash = hash40("sys_shield")};
|
||||
|
||||
L2CValue shieldEffect(shield_effect_hash.hash);
|
||||
L2CValue x_rot(0.0f);
|
||||
|
@ -177,7 +176,8 @@ void ATTACK_replace(u64 a1) {
|
|||
l2c_agent.get_lua_stack(15, &z2); // float or void
|
||||
|
||||
// hacky way of forcing no shield damage on all hitboxes
|
||||
if (is_training_mode() && TOGGLE_STATE == INFINITE_SHIELD) {
|
||||
if (is_training_mode() &&
|
||||
TOGGLE_STATE == SHIELD_TOGGLES && SHIELD_STATE == SHIELD_INFINITE) {
|
||||
L2CValue hitbox_params[36];
|
||||
for (size_t i = 0; i < 36; i++)
|
||||
l2c_agent.get_lua_stack(i + 1, &hitbox_params[i]);
|
||||
|
@ -287,8 +287,8 @@ void hitbox_vis_main() {
|
|||
effect_manager_addr = SaltySDCore_FindSymbol(
|
||||
"_ZN3lib9SingletonINS_13EffectManagerEE9instance_E");
|
||||
|
||||
AttackModule_set_attack_lua_state = (void (*)(u64, u64))SaltySDCore_FindSymbol("_ZN3app10sv_animcmd6ATTACKEP9lua_State") +
|
||||
0xD0 - 0x70;
|
||||
AttackModule_set_attack_lua_state = (void (*)(u64, u64))(SaltySDCore_FindSymbol("_ZN3app10sv_animcmd6ATTACKEP9lua_State") +
|
||||
0xD0 - 0x70);
|
||||
Catch_jumpback = SaltySDCore_FindSymbol("_ZN3app10sv_animcmd5CATCHEP9lua_State") + (4 * 4);
|
||||
SaltySD_function_replace_sym("_ZN3app10sv_animcmd6ATTACKEP9lua_State",
|
||||
(u64)&ATTACK_replace);
|
||||
|
|
|
@ -49,13 +49,31 @@ u64 appeal_lw_replace(L2CAgent* l2c_agent, void* variadic) {
|
|||
acmd.frame(1);
|
||||
if (acmd.is_excute()) {
|
||||
if (is_training_mode()) {
|
||||
TOGGLE_STATE = (TOGGLE_STATE + 1) % NUM_TOGGLE_STATES;
|
||||
const char* toggle_strings[NUM_TOGGLE_STATES] = {
|
||||
"NONE", "MASH\nAIRDODGE", "MASH\nJUMP",
|
||||
"MASH\nATTACK", "MASH\nRANDOM", "INFINITE\nSHIELD",
|
||||
"HOLD\nSHIELD", "LEDGE\nOPTION"};
|
||||
if (TOGGLE_STATE == MASH_TOGGLES) {
|
||||
MASH_STATE = (MASH_STATE + 1) % NUM_MASH_STATES;
|
||||
const char* toggle_strings[NUM_MASH_STATES] = {
|
||||
"NONE", "AIRDODGE", "JUMP", "RANDOM"};
|
||||
|
||||
print_string(acmd.module_accessor, toggle_strings[MASH_STATE]);
|
||||
}
|
||||
|
||||
if (TOGGLE_STATE == ESCAPE_TOGGLES) {
|
||||
ESCAPE_STATE = (ESCAPE_STATE + 1) % NUM_ESCAPE_STATES;
|
||||
const char* toggle_strings[NUM_ESCAPE_STATES] = {
|
||||
"NONE", "LEDGE"};
|
||||
|
||||
print_string(acmd.module_accessor, toggle_strings[ESCAPE_STATE]);
|
||||
}
|
||||
|
||||
if (TOGGLE_STATE == SHIELD_TOGGLES) {
|
||||
SHIELD_STATE = (SHIELD_STATE + 1) % NUM_SHIELD_STATES;
|
||||
const char* toggle_strings[NUM_SHIELD_STATES] = {
|
||||
"NONE", "INFINITE", "HOLD"};
|
||||
|
||||
print_string(acmd.module_accessor, toggle_strings[SHIELD_STATE]);
|
||||
}
|
||||
|
||||
|
||||
print_string(acmd.module_accessor, toggle_strings[TOGGLE_STATE]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,13 +103,13 @@ u64 appeal_s_replace(L2CAgent* l2c_agent, void* variadic) {
|
|||
acmd.frame(1);
|
||||
if (acmd.is_excute()) {
|
||||
if (is_training_mode()) {
|
||||
if (TOGGLE_STATE == LEDGE_OPTION) {
|
||||
if (TOGGLE_STATE == ESCAPE_TOGGLES && ESCAPE_STATE == ESCAPE_LEDGE) {
|
||||
LEDGE_STATE = (LEDGE_STATE + 1) % NUM_LEDGE_STATES;
|
||||
const char* LEDGE_strings[NUM_LEDGE_STATES] = {
|
||||
"RANDOM", "NORMAL", "ROLL", "JUMP", "ATTACK"};
|
||||
|
||||
print_string(acmd.module_accessor, LEDGE_strings[LEDGE_STATE]);
|
||||
} else if (TOGGLE_STATE == MASH_ATTACK) {
|
||||
} else if (MASH_STATE == MASH_ATTACK) {
|
||||
ATTACK_STATE = (ATTACK_STATE + 1) % NUM_ATTACK_STATES;
|
||||
const char* ATTACK_strings[NUM_ATTACK_STATES] = {
|
||||
"NAIR", "FAIR", "BAIR", "UPAIR", "DAIR",
|
||||
|
|
|
@ -41,15 +41,31 @@ int LEDGE_STATE = RANDOM_LEDGE;
|
|||
#define NUM_LEDGE_STATES 5
|
||||
|
||||
// Down Taunt
|
||||
#define MASH_TOGGLES 0
|
||||
#define ESCAPE_TOGGLES 1
|
||||
#define SHIELD_TOGGLES 2
|
||||
int TOGGLE_STATE = MASH_TOGGLES;
|
||||
#define NUM_TOGGLE_STATES 3
|
||||
|
||||
// Mash States
|
||||
#define MASH_AIRDODGE 1
|
||||
#define MASH_JUMP 2
|
||||
#define MASH_ATTACK 3
|
||||
#define MASH_RANDOM 4
|
||||
#define INFINITE_SHIELD 5
|
||||
#define HOLD_SHIELD 6
|
||||
#define LEDGE_OPTION 7
|
||||
#define MASH_RANDOM 3
|
||||
int MASH_STATE = NONE;
|
||||
#define NUM_MASH_STATES 4
|
||||
#define MASH_ATTACK 4 // unused for now
|
||||
|
||||
// Escape States
|
||||
#define ESCAPE_LEDGE 1
|
||||
int ESCAPE_STATE = ESCAPE_LEDGE;
|
||||
#define NUM_ESCAPE_STATES 2
|
||||
|
||||
// Shield States
|
||||
#define SHIELD_INFINITE 1
|
||||
#define SHIELD_HOLD 2
|
||||
int SHIELD_STATE = NONE;
|
||||
#define NUM_SHIELD_STATES 3
|
||||
|
||||
|
||||
int TOGGLE_STATE = NONE;
|
||||
#define NUM_TOGGLE_STATES 8
|
||||
|
||||
#endif // TAUNT_TOGGLES_H
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#include <stdarg.h>
|
||||
#include "useful/const_value_table.h"
|
||||
#include "useful/crc32.h"
|
||||
#include "useful/useful.h"
|
||||
|
@ -84,7 +85,7 @@ float get_float_replace(u64 module_accessor, int var) {
|
|||
float get_param_float_replace(u64 module_accessor, u64 param_type,
|
||||
u64 param_hash) {
|
||||
if (is_training_mode()) {
|
||||
if (TOGGLE_STATE == INFINITE_SHIELD) {
|
||||
if (SHIELD_STATE == SHIELD_INFINITE) {
|
||||
if (param_type == hash40("common")) {
|
||||
if (param_hash == hash40("shield_dec1")) return 0.0;
|
||||
if (param_hash == hash40("shield_recovery1")) return 999.0;
|
||||
|
@ -104,7 +105,7 @@ float get_param_float_replace(u64 module_accessor, u64 param_type,
|
|||
|
||||
// Force ledge option
|
||||
u64 enable_transition_term_replace(u64 module_accessor, int transition_id) {
|
||||
if (TOGGLE_STATE == LEDGE_OPTION && is_training_mode() &&
|
||||
if (ESCAPE_STATE == ESCAPE_LEDGE && is_training_mode() &&
|
||||
is_operation_cpu(module_accessor)) {
|
||||
if (StatusModule::status_kind(module_accessor) == FIGHTER_STATUS_KIND_CLIFF_WAIT) {
|
||||
if (transition_id == FIGHTER_STATUS_TRANSITION_TERM_ID_CONT_CLIFF_CLIMB) {
|
||||
|
@ -148,7 +149,7 @@ int get_attack_air_kind_replace(u64 module_accessor) {
|
|||
int kind = get_attack_air_kind(control_module);
|
||||
|
||||
if (is_training_mode() && is_operation_cpu(module_accessor)) {
|
||||
if (TOGGLE_STATE == MASH_ATTACK) {
|
||||
if (MASH_STATE == MASH_ATTACK) {
|
||||
switch (ATTACK_STATE) {
|
||||
case MASH_NAIR:
|
||||
kind = FIGHTER_COMMAND_ATTACK_AIR_KIND_N; break;
|
||||
|
@ -163,7 +164,7 @@ int get_attack_air_kind_replace(u64 module_accessor) {
|
|||
}
|
||||
}
|
||||
|
||||
if (TOGGLE_STATE == MASH_RANDOM) {
|
||||
if (MASH_STATE == MASH_RANDOM) {
|
||||
kind = app::sv_math::rand(hash40("fighter"), 5) + 1;
|
||||
}
|
||||
}
|
||||
|
@ -180,15 +181,15 @@ int get_command_flag_cat_replace(u64 module_accessor, int category) {
|
|||
|
||||
if (is_training_mode() && is_operation_cpu(module_accessor)) {
|
||||
if (is_in_hitstun(module_accessor) || is_in_landing(module_accessor)) {
|
||||
if (TOGGLE_STATE == MASH_AIRDODGE)
|
||||
if (MASH_STATE == MASH_AIRDODGE)
|
||||
if (category == FIGHTER_PAD_COMMAND_CATEGORY1)
|
||||
flag |= FIGHTER_PAD_CMD_CAT1_FLAG_AIR_ESCAPE;
|
||||
|
||||
if (TOGGLE_STATE == MASH_JUMP)
|
||||
if (MASH_STATE == MASH_JUMP)
|
||||
if (category == FIGHTER_PAD_COMMAND_CATEGORY1)
|
||||
flag |= FIGHTER_PAD_CMD_CAT1_FLAG_JUMP_BUTTON;
|
||||
|
||||
if (TOGGLE_STATE == MASH_ATTACK)
|
||||
if (MASH_STATE == MASH_ATTACK)
|
||||
if (category == FIGHTER_PAD_COMMAND_CATEGORY1) {
|
||||
switch (ATTACK_STATE) {
|
||||
case MASH_NAIR:
|
||||
|
@ -208,7 +209,7 @@ int get_command_flag_cat_replace(u64 module_accessor, int category) {
|
|||
}
|
||||
}
|
||||
|
||||
if (TOGGLE_STATE == MASH_RANDOM)
|
||||
if (MASH_STATE == MASH_RANDOM)
|
||||
if (category == FIGHTER_PAD_COMMAND_CATEGORY1) {
|
||||
int situation_kind = StatusModule::situation_kind(module_accessor);
|
||||
|
||||
|
@ -268,9 +269,9 @@ bool check_button_on_replace(u64 module_accessor, int button) {
|
|||
if (button == CONTROL_PAD_BUTTON_GUARD_HOLD ||
|
||||
button == CONTROL_PAD_BUTTON_GUARD) {
|
||||
if (is_training_mode() && is_operation_cpu(module_accessor)) {
|
||||
if (TOGGLE_STATE == HOLD_SHIELD || TOGGLE_STATE == INFINITE_SHIELD)
|
||||
if (SHIELD_STATE == SHIELD_HOLD || SHIELD_STATE == SHIELD_INFINITE)
|
||||
return true;
|
||||
if (TOGGLE_STATE == MASH_AIRDODGE &&
|
||||
if (MASH_STATE == MASH_AIRDODGE &&
|
||||
(is_in_hitstun(module_accessor) || is_in_landing(module_accessor)))
|
||||
return true;
|
||||
}
|
||||
|
@ -287,7 +288,7 @@ bool check_button_off_replace(u64 module_accessor, int button) {
|
|||
if (button == CONTROL_PAD_BUTTON_GUARD_HOLD ||
|
||||
button == CONTROL_PAD_BUTTON_GUARD) {
|
||||
if (is_training_mode() && is_operation_cpu(module_accessor)) {
|
||||
if (TOGGLE_STATE == HOLD_SHIELD || TOGGLE_STATE == INFINITE_SHIELD)
|
||||
if (SHIELD_STATE == SHIELD_HOLD || SHIELD_STATE == SHIELD_INFINITE)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -427,6 +428,25 @@ int get_pad_flag_replace(u64 module_accessor) {
|
|||
} // namespace ControlModule
|
||||
} // namespace app::lua_bind
|
||||
|
||||
extern int vsnprintf(char * s, size_t n, const char * format, va_list arg) LINKABLE;
|
||||
|
||||
int vsnprintf_intercept(char * s, size_t n, const char * format, va_list arg) {
|
||||
if (strcmp(format, "mel_training_help_invincible0") == 0) {
|
||||
HITBOX_VIS = false;
|
||||
} else if (strcmp(format, "mel_training_help_invincible1") == 0) {
|
||||
HITBOX_VIS = true;
|
||||
} else if (strcmp(format, "mel_training_help_shift0") == 0) {
|
||||
TOGGLE_STATE = MASH_TOGGLES;
|
||||
} else if (strcmp(format, "mel_training_help_shift1") == 0) {
|
||||
TOGGLE_STATE = ESCAPE_TOGGLES;
|
||||
} else if (strcmp(format, "mel_training_help_shift2") == 0) {
|
||||
TOGGLE_STATE = SHIELD_TOGGLES;
|
||||
}
|
||||
|
||||
|
||||
return vsnprintf(s, n, format, arg);
|
||||
}
|
||||
|
||||
void training_mods_main() {
|
||||
fighter_manager_addr = SaltySDCore_FindSymbol(
|
||||
"_ZN3lib9SingletonIN3app14FighterManagerEE9instance_E");
|
||||
|
@ -465,6 +485,10 @@ void training_mods_main() {
|
|||
/*SaltySD_function_replace_sym(
|
||||
"_ZN3app8lua_bind32ControlModule__get_pad_flag_implEPNS_26BattleObjectModuleAccessorE",
|
||||
(u64)&ControlModule::get_pad_flag_replace);*/
|
||||
|
||||
// Menu replacements
|
||||
SaltySDCore_ReplaceImport("vsnprintf", (void*) vsnprintf_intercept);
|
||||
|
||||
}
|
||||
|
||||
#endif // TRAINING_MODS_H
|
||||
|
|
|
@ -64,15 +64,12 @@ const char segment_rev[15] = {
|
|||
|
||||
void show_segment(u64 battle_object_module_accessor, float z, float y, float x,
|
||||
float zrot, float size) {
|
||||
Hash40 raygunShot = {.hash = 0x11e470b07fLL};
|
||||
Hash40 top = {.hash = 0x031ed91fcaLL};
|
||||
|
||||
Vector3f pos = {.x = x, .y = y, .z = z};
|
||||
Vector3f rot = {.x = 0, .y = 90, .z = zrot};
|
||||
Vector3f random = {.x = 0, .y = 0, .z = 0};
|
||||
|
||||
EffectModule::req_on_joint(battle_object_module_accessor, raygunShot.hash,
|
||||
top.hash, &pos, &rot, size, &random, &random, 0,
|
||||
EffectModule::req_on_joint(battle_object_module_accessor, hash40("sys_raygun_bullet"),
|
||||
hash40("top"), &pos, &rot, size, &random, &random, 0,
|
||||
0, 0, 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue