JonahZgo

G4RB4GE Kazuya flight code

Feb 1st, 2023
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.56 KB | None | 0 0
  1. use smash::hash40;
  2. use smash::app::*;
  3. use smash::app::lua_bind::*;
  4. use smash::lib::lua_const::*;
  5. use crate::FIGHTER_CUTIN_MANAGER_ADDR;
  6. use smash::app::utility::get_kind;
  7. use smashline::*;
  8. use smash_script::*;
  9. use smash::lua2cpp::*;
  10. use smash::Vector2f;
  11. use smash::app::BattleObjectModuleAccessor;
  12. use smash::phx::*;
  13. use smash::app::sv_battle_object;
  14. use skyline::nn::ro::LookupSymbol;
  15. use smash::app::FighterSpecializer_Demon::*;
  16.  
  17. static mut FIGHTER_POS_X:[f32;8] = [0.0; 8];
  18. static mut FIGHTER_POS_Y:[f32;8] = [0.0; 8];
  19. static mut GROUND_CONTROL:[f32;8] = [0.0; 8];
  20. static mut STALL_CONTROL:[f32;8] = [0.0; 8];
  21. static mut IS_GLOCK: [bool;8] = [false; 8];
  22.  
  23. pub unsafe fn is_damage_check(module_accessor : *mut BattleObjectModuleAccessor) -> bool {
  24. if WorkModule::is_flag(module_accessor, *FIGHTER_INSTANCE_WORK_ID_FLAG_CAPTURE_YOSHI)
  25. || [
  26. *FIGHTER_STATUS_KIND_DAMAGE,
  27. *FIGHTER_STATUS_KIND_DAMAGE_AIR,
  28. *FIGHTER_STATUS_KIND_SAVING_DAMAGE,
  29. *FIGHTER_STATUS_KIND_SAVING_DAMAGE_AIR,
  30. *FIGHTER_STATUS_KIND_THROWN,
  31. *FIGHTER_STATUS_KIND_CAPTURE_WAIT,
  32. *FIGHTER_STATUS_KIND_CAPTURE_DAMAGE,
  33. *FIGHTER_STATUS_KIND_CAPTURE_PULLED,
  34. *FIGHTER_STATUS_KIND_DAMAGE_FLY,
  35. *FIGHTER_STATUS_KIND_SAVING_DAMAGE_FLY,
  36. *FIGHTER_STATUS_KIND_DAMAGE_FLY_ROLL,
  37. *FIGHTER_STATUS_KIND_DAMAGE_FLY_METEOR,
  38. *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_LR,
  39. *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_U,
  40. *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_D,
  41. *FIGHTER_STATUS_KIND_FINAL,
  42. *FIGHTER_STATUS_KIND_SLEEP,
  43. *FIGHTER_STATUS_KIND_ESCAPE_B,
  44. *FIGHTER_STATUS_KIND_ESCAPE_F,
  45. *FIGHTER_STATUS_KIND_ESCAPE,
  46. *FIGHTER_STATUS_KIND_CLIFF_ESCAPE,
  47. *FIGHTER_STATUS_KIND_ESCAPE_AIR_SLIDE,
  48. *FIGHTER_STATUS_KIND_CAPTURE_JACK_WIRE,
  49. *FIGHTER_STATUS_KIND_CAPTURE_MASTERHAND,
  50. *FIGHTER_STATUS_KIND_CAPTURE_MASTER_SWORD,
  51. *FIGHTER_STATUS_KIND_CAPTURE_PULLED_FISHINGROD,
  52. *FIGHTER_STATUS_KIND_CAPTURE_PULLED_PICKEL,
  53. *FIGHTER_STATUS_KIND_SWALLOWED,
  54. *FIGHTER_STATUS_KIND_AIR_LASSO,
  55. *FIGHTER_STATUS_KIND_CATCHED_GANON,
  56. *FIGHTER_STATUS_KIND_CATCHED_AIR_GANON,
  57. *FIGHTER_STATUS_KIND_CATCHED_AIR_END_GANON,
  58. *FIGHTER_STATUS_KIND_CATCHED_AIR_FALL_GANON,
  59. *FIGHTER_STATUS_KIND_CATCHED_REFLET,
  60. *FIGHTER_STATUS_KIND_CATCHED_RIDLEY,
  61. *FIGHTER_STATUS_KIND_CATCHED_PICKEL_TROLLEY,
  62. *FIGHTER_STATUS_KIND_DEMON_DIVED,
  63. *FIGHTER_STATUS_KIND_TRAIL_REBOUND,
  64. *FIGHTER_STATUS_KIND_MISS_FOOT,
  65. *FIGHTER_STATUS_KIND_DEAD,
  66. *FIGHTER_STATUS_KIND_REBIRTH,
  67. *FIGHTER_STATUS_KIND_BURY,
  68. *FIGHTER_STATUS_KIND_BURY_WAIT,
  69. *FIGHTER_STATUS_KIND_ICE,
  70. *FIGHTER_STATUS_KIND_DOWN_DAMAGE,
  71. *FIGHTER_STATUS_KIND_DOWN_STAND_FB,
  72. *FIGHTER_STATUS_KIND_DOWN_STAND,
  73. *FIGHTER_STATUS_KIND_DOWN_WAIT,
  74. *FIGHTER_STATUS_KIND_DOWN_EAT,
  75. *FIGHTER_STATUS_KIND_LAY_DOWN,
  76. *FIGHTER_STATUS_KIND_DOWN,
  77. *FIGHTER_STATUS_KIND_DOWN_SPOT,
  78. *FIGHTER_STATUS_KIND_PASSIVE,
  79. *FIGHTER_STATUS_KIND_PASSIVE_WALL,
  80. *FIGHTER_STATUS_KIND_PASSIVE_CEIL,
  81. *FIGHTER_STATUS_KIND_PASSIVE_FB //Extra checking idk
  82. ].contains(&StatusModule::status_kind(module_accessor)) || FighterStopModuleImpl::is_damage_stop(module_accessor) {
  83. return true;
  84. }
  85. else {
  86. return false;
  87. }
  88. }
  89.  
  90. #[fighter_frame( agent = FIGHTER_KIND_DEMON )]
  91. fn igotaglockinmyrari(fighter : &mut L2CFighterCommon) {
  92. unsafe {
  93. let module_accessor = smash::app::sv_system::battle_object_module_accessor(fighter.lua_state_agent);
  94. let kind = smash::app::utility::get_kind(module_accessor);
  95. let status_kind = StatusModule::status_kind(module_accessor);
  96. let motion_kind = MotionModule::motion_kind(module_accessor);
  97. let entry_id = WorkModule::get_int(module_accessor, *FIGHTER_INSTANCE_WORK_ID_INT_ENTRY_ID) as usize;
  98.  
  99. FIGHTER_POS_Y[entry_id] = PostureModule::pos_y(module_accessor);
  100. FIGHTER_POS_X[entry_id] = PostureModule::pos_x(module_accessor);
  101. if kind == *FIGHTER_KIND_DEMON {
  102. if status_kind == *FIGHTER_STATUS_KIND_JUMP_SQUAT || status_kind == *FIGHTER_STATUS_KIND_JUMP || status_kind == *FIGHTER_STATUS_KIND_JUMP_AERIAL || status_kind == *FIGHTER_STATUS_KIND_ATTACK_S3 || status_kind == *FIGHTER_STATUS_KIND_SPECIAL_N || status_kind == *FIGHTER_STATUS_KIND_SPECIAL_S || status_kind == *FIGHTER_STATUS_KIND_SPECIAL_HI || status_kind == *FIGHTER_STATUS_KIND_SPECIAL_LW {
  103. IS_GLOCK[entry_id] = true;
  104. }
  105. else if status_kind == *FIGHTER_STATUS_KIND_DEAD || status_kind == *FIGHTER_STATUS_KIND_ENTRY || motion_kind == smash::hash40("win_1") || motion_kind == smash::hash40("win_2") || motion_kind == smash::hash40("win_3") || motion_kind == smash::hash40("lose") {
  106. IS_GLOCK[entry_id] = false;
  107. }
  108.  
  109. if !is_damage_check(module_accessor) && IS_GLOCK[entry_id] && StatusModule::situation_kind(module_accessor) == *SITUATION_KIND_AIR {
  110. STALL_CONTROL[entry_id] += 1.0;
  111. if STALL_CONTROL[entry_id] == 300.0 {
  112. GROUND_CONTROL[entry_id] = 155.0;
  113. }
  114. if STALL_CONTROL[entry_id] > 300.0 {
  115. GROUND_CONTROL[entry_id] += 2.0;
  116. }
  117. if ControlModule::get_stick_x(module_accessor) <= -0.8{
  118. FIGHTER_POS_X[entry_id] -= 1.55;
  119. }
  120. else if ControlModule::get_stick_x(module_accessor) <= -0.6928 && ControlModule::get_stick_x(module_accessor) > -0.8 {
  121. FIGHTER_POS_X[entry_id] -= 1.34;
  122. }
  123. else if ControlModule::get_stick_x(module_accessor) <= -0.5657 && ControlModule::get_stick_x(module_accessor) > -0.6928 {
  124. FIGHTER_POS_X[entry_id] -= 1.1;
  125. }
  126. else if ControlModule::get_stick_x(module_accessor) <= -0.4 && ControlModule::get_stick_x(module_accessor) > -0.5657 {
  127. FIGHTER_POS_X[entry_id] -= 0.78;
  128. }
  129. else if ControlModule::get_stick_x(module_accessor) <= -0.25 && ControlModule::get_stick_x(module_accessor) > -0.4 {
  130. FIGHTER_POS_X[entry_id] -= 0.48;
  131. }
  132. else if ControlModule::get_stick_x(module_accessor) >= 0.8{
  133. FIGHTER_POS_X[entry_id] += 1.55;
  134. }
  135. else if ControlModule::get_stick_x(module_accessor) >= 0.6928 && ControlModule::get_stick_x(module_accessor) < 0.8 {
  136. FIGHTER_POS_X[entry_id] += 1.34;
  137. }
  138. else if ControlModule::get_stick_x(module_accessor) >= 0.5657 && ControlModule::get_stick_x(module_accessor) < 0.6928 {
  139. FIGHTER_POS_X[entry_id] += 1.1;
  140. }
  141. else if ControlModule::get_stick_x(module_accessor) >= 0.4 && ControlModule::get_stick_x(module_accessor) < 0.5657 {
  142. FIGHTER_POS_X[entry_id] += 0.78;
  143. }
  144. else if ControlModule::get_stick_x(module_accessor) >= 0.25 && ControlModule::get_stick_x(module_accessor) < 0.4 {
  145. FIGHTER_POS_X[entry_id] += 0.48;
  146. }
  147. if ControlModule::get_stick_y(module_accessor) > 0.24 {
  148. GROUND_CONTROL[entry_id] += 1.0;
  149. }
  150. if ControlModule::get_stick_y(module_accessor) <= -0.8{
  151. if GROUND_CONTROL[entry_id] > 310.0 {
  152. FIGHTER_POS_Y[entry_id] -= 1.55 + (0.01*(GROUND_CONTROL[entry_id] - 310.0));
  153. }
  154. else {
  155. FIGHTER_POS_Y[entry_id] -= 1.55;
  156. }
  157. }
  158. else if ControlModule::get_stick_y(module_accessor) <= -0.6928 && ControlModule::get_stick_y(module_accessor) > -0.8 {
  159. if GROUND_CONTROL[entry_id] > 289.0 {
  160. FIGHTER_POS_Y[entry_id] -= 1.34 + (0.01*(GROUND_CONTROL[entry_id] - 289.0));
  161. }
  162. else {
  163. FIGHTER_POS_Y[entry_id] -= 1.34;
  164. }
  165. }
  166. else if ControlModule::get_stick_y(module_accessor) <= -0.5657 && ControlModule::get_stick_y(module_accessor) > -0.6928 {
  167. if GROUND_CONTROL[entry_id] > 265.0 {
  168. FIGHTER_POS_Y[entry_id] -= 1.1 + (0.01*(GROUND_CONTROL[entry_id] - 265.0));
  169. }
  170. else {
  171. FIGHTER_POS_Y[entry_id] -= 1.1;
  172. }
  173. }
  174. else if ControlModule::get_stick_y(module_accessor) <= -0.4 && ControlModule::get_stick_y(module_accessor) > -0.5657 {
  175. if GROUND_CONTROL[entry_id] > 233.0 {
  176. FIGHTER_POS_Y[entry_id] -= 0.78 + (0.01*(GROUND_CONTROL[entry_id] - 233.0));
  177. }
  178. else {
  179. FIGHTER_POS_Y[entry_id] -= 0.78;
  180. }
  181. }
  182. else if ControlModule::get_stick_y(module_accessor) <= -0.25 && ControlModule::get_stick_y(module_accessor) > -0.4 {
  183. if GROUND_CONTROL[entry_id] > 203.0 {
  184. FIGHTER_POS_Y[entry_id] -= 0.48 + (0.01*(GROUND_CONTROL[entry_id] - 203.0));
  185. }
  186. else {
  187. FIGHTER_POS_Y[entry_id] -= 0.48;
  188. }
  189. }
  190. else if ControlModule::get_stick_y(module_accessor) < 0.25 && ControlModule::get_stick_y(module_accessor) > -0.25 {
  191. if GROUND_CONTROL[entry_id] > 155.0 {
  192. FIGHTER_POS_Y[entry_id] -= 0.0 + (0.01*(GROUND_CONTROL[entry_id] - 155.0));
  193. }
  194. else {
  195. FIGHTER_POS_Y[entry_id] -= 0.0;
  196. }
  197. }
  198. else if ControlModule::get_stick_y(module_accessor) >= 0.8{
  199. FIGHTER_POS_Y[entry_id] += 1.55 - (0.01*GROUND_CONTROL[entry_id]);
  200. }
  201. else if ControlModule::get_stick_y(module_accessor) >= 0.6928 && ControlModule::get_stick_y(module_accessor) < 0.8 {
  202. if GROUND_CONTROL[entry_id] > 21.0 {
  203. FIGHTER_POS_Y[entry_id] -= -1.34 + (0.01*(GROUND_CONTROL[entry_id] - 21.0));
  204. }
  205. else {
  206. FIGHTER_POS_Y[entry_id] -= -1.34;
  207. }
  208. }
  209. else if ControlModule::get_stick_y(module_accessor) >= 0.5657 && ControlModule::get_stick_y(module_accessor) < 0.6928 {
  210. if GROUND_CONTROL[entry_id] > 45.0 {
  211. FIGHTER_POS_Y[entry_id] -= -1.1 + (0.01*(GROUND_CONTROL[entry_id] - 45.0));
  212. }
  213. else {
  214. FIGHTER_POS_Y[entry_id] -= -1.1;
  215. }
  216. }
  217. else if ControlModule::get_stick_y(module_accessor) >= 0.4 && ControlModule::get_stick_y(module_accessor) < 0.5657 {
  218. if GROUND_CONTROL[entry_id] > 77.0 {
  219. FIGHTER_POS_Y[entry_id] -= -0.78 + (0.01*(GROUND_CONTROL[entry_id] - 77.0));
  220. }
  221. else {
  222. FIGHTER_POS_Y[entry_id] -= -0.78;
  223. }
  224. }
  225. else if ControlModule::get_stick_y(module_accessor) >= 0.25 && ControlModule::get_stick_y(module_accessor) < 0.4 {
  226. if GROUND_CONTROL[entry_id] > 107.0 {
  227. FIGHTER_POS_Y[entry_id] -= -0.48 + (0.01*(GROUND_CONTROL[entry_id] - 107.0));
  228. }
  229. else {
  230. FIGHTER_POS_Y[entry_id] -= -0.48;
  231. }
  232. }
  233. PostureModule::set_pos_2d(module_accessor, &smash::phx::Vector2f{
  234. x: FIGHTER_POS_X[entry_id], y: FIGHTER_POS_Y[entry_id]
  235. });
  236. KineticModule::unable_energy(module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY);
  237. }
  238. else{
  239. STALL_CONTROL[entry_id] = 0.0;
  240. GROUND_CONTROL[entry_id] = 0.0;
  241. if status_kind == *FIGHTER_STATUS_KIND_REBIRTH || status_kind == *FIGHTER_STATUS_KIND_WIN || status_kind == *FIGHTER_STATUS_KIND_LOSE || status_kind == *FIGHTER_STATUS_KIND_ENTRY || motion_kind == smash::hash40("win_1") || motion_kind == smash::hash40("win_2") || motion_kind == smash::hash40("win_3") || motion_kind == smash::hash40("win_1_wait") || motion_kind == smash::hash40("win_2_wait") || motion_kind == smash::hash40("win_3_wait") || motion_kind == smash::hash40("lose") || (status_kind == *FIGHTER_STATUS_KIND_DEAD && motion_kind == smash::hash40("fall_damage")) {
  242. KineticModule::unable_energy(module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY);
  243. }
  244. else {
  245. KineticModule::enable_energy(module_accessor, *FIGHTER_KINETIC_ENERGY_ID_GRAVITY);
  246. }
  247. }
  248. }
  249. }
  250. }
  251.  
  252. #[fighter_frame( agent = FIGHTER_KIND_DEMON )]
  253. fn kazuya_air_specials(fighter: &mut L2CFighterCommon) {
  254. unsafe {
  255. let module_accessor = smash::app::sv_system::battle_object_module_accessor(fighter.lua_state_agent);
  256. let motion_kind = MotionModule::motion_kind(module_accessor);
  257. let status_kind = StatusModule::status_kind(module_accessor);
  258. let entry_id = WorkModule::get_int(module_accessor, *FIGHTER_INSTANCE_WORK_ID_INT_ENTRY_ID) as usize;
  259. let kind = smash::app::utility::get_kind(module_accessor);
  260.  
  261. if kind == *FIGHTER_KIND_DEMON {
  262. if StatusModule::situation_kind(module_accessor) == SITUATION_KIND_GROUND
  263. || StatusModule::situation_kind(module_accessor) == SITUATION_KIND_CLIFF
  264. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE
  265. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_AIR
  266. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY
  267. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY_ROLL
  268. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY_METEOR
  269. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_LR
  270. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_U
  271. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FLY_REFLECT_D
  272. || status_kind == *FIGHTER_STATUS_KIND_DAMAGE_FALL {
  273. UP_B[entry_id] = true;
  274. SIDE_B[entry_id] = true;
  275. }
  276. if status_kind == FIGHTER_STATUS_KIND_SPECIAL_HI {
  277. UP_B[entry_id] = false;
  278. }
  279. if status_kind == FIGHTER_STATUS_KIND_SPECIAL_S {
  280. SIDE_B[entry_id] = false;
  281. }
  282. if ControlModule::get_stick_x(module_accessor) <= -0.7 && ControlModule::check_button_on(module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) && StatusModule::situation_kind(module_accessor) == *SITUATION_KIND_AIR && !is_damage_check(module_accessor)
  283. || ControlModule::get_stick_x(module_accessor) >= 0.7 && ControlModule::check_button_on(module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) && StatusModule::situation_kind(module_accessor) == *SITUATION_KIND_AIR && !is_damage_check(module_accessor) {
  284. if SIDE_B[entry_id] == true && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_LW && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_HI && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_N && motion_kind != smash::hash40("special_lw_catch") && motion_kind != smash::hash40("special_lw_fall") && motion_kind != smash::hash40("special_lw_ground") {
  285. StatusModule::change_status_request_from_script(module_accessor, *FIGHTER_STATUS_KIND_SPECIAL_S, true);
  286. }
  287. }
  288. if ControlModule::get_stick_y(module_accessor) >= 0.7 && ControlModule::check_button_on(module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) && !is_damage_check(module_accessor) && status_kind != *FIGHTER_STATUS_KIND_ESCAPE_AIR {
  289. if UP_B[entry_id] == true && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_LW && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_S && status_kind != *FIGHTER_STATUS_KIND_SPECIAL_N && motion_kind != smash::hash40("special_lw_catch") && motion_kind != smash::hash40("special_lw_ground") {
  290. StatusModule::change_status_request_from_script(module_accessor, *FIGHTER_STATUS_KIND_SPECIAL_HI, true);
  291. }
  292. }
  293. if ControlModule::get_stick_y(module_accessor) > -0.69 && ControlModule::get_stick_y(module_accessor) <= 0.69 && ControlModule::check_button_on(module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) && StatusModule::situation_kind(module_accessor) == *SITUATION_KIND_AIR && status_kind == *FIGHTER_STATUS_KIND_FALL
  294. || ControlModule::get_stick_y(module_accessor) > -0.69 && ControlModule::get_stick_y(module_accessor) <= 0.69 && ControlModule::check_button_on(module_accessor, *CONTROL_PAD_BUTTON_SPECIAL) && StatusModule::situation_kind(module_accessor) == *SITUATION_KIND_AIR && status_kind == *FIGHTER_STATUS_KIND_FALL_AERIAL {
  295. StatusModule::change_status_request_from_script(module_accessor, *FIGHTER_STATUS_KIND_SPECIAL_N, true);
  296. }
  297. }
  298. }
  299. }
  300.  
  301. pub fn install() {
  302. smashline::install_agent_frames!(
  303. igotaglockinmyrari,
  304. kazuya_air_specials
  305. );
  306. }
Advertisement
Add Comment
Please, Sign In to add comment