Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
btl_states_actions.c
Go to the documentation of this file.
1#include "common.h"
3
4BSS s32 BattleSubstateDelay; // generic delay time usable for various substates
8
13
15 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_EXP_BOOST
16 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_COIN_BOOST
17 && playerData->merleeCastsLeft > 0
18 ) {
19 if (playerData->merleeTurnCount <= 0) {
20 s32 temp = rand_int(100);
21
22 if (currentEncounter->curEnemy != NULL) {
23 if (currentEncounter->curEnemy->flags & ACTOR_FLAG_NO_HEALTH_BAR) {
24 // 46/101 ≈ 45.5%
25 if (temp <= 45) {
26 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
27 } else if (temp <= 90) { // 45/101 ≈ 44.6%
28 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
29 } else { // 10/101 ≈ 9.9%
30 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
31 }
32 } else if (temp <= 30) { // 31/101 ≈ 30.7%
33 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
34 } else if (temp <= 60) { // 30/101 ≈ 29.7%
35 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
36 } else if (temp <= 80) { // 20/101 ≈ 19.8%
37 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
38 } else { // 20/101 ≈ 19.8%
39 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
40 }
41 } else if (temp <= 30) { // 31/101 ≈ 30.7%
42 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
43 } else if (temp <= 60) { // 30/101 ≈ 29.7%
44 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
45 } else if (temp <= 80) { // 20/101 ≈ 19.8%
46 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
47 } else { // 20/101 ≈ 19.8%
48 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
49 }
50
51 temp = rand_int(10) + 6;
52 playerData->merleeTurnCount = temp;
53 }
54
55 if (playerData->merleeTurnCount >= 2) {
56 playerData->merleeTurnCount--;
57 } else {
58 playerData->merleeTurnCount = 0;
59 battleStatus->nextMerleeSpellType = playerData->merleeSpellType;
60 playerData->merleeCastsLeft--;
61 }
62 }
63}
64
69
71 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_EXP_BOOST
72 && battleStatus->nextMerleeSpellType != MERLEE_SPELL_COIN_BOOST
73 && playerData->merleeCastsLeft > 0)
74 {
75 if (playerData->merleeTurnCount <= 0) {
76 s32 temp = rand_int(100);
77
78 if (currentEncounter->curEnemy != NULL) {
79 if (currentEncounter->curEnemy->flags & ACTOR_FLAG_NO_HEALTH_BAR) {
80 // 46/101 ≈ 45.5%
81 if (temp <= 45) {
82 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
83 } else if (temp <= 90) { // 45/101 ≈ 44.6%
84 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
85 } else { // 10/101 ≈ 9.9%
86 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
87 }
88 } else if (temp <= 30) { // 31/101 ≈ 30.7%
89 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
90 } else if (temp <= 60) { // 30/101 ≈ 29.7%
91 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
92 } else if (temp <= 80) { // 20/101 ≈ 19.8%
93 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
94 } else { // 20/101 ≈ 19.8%
95 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
96 }
97 } else if (temp <= 30) { // 31/101 ≈ 30.7%
98 playerData->merleeSpellType = MERLEE_SPELL_ATK_BOOST;
99 } else if (temp <= 60) { // 30/101 ≈ 29.7%
100 playerData->merleeSpellType = MERLEE_SPELL_DEF_BOOST;
101 } else if (temp <= 80) { // 20/101 ≈ 19.8%
102 playerData->merleeSpellType = MERLEE_SPELL_EXP_BOOST;
103 } else { // 20/101 ≈ 19.8%
104 playerData->merleeSpellType = MERLEE_SPELL_COIN_BOOST;
105 }
106
107 if (playerData->merleeSpellType == MERLEE_SPELL_COIN_BOOST) {
108 temp = rand_int(8) + 5;
109 } else {
110 temp = rand_int(5) + 5;
111 }
112 playerData->merleeTurnCount = temp;
113 }
114
115 if (playerData->merleeSpellType == MERLEE_SPELL_EXP_BOOST || playerData->merleeSpellType == MERLEE_SPELL_COIN_BOOST) {
116 if (playerData->merleeTurnCount >= 2) {
117 playerData->merleeTurnCount--;
118 } else {
119 battleStatus->nextMerleeSpellType = playerData->merleeSpellType;
120 playerData->merleeTurnCount = 0;
121 playerData->merleeCastsLeft--;
122 }
123 }
124 }
125}
126
BSS s32 PopupMenu_SelectedIndex
BSS s32 BattleStatusUpdateDelay
BSS b32 BattleCanShowFirstStrike
BSS s32 BattleSubstateDelay
void btl_merlee_on_first_strike(void)
void btl_set_state(s32 battleState)
BSS b32 BattleSkipActorTurn
void btl_merlee_on_start_turn(void)
s32 b32
#define rand_int
@ MERLEE_SPELL_COIN_BOOST
Definition enums.h:1940
@ MERLEE_SPELL_EXP_BOOST
Definition enums.h:1939
@ MERLEE_SPELL_ATK_BOOST
Definition enums.h:1937
@ MERLEE_SPELL_DEF_BOOST
Definition enums.h:1938
@ BS_FLAGS2_PEACH_BATTLE
Definition enums.h:3643
@ BATTLE_STATE_BEGIN_PARTNER_TURN
Definition enums.h:3672
@ BATTLE_STATE_PLAYER_MENU
Definition enums.h:3677
@ BATTLE_STATE_PEACH_MENU
Definition enums.h:3679
@ BATTLE_STATE_PARTNER_MENU
Definition enums.h:3678
@ BATTLE_STATE_BEGIN_PLAYER_TURN
Definition enums.h:3671
@ BATTLE_STATE_TWINK_MENU
Definition enums.h:3680
@ ACTOR_FLAG_NO_HEALTH_BAR
Definition enums.h:3371
EncounterStatus gCurrentEncounter
Definition encounter.c:175
#define BSS
Definition macros.h:7
@ BTL_SUBSTATE_INIT
Definition states.h:8
s32 gBattleState
Definition battle.cpp:13
PlayerData gPlayerData
Definition 77480.c:39
BattleStatus gBattleStatus
Definition battle.cpp:14
s32 gBattleSubState
Definition battle.cpp:17