Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
btl_states_actions.c File Reference

Go to the source code of this file.

Functions

void btl_merlee_on_start_turn (void)
 
void btl_merlee_on_first_strike (void)
 
void btl_set_state (s32 battleState)
 

Variables

BSS s32 BattleSubstateDelay
 
BSS b32 BattleSkipActorTurn
 
BSS b32 BattleCanShowFirstStrike
 
BSS s32 BattleStatusUpdateDelay
 

Function Documentation

◆ btl_merlee_on_start_turn()

void btl_merlee_on_start_turn ( void )

Definition at line 9 of file btl_states_actions.c.

9 {
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}
BSS s32 PopupMenu_SelectedIndex
#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
@ ACTOR_FLAG_NO_HEALTH_BAR
Definition enums.h:3371
EncounterStatus gCurrentEncounter
Definition encounter.c:175
PlayerData gPlayerData
Definition 77480.c:39
BattleStatus gBattleStatus
Definition battle.cpp:14

Referenced by btl_state_update_begin_turn().

◆ btl_merlee_on_first_strike()

void btl_merlee_on_first_strike ( void )

Definition at line 65 of file btl_states_actions.c.

65 {
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}

Referenced by btl_state_update_first_strike().

◆ btl_set_state()

void btl_set_state ( s32 battleState)

Definition at line 127 of file btl_states_actions.c.

127 {
130
132 switch (battleState) {
135 break;
138 break;
141 break;
144 break;
145 }
147 }
148}
@ 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
@ BTL_SUBSTATE_INIT
Definition states.h:8
s32 gBattleState
Definition battle.cpp:13
s32 gBattleSubState
Definition battle.cpp:17

Referenced by btl_check_enemies_defeated(), btl_check_player_defeated(), btl_state_update_begin_partner_turn(), btl_state_update_begin_player_turn(), btl_state_update_begin_turn(), btl_state_update_celebration(), btl_state_update_change_partner(), btl_state_update_defeat(), btl_state_update_defend(), btl_state_update_end_battle(), btl_state_update_end_demo_battle(), btl_state_update_end_partner_turn(), btl_state_update_end_player_turn(), btl_state_update_end_training_battle(), btl_state_update_end_turn(), btl_state_update_enemy_move(), btl_state_update_enemy_striking_first(), btl_state_update_first_strike(), btl_state_update_next_enemy(), btl_state_update_normal_start(), btl_state_update_partner_menu(), btl_state_update_partner_move(), btl_state_update_partner_striking_first(), btl_state_update_peach_menu(), btl_state_update_player_menu(), btl_state_update_player_move(), btl_state_update_prepare_menu(), btl_state_update_run_away(), btl_state_update_select_target(), btl_state_update_switch_to_partner(), btl_state_update_switch_to_player(), btl_state_update_transfer_turn(), btl_state_update_twink_menu(), btl_state_update_victory(), btl_update(), and load_battle_section().

Variable Documentation

◆ BattleSubstateDelay

◆ BattleSkipActorTurn

◆ BattleCanShowFirstStrike

◆ BattleStatusUpdateDelay