Merge pull request #213 from PikalaxALT/script_pokemon_util

script_pokemon_util_80A0058, battle_interface
This commit is contained in:
PikalaxALT
2020-01-12 14:54:43 -05:00
committed by GitHub
30 changed files with 3079 additions and 6411 deletions
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -3272,7 +3272,7 @@ sub_81173C0: @ 81173C0
adds r6, r0, 0
lsls r6, 16
lsrs r6, 16
bl sp000_heal_pokemon
bl HealPlayerParty
bl SavePlayerParty
bl LoadPlayerBag
ldr r5, _0811742C @ =gLinkPlayers
@@ -3660,7 +3660,7 @@ _081177A0:
ldr r0, _081177C4 @ =gBlockSendBuffer
movs r1, 0x1
bl sub_8117594
bl sp000_heal_pokemon
bl HealPlayerParty
bl SavePlayerParty
bl LoadPlayerBag
movs r0, 0x1
@@ -3673,7 +3673,7 @@ _081177A0:
_081177C4: .4byte gBlockSendBuffer
_081177C8:
bl CleanupOverworldWindowsAndTilemaps
bl sp000_heal_pokemon
bl HealPlayerParty
bl SavePlayerParty
bl LoadPlayerBag
ldr r0, _081177EC @ =gBlockSendBuffer
@@ -3689,7 +3689,7 @@ _081177C8:
_081177EC: .4byte gBlockSendBuffer
_081177F0:
bl CleanupOverworldWindowsAndTilemaps
bl sp000_heal_pokemon
bl HealPlayerParty
bl SavePlayerParty
bl LoadPlayerBag
ldr r0, _08117814 @ =gBlockSendBuffer
+1 -1
View File
@@ -19,7 +19,7 @@ sub_8054BC8: @ 8054BC8
adds r1, r0, 0
adds r0, r4, 0
bl RemoveMoney
bl sp000_heal_pokemon
bl HealPlayerParty
bl sub_8054DD8
bl sub_80554BC
bl WarpIntoMap
+4 -4
View File
@@ -5755,7 +5755,7 @@ sub_8137578: @ 8137578
bl GetNature
lsls r0, 24
lsrs r6, r0, 24
ldr r1, _081375F0 @ =gNatureNames
ldr r1, _081375F0 @ =gNatureNamePointers
lsls r0, r6, 2
adds r0, r1
ldr r1, [r0]
@@ -5796,7 +5796,7 @@ _081375B2:
.align 2, 0
_081375E8: .4byte gUnknown_203B140
_081375EC: .4byte 0x00003290
_081375F0: .4byte gNatureNames
_081375F0: .4byte gNatureNamePointers
_081375F4:
ldr r0, [r7]
ldr r1, _08137614 @ =0x00003024
@@ -5952,7 +5952,7 @@ sub_8137724: @ 8137724
bl GetNature
lsls r0, 24
lsrs r6, r0, 24
ldr r1, _081377A8 @ =gNatureNames
ldr r1, _081377A8 @ =gNatureNamePointers
lsls r0, r6, 2
adds r0, r1
ldr r1, [r0]
@@ -5997,7 +5997,7 @@ _08137790:
.align 2, 0
_081377A0: .4byte gUnknown_203B140
_081377A4: .4byte 0x00003290
_081377A8: .4byte gNatureNames
_081377A8: .4byte gNatureNamePointers
_081377AC:
cmp r5, 0xFF
bne _081377D0
-535
View File
@@ -1,535 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sp000_heal_pokemon
sp000_heal_pokemon: @ 80A0058
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
movs r0, 0
mov r8, r0
ldr r0, _080A0114 @ =gPlayerPartyCount
ldrb r0, [r0]
cmp r8, r0
bcs _080A0104
ldr r1, _080A0118 @ =gPlayerParty
mov r10, r1
mov r6, sp
_080A0076:
movs r0, 0x64
mov r4, r8
muls r4, r0
add r4, r10
adds r0, r4, 0
movs r1, 0x3A
bl GetMonData
lsls r1, r0, 16
strb r0, [r6]
lsrs r1, 24
strb r1, [r6, 0x1]
adds r0, r4, 0
movs r1, 0x39
mov r2, sp
bl SetMonData
adds r0, r4, 0
movs r1, 0x15
bl GetMonData
lsls r0, 24
lsrs r7, r0, 24
movs r5, 0
movs r1, 0x1
add r1, r8
mov r9, r1
_080A00AC:
adds r1, r5, 0
adds r1, 0xD
adds r0, r4, 0
bl GetMonData
lsls r0, 16
lsrs r0, 16
adds r1, r7, 0
adds r2, r5, 0
bl CalculatePPWithBonus
strb r0, [r6]
adds r1, r5, 0
adds r1, 0x11
adds r0, r4, 0
mov r2, sp
bl SetMonData
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x3
bls _080A00AC
movs r0, 0
strb r0, [r6]
strb r0, [r6, 0x1]
strb r0, [r6, 0x2]
strb r0, [r6, 0x3]
movs r1, 0x64
mov r0, r8
muls r0, r1
add r0, r10
movs r1, 0x37
mov r2, sp
bl SetMonData
mov r1, r9
lsls r0, r1, 24
lsrs r0, 24
mov r8, r0
ldr r0, _080A0114 @ =gPlayerPartyCount
ldrb r0, [r0]
cmp r8, r0
bcc _080A0076
_080A0104:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A0114: .4byte gPlayerPartyCount
_080A0118: .4byte gPlayerParty
thumb_func_end sp000_heal_pokemon
thumb_func_start ScriptGiveMon
ScriptGiveMon: @ 80A011C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r6, r0, 0
adds r4, r1, 0
adds r5, r2, 0
lsls r6, 16
lsrs r6, 16
lsls r4, 24
lsrs r4, 24
lsls r5, 16
lsrs r0, r5, 16
mov r8, r0
movs r0, 0x64
bl AllocZeroed
adds r7, r0, 0
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
str r0, [sp, 0x8]
str r0, [sp, 0xC]
adds r0, r7, 0
adds r1, r6, 0
adds r2, r4, 0
movs r3, 0x20
bl CreateMon
add r0, sp, 0x10
mov r1, r8
strb r1, [r0]
lsrs r5, 24
strb r5, [r0, 0x1]
adds r0, r7, 0
movs r1, 0xC
add r2, sp, 0x10
bl SetMonData
adds r0, r7, 0
bl GiveMonToPlayer
lsls r0, 24
lsrs r4, r0, 24
adds r0, r6, 0
bl SpeciesToNationalPokedexNum
lsls r0, 16
lsrs r5, r0, 16
cmp r4, 0x1
bgt _080A0196
cmp r4, 0
blt _080A0196
adds r0, r5, 0
movs r1, 0x2
bl GetSetPokedexFlag
adds r0, r5, 0
movs r1, 0x3
bl GetSetPokedexFlag
_080A0196:
adds r0, r7, 0
bl Free
adds r0, r4, 0
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end ScriptGiveMon
thumb_func_start ScriptGiveEgg
ScriptGiveEgg: @ 80A01AC
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
movs r0, 0x64
bl AllocZeroed
adds r5, r0, 0
adds r1, r4, 0
movs r2, 0x1
bl CreateEgg
movs r1, 0x1
mov r0, sp
strb r1, [r0]
adds r0, r5, 0
movs r1, 0x2D
mov r2, sp
bl SetMonData
adds r0, r5, 0
bl GiveMonToPlayer
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r5, 0
bl Free
adds r0, r4, 0
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end ScriptGiveEgg
thumb_func_start CheckForAlivePartyMons
CheckForAlivePartyMons: @ 80A01F4
push {lr}
bl GetMonsStateToDoubles
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x1
beq _080A0210
cmp r1, 0x1
bgt _080A020C
cmp r1, 0
beq _080A0210
b _080A0214
_080A020C:
cmp r1, 0x2
bne _080A0214
_080A0210:
ldr r0, _080A0218 @ =gSpecialVar_Result
strh r1, [r0]
_080A0214:
pop {r0}
bx r0
.align 2, 0
_080A0218: .4byte gSpecialVar_Result
thumb_func_end CheckForAlivePartyMons
thumb_func_start CheckPartyMonHasHeldItem
CheckPartyMonHasHeldItem: @ 80A021C
push {r4-r7,lr}
lsls r0, 16
lsrs r6, r0, 16
movs r5, 0
movs r7, 0xCE
lsls r7, 1
_080A0228:
movs r0, 0x64
adds r1, r5, 0
muls r1, r0
ldr r0, _080A0258 @ =gPlayerParty
adds r4, r1, r0
adds r0, r4, 0
movs r1, 0x41
bl GetMonData
lsls r0, 16
lsrs r0, 16
cmp r0, 0
beq _080A025C
cmp r0, r7
beq _080A025C
adds r0, r4, 0
movs r1, 0xC
bl GetMonData
cmp r0, r6
bne _080A025C
movs r0, 0x1
b _080A0264
.align 2, 0
_080A0258: .4byte gPlayerParty
_080A025C:
adds r5, 0x1
cmp r5, 0x5
ble _080A0228
movs r0, 0
_080A0264:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end CheckPartyMonHasHeldItem
thumb_func_start GetNameOfEnigmaBerryInPlayerParty
GetNameOfEnigmaBerryInPlayerParty: @ 80A026C
push {r4,lr}
movs r0, 0xAF
bl CheckPartyMonHasHeldItem
lsls r0, 24
lsrs r0, 24
adds r4, r0, 0
cmp r4, 0x1
bne _080A028E
movs r0, 0xAF
bl ItemIdToBerryType
lsls r0, 24
lsrs r0, 24
ldr r1, _080A0298 @ =gStringVar1
bl GetBerryNameByBerryType
_080A028E:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080A0298: .4byte gStringVar1
thumb_func_end GetNameOfEnigmaBerryInPlayerParty
thumb_func_start CreateScriptedWildMon
CreateScriptedWildMon: @ 80A029C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r4, r0, 0
adds r5, r1, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 24
lsrs r5, 24
lsls r7, r2, 16
lsrs r6, r7, 16
bl ZeroEnemyPartyMons
ldr r0, _080A02F8 @ =gEnemyParty
mov r8, r0
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
str r0, [sp, 0x8]
str r0, [sp, 0xC]
mov r0, r8
adds r1, r4, 0
adds r2, r5, 0
movs r3, 0x20
bl CreateMon
cmp r6, 0
beq _080A02EA
add r0, sp, 0x10
strb r6, [r0]
adds r1, r0, 0
lsrs r0, r7, 24
strb r0, [r1, 0x1]
mov r0, r8
movs r1, 0xC
add r2, sp, 0x10
bl SetMonData
_080A02EA:
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A02F8: .4byte gEnemyParty
thumb_func_end CreateScriptedWildMon
thumb_func_start ScriptSetMonMoveSlot
ScriptSetMonMoveSlot: @ 80A02FC
push {r4,lr}
lsls r0, 24
lsrs r3, r0, 24
lsls r1, 16
lsrs r4, r1, 16
lsls r2, 24
lsrs r2, 24
cmp r3, 0x6
bls _080A0318
ldr r0, _080A032C @ =gPlayerPartyCount
ldrb r0, [r0]
subs r0, 0x1
lsls r0, 24
lsrs r3, r0, 24
_080A0318:
movs r0, 0x64
muls r0, r3
ldr r1, _080A0330 @ =gPlayerParty
adds r0, r1
adds r1, r4, 0
bl SetMonMoveSlot
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A032C: .4byte gPlayerPartyCount
_080A0330: .4byte gPlayerParty
thumb_func_end ScriptSetMonMoveSlot
thumb_func_start sub_80A0334
sub_80A0334: @ 80A0334
push {lr}
ldr r1, _080A0348 @ =gMain
ldr r0, _080A034C @ =sub_80A0350
str r0, [r1, 0x8]
movs r0, 0
bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
_080A0348: .4byte gMain
_080A034C: .4byte sub_80A0350
thumb_func_end sub_80A0334
thumb_func_start sub_80A0350
sub_80A0350: @ 80A0350
push {lr}
ldr r0, _080A0360 @ =gSelectedOrderFromParty
ldrb r1, [r0]
cmp r1, 0
bne _080A0368
ldr r0, _080A0364 @ =gSpecialVar_Result
strh r1, [r0]
b _080A036E
.align 2, 0
_080A0360: .4byte gSelectedOrderFromParty
_080A0364: .4byte gSpecialVar_Result
_080A0368:
ldr r1, _080A0378 @ =gSpecialVar_Result
movs r0, 0x1
strh r0, [r1]
_080A036E:
ldr r0, _080A037C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
_080A0378: .4byte gSpecialVar_Result
_080A037C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
thumb_func_end sub_80A0350
thumb_func_start ChooseBattleTowerPlayerParty
ChooseBattleTowerPlayerParty: @ 80A0380
push {lr}
ldr r1, _080A0394 @ =gMain
ldr r0, _080A0398 @ =sub_80A039C
str r0, [r1, 0x8]
movs r0, 0x1
bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
_080A0394: .4byte gMain
_080A0398: .4byte sub_80A039C
thumb_func_end ChooseBattleTowerPlayerParty
thumb_func_start sub_80A039C
sub_80A039C: @ 80A039C
push {r4,lr}
ldr r0, _080A03B0 @ =gSelectedOrderFromParty
ldrb r4, [r0]
cmp r4, 0
bne _080A03B8
bl LoadPlayerParty
ldr r0, _080A03B4 @ =gSpecialVar_Result
strh r4, [r0]
b _080A03C2
.align 2, 0
_080A03B0: .4byte gSelectedOrderFromParty
_080A03B4: .4byte gSpecialVar_Result
_080A03B8:
bl ReducePlayerPartyToThree
ldr r1, _080A03D0 @ =gSpecialVar_Result
movs r0, 0x1
strh r0, [r1]
_080A03C2:
ldr r0, _080A03D4 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
bl SetMainCallback2
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A03D0: .4byte gSpecialVar_Result
_080A03D4: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
thumb_func_end sub_80A039C
thumb_func_start ReducePlayerPartyToThree
ReducePlayerPartyToThree: @ 80A03D8
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
movs r0, 0x96
lsls r0, 1
bl AllocZeroed
adds r7, r0, 0
movs r5, 0
movs r0, 0x64
mov r8, r0
ldr r6, _080A0454 @ =gPlayerParty
adds r4, r7, 0
_080A03F4:
ldr r0, _080A0458 @ =gSelectedOrderFromParty
adds r1, r5, r0
ldrb r0, [r1]
cmp r0, 0
beq _080A040E
subs r0, 0x1
mov r1, r8
muls r1, r0
adds r1, r6
adds r0, r4, 0
movs r2, 0x64
bl memcpy
_080A040E:
adds r4, 0x64
adds r5, 0x1
cmp r5, 0x2
ble _080A03F4
movs r0, 0
str r0, [sp]
ldr r4, _080A0454 @ =gPlayerParty
ldr r2, _080A045C @ =0x05000096
mov r0, sp
adds r1, r4, 0
bl CpuSet
adds r5, r7, 0
adds r6, r7, 0
adds r6, 0xC8
_080A042C:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x64
bl memcpy
adds r5, 0x64
adds r4, 0x64
cmp r5, r6
ble _080A042C
bl CalculatePlayerPartyCount
adds r0, r7, 0
bl Free
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A0454: .4byte gPlayerParty
_080A0458: .4byte gSelectedOrderFromParty
_080A045C: .4byte 0x05000096
thumb_func_end ReducePlayerPartyToThree
.align 2, 0 @ Don't pad with nop.
-164
View File
@@ -1,164 +0,0 @@
#include "constants/region_map.h"
#include "constants/trainer_classes.h"
#include "constants/songs.h"
#include "constants/flags.h"
#include "constants/region_map.h"
#include "constants/maps.h"
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2, 0
gUnknown_8260270:: @ 8260270
.4byte 0xc0004000, 0x00000400
gUnknown_8260278:: @ 8260278
spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602A8:: @ 82602A8
spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602D8:: @ 82602D8
spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602F0::
.4byte 0x40004000, 0x00000400
gUnknown_82602F8:: @ 82602F8
spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
gUnknown_8260358::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
subsprite 240, 32, 1, 0x0030, 32x8
subsprite 16, 32, 1, 0x0034, 32x8
subsprite 48, 32, 1, 0x0038, 32x8
gUnknown_826036C::
subsprite 240, 0, 1, 0x0040, 64x32
subsprite 48, 0, 1, 0x0060, 32x32
subsprite 240, 32, 1, 0x0070, 32x8
subsprite 16, 32, 1, 0x0074, 32x8
subsprite 48, 32, 1, 0x0078, 32x8
gUnknown_8260380::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
gUnknown_8260388::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
gUnknown_8260390::
subsprite 240, 0, 1, 0x0000, 32x8
subsprite 16, 0, 1, 0x0004, 32x8
gUnknown_8260398::
subsprite 240, 0, 1, 0x0000, 32x8
subsprite 16, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 8x8
gUnknown_82603A4::
.4byte 5, gUnknown_8260358
.4byte 2, gUnknown_8260380
.4byte 5, gUnknown_826036C
.4byte 2, gUnknown_8260388
gUnknown_82603C4:: @ 82603C4
.4byte 2, gUnknown_8260390
.4byte 3, gUnknown_8260398
gUnknown_82603D4::
subsprite 160, 0, 1, 0x0000, 32x8
subsprite 192, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 32x8
subsprite 0, 0, 1, 0x000c, 32x8
gUnknown_82603E4::
subsprite 160, 0, 1, 0x0000, 32x8
subsprite 192, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 32x8
subsprite 0, 0, 1, 0x0008, 32x8
subsprite 32, 0, 1, 0x0008, 32x8
subsprite 64, 0, 1, 0x000c, 32x8
gUnknown_82603FC:: @ 82603FC
.4byte 4, gUnknown_82603D4
gUnknown_8260404:: @ 8260404
.4byte 6, gUnknown_82603E4
gUnknown_26040C::
.incbin "graphics/battle_interface/unk_826404C.4bpp"
gUnknown_826046C:: @ 826046C
obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052
obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053
gUnknown_826047C:: @ 826047C
obj_pal gBattleInterface_BallStatusBarPal, 55056
obj_pal gBattleInterface_BallStatusBarPal, 55057
gUnknown_826048C:: @ 826048C
obj_pal gBattleInterface_BallDisplayPal, 55058
obj_pal gBattleInterface_BallDisplayPal, 55059
gUnknown_826049C:: @ 826049C
obj_tiles gUnknown_8D12404, 0x0080, 55060
obj_tiles gUnknown_8D12404, 0x0080, 55061
gUnknown_82604AC::
.4byte 0xc0004000, 0x00000400
gUnknown_82604B4::
.4byte 0x00000000, 0x00000400
gUnknown_82604BC:: @ 82604BC
spr_template 55052, 55056, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar
spr_template 55053, 55057, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar
gUnknown_82604EC:: @ 82604EC
spr_template 55060, 55058, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart
spr_template 55061, 55059, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart
gUnknown_826051C:: @ 826051C
.string "{LV_2}$", 16
gUnknown_826052C:: @ 826052C
.string "{COLOR 01}{HIGHLIGHT 02}", 20
gUnknown_8260540:: @ 8260540
.string "/$"
gUnknown_8260542:: @ 8260542
.string "{COLOR 01}{HIGHLIGHT 00}", 20
gUnknown_8260556:: @ 8260556
.string "{HIGHLIGHT 02}$"
gUnknown_826055A:: @ 826055A
.2byte RGB(24, 12, 24)
.2byte RGB(23, 23, 3)
.2byte RGB(20, 20, 17)
.2byte RGB(17, 22, 28)
.2byte RGB(28, 14, 10)
gUnknown_8260564:: @ 8260564
.byte 0, 0, 0, 8, 2, 0
.2byte 0x0000
@ {
@ .bg = 0,
@ .tilemapLeft = 0,
@ .tilemapTop = 0,
@ .width = 8,
@ .height = 2,
@ .paletteNum = 0,
@ .baseBlock = 0x0000
@ }
+13 -13
View File
@@ -871,7 +871,7 @@ EventScript_TryDoDoubleTrainerBattle:: @ 81A4EE9
specialvar VAR_RESULT, ScrSpecial_HasTrainerBeenFought
compare_var_to_value VAR_RESULT, 0
goto_if ne, EventScript_1A4F20
special CheckForAlivePartyMons
special HasEnoughMonsForDoubleBattle
compare_var_to_value VAR_RESULT, 0
goto_if ne, EventScript_1A4F19
special PlayTrainerEncounterMusic
@@ -923,7 +923,7 @@ EventScript_TryDoDoubleRematchBattle:: @ 81A4F73
specialvar VAR_RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare_var_to_value VAR_RESULT, 0
goto_if eq, EventScript_1A4FB0
special CheckForAlivePartyMons
special HasEnoughMonsForDoubleBattle
compare_var_to_value VAR_RESULT, 0
goto_if ne, EventScript_1A4FB1
special PlayTrainerEncounterMusic
@@ -1617,7 +1617,7 @@ EventScript_1A65CE:: @ 81A65CE
waitfieldeffect 25
applymovement VAR_LAST_TALKED, Movement_1A75ED
waitmovement 0
special sp000_heal_pokemon
special HealPlayerParty
return
EventScript_1A65EC:: @ 81A65EC
@@ -2161,7 +2161,7 @@ EventScript_FadeOut_Heal_FadeIn:: @ 81A6C26
fadescreen 1
playfanfare MUS_ME_ASA
waitfanfare
special sp000_heal_pokemon
special HealPlayerParty
fadescreen 0
return
@@ -8644,7 +8644,7 @@ EventScript_1BB519:: @ 81BB519
end
EventScript_1BB51A:: @ 81BB51A
special CheckForAlivePartyMons
special HasEnoughMonsForDoubleBattle
compare_var_to_value VAR_RESULT, 0
goto_if ne, EventScript_1BB533
setvar VAR_0x8004, 2
@@ -8693,7 +8693,7 @@ EventScript_1BB54C:: @ 81BB54C
end
EventScript_1BB5B3:: @ 81BB5B3
special sp000_heal_pokemon
special HealPlayerParty
special SavePlayerParty
special LoadPlayerBag
copyvar VAR_0x406F, VAR_0x8004
@@ -9019,7 +9019,7 @@ UnknownMap_00_00_EventScript_1BB8CF:: @ 81BB8CF
gUnknown_81BB8DB:: @ 81BB8DB
UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB
fadescreen 1
special sub_80A0334
special ChooseHalfPartyForBattle
waitstate
compare_var_to_value VAR_RESULT, 0
goto_if eq, EventScript_1BB94F
@@ -9032,7 +9032,7 @@ UnknownMap_00_03_EventScript_1BB8DB:: @ 81BB8DB
gUnknown_81BB8F8:: @ 81BB8F8
UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8
fadescreen 1
special sub_80A0334
special ChooseHalfPartyForBattle
waitstate
compare_var_to_value VAR_RESULT, 0
goto_if eq, EventScript_1BB94F
@@ -9045,7 +9045,7 @@ UnknownMap_00_03_EventScript_1BB8F8:: @ 81BB8F8
gUnknown_81BB915:: @ 81BB915
UnknownMap_00_03_EventScript_1BB915:: @ 81BB915
fadescreen 1
special sub_80A0334
special ChooseHalfPartyForBattle
waitstate
compare_var_to_value VAR_RESULT, 0
goto_if eq, EventScript_1BB94F
@@ -9058,7 +9058,7 @@ UnknownMap_00_03_EventScript_1BB915:: @ 81BB915
gUnknown_81BB932:: @ 81BB932
UnknownMap_00_03_EventScript_1BB932:: @ 81BB932
fadescreen 1
special sub_80A0334
special ChooseHalfPartyForBattle
waitstate
compare_var_to_value VAR_RESULT, 0
goto_if eq, EventScript_1BB94F
@@ -9217,7 +9217,7 @@ EventScript_1BBA94:: @ 81BBA94
goto_if eq, EventScript_1BB82F
msgbox gUnknown_81BD86A
closemessage
special sp000_heal_pokemon
special HealPlayerParty
setvar VAR_0x8004, 6
copyvar VAR_0x406F, VAR_0x8004
special HelpSystem_Disable
@@ -9368,7 +9368,7 @@ EventScript_1BBCF4:: @ 81BBCF4
end
EventScript_1BBCF5:: @ 81BBCF5
special CheckForAlivePartyMons
special HasEnoughMonsForDoubleBattle
compare_var_to_value VAR_RESULT, 0
goto_if ne, EventScript_1BBD0E
setvar VAR_0x8004, 1
@@ -14241,7 +14241,7 @@ EventScript_1C52D7:
end
EventScript_1C52E0:: @ 81C52E0
special sp000_heal_pokemon
special HealPlayerParty
setvar VAR_0x8004, 11
special sub_815D9E8
warp MAP_SEVEN_ISLAND_TRAINER_TOWER_LOBBY, 255, 9, 7
@@ -45,7 +45,7 @@ EventScript_1653C5:: @ 81653C5
OneIsland_KindleRoad_EmberSpa_EventScript_1653CF:: @ 81653CF
lockall
fadescreen 3
special sp000_heal_pokemon
special HealPlayerParty
fadescreen 2
msgbox gUnknown_817D450
setvar VAR_0x4001, 1
@@ -488,7 +488,7 @@ Movement_1694BE:: @ 81694BE
step_end
EventScript_1694C2:: @ 81694C2
special sp000_heal_pokemon
special HealPlayerParty
msgbox gUnknown_818DE38
closemessage
playbgm MUS_RIVAL2, 0
+1 -1
View File
@@ -8,7 +8,7 @@ PokemonTower_5F_EventScript_163433:: @ 8163433
PokemonTower_5F_EventScript_16343C:: @ 816343C
lockall
fadescreen 3
special sp000_heal_pokemon
special HealPlayerParty
fadescreen 2
msgbox gUnknown_817A1FA
setvar VAR_0x4001, 1
@@ -128,7 +128,7 @@ EventScript_170A11:: @ 8170A11
EventScript_170A1E:: @ 8170A1E
msgbox gUnknown_81A06AB
fadescreen 1
special sub_80A0334
special ChooseHalfPartyForBattle
waitstate
return
@@ -29,7 +29,7 @@ EventScript_170A97:: @ 8170A97
compare_var_to_value VAR_RESULT, 2
call_if eq, EventScript_170B17
closemessage
special sp000_heal_pokemon
special HealPlayerParty
applymovement 255, Movement_170B28
waitmovement 0
special LoadPlayerParty
@@ -196,7 +196,7 @@ EventScript_164A53:: @ 8164A53
EventScript_164AA0:: @ 8164AA0
copyvar VAR_0x8005, VAR_RESULT
setvar VAR_MAP_SCENE_TRAINER_TOWER, 1
special sp000_heal_pokemon
special HealPlayerParty
msgbox gUnknown_817C8BF
setvar VAR_0x8004, 6
special sub_815D9E8
+1 -1
View File
@@ -266,7 +266,7 @@ gUnknown_8463E57:: @ 8463E57
.string "QUIRKY$"
.align 2
gNatureNames:: @ 8463E60 dataptr
gNatureNamePointers:: @ 8463E60 dataptr
.4byte gUnknown_8463DBC
.4byte gUnknown_8463DC2
.4byte gUnknown_8463DC9
+3 -3
View File
@@ -8,7 +8,7 @@
.set __special__, 0
.align 2
gSpecials:: @ 815FD60
def_special sp000_heal_pokemon
def_special HealPlayerParty
def_special SetCableClubWarp
def_special DoCableClubWarp
def_special sub_807E704
@@ -49,7 +49,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special SavePlayerParty
def_special LoadPlayerParty
def_special sub_80A0334
def_special ChooseHalfPartyForBattle
def_special sp02A_crash_sound
def_special nullsub_75
def_special nullsub_75
@@ -69,7 +69,7 @@ gSpecials:: @ 815FD60
def_special ScrSpecial_GetTrainerEyeRematchFlag
def_special ScrSpecial_StartTrainerEyeRematch
def_special ShowPokemonStorageSystem
def_special CheckForAlivePartyMons
def_special HasEnoughMonsForDoubleBattle
def_special nullsub_75
def_special nullsub_75
def_special nullsub_75
+2 -2
View File
@@ -79,8 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
void sub_80496C0(u8 spriteId, struct Pokemon *mon);
void sub_804981C(u8 spriteId, u8);
void UpdateNickInHealthbox(u8 spriteId, struct Pokemon *mon);
void TryAddPokeballIconToHealthbox(u8 spriteId, u8);
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
#endif // GUARD_BATTLE_INTERFACE_H
+3
View File
@@ -248,4 +248,7 @@ extern const u8 gUnknown_83FE85C[];
extern const u8 gUnknown_83FE860[];
extern const u8 gUnknown_83FE864[];
extern const u8 gText_SafariBalls[];
extern const u8 gText_HighlightRed_Left[];
#endif // GUARD_BATTLE_MESSAGE_H
+7
View File
@@ -4854,4 +4854,11 @@ extern const u32 gFireRedTrainerCard_Gfx[];
extern const u16 gEmeraldTrainerCard_Pal[];
extern const u32 gEmeraldTrainerCard_Gfx[];
// battle_interface
extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[];
extern const u8 gHealthboxElementsGfxTable[][32];
extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
extern const u16 gUnknown_8D12404[];
#endif //GUARD_GRAPHICS_H
@@ -1,11 +1,11 @@
#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#ifndef GUARD_SCRIPT_POKEMON_UTIL_H
#define GUARD_SCRIPT_POKEMON_UTIL_H
bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3);
bool8 ScriptGiveEgg(u16 species);
void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot);
void sp000_heal_pokemon(void);
void HealPlayerParty(void);
void ReducePlayerPartyToThree(void);
void CreateScriptedWildMon(u16 species, u8 level, u16 item);
#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#endif //GUARD_SCRIPT_POKEMON_UTIL_H
+1 -1
View File
@@ -250,7 +250,7 @@ u16 RenderText(struct TextPrinter *textPrinter);
s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
s32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7);
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
u8 GetKeypadIconTileOffset(u8 keypadIconId);
u8 GetKeypadIconWidth(u8 keypadIconId);
+3 -3
View File
@@ -79,7 +79,7 @@ SECTIONS {
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
asm/battle_interface.o(.text);
src/battle_interface.o(.text);
asm/smokescreen.o(.text);
src/pokeball.o(.text);
src/load_save.o(.text);
@@ -145,7 +145,7 @@ SECTIONS {
src/script_menu.o(.text);
asm/naming_screen.o(.text);
src/money.o(.text);
asm/script_pokemon_util_80A0058.o(.text);
src/script_pokemon_util.o(.text);
src/field_poison.o(.text);
src/pokemon_size_record.o(.text);
src/pc_screen_effect.o(.text);
@@ -405,7 +405,7 @@ SECTIONS {
src/util.o(.rodata);
src/daycare.o(.rodata);
src/battle_gfx_sfx_util.o(.rodata);
data/battle_interface.o(.rodata);
src/battle_interface.o(.rodata);
src/pokeball.o(.rodata);
src/trade.o(.rodata);
src/trade_scene.o(.rodata);
+2 -2
View File
@@ -687,8 +687,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform)
gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]);
sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
sub_804981C(gHealthboxSpriteIds[battlerAtk], 1);
UpdateNickInHealthbox(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
TryAddPokeballIconToHealthbox(gHealthboxSpriteIds[battlerAtk], 1);
}
else if (notTransform)
{
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1254,7 +1254,7 @@ const u8 *const gUnknown_83FE7F4[] = {
sText_Speed
};
const u8 gUnknown_83FE80C[] = _("{HIGHLIGHT 2}SAFARI BALLS"); //
const u8 gText_SafariBalls[] = _("{HIGHLIGHT 2}SAFARI BALLS"); //
const u8 gText_HighlightRed_Left[] = _("{HIGHLIGHT 2}Left: ");
const u8 gText_HighlightRed[] = _("{HIGHLIGHT 2}");
const u8 gText_Sleep[] = _("sleep");
+2 -2
View File
@@ -9,7 +9,7 @@
#include "safari_zone.h"
#include "quest_log.h"
#include "script.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "strings.h"
#include "string_util.h"
#include "event_data.h"
@@ -901,7 +901,7 @@ static void CB2_EndTrainerBattle(void)
gSpecialVar_Result = 1;
if (gUnknown_20386CC & 1)
{
sp000_heal_pokemon();
HealPlayerParty();
}
else
{
+1 -1
View File
@@ -18,7 +18,7 @@
#include "new_game.h"
#include "save.h"
#include "item.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "constants/moves.h"
+2 -2
View File
@@ -1,5 +1,5 @@
#include "global.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "event_data.h"
#include "credits.h"
#include "overworld.h"
@@ -14,7 +14,7 @@ bool8 Special_HallOfFame(void)
bool8 *r7;
int i;
bool8 gaveAtLeastOneRibbon;
sp000_heal_pokemon();
HealPlayerParty();
if (FlagGet(FLAG_SYS_GAME_CLEAR) == TRUE)
{
gHasHallOfFameRecords = TRUE;
+1 -1
View File
@@ -27,7 +27,7 @@
#include "data.h"
#include "field_specials.h"
#include "constants/items.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "pokemon_storage_system.h"
#include "party_menu.h"
#include "money.h"
+217
View File
@@ -0,0 +1,217 @@
#include "global.h"
#include "battle.h"
#include "berry.h"
#include "daycare.h"
#include "event_data.h"
#include "event_object_movement.h"
#include "load_save.h"
#include "malloc.h"
#include "overworld.h"
#include "party_menu.h"
#include "pokedex.h"
#include "script_pokemon_util.h"
#include "constants/items.h"
#include "constants/species.h"
static void CB2_ReturnFromChooseHalfParty(void);
static void CB2_ReturnFromChooseBattleTowerParty(void);
void HealPlayerParty(void)
{
u8 i, j;
u8 ppBonuses;
u8 arg[4];
// restore HP.
for(i = 0; i < gPlayerPartyCount; i++)
{
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
arg[0] = maxHP;
arg[1] = maxHP >> 8;
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
// restore PP.
for(j = 0; j < MAX_MON_MOVES; j++)
{
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
}
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
arg[0] = 0;
arg[1] = 0;
arg[2] = 0;
arg[3] = 0;
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
}
}
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
{
u16 nationalDexNum;
int sentToPc;
u8 heldItem[2];
struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon));
CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
heldItem[0] = item;
heldItem[1] = item >> 8;
SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
sentToPc = GiveMonToPlayer(mon);
nationalDexNum = SpeciesToNationalPokedexNum(species);
switch(sentToPc)
{
case MON_GIVEN_TO_PARTY:
case MON_GIVEN_TO_PC:
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
break;
}
Free(mon);
return sentToPc;
}
u8 ScriptGiveEgg(u16 species)
{
struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon));
bool8 isEgg;
bool8 sentToPc;
CreateEgg(mon, species, TRUE);
isEgg = TRUE;
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
sentToPc = GiveMonToPlayer(mon);
Free(mon);
return sentToPc;
}
void HasEnoughMonsForDoubleBattle(void)
{
switch (GetMonsStateToDoubles())
{
case PLAYER_HAS_TWO_USABLE_MONS:
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
break;
case PLAYER_HAS_ONE_MON:
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
break;
case PLAYER_HAS_ONE_USABLE_MON:
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
break;
}
}
static bool8 CheckPartyMonHasHeldItem(u16 item)
{
int i;
for(i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
return TRUE;
}
return FALSE;
}
bool8 GetNameOfEnigmaBerryInPlayerParty(void)
{
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
if (hasItem == TRUE)
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
return hasItem;
}
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
{
u8 heldItem[2];
ZeroEnemyPartyMons();
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
if (item)
{
heldItem[0] = item;
heldItem[1] = item >> 8;
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
}
}
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
{
if (monIndex > PARTY_SIZE)
monIndex = gPlayerPartyCount - 1;
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
}
// Note: When control returns to the event script, gSpecialVar_Result will be
// TRUE if the party selection was successful.
void ChooseHalfPartyForBattle(void)
{
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
InitChooseHalfPartyForBattle(0);
}
static void CB2_ReturnFromChooseHalfParty(void)
{
switch (gSelectedOrderFromParty[0])
{
case 0:
gSpecialVar_Result = FALSE;
break;
default:
gSpecialVar_Result = TRUE;
break;
}
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
void ChooseBattleTowerPlayerParty(void)
{
gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty;
InitChooseHalfPartyForBattle(1);
}
static void CB2_ReturnFromChooseBattleTowerParty(void)
{
switch (gSelectedOrderFromParty[0])
{
case 0:
LoadPlayerParty();
gSpecialVar_Result = FALSE;
break;
default:
ReducePlayerPartyToThree();
gSpecialVar_Result = TRUE;
break;
}
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
void ReducePlayerPartyToThree(void)
{
struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon));
int i;
// copy the selected pokemon according to the order.
for (i = 0; i < 3; i++)
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
// overwrite the first 3 with the order copied to.
for (i = 0; i < 3; i++)
gPlayerParty[i] = party[i];
CalculatePlayerPartyCount();
Free(party);
}
+1 -1
View File
@@ -1180,7 +1180,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
return width;
}
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7)
{
u8 shadowColor;
u8 *strLocal;