Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
battle.h File Reference

Go to the source code of this file.

Data Structures

struct  BattleMoveEntry
 
struct  ActorBlueprint
 
struct  FormationRow
 
struct  StaticFormationActor
 
struct  StaticFormationEntry
 
struct  Stage
 
struct  Battle
 Zero-terminated. More...
 
struct  StageListRow
 Zero-terminated. More...
 
struct  BattleArea
 
struct  ActorSounds
 
struct  ActorOffsets
 
struct  CelebrationAnimEntry
 
struct  CelebrationAnimOptions
 
union  FormationRow.home
 

Macros

#define STAGE_MODEL_LIST_END   0
 
#define BTL_MOVE(name, script)
 
#define BTL_ITEM(name)
 
#define BATTLE(formation, stage, name)   { name, ARRAY_COUNT(formation), (Formation*) formation, &stage }
 
#define BATTLE_WITH_SCRIPT(formation, stage, script, name)   { name, ARRAY_COUNT(formation), (Formation*) formation, &stage, &script }
 
#define ACTOR_BY_IDX(_name, _idx, _priority, args...)   { .actor = &_name, .home = { .index = _idx }, .priority = _priority, args }
 
#define ACTOR_BY_POS(_name, _pos, _priority, args...)   { .actor = &_name, .home = { .vec = &_pos }, .priority = _priority, args }
 
#define STAGE(_name, _stage)   { .name = _name, .stage = &_stage }
 
#define EXEC_DEATH_NO_SPINNING   -12345
 
#define ACTOR_API_SKIP_ARG   -12345678
 
#define DANGER_THRESHOLD   5
 
#define PERIL_THRESHOLD   1
 
#define POPUP_MSG_ON   99
 
#define POPUP_MSG_OFF   0
 

Typedefs

typedef FormationRow Formation[]
 
typedef Battle BattleList[]
 
typedef StageListRow StageList[]
 
typedef CelebrationAnimEntry CelebrationOptionSet[8]
 

Enumerations

enum  BattleAreaIDs {
  BTL_AREA_KMR_1 = 0x00 , BTL_AREA_KMR_2 = 0x01 , BTL_AREA_KMR_3 = 0x02 , BTL_AREA_MAC = 0x03 ,
  BTL_AREA_HOS = 0x04 , BTL_AREA_NOK = 0x05 , BTL_AREA_TRD_1 = 0x06 , BTL_AREA_TRD_2 = 0x07 ,
  BTL_AREA_TRD_3 = 0x08 , BTL_AREA_IWA = 0x09 , BTL_AREA_SBK = 0x0A , BTL_AREA_ISK_1 = 0x0B ,
  BTL_AREA_ISK_2 = 0x0C , BTL_AREA_MIM = 0x0D , BTL_AREA_ARN = 0x0E , BTL_AREA_DGB = 0x0F ,
  BTL_AREA_OMO = 0x10 , BTL_AREA_OMO2 = 0x11 , BTL_AREA_OMO3 = 0x12 , BTL_AREA_KGR = 0x13 ,
  BTL_AREA_JAN = 0x14 , BTL_AREA_JAN2 = 0x15 , BTL_AREA_KZN = 0x16 , BTL_AREA_KZN2 = 0x17 ,
  BTL_AREA_FLO = 0x18 , BTL_AREA_FLO2 = 0x19 , BTL_AREA_TIK = 0x1A , BTL_AREA_TIK2 = 0x1B ,
  BTL_AREA_TIK3 = 0x1C , BTL_AREA_SAM = 0x1D , BTL_AREA_SAM2 = 0x1E , BTL_AREA_PRA = 0x1F ,
  BTL_AREA_PRA2 = 0x20 , BTL_AREA_PRA3 = 0x21 , BTL_AREA_KPA = 0x22 , BTL_AREA_KPA2 = 0x23 ,
  BTL_AREA_KPA3 = 0x24 , BTL_AREA_KPA4 = 0x25 , BTL_AREA_KKJ = 0x26 , BTL_AREA_DIG = 0x27 ,
  BTL_AREA_UNUSED_28 = 0x28 , BTL_AREA_OMO2_1 = 0x29 , BTL_AREA_OMO2_2 = 0x2A , BTL_AREA_OMO2_3 = 0x2B ,
  BTL_AREA_OMO2_4 = 0x2C , BTL_AREA_OMO2_5 = 0x2D , BTL_AREA_OMO2_6 = 0x2E
}
 
enum  BattlePositions {
  BTL_POS_GROUND_A = 0 , BTL_POS_GROUND_B = 1 , BTL_POS_GROUND_C = 2 , BTL_POS_GROUND_D = 3 ,
  BTL_POS_AIR_A = 4 , BTL_POS_AIR_B = 5 , BTL_POS_AIR_C = 6 , BTL_POS_AIR_D = 7 ,
  BTL_POS_HIGH_A = 8 , BTL_POS_HIGH_B = 9 , BTL_POS_HIGH_C = 10 , BTL_POS_HIGH_D = 11 ,
  BTL_POS_TOP_A = 12 , BTL_POS_TOP_B = 13 , BTL_POS_TOP_C = 14 , BTL_POS_TOP_D = 15 ,
  BTL_POS_CENTER = 16
}
 
enum  BattleVars {
  BTL_VAR_DuplighostCopyFlags = 0 , BTL_VAL_Duplighost_HasCopied = 0x4 , BTL_VAR_HyperSync = 1 , BTL_VAL_HyperSync_None = 0 ,
  BTL_VAL_HyperSync_Done = 1 , BTL_VAL_HyperSync_Active = 2 , BTL_VAR_Magikoopa_LastIndexBoosted = 2 , BTL_VAR_LastCopiedPartner = 3 ,
  BTL_VAR_KoopatrolSummonCount_0 = 4 , BTL_VAR_KoopatrolSummonCount_1 = 5 , BTL_VAR_KoopatrolSummonCount_2 = 6 , BTL_VAR_KoopatrolSummonCount_3 = 7
}
 
enum  CommonActorVars { AVAR_DryBones_Collapsed = 8 , AVAR_SpearGuy_Generation = 1 , AVAR_JungleFuzzy_Generation = 0 }
 

Functions

void load_demo_battle (u32 index)
 
Actorcreate_actor (Formation formation)
 

Variables

EXTERN_C s32 bActorNames []
 
EXTERN_C BattleArea gBattleAreas [0x30]
 
EXTERN_C ActorSounds bActorSoundTable []
 
BattlegCurrentBattlePtr
 
ActorOffsets bActorOffsets []
 

Data Structure Documentation

◆ BattleMoveEntry

struct BattleMoveEntry
Data Fields
u8 * romStart
u8 * romEnd
u8 * vramStart
EvtScript * mainScript

◆ ActorBlueprint

struct ActorBlueprint
Data Fields
s32 flags
s16 maxHP
u8 type
u8 level
s16 partCount
char unk_0A[2]
struct ActorPartBlueprint * partsData
EvtScript * initScript
s32 * statusTable
u8 escapeChance
u8 airLiftChance
u8 hurricaneChance
u8 spookChance
u8 upAndAwayChance
u8 spinSmashReq
u8 powerBounceChance
u8 coinReward
Vec2b size
Vec2b healthBarOffset
Vec2b statusIconOffset
Vec2b statusTextOffset

◆ FormationRow

struct FormationRow
Data Fields
ActorBlueprint * actor
union FormationRow.home home
s32 priority Actors with higher priority values take their turn first.
s32 var0
s32 var1
s32 var2
s32 var3

◆ StaticFormationActor

struct StaticFormationActor
Data Fields
char unk_00[0x4]

◆ StaticFormationEntry

struct StaticFormationEntry
Data Fields
char * sjisName
s32 numActors
StaticFormationActor * actors
char * stageName
char unk_10[0x4]

◆ Stage

struct Stage
Data Fields
char * texture
const char * shape
const char * hit
EvtScript * preBattle
EvtScript * postBattle
char * bg
s32 * foregroundModelList
s32 stageEnemyCount
Formation * stageFormation
s32 stageEnemyChance

◆ Battle

struct Battle
Data Fields
const char * name Debug SJIS name.
s32 formationSize
Formation * formation
Stage * stage
EvtScript * onBattleStart

◆ StageListRow

struct StageListRow
Data Fields
const char * name Map ID.
Stage * stage

◆ BattleArea

struct BattleArea
Data Fields
char * name JP debug name.
void * dmaStart
void * dmaEnd
void * dmaDest
BattleList * battles
StageList * stages
s32 unused_18
DmaTable * dmaTable

◆ ActorSounds

struct ActorSounds
Data Fields
s32 walk[2]
s32 fly[2]
s32 jump
s32 hurt
s16 delay[2] Number of frames to wait between walk/fly sounds. Negative values are in distance.

◆ ActorOffsets

struct ActorOffsets
Data Fields
Vec3b tattleCam
s8 shadow

◆ CelebrationAnimEntry

struct CelebrationAnimEntry
Data Fields
s32 weight
AnimID anim

◆ CelebrationAnimOptions

struct CelebrationAnimOptions
Data Fields
s16 randomChance
s16 hpBasedChance
CelebrationOptionSet options[5]

◆ FormationRow.home

union FormationRow.home
Data Fields
s32 index
Vec3i * vec

Macro Definition Documentation

◆ STAGE_MODEL_LIST_END

◆ BTL_MOVE

#define BTL_MOVE ( name,
script )
Value:
{ \
.romStart = battle_move_##name##_ROM_START, \
.romEnd = battle_move_##name##_ROM_END, \
.vramStart = battle_move_##name##_VRAM, \
.mainScript = &battle_move_##name##_##script \
}
BSS s32 PopupMenu_SelectedIndex

Definition at line 114 of file battle.h.

114#define BTL_MOVE(name, script) \
115{ \
116 .romStart = battle_move_##name##_ROM_START, \
117 .romEnd = battle_move_##name##_ROM_END, \
118 .vramStart = battle_move_##name##_VRAM, \
119 .mainScript = &battle_move_##name##_##script \
120}

◆ BTL_ITEM

#define BTL_ITEM ( name)
Value:
{ \
.romStart = name##_ROM_START, \
.romEnd = name##_ROM_END, \
.vramStart = name##_VRAM, \
.mainScript = &battle_item_##name##_##EVS_UseItem \
}

Definition at line 122 of file battle.h.

122#define BTL_ITEM(name) \
123{ \
124 .romStart = name##_ROM_START, \
125 .romEnd = name##_ROM_END, \
126 .vramStart = name##_VRAM, \
127 .mainScript = &battle_item_##name##_##EVS_UseItem \
128}

◆ BATTLE

#define BATTLE ( formation,
stage,
name )   { name, ARRAY_COUNT(formation), (Formation*) formation, &stage }

Definition at line 226 of file battle.h.

◆ BATTLE_WITH_SCRIPT

#define BATTLE_WITH_SCRIPT ( formation,
stage,
script,
name )   { name, ARRAY_COUNT(formation), (Formation*) formation, &stage, &script }

Definition at line 227 of file battle.h.

◆ ACTOR_BY_IDX

#define ACTOR_BY_IDX ( _name,
_idx,
_priority,
args... )   { .actor = &_name, .home = { .index = _idx }, .priority = _priority, args }

Definition at line 229 of file battle.h.

◆ ACTOR_BY_POS

#define ACTOR_BY_POS ( _name,
_pos,
_priority,
args... )   { .actor = &_name, .home = { .vec = &_pos }, .priority = _priority, args }

Definition at line 230 of file battle.h.

Referenced by A(), A(), A(), A(), A(), A(), A(), and A().

◆ STAGE

#define STAGE ( _name,
_stage )   { .name = _name, .stage = &_stage }

Definition at line 232 of file battle.h.

◆ EXEC_DEATH_NO_SPINNING

#define EXEC_DEATH_NO_SPINNING   -12345

Definition at line 273 of file battle.h.

◆ ACTOR_API_SKIP_ARG

#define ACTOR_API_SKIP_ARG   -12345678

Definition at line 274 of file battle.h.

◆ DANGER_THRESHOLD

◆ PERIL_THRESHOLD

#define PERIL_THRESHOLD   1

◆ POPUP_MSG_ON

#define POPUP_MSG_ON   99

Definition at line 279 of file battle.h.

Referenced by update().

◆ POPUP_MSG_OFF

#define POPUP_MSG_OFF   0

Definition at line 280 of file battle.h.

Referenced by action_command_free(), and update().

Typedef Documentation

◆ Formation

typedef FormationRow Formation[]

Definition at line 167 of file battle.h.

◆ BattleList

typedef Battle BattleList[]

Definition at line 203 of file battle.h.

◆ StageList

typedef StageListRow StageList[]

Definition at line 211 of file battle.h.

◆ CelebrationOptionSet

typedef CelebrationAnimEntry CelebrationOptionSet[8]

Definition at line 254 of file battle.h.

Enumeration Type Documentation

◆ BattleAreaIDs

Enumerator
BTL_AREA_KMR_1 
BTL_AREA_KMR_2 
BTL_AREA_KMR_3 
BTL_AREA_MAC 
BTL_AREA_HOS 
BTL_AREA_NOK 
BTL_AREA_TRD_1 
BTL_AREA_TRD_2 
BTL_AREA_TRD_3 
BTL_AREA_IWA 
BTL_AREA_SBK 
BTL_AREA_ISK_1 
BTL_AREA_ISK_2 
BTL_AREA_MIM 
BTL_AREA_ARN 
BTL_AREA_DGB 
BTL_AREA_OMO 
BTL_AREA_OMO2 
BTL_AREA_OMO3 
BTL_AREA_KGR 
BTL_AREA_JAN 
BTL_AREA_JAN2 
BTL_AREA_KZN 
BTL_AREA_KZN2 
BTL_AREA_FLO 
BTL_AREA_FLO2 
BTL_AREA_TIK 
BTL_AREA_TIK2 
BTL_AREA_TIK3 
BTL_AREA_SAM 
BTL_AREA_SAM2 
BTL_AREA_PRA 
BTL_AREA_PRA2 
BTL_AREA_PRA3 
BTL_AREA_KPA 
BTL_AREA_KPA2 
BTL_AREA_KPA3 
BTL_AREA_KPA4 
BTL_AREA_KKJ 
BTL_AREA_DIG 
BTL_AREA_UNUSED_28 
BTL_AREA_OMO2_1 
BTL_AREA_OMO2_2 
BTL_AREA_OMO2_3 
BTL_AREA_OMO2_4 
BTL_AREA_OMO2_5 
BTL_AREA_OMO2_6 

Definition at line 10 of file battle.h.

10 {
11 BTL_AREA_KMR_1 = 0x00,
12 BTL_AREA_KMR_2 = 0x01,
13 BTL_AREA_KMR_3 = 0x02,
14 BTL_AREA_MAC = 0x03,
15 BTL_AREA_HOS = 0x04,
16 BTL_AREA_NOK = 0x05,
17 BTL_AREA_TRD_1 = 0x06,
18 BTL_AREA_TRD_2 = 0x07,
19 BTL_AREA_TRD_3 = 0x08,
20 BTL_AREA_IWA = 0x09,
21 BTL_AREA_SBK = 0x0A,
22 BTL_AREA_ISK_1 = 0x0B,
23 BTL_AREA_ISK_2 = 0x0C,
24 BTL_AREA_MIM = 0x0D,
25 BTL_AREA_ARN = 0x0E,
26 BTL_AREA_DGB = 0x0F,
27 BTL_AREA_OMO = 0x10,
28 BTL_AREA_OMO2 = 0x11,
29 BTL_AREA_OMO3 = 0x12,
30 BTL_AREA_KGR = 0x13,
31 BTL_AREA_JAN = 0x14,
32 BTL_AREA_JAN2 = 0x15,
33 BTL_AREA_KZN = 0x16,
34 BTL_AREA_KZN2 = 0x17,
35 BTL_AREA_FLO = 0x18,
36 BTL_AREA_FLO2 = 0x19,
37 BTL_AREA_TIK = 0x1A,
38 BTL_AREA_TIK2 = 0x1B,
39 BTL_AREA_TIK3 = 0x1C,
40 BTL_AREA_SAM = 0x1D,
41 BTL_AREA_SAM2 = 0x1E,
42 BTL_AREA_PRA = 0x1F,
43 BTL_AREA_PRA2 = 0x20,
44 BTL_AREA_PRA3 = 0x21,
45 BTL_AREA_KPA = 0x22,
46 BTL_AREA_KPA2 = 0x23,
47 BTL_AREA_KPA3 = 0x24,
48 BTL_AREA_KPA4 = 0x25,
49 BTL_AREA_KKJ = 0x26,
50 BTL_AREA_DIG = 0x27,
51 BTL_AREA_UNUSED_28 = 0x28,
52 BTL_AREA_OMO2_1 = 0x29,
53 BTL_AREA_OMO2_2 = 0x2A,
54 BTL_AREA_OMO2_3 = 0x2B,
55 BTL_AREA_OMO2_4 = 0x2C,
56 BTL_AREA_OMO2_5 = 0x2D,
57 BTL_AREA_OMO2_6 = 0x2E,
58};
@ BTL_AREA_KGR
Definition battle.h:30
@ BTL_AREA_ISK_1
Definition battle.h:22
@ BTL_AREA_TRD_2
Definition battle.h:18
@ BTL_AREA_OMO
Definition battle.h:27
@ BTL_AREA_HOS
Definition battle.h:15
@ BTL_AREA_ISK_2
Definition battle.h:23
@ BTL_AREA_TRD_3
Definition battle.h:19
@ BTL_AREA_KMR_3
Definition battle.h:13
@ BTL_AREA_KZN2
Definition battle.h:34
@ BTL_AREA_TIK2
Definition battle.h:38
@ BTL_AREA_OMO2_5
Definition battle.h:56
@ BTL_AREA_KPA4
Definition battle.h:48
@ BTL_AREA_IWA
Definition battle.h:20
@ BTL_AREA_KPA2
Definition battle.h:46
@ BTL_AREA_NOK
Definition battle.h:16
@ BTL_AREA_KZN
Definition battle.h:33
@ BTL_AREA_MIM
Definition battle.h:24
@ BTL_AREA_UNUSED_28
Definition battle.h:51
@ BTL_AREA_KPA3
Definition battle.h:47
@ BTL_AREA_JAN2
Definition battle.h:32
@ BTL_AREA_OMO2_2
Definition battle.h:53
@ BTL_AREA_TIK
Definition battle.h:37
@ BTL_AREA_KKJ
Definition battle.h:49
@ BTL_AREA_SBK
Definition battle.h:21
@ BTL_AREA_KMR_1
Definition battle.h:11
@ BTL_AREA_OMO2_4
Definition battle.h:55
@ BTL_AREA_OMO2_3
Definition battle.h:54
@ BTL_AREA_DIG
Definition battle.h:50
@ BTL_AREA_TRD_1
Definition battle.h:17
@ BTL_AREA_OMO2_6
Definition battle.h:57
@ BTL_AREA_PRA
Definition battle.h:42
@ BTL_AREA_MAC
Definition battle.h:14
@ BTL_AREA_JAN
Definition battle.h:31
@ BTL_AREA_KMR_2
Definition battle.h:12
@ BTL_AREA_TIK3
Definition battle.h:39
@ BTL_AREA_ARN
Definition battle.h:25
@ BTL_AREA_SAM2
Definition battle.h:41
@ BTL_AREA_SAM
Definition battle.h:40
@ BTL_AREA_KPA
Definition battle.h:45
@ BTL_AREA_PRA2
Definition battle.h:43
@ BTL_AREA_FLO
Definition battle.h:35
@ BTL_AREA_OMO2_1
Definition battle.h:52
@ BTL_AREA_OMO2
Definition battle.h:28
@ BTL_AREA_FLO2
Definition battle.h:36
@ BTL_AREA_PRA3
Definition battle.h:44
@ BTL_AREA_OMO3
Definition battle.h:29
@ BTL_AREA_DGB
Definition battle.h:26

◆ BattlePositions

Enumerator
BTL_POS_GROUND_A 
BTL_POS_GROUND_B 
BTL_POS_GROUND_C 
BTL_POS_GROUND_D 
BTL_POS_AIR_A 
BTL_POS_AIR_B 
BTL_POS_AIR_C 
BTL_POS_AIR_D 
BTL_POS_HIGH_A 
BTL_POS_HIGH_B 
BTL_POS_HIGH_C 
BTL_POS_HIGH_D 
BTL_POS_TOP_A 
BTL_POS_TOP_B 
BTL_POS_TOP_C 
BTL_POS_TOP_D 
BTL_POS_CENTER 

Definition at line 60 of file battle.h.

60 {
65 BTL_POS_AIR_A = 4,
66 BTL_POS_AIR_B = 5,
67 BTL_POS_AIR_C = 6,
68 BTL_POS_AIR_D = 7,
71 BTL_POS_HIGH_C = 10,
72 BTL_POS_HIGH_D = 11,
73 BTL_POS_TOP_A = 12,
74 BTL_POS_TOP_B = 13,
75 BTL_POS_TOP_C = 14,
76 BTL_POS_TOP_D = 15,
77 BTL_POS_CENTER = 16,
78};
@ BTL_POS_GROUND_B
Definition battle.h:62
@ BTL_POS_AIR_B
Definition battle.h:66
@ BTL_POS_GROUND_D
Definition battle.h:64
@ BTL_POS_CENTER
Definition battle.h:77
@ BTL_POS_AIR_D
Definition battle.h:68
@ BTL_POS_AIR_A
Definition battle.h:65
@ BTL_POS_AIR_C
Definition battle.h:67
@ BTL_POS_GROUND_A
Definition battle.h:61
@ BTL_POS_HIGH_D
Definition battle.h:72
@ BTL_POS_GROUND_C
Definition battle.h:63
@ BTL_POS_TOP_A
Definition battle.h:73
@ BTL_POS_TOP_D
Definition battle.h:76
@ BTL_POS_HIGH_A
Definition battle.h:69
@ BTL_POS_TOP_C
Definition battle.h:75
@ BTL_POS_HIGH_C
Definition battle.h:71
@ BTL_POS_HIGH_B
Definition battle.h:70
@ BTL_POS_TOP_B
Definition battle.h:74

◆ BattleVars

Enumerator
BTL_VAR_DuplighostCopyFlags 
BTL_VAL_Duplighost_HasCopied 
BTL_VAR_HyperSync 
BTL_VAL_HyperSync_None 
BTL_VAL_HyperSync_Done 
BTL_VAL_HyperSync_Active 
BTL_VAR_Magikoopa_LastIndexBoosted 
BTL_VAR_LastCopiedPartner 
BTL_VAR_KoopatrolSummonCount_0 
BTL_VAR_KoopatrolSummonCount_1 
BTL_VAR_KoopatrolSummonCount_2 
BTL_VAR_KoopatrolSummonCount_3 

Definition at line 80 of file battle.h.

80 {
81 BTL_VAR_DuplighostCopyFlags = 0, // used by duplighost
87 // index of the last enemy boosted by a magikoopa
88 // intended to prevent multiple boosts for the same actor in the same turn
89 // selected enemies go from left to right and are reset if none are found
91 BTL_VAR_LastCopiedPartner = 3, // used by duplighost
92 BTL_VAR_KoopatrolSummonCount_0 = 4, // count summons from Koopatrol and 'children' originally from column 0
93 BTL_VAR_KoopatrolSummonCount_1 = 5, // count summons from Koopatrol and 'children' originally from column 1
94 BTL_VAR_KoopatrolSummonCount_2 = 6, // count summons from Koopatrol and 'children' originally from column 2
95 BTL_VAR_KoopatrolSummonCount_3 = 7, // count summons from Koopatrol and 'children' originally from column 3
96};
@ BTL_VAR_KoopatrolSummonCount_2
Definition battle.h:94
@ BTL_VAL_HyperSync_Active
Definition battle.h:86
@ BTL_VAR_DuplighostCopyFlags
Definition battle.h:81
@ BTL_VAR_KoopatrolSummonCount_0
Definition battle.h:92
@ BTL_VAL_HyperSync_Done
Definition battle.h:85
@ BTL_VAR_LastCopiedPartner
Definition battle.h:91
@ BTL_VAR_Magikoopa_LastIndexBoosted
Definition battle.h:90
@ BTL_VAR_KoopatrolSummonCount_1
Definition battle.h:93
@ BTL_VAL_HyperSync_None
Definition battle.h:84
@ BTL_VAL_Duplighost_HasCopied
Definition battle.h:82
@ BTL_VAR_HyperSync
Definition battle.h:83
@ BTL_VAR_KoopatrolSummonCount_3
Definition battle.h:95

◆ CommonActorVars

Enumerator
AVAR_DryBones_Collapsed 
AVAR_SpearGuy_Generation 
AVAR_JungleFuzzy_Generation 

Definition at line 99 of file battle.h.

99 {
103};
@ AVAR_JungleFuzzy_Generation
Definition battle.h:102
@ AVAR_SpearGuy_Generation
Definition battle.h:101
@ AVAR_DryBones_Collapsed
Definition battle.h:100

Function Documentation

◆ load_demo_battle()

void load_demo_battle ( u32 index)

Definition at line 208 of file battle.cpp.

208 {
210 u32 mode;
212
217
225 clear_npcs();
243
244 switch (index) {
245 case 0: // hammer first strike on Fuzzies
247 mode = 0;
248 playerData->hasActionCommands = FALSE;
250 break;
251 case 1: // jump on Monty Mole
253 mode = 0;
254 playerData->curPartner = PARTNER_BOW;
256 break;
257 case 2: // Parakarry shell shot against Pokey
259 mode = 0;
260 playerData->curPartner = PARTNER_PARAKARRY;
263 break;
264 case 3: // Thunder Rage on Shy Guys at the slot machine
266 mode = 0;
267 playerData->curPartner = PARTNER_WATT;
269 break;
270 case 4: // stomped by Tubba Blubba
272 mode = 0;
273 playerData->curPartner = PARTNER_KOOPER;
276 break;
277 default:
279 mode = 2;
281 }
282
285
286 switch (mode) {
287 case 0:
294 break;
295 case 1:
298 gCurrentEncounter.hitTier = playerData->hammerLevel;
300 break;
301 case 2:
306 break;
307 case 3:
311 break;
312 case 4:
317 break;
318 }
319
327}
void set_battle_stage(s32 stageID)
Definition battle.cpp:155
void setup_demo_player(void)
Definition battle.cpp:163
void reset_battle_status(void)
Definition battle.cpp:117
void load_battle(s32 battleID)
Definition battle.cpp:147
@ BTL_DIG_FORMATION_02
@ BTL_DIG_FORMATION_01
@ BTL_DIG_FORMATION_03
@ BTL_DIG_FORMATION_00
@ BTL_DIG_FORMATION_04
@ OVERLAY_TYPE_9
Definition enums.h:2383
@ DEBUG_CONTACT_NONE
Definition enums.h:3866
@ DEMO_BTL_FLAG_10
Definition enums.h:3579
@ DEMO_BTL_FLAG_20
Definition enums.h:3580
@ DEMO_BTL_FLAG_ENEMY_ACTING
Definition enums.h:3578
@ DEMO_BTL_FLAG_ENABLED
Definition enums.h:3576
@ DEMO_BTL_FLAG_40
Definition enums.h:3581
@ DEMO_BTL_FLAG_PARTNER_ACTING
Definition enums.h:3577
@ ENCOUNTER_TRIGGER_JUMP
Definition enums.h:269
@ ENCOUNTER_TRIGGER_HAMMER
Definition enums.h:271
@ ENCOUNTER_TRIGGER_NONE
Definition enums.h:268
@ ENCOUNTER_TRIGGER_PARTNER
Definition enums.h:273
@ CONTEXT_WORLD
Definition enums.h:3562
@ PARTNER_WATT
Definition enums.h:2925
@ PARTNER_BOW
Definition enums.h:2928
@ PARTNER_PARAKARRY
Definition enums.h:2923
@ PARTNER_KOOPER
Definition enums.h:2921
@ PLAYER_SPRITES_MARIO_WORLD
Definition enums.h:5931
@ FIRST_STRIKE_NONE
Definition enums.h:3492
@ FIRST_STRIKE_ENEMY
Definition enums.h:3494
@ FIRST_STRIKE_PLAYER
Definition enums.h:3493
void clear_script_list(void)
void clear_item_entity_data(void)
void create_cameras(void)
Definition cam_main.c:254
void clear_animator_list(void)
Definition animator.c:222
void clear_model_data(void)
Definition model.c:2364
void clear_trigger_data(void)
Definition trigger.c:13
void clear_sprite_shading_data(void)
void clear_entity_data(b32)
Definition entity.c:787
s32 evt_set_variable(Evt *script, Bytecode var, s32 value)
Definition evt.c:1882
void set_screen_overlay_params_front(u8, f32)
void clear_printers(void)
Definition msg.c:196
void clear_player_status(void)
Definition 77480.c:806
void clear_effect_data(void)
Definition effects.c:41
HeapNode * general_heap_create(void)
Definition heap.c:6
void clear_worker_list(void)
Definition worker.c:10
void clear_player_data(void)
Definition inventory.c:54
void clear_entity_models(void)
void reset_background_settings(void)
Definition background.c:33
void initialize_status_bar(void)
Definition inventory.c:482
void reset_back_screen_overlay_progress(void)
void hud_element_clear_cache(void)
char unk_07
Definition npc.h:370
void clear_npcs(void)
Definition npc.c:59
void clear_encounter_status(void)
Definition npc.c:2222
EncounterStatus gCurrentEncounter
Definition encounter.c:175
s8 instigatorValue
Definition npc.h:378
s8 firstStrikeType
Definition npc.h:367
@ GF_Tutorial_SwapTurnOrder
void spr_init_sprites(s32 playerSpriteSet)
Definition sprite.c:765
#define BTL_STAGE_DEFAULT
Definition stage_names.h:3
s32 gOverrideFlags
Definition main_loop.c:10
GameStatus * gGameStatusPtr
Definition main_loop.c:31
PlayerData gPlayerData
Definition 77480.c:39

Referenced by state_step_demo().

◆ create_actor()

Actor * create_actor ( Formation formation)

Definition at line 1408 of file 190B20.c.

1408 {
1410 Actor* actor;
1412 ActorPart* part;
1414 Evt* takeTurnScript;
1415 s32 partCount;
1416 f32 x, y, z;
1417 DecorationTable* decorations;
1418 s32 i, j, k;
1419
1420 if (formation->home.index >= EVT_LIMIT) {
1421 x = StandardActorHomePositions[formation->home.index].x;
1422 y = StandardActorHomePositions[formation->home.index].y;
1423 z = StandardActorHomePositions[formation->home.index].z;
1424 } else {
1425 x = formation->home.vec->x;
1426 y = formation->home.vec->y;
1427 z = formation->home.vec->z;
1428 }
1429
1430 formationActor = formation->actor;
1431 partCount = formationActor->partCount;
1432
1433 for (i = 0; i < ARRAY_COUNT(battleStatus->enemyActors); i++) {
1434 if (battleStatus->enemyActors[i] == NULL) {
1435 break;
1436 }
1437 }
1438
1439 actor = battleStatus->enemyActors[i] = heap_malloc(sizeof(*actor));
1440
1441 ASSERT(actor != NULL);
1442
1443 actor->ordinal = battleStatus->nextActorOrdinal++;
1444 actor->footStepCounter = 0;
1446 actor->actorType = formationActor->type;
1447 actor->flags = formationActor->flags;
1448 actor->homePos.x = actor->curPos.x = x;
1449 actor->homePos.y = actor->curPos.y = y;
1450 actor->homePos.z = actor->curPos.z = z;
1451 actor->headOffset.x = 0;
1452 actor->headOffset.y = 0;
1453 actor->headOffset.z = 0;
1454 actor->maxHP = actor->curHP = formationActor->maxHP;
1455 actor->numParts = partCount;
1456 actor->idleSource = NULL;
1457 actor->takeTurnSource = formationActor->initScript;
1458 actor->handleEventSource = NULL;
1459 actor->handlePhaseSource = NULL;
1460 actor->idleScript = NULL;
1461 actor->takeTurnScript = NULL;
1462 actor->handleEventScript = NULL;
1463 actor->turnPriority = formation->priority;
1464 actor->enemyIndex = i;
1465 actor->yaw = 0.0f;
1466 actor->rot.x = 0.0f;
1467 actor->rot.y = 0.0f;
1468 actor->rot.z = 0.0f;
1469 actor->rotPivotOffset.x = 0;
1470 actor->rotPivotOffset.y = 0;
1471 actor->rotPivotOffset.z = 0;
1472 actor->scale.x = 1.0f;
1473 actor->scale.y = 1.0f;
1474 actor->scale.z = 1.0f;
1475 actor->scaleModifier.x = 1.0f;
1476 actor->scaleModifier.y = 1.0f;
1477 actor->scaleModifier.z = 1.0f;
1478 actor->verticalRenderOffset = 0;
1479 actor->extraCoinBonus = 0;
1480 actor->size.x = formationActor->size.x;
1481 actor->size.y = formationActor->size.y;
1482 actor->scalingFactor = 1.0f;
1483 actor->statusIconOffset.x = 0;
1484 actor->statusIconOffset.y = 0;
1485 actor->statusTextOffset.x = 0;
1486 actor->statusTextOffset.y = 0;
1487 actor->healthBarOffset.x = 0;
1488 actor->healthBarOffset.y = 0;
1489 actor->healthBarHideTime = 0;
1490 actor->attackResultEffect = NULL;
1491 actor->actionRatingCombo = 0;
1492 actor->actionRatingTime = 0;
1493
1494 actor->healthBarPos.x = actor->curPos.x + formationActor->healthBarOffset.x;
1495 actor->healthBarPos.y = actor->curPos.y + formationActor->healthBarOffset.y;
1496 actor->healthBarPos.z = actor->curPos.z;
1497 if (actor->flags & ACTOR_FLAG_UPSIDE_DOWN) {
1498 actor->healthBarPos.y = actor->curPos.y - actor->size.y - formationActor->healthBarOffset.y;
1499 }
1500
1501 actor->statusTable = formationActor->statusTable;
1502 actor->debuff = 0;
1503 actor->debuffDuration = 0;
1504 actor->staticStatus = 0;
1505 actor->staticDuration = 0;
1506 actor->stoneStatus = 0;
1507 actor->stoneDuration = 0;
1508 actor->koStatus = 0;
1509 actor->koDuration = 0;
1510 actor->transparentStatus = 0;
1511 actor->transparentDuration = 0;
1512 actor->isGlowing = FALSE;
1513 actor->unk_21E = 0;
1514 actor->disableDismissTimer = 0;
1515 actor->attackBoost = 0;
1516 actor->defenseBoost = 0;
1517 actor->chillOutAmount = 0;
1518 actor->chillOutTurns = 0;
1519 actor->statusAfflicted = 0;
1520 actor->actorTypeData1[0] = bActorSoundTable[actor->actorType].walk[0];
1521 actor->actorTypeData1[1] = bActorSoundTable[actor->actorType].walk[1];
1522 actor->actorTypeData1[2] = bActorSoundTable[actor->actorType].fly[0];
1523 actor->actorTypeData1[3] = bActorSoundTable[actor->actorType].fly[1];
1524 actor->actorTypeData1[4] = bActorSoundTable[actor->actorType].jump;
1525 actor->actorTypeData1[5] = bActorSoundTable[actor->actorType].hurt;
1526 actor->actorTypeData1b[0] = bActorSoundTable[actor->actorType].delay[0];
1527 actor->actorTypeData1b[1] = bActorSoundTable[actor->actorType].delay[1];
1528
1529 for (i = 0; i < ARRAY_COUNT(actor->loopingSoundID); i++) {
1530 actor->loopingSoundID[i] = 0;
1531 }
1532
1533 actor->state.varTable[0] = formation->var0;
1534 actor->state.varTable[1] = formation->var1;
1535 actor->state.varTable[2] = formation->var2;
1536 actor->state.varTable[3] = formation->var3;
1538 actor->instigatorValue = 0;
1539 part = heap_malloc(sizeof(*part));
1540 actor->partsTable = part;
1541 ASSERT(part != NULL);
1542
1543 for (j = 0; j < partCount; j++) {
1545
1546 part->decorationTable = NULL;
1547 part->staticData = actorPartBP;
1549 part->targetFlags = 0;
1550
1551 part->partOffsetFloat.x = part->partOffset.x = actorPartBP->posOffset.x;
1552 part->partOffsetFloat.y = part->partOffset.y = actorPartBP->posOffset.y;
1553 part->partOffsetFloat.z = part->partOffset.z = actorPartBP->posOffset.z;
1554
1555 part->visualOffset.x = 0;
1556 part->visualOffset.y = 0;
1557 part->visualOffset.z = 0;
1558
1559 part->absolutePos.x = actor->curPos.x;
1560 part->absolutePos.y = actor->curPos.y;
1561 part->absolutePos.z = actor->curPos.z;
1562 part->curPos.x = actor->curPos.x;
1563 part->curPos.y = actor->curPos.y;
1564 part->curPos.z = actor->curPos.z;
1565 part->defenseTable = actorPartBP->defenseTable;
1566 part->idleAnimations = actorPartBP->idleAnimations;
1567 part->eventFlags = actorPartBP->eventFlags;
1568 part->elementalImmunities = actorPartBP->elementImmunityFlags;
1569 part->opacity = actorPartBP->opacity;
1570 if (part->opacity < 255) {
1572 }
1573 part->size.y = actor->size.y;
1574 part->size.x = actor->size.x;
1575 part->yaw = 0.0f;
1576 part->targetOffset.x = actorPartBP->targetOffset.x;
1577 part->targetOffset.y = actorPartBP->targetOffset.y;
1578 part->targetPriorityOffset = 0;
1579 part->projectileTargetOffset.x = actorPartBP->projectileTargetOffset.x;
1580 part->projectileTargetOffset.y = actorPartBP->projectileTargetOffset.y;
1581 part->rot.x = 0.0f;
1582 part->rot.y = 0.0f;
1583 part->rot.z = 0.0f;
1584 part->rotPivotOffset.x = 0;
1585 part->rotPivotOffset.y = 0;
1586 part->rotPivotOffset.z = 0;
1587 part->scale.x = 1.0f;
1588 part->scale.y = 1.0f;
1589 part->scale.z = 1.0f;
1590 part->verticalStretch = 1;
1591 part->palAnimPosOffset[0] = 0;
1592 part->palAnimPosOffset[1] = 0;
1593 part->partTypeData[0] = bActorSoundTable[actor->actorType].walk[0];
1594 part->partTypeData[1] = bActorSoundTable[actor->actorType].walk[1];
1595 part->partTypeData[2] = bActorSoundTable[actor->actorType].fly[0];
1596 part->partTypeData[3] = bActorSoundTable[actor->actorType].fly[1];
1597 part->partTypeData[4] = bActorSoundTable[actor->actorType].jump;
1598 part->partTypeData[5] = bActorSoundTable[actor->actorType].hurt;
1599 part->actorTypeData2b[0] = bActorSoundTable[actor->actorType].delay[0];
1600 part->actorTypeData2b[1] = bActorSoundTable[actor->actorType].delay[1];
1601
1602 if (part->idleAnimations != NULL && !(part->flags & ACTOR_PART_FLAG_NO_DECORATIONS)) {
1603 part->decorationTable = heap_malloc(sizeof(*decorations));
1604 decorations = part->decorationTable;
1605 ASSERT(decorations != NULL);
1606
1608 decorations->glowState = GLOW_PAL_OFF;
1609 decorations->flashState = 0;
1610 decorations->flashEnabled = FLASH_PAL_OFF;
1611 decorations->blurUnused = 0;
1612 decorations->blurBufferPos = 0;
1613
1614 for (k = 0; k < ARRAY_COUNT(decorations->posX); k++) {
1615 decorations->posX[k] = actor->curPos.x;
1616 decorations->posY[k] = actor->curPos.y;
1617 decorations->posZ[k] = actor->curPos.z;
1618 }
1619
1620 decorations->blurDrawCount = 3;
1621 decorations->blurEnableCount = 0;
1622 decorations->blurDisableDelay = 0;
1623
1624 for (k = 0; k < ARRAY_COUNT(decorations->effect); k++) {
1625 decorations->effect[k] = NULL;
1626 decorations->type[k] = 0;
1627 }
1628
1629 }
1630
1631 if (!(part->flags & ACTOR_PART_FLAG_SKIP_MOVEMENT_ALLOC)) {
1632 part->movement = heap_malloc(sizeof(*part->movement));
1633 ASSERT(part->movement != NULL);
1634 }
1635
1636 if (actor->flags & ACTOR_FLAG_TARGET_ONLY) {
1638 }
1639
1640 part->animationRate = 1.0f;
1641 part->curAnimation = 0;
1642 part->spriteInstanceID = -1;
1643
1644 if (part->idleAnimations != NULL) {
1645 part->curAnimation = get_npc_anim_for_status(part->idleAnimations, 1) & ~SPRITE_ID_TAIL_ALLOCATE;
1646 part->spriteInstanceID = spr_load_npc_sprite(part->curAnimation, NULL);
1647 }
1648
1649 if (j + 1 >= partCount) {
1650 part->nextPart = NULL;
1651 continue;
1652 }
1653
1654 part->nextPart = heap_malloc(sizeof(*part->nextPart));
1655 part = part->nextPart;
1656 if (part == NULL) {
1657 PANIC();
1658 }
1659
1660 part->nextPart = NULL;
1661 }
1662
1663 actor->healthFraction = 25;
1664 actor->actorID = actor->enemyIndex | ACTOR_CLASS_ENEMY;
1665 takeTurnScript = start_script(actor->takeTurnSource, EVT_PRIORITY_A, 0);
1666 actor->takeTurnScriptID = takeTurnScript->id;
1667 takeTurnScript->owner1.enemyID = actor->enemyIndex | ACTOR_CLASS_ENEMY;
1668 actor->shadow.id = create_shadow_type(SHADOW_VARYING_CIRCLE, actor->curPos.x, actor->curPos.y, actor->curPos.z);
1669 actor->shadowScale = actor->size.x / 24.0;
1670 actor->disableEffect = fx_disable_x(0, -142.0f, 34.0f, 1.0f, 0);
1671 actor->icePillarEffect = NULL;
1673 return actor;
1674}
s32 get_npc_anim_for_status(AnimID *, s32)
Definition 190B20.c:1676
Vec2b statusIconOffset
struct EffectInstance * disableEffect
struct EffectInstance * attackResultEffect
struct Evt * takeTurnScript
struct EffectInstance * effect[2]
s8 actionRatingCombo
s8 transparentStatus
EvtScript * handleEventSource
Vec2b statusTextOffset
EvtScript * idleSource
Vec2b healthBarOffset
s8 disableDismissTimer
f32 shadowScale
struct ActorBlueprint * actorBlueprint
s32 actorTypeData1[6]
s8 healthFraction
s8 verticalRenderOffset
u8 footStepCounter
Vec3s headOffset
f32 scalingFactor
struct Evt * idleScript
union Actor::@38 shadow
s8 extraCoinBonus
ActorState state
struct Evt * handleEventScript
struct ActorPart * partsTable
s32 takeTurnScriptID
s16 actorTypeData1b[2]
Vec3s rotPivotOffset
EvtScript * handlePhaseSource
Vec3f scaleModifier
struct EffectInstance * icePillarEffect
Vec3s healthBarPos
s32 loopingSoundID[2]
s8 chillOutAmount
Vec3f homePos
Vec2bu size
s16 hudElementDataIndex
EvtScript * takeTurnSource
Vec3f curPos
s8 instigatorValue
s8 healthBarHideTime
s8 statusAfflicted
s8 staticDuration
s32 * statusTable
s8 debuffDuration
s8 transparentDuration
union Evt::@10 owner1
Initially -1.
s8 actionRatingTime
Vec3f scale
#define ASSERT(condition)
@ ACTOR_CLASS_ENEMY
Definition enums.h:2112
@ GLOW_PAL_OFF
Definition enums.h:2244
@ ACTOR_PAL_ADJUST_NONE
Definition enums.h:2227
@ SHADOW_VARYING_CIRCLE
Definition enums.h:2521
@ FLASH_PAL_OFF
Definition enums.h:2256
@ RENDER_MODE_SURFACE_XLU_LAYER3
Definition enums.h:3333
@ RENDER_MODE_ALPHATEST
Definition enums.h:3310
@ ACTOR_FLAG_UPSIDE_DOWN
HP bar offset below actor (e.g. Swooper when upside-down).
Definition enums.h:3365
@ ACTOR_FLAG_TARGET_ONLY
Battle ends even if undefeated. No turn.
Definition enums.h:3368
@ ACTOR_PART_FLAG_TARGET_ONLY
Definition enums.h:3393
@ ACTOR_PART_FLAG_SKIP_MOVEMENT_ALLOC
Definition enums.h:3400
@ ACTOR_PART_FLAG_NO_SHADOW
Definition enums.h:3386
@ ACTOR_PART_FLAG_NO_DECORATIONS
Definition enums.h:3385
@ EVT_PRIORITY_A
Definition evt.h:154
s32 create_status_icon_set(void)
Evt * start_script(EvtScript *source, s32 priority, s32 initialState)
s32 create_shadow_type(s32 type, f32 x, f32 y, f32 z)
Definition entity.c:1528
void * heap_malloc(s32 size)
Definition heap.c:34
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define PANIC()
Definition macros.h:55
#define EVT_LIMIT
Definition macros.h:48
s32 spr_load_npc_sprite(s32 animID, u32 *extraAnimList)
Definition sprite.c:1015
s32 walk[2]
Definition battle.h:235
s16 delay[2]
Number of frames to wait between walk/fly sounds. Negative values are in distance.
Definition battle.h:239
s32 fly[2]
Definition battle.h:236
EXTERN_C ActorSounds bActorSoundTable[]
Definition battle.h:242
BattleStatus gBattleStatus
Definition battle.cpp:14
Vec3s StandardActorHomePositions[]
Definition actors.c:165

Referenced by btl_state_update_normal_start().

Variable Documentation

◆ bActorNames

EXTERN_C s32 bActorNames[]

Definition at line 105 of file battle.h.

Referenced by btl_state_draw_select_target().

◆ gBattleAreas

EXTERN_C BattleArea gBattleAreas[0x30]

Definition at line 224 of file battle.h.

◆ bActorSoundTable

EXTERN_C ActorSounds bActorSoundTable[]

◆ gCurrentBattlePtr

◆ bActorOffsets

ActorOffsets bActorOffsets[]
extern