mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-25 19:24:16 +01:00
port pokemon size record
This commit is contained in:
parent
4d01d400a8
commit
44dbf4dea0
@ -28408,7 +28408,7 @@ _080556A0:
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0x1
|
||||
bl sub_80C0630
|
||||
bl GetPokedexHeightWeight
|
||||
ldrh r1, [r4]
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
|
@ -1,489 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_80F97C8
|
||||
sub_80F97C8: @ 80F97C8
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x8
|
||||
adds r5, r0, 0
|
||||
movs r1, 0
|
||||
bl GetMonData
|
||||
lsls r0, 16
|
||||
str r0, [sp, 0x4]
|
||||
lsrs r0, 16
|
||||
str r0, [sp]
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x27
|
||||
bl GetMonData
|
||||
adds r7, r0, 0
|
||||
movs r6, 0xF
|
||||
ands r7, r6
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x28
|
||||
bl GetMonData
|
||||
mov r8, r0
|
||||
mov r1, r8
|
||||
ands r1, r6
|
||||
mov r8, r1
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x29
|
||||
bl GetMonData
|
||||
mov r9, r0
|
||||
mov r3, r9
|
||||
ands r3, r6
|
||||
mov r9, r3
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x2A
|
||||
bl GetMonData
|
||||
mov r10, r0
|
||||
ands r0, r6
|
||||
mov r10, r0
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x2B
|
||||
bl GetMonData
|
||||
adds r4, r0, 0
|
||||
ands r4, r6
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x2C
|
||||
bl GetMonData
|
||||
adds r2, r0, 0
|
||||
ands r2, r6
|
||||
mov r1, r8
|
||||
mov r3, r9
|
||||
eors r1, r3
|
||||
mov r8, r1
|
||||
mov r0, r8
|
||||
muls r0, r7
|
||||
movs r1, 0xFF
|
||||
ldr r3, [sp]
|
||||
ands r3, r1
|
||||
eors r0, r3
|
||||
eors r4, r2
|
||||
mov r1, r10
|
||||
muls r1, r4
|
||||
ldr r3, [sp, 0x4]
|
||||
lsrs r2, r3, 24
|
||||
eors r1, r2
|
||||
lsls r0, 8
|
||||
adds r0, r1
|
||||
add sp, 0x8
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80F97C8
|
||||
|
||||
thumb_func_start sub_80F986C
|
||||
sub_80F986C: @ 80F986C
|
||||
push {lr}
|
||||
lsls r0, 16
|
||||
lsrs r2, r0, 16
|
||||
movs r1, 0x1
|
||||
ldr r3, =gUnknown_0858D8F0
|
||||
_080F9876:
|
||||
lsls r0, r1, 3
|
||||
adds r0, r3
|
||||
ldrh r0, [r0, 0x4]
|
||||
cmp r2, r0
|
||||
bcs _080F988C
|
||||
subs r0, r1, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
b _080F9898
|
||||
.pool
|
||||
_080F988C:
|
||||
adds r0, r1, 0x1
|
||||
lsls r0, 24
|
||||
lsrs r1, r0, 24
|
||||
cmp r1, 0xE
|
||||
bls _080F9876
|
||||
adds r0, r1, 0
|
||||
_080F9898:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80F986C
|
||||
|
||||
thumb_func_start sub_80F989C
|
||||
sub_80F989C: @ 80F989C
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x8
|
||||
adds r6, r1, 0
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
lsls r6, 16
|
||||
lsrs r6, 16
|
||||
bl SpeciesToNationalPokedexNum
|
||||
lsls r0, 16
|
||||
lsrs r0, 16
|
||||
movs r1, 0
|
||||
bl sub_80C0630
|
||||
lsls r0, 16
|
||||
lsrs r7, r0, 16
|
||||
adds r0, r6, 0
|
||||
bl sub_80F986C
|
||||
lsls r0, 24
|
||||
ldr r1, =gUnknown_0858D8F0
|
||||
lsrs r0, 21
|
||||
adds r0, r1
|
||||
ldrh r1, [r0]
|
||||
str r1, [sp]
|
||||
movs r2, 0
|
||||
str r2, [sp, 0x4]
|
||||
ldrb r2, [r0, 0x2]
|
||||
movs r3, 0
|
||||
ldrh r4, [r0, 0x4]
|
||||
movs r5, 0
|
||||
adds r0, r6, 0
|
||||
movs r1, 0
|
||||
subs r0, r4
|
||||
sbcs r1, r5
|
||||
bl __udivdi3
|
||||
ldr r2, [sp]
|
||||
ldr r3, [sp, 0x4]
|
||||
adds r2, r0
|
||||
adcs r3, r1
|
||||
str r2, [sp]
|
||||
str r3, [sp, 0x4]
|
||||
adds r0, r7, 0
|
||||
movs r1, 0
|
||||
bl __muldi3
|
||||
movs r2, 0xA
|
||||
movs r3, 0
|
||||
bl __udivdi3
|
||||
add sp, 0x8
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.pool
|
||||
thumb_func_end sub_80F989C
|
||||
|
||||
thumb_func_start sub_80F9910
|
||||
sub_80F9910: @ 80F9910
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
lsls r4, r1, 2
|
||||
adds r4, r1
|
||||
lsls r4, 1
|
||||
adds r0, r4, 0
|
||||
bl __floatsidf
|
||||
cmp r4, 0
|
||||
bge _080F992C
|
||||
ldr r3, _080F9974
|
||||
ldr r2, _080F9970
|
||||
bl __adddf3
|
||||
_080F992C:
|
||||
ldr r2, _080F9978
|
||||
ldr r3, _080F997C
|
||||
bl __divdf3
|
||||
bl __fixunsdfsi
|
||||
adds r4, r0, 0
|
||||
movs r1, 0xA
|
||||
bl __udivsi3
|
||||
adds r1, r0, 0
|
||||
adds r0, r5, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x8
|
||||
bl ConvertIntToDecimalStringN
|
||||
adds r5, r0, 0
|
||||
ldr r1, _080F9980
|
||||
bl StringAppend
|
||||
adds r5, r0, 0
|
||||
adds r0, r4, 0
|
||||
movs r1, 0xA
|
||||
bl __umodsi3
|
||||
adds r1, r0, 0
|
||||
adds r0, r5, 0
|
||||
movs r2, 0
|
||||
movs r3, 0x1
|
||||
bl ConvertIntToDecimalStringN
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080F9970: .4byte 0x41f00000
|
||||
_080F9974: .4byte 0x00000000
|
||||
_080F9978: .4byte 0x40396666
|
||||
_080F997C: .4byte 0x66666666
|
||||
_080F9980: .4byte gUnknown_085EED24
|
||||
thumb_func_end sub_80F9910
|
||||
|
||||
thumb_func_start sub_80F9984
|
||||
sub_80F9984: @ 80F9984
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x4
|
||||
adds r7, r1, 0
|
||||
lsls r0, 16
|
||||
lsrs r6, r0, 16
|
||||
ldr r1, =gScriptResult
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0xFF
|
||||
bne _080F99A0
|
||||
movs r0, 0
|
||||
b _080F9A0A
|
||||
.pool
|
||||
_080F99A0:
|
||||
ldrh r1, [r1]
|
||||
movs r0, 0x64
|
||||
muls r1, r0
|
||||
ldr r0, =gPlayerParty
|
||||
adds r5, r1, r0
|
||||
adds r0, r5, 0
|
||||
movs r1, 0x2D
|
||||
bl GetMonData
|
||||
cmp r0, 0x1
|
||||
beq _080F99C2
|
||||
adds r0, r5, 0
|
||||
movs r1, 0xB
|
||||
bl GetMonData
|
||||
cmp r0, r6
|
||||
beq _080F99CC
|
||||
_080F99C2:
|
||||
movs r0, 0x1
|
||||
b _080F9A0A
|
||||
.pool
|
||||
_080F99CC:
|
||||
mov r4, sp
|
||||
adds r0, r5, 0
|
||||
bl sub_80F97C8
|
||||
strh r0, [r4]
|
||||
mov r0, sp
|
||||
ldrh r1, [r0]
|
||||
adds r0, r6, 0
|
||||
bl sub_80F989C
|
||||
adds r5, r0, 0
|
||||
ldrh r1, [r7]
|
||||
adds r0, r6, 0
|
||||
bl sub_80F989C
|
||||
adds r4, r0, 0
|
||||
ldr r0, =gStringVar2
|
||||
adds r1, r5, 0
|
||||
bl sub_80F9910
|
||||
cmp r5, r4
|
||||
bls _080F9A08
|
||||
mov r0, sp
|
||||
ldrh r0, [r0]
|
||||
strh r0, [r7]
|
||||
movs r0, 0x3
|
||||
b _080F9A0A
|
||||
.pool
|
||||
_080F9A08:
|
||||
movs r0, 0x2
|
||||
_080F9A0A:
|
||||
add sp, 0x4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80F9984
|
||||
|
||||
thumb_func_start sub_80F9A14
|
||||
sub_80F9A14: @ 80F9A14
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
lsls r4, 16
|
||||
lsrs r4, 16
|
||||
ldrh r1, [r5]
|
||||
adds r0, r4, 0
|
||||
bl sub_80F989C
|
||||
adds r1, r0, 0
|
||||
ldr r0, =gStringVar3
|
||||
bl sub_80F9910
|
||||
ldr r0, =gStringVar1
|
||||
movs r1, 0xB
|
||||
muls r1, r4
|
||||
ldr r2, =gSpeciesNames
|
||||
adds r1, r2
|
||||
bl StringCopy
|
||||
ldrh r1, [r5]
|
||||
movs r0, 0x80
|
||||
lsls r0, 8
|
||||
cmp r1, r0
|
||||
bne _080F9A64
|
||||
ldr r0, =gStringVar2
|
||||
ldr r1, =gUnknown_085ECF6B
|
||||
bl StringCopy
|
||||
b _080F9A6E
|
||||
.pool
|
||||
_080F9A64:
|
||||
ldr r0, =gStringVar2
|
||||
ldr r1, =gSaveBlock2Ptr
|
||||
ldr r1, [r1]
|
||||
bl StringCopy
|
||||
_080F9A6E:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9A14
|
||||
|
||||
thumb_func_start InitSeedotSizeRecord
|
||||
InitSeedotSizeRecord: @ 80F9A7C
|
||||
push {lr}
|
||||
ldr r0, =0x00004047
|
||||
movs r1, 0x80
|
||||
lsls r1, 8
|
||||
bl VarSet
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end InitSeedotSizeRecord
|
||||
|
||||
thumb_func_start sub_80F9A90
|
||||
sub_80F9A90: @ 80F9A90
|
||||
push {lr}
|
||||
ldr r0, =0x00004047
|
||||
bl GetVarPointer
|
||||
adds r1, r0, 0
|
||||
movs r0, 0x95
|
||||
lsls r0, 1
|
||||
bl sub_80F9A14
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9A90
|
||||
|
||||
thumb_func_start sub_80F9AAC
|
||||
sub_80F9AAC: @ 80F9AAC
|
||||
push {r4,lr}
|
||||
ldr r0, =0x00004047
|
||||
bl GetVarPointer
|
||||
adds r1, r0, 0
|
||||
ldr r4, =gScriptResult
|
||||
movs r0, 0x95
|
||||
lsls r0, 1
|
||||
bl sub_80F9984
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
strh r0, [r4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9AAC
|
||||
|
||||
thumb_func_start InitLotadSizeRecord
|
||||
InitLotadSizeRecord: @ 80F9AD4
|
||||
push {lr}
|
||||
ldr r0, =0x0000404f
|
||||
movs r1, 0x80
|
||||
lsls r1, 8
|
||||
bl VarSet
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end InitLotadSizeRecord
|
||||
|
||||
thumb_func_start sub_80F9AE8
|
||||
sub_80F9AE8: @ 80F9AE8
|
||||
push {lr}
|
||||
ldr r0, =0x0000404f
|
||||
bl GetVarPointer
|
||||
adds r1, r0, 0
|
||||
ldr r0, =0x00000127
|
||||
bl sub_80F9A14
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9AE8
|
||||
|
||||
thumb_func_start sub_80F9B04
|
||||
sub_80F9B04: @ 80F9B04
|
||||
push {r4,lr}
|
||||
ldr r0, =0x0000404f
|
||||
bl GetVarPointer
|
||||
adds r1, r0, 0
|
||||
ldr r4, =gScriptResult
|
||||
ldr r0, =0x00000127
|
||||
bl sub_80F9984
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
strh r0, [r4]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9B04
|
||||
|
||||
thumb_func_start sub_80F9B30
|
||||
sub_80F9B30: @ 80F9B30
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0xC
|
||||
lsls r0, 24
|
||||
lsrs r6, r0, 24
|
||||
lsls r1, 24
|
||||
lsrs r5, r1, 24
|
||||
movs r7, 0
|
||||
add r4, sp, 0x8
|
||||
movs r0, 0x1
|
||||
strb r0, [r4]
|
||||
ldr r1, =gUnknown_0858D970
|
||||
mov r0, sp
|
||||
movs r2, 0x7
|
||||
bl memcpy
|
||||
mov r8, r4
|
||||
cmp r6, 0xA
|
||||
bhi _080F9BAC
|
||||
cmp r5, 0x40
|
||||
bhi _080F9BAC
|
||||
ldr r0, =gSaveBlock1Ptr
|
||||
ldr r0, [r0]
|
||||
ldr r1, =0x000031a8
|
||||
adds r0, r1
|
||||
adds r0, r6
|
||||
strb r5, [r0]
|
||||
movs r5, 0
|
||||
_080F9B6A:
|
||||
movs r0, 0x64
|
||||
adds r1, r5, 0
|
||||
muls r1, r0
|
||||
ldr r0, =gPlayerParty
|
||||
adds r4, r1, r0
|
||||
adds r0, r4, 0
|
||||
movs r1, 0xB
|
||||
bl GetMonData
|
||||
cmp r0, 0
|
||||
beq _080F9B9C
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x6
|
||||
bl GetMonData
|
||||
cmp r0, 0
|
||||
bne _080F9B9C
|
||||
mov r1, sp
|
||||
adds r0, r1, r6
|
||||
ldrb r1, [r0]
|
||||
adds r0, r4, 0
|
||||
mov r2, r8
|
||||
bl SetMonData
|
||||
movs r7, 0x1
|
||||
_080F9B9C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x5
|
||||
ble _080F9B6A
|
||||
cmp r7, 0
|
||||
beq _080F9BAC
|
||||
ldr r0, =0x0000089b
|
||||
bl FlagSet
|
||||
_080F9BAC:
|
||||
add sp, 0xC
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.pool
|
||||
thumb_func_end sub_80F9B30
|
||||
|
||||
.align 2, 0 @ Don't pad with nop.
|
@ -513,7 +513,7 @@ sub_8153BB0: @ 8153BB0
|
||||
ldrb r1, [r2]
|
||||
adds r2, 0x1
|
||||
str r2, [r4, 0x8]
|
||||
bl sub_80F9B30
|
||||
bl GiveGiftRibbonToParty
|
||||
ldr r0, =gStringVar4
|
||||
ldr r1, =gUnknown_08674B6A
|
||||
bl StringExpandPlaceholders
|
||||
|
@ -9377,8 +9377,8 @@ sub_80C0620: @ 80C0620
|
||||
.pool
|
||||
thumb_func_end sub_80C0620
|
||||
|
||||
thumb_func_start sub_80C0630
|
||||
sub_80C0630: @ 80C0630
|
||||
thumb_func_start GetPokedexHeightWeight
|
||||
GetPokedexHeightWeight: @ 80C0630
|
||||
push {lr}
|
||||
lsls r0, 16
|
||||
lsrs r2, r0, 16
|
||||
@ -9406,7 +9406,7 @@ _080C065C:
|
||||
pop {r1}
|
||||
bx r1
|
||||
.pool
|
||||
thumb_func_end sub_80C0630
|
||||
thumb_func_end GetPokedexHeightWeight
|
||||
|
||||
thumb_func_start pokedex_flag_operation
|
||||
@ u8 pokedex_flag_operation(u16 nationalPokedexNum, u8 op)
|
||||
|
1014
data/data3.s
1014
data/data3.s
File diff suppressed because it is too large
Load Diff
8
data/data3a.s
Normal file
8
data/data3a.s
Normal file
@ -0,0 +1,8 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
||||
.section .rodata
|
||||
|
||||
@ unknown unreferenced data
|
||||
|
||||
.incbin "baserom.gba", 0x58d977, 0x2a1
|
1014
data/data3b.s
Normal file
1014
data/data3b.s
Normal file
File diff suppressed because it is too large
Load Diff
@ -2231,7 +2231,7 @@ gUnknown_085ECF5D:: @ 85ECF5D
|
||||
|
||||
.string "{STR_VAR_1} fainted…\p\n$"
|
||||
|
||||
gUnknown_085ECF6B:: @ 85ECF6B
|
||||
gOtherText_Marco:: @ 85ECF6B
|
||||
|
||||
.string "MARCO$"
|
||||
|
||||
@ -3302,7 +3302,7 @@ gUnknown_085EED0A:: @ 85EED0A
|
||||
|
||||
.string "Same {PKMN} in party already.$"
|
||||
|
||||
gUnknown_085EED24:: @ 85EED24
|
||||
gOtherText_DecimalPoint:: @ 85EED24
|
||||
|
||||
.string ".$"
|
||||
|
||||
|
12
include/config.h
Normal file
12
include/config.h
Normal file
@ -0,0 +1,12 @@
|
||||
#ifndef GUARD_CONFIG_H
|
||||
#define GUARD_CONFIG_H
|
||||
|
||||
#define ENGLISH
|
||||
|
||||
#ifdef ENGLISH
|
||||
#define UNITS_IMPERIAL
|
||||
#else
|
||||
#define UNITS_METRIC
|
||||
#endif
|
||||
|
||||
#endif // GUARD_CONFIG_H
|
@ -2,6 +2,7 @@
|
||||
#define GUARD_GLOBAL_H
|
||||
|
||||
#include "gba/gba.h"
|
||||
#include "config.h"
|
||||
|
||||
// Prevent cross-jump optimization.
|
||||
#define BLOCK_CROSS_JUMP asm("");
|
||||
|
@ -9,4 +9,6 @@ void InitLotadSizeRecord(void);
|
||||
void GetLotadSizeRecordInfo(void);
|
||||
void CompareLotadSize(void);
|
||||
|
||||
void GiveGiftRibbonToParty(u8 index, u8 ribbonId);
|
||||
|
||||
#endif // GUARD_POKEMON_SIZE_RECORD_H
|
||||
|
@ -30,14 +30,14 @@
|
||||
#define VAR_DEPT_STORE_FLOOR 0x4043
|
||||
#define VAR_POKELOT_PRIZE 0x4045
|
||||
#define VAR_NATIONAL_DEX 0x4046
|
||||
#define VAR_SHROOMISH_SIZE_RECORD 0x4047
|
||||
#define VAR_SEEDOT_SIZE_RECORD 0x4047
|
||||
#define VAR_ASH_GATHER_COUNT 0x4048
|
||||
#define VAR_BIRCH_STATE 0x4049
|
||||
#define VAR_CRUISE_STEP_COUNT 0x404A
|
||||
#define VAR_POKELOT_RND1 0x404B
|
||||
#define VAR_POKELOT_RND2 0x404C
|
||||
|
||||
#define VAR_BARBOACH_SIZE_RECORD 0x404F
|
||||
#define VAR_LOTAD_SIZE_RECORD 0x404F
|
||||
|
||||
#define VAR_0x4054 0x4054
|
||||
|
||||
|
@ -146,7 +146,7 @@ SECTIONS {
|
||||
asm/contest_link_80F57C4.o(.text);
|
||||
asm/script_pokemon_util_80F87D8.o(.text);
|
||||
asm/field_poison.o(.text);
|
||||
asm/big_shroomish_barboach.o(.text);
|
||||
src/pokemon_size_record.o(.text);
|
||||
asm/fldeff_80F9BCC.o(.text);
|
||||
asm/truck_scene.o(.text);
|
||||
asm/porthole.o(.text);
|
||||
@ -302,6 +302,9 @@ SECTIONS {
|
||||
data/data2c.o(.rodata);
|
||||
src/trig.o(.rodata);
|
||||
data/data3.o(.rodata);
|
||||
src/pokemon_size_record.o(.rodata)
|
||||
data/data3a.o(.rodata)
|
||||
data/data3b.o(.rodata);
|
||||
src/battle_ai.o(.rodata);
|
||||
data/data4.o(.rodata);
|
||||
data/battle_controller_link_partner.o(.rodata);
|
||||
|
222
src/pokemon_size_record.c
Normal file
222
src/pokemon_size_record.c
Normal file
@ -0,0 +1,222 @@
|
||||
#include "global.h"
|
||||
#include "pokemon_size_record.h"
|
||||
#include "event_data.h"
|
||||
#include "species.h"
|
||||
#include "string_util.h"
|
||||
#include "text.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
#define DEFAULT_MAX_SIZE 0x8000 // was 0x8100 in Ruby/Sapphire
|
||||
|
||||
struct UnknownStruct
|
||||
{
|
||||
u16 unk0;
|
||||
u8 unk2;
|
||||
u16 unk4;
|
||||
};
|
||||
|
||||
extern u16 GetPokedexHeightWeight(u16 dexNo, bool8 height);
|
||||
extern u16 SpeciesToNationalPokedexNum(u16 species);
|
||||
|
||||
static const struct UnknownStruct sBigMonSizeTable[] =
|
||||
{
|
||||
{ 290, 1, 0 },
|
||||
{ 300, 1, 10 },
|
||||
{ 400, 2, 110 },
|
||||
{ 500, 4, 310 },
|
||||
{ 600, 20, 710 },
|
||||
{ 700, 50, 2710 },
|
||||
{ 800, 100, 7710 },
|
||||
{ 900, 150, 17710 },
|
||||
{ 1000, 150, 32710 },
|
||||
{ 1100, 100, -17826 },
|
||||
{ 1200, 50, -7826 },
|
||||
{ 1300, 20, -2826 },
|
||||
{ 1400, 5, -826 },
|
||||
{ 1500, 2, -326 },
|
||||
{ 1600, 1, -126 },
|
||||
{ 1700, 1, -26 },
|
||||
};
|
||||
|
||||
static const u8 sGiftRibbonsMonDataIds[] =
|
||||
{
|
||||
MON_DATA_GIFT_RIBBON_1, MON_DATA_GIFT_RIBBON_2, MON_DATA_GIFT_RIBBON_3,
|
||||
MON_DATA_GIFT_RIBBON_4, MON_DATA_GIFT_RIBBON_5, MON_DATA_GIFT_RIBBON_6,
|
||||
MON_DATA_GIFT_RIBBON_7
|
||||
};
|
||||
|
||||
extern const u8 gOtherText_DecimalPoint[];
|
||||
extern const u8 gOtherText_Marco[];
|
||||
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
|
||||
|
||||
#define CM_PER_INCH 2.54
|
||||
|
||||
static u32 GetMonSizeHash(struct Pokemon *pkmn)
|
||||
{
|
||||
u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY);
|
||||
u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF;
|
||||
u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF;
|
||||
u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF;
|
||||
u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF;
|
||||
u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF;
|
||||
u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF;
|
||||
u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF);
|
||||
u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8);
|
||||
|
||||
return (hibyte << 8) + lobyte;
|
||||
}
|
||||
|
||||
static u8 TranslateBigMonSizeTableIndex(u16 a)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 1; i < 15; i++)
|
||||
{
|
||||
if (a < sBigMonSizeTable[i].unk4)
|
||||
return i - 1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
static u32 GetMonSize(u16 species, u16 b)
|
||||
{
|
||||
u64 unk2;
|
||||
u64 unk4;
|
||||
u64 unk0;
|
||||
u32 height;
|
||||
u32 var;
|
||||
|
||||
height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0);
|
||||
var = TranslateBigMonSizeTableIndex(b);
|
||||
unk0 = sBigMonSizeTable[var].unk0;
|
||||
unk2 = sBigMonSizeTable[var].unk2;
|
||||
unk4 = sBigMonSizeTable[var].unk4;
|
||||
unk0 += (b - unk4) / unk2;
|
||||
return height * unk0 / 10;
|
||||
}
|
||||
|
||||
static void FormatMonSizeRecord(u8 *string, u32 size)
|
||||
{
|
||||
#ifdef UNITS_IMPERIAL
|
||||
//Convert size from centimeters to inches
|
||||
size = (double)(size * 10) / (CM_PER_INCH * 10);
|
||||
#endif
|
||||
|
||||
string = ConvertIntToDecimalStringN(string, size / 10, 0, 8);
|
||||
string = StringAppend(string, gOtherText_DecimalPoint);
|
||||
ConvertIntToDecimalStringN(string, size % 10, 0, 1);
|
||||
}
|
||||
|
||||
static u8 CompareMonSize(u16 species, u16 *sizeRecord)
|
||||
{
|
||||
if (gScriptResult == 0xFF)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
struct Pokemon *pkmn = &gPlayerParty[gScriptResult];
|
||||
|
||||
if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
u32 oldSize;
|
||||
u32 newSize;
|
||||
u16 sizeParams;
|
||||
|
||||
*(&sizeParams) = GetMonSizeHash(pkmn);
|
||||
newSize = GetMonSize(species, sizeParams);
|
||||
oldSize = GetMonSize(species, *sizeRecord);
|
||||
FormatMonSizeRecord(gStringVar2, newSize);
|
||||
if (newSize <= oldSize)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*sizeRecord = sizeParams;
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3
|
||||
static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord)
|
||||
{
|
||||
u32 size = GetMonSize(species, *sizeRecord);
|
||||
|
||||
FormatMonSizeRecord(gStringVar3, size);
|
||||
StringCopy(gStringVar1, gSpeciesNames[species]);
|
||||
if (*sizeRecord == DEFAULT_MAX_SIZE)
|
||||
StringCopy(gStringVar2, gOtherText_Marco);
|
||||
else
|
||||
StringCopy(gStringVar2, gSaveBlock2Ptr->playerName);
|
||||
}
|
||||
|
||||
void InitSeedotSizeRecord(void)
|
||||
{
|
||||
VarSet(VAR_SEEDOT_SIZE_RECORD, DEFAULT_MAX_SIZE);
|
||||
}
|
||||
|
||||
void GetSeedotSizeRecordInfo(void)
|
||||
{
|
||||
u16 *sizeRecord = GetVarPointer(VAR_SEEDOT_SIZE_RECORD);
|
||||
|
||||
GetMonSizeRecordInfo(SPECIES_SEEDOT, sizeRecord);
|
||||
}
|
||||
|
||||
void CompareSeedotSize(void)
|
||||
{
|
||||
u16 *sizeRecord = GetVarPointer(VAR_SEEDOT_SIZE_RECORD);
|
||||
|
||||
gScriptResult = CompareMonSize(SPECIES_SEEDOT, sizeRecord);
|
||||
}
|
||||
|
||||
void InitLotadSizeRecord(void)
|
||||
{
|
||||
VarSet(VAR_LOTAD_SIZE_RECORD, DEFAULT_MAX_SIZE);
|
||||
}
|
||||
|
||||
void GetLotadSizeRecordInfo(void)
|
||||
{
|
||||
u16 *sizeRecord = GetVarPointer(VAR_LOTAD_SIZE_RECORD);
|
||||
|
||||
GetMonSizeRecordInfo(SPECIES_LOTAD, sizeRecord);
|
||||
}
|
||||
|
||||
void CompareLotadSize(void)
|
||||
{
|
||||
u16 *sizeRecord = GetVarPointer(VAR_LOTAD_SIZE_RECORD);
|
||||
|
||||
gScriptResult = CompareMonSize(SPECIES_LOTAD, sizeRecord);
|
||||
}
|
||||
|
||||
void GiveGiftRibbonToParty(u8 index, u8 ribbonId)
|
||||
{
|
||||
s32 i;
|
||||
bool32 gotRibbon = FALSE;
|
||||
u8 data = 1;
|
||||
u8 array[8];
|
||||
memcpy(array, sGiftRibbonsMonDataIds, sizeof(sGiftRibbonsMonDataIds));
|
||||
|
||||
if (index < 11 && ribbonId < 65)
|
||||
{
|
||||
gSaveBlock1Ptr->giftRibbons[index] = ribbonId;
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
struct Pokemon *pkmn = &gPlayerParty[i];
|
||||
|
||||
if (GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0)
|
||||
{
|
||||
SetMonData(pkmn, array[index], &data);
|
||||
gotRibbon = TRUE;
|
||||
}
|
||||
}
|
||||
if (gotRibbon)
|
||||
FlagSet(SYS_RIBBON_GET);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user