1
0
Fork 0
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:
jugeeya 2019-06-26 11:27:34 -07:00
parent ad825c9261
commit a6560a460f
6 changed files with 95 additions and 40 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -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);
}