mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-07 08:35:47 -05:00
address comments
This commit is contained in:
@@ -263,6 +263,7 @@ SECTIONS {
|
||||
asm/code_807CABC.o(.text);
|
||||
src/targeting_flags.o(.text);
|
||||
asm/code_807CD9C.o(.text);
|
||||
src/code_807CD9C.o(.text);
|
||||
src/weather.o(.text);
|
||||
asm/code_807E5AC.o(.text);
|
||||
src/code_807E5AC.o(.text);
|
||||
|
||||
@@ -181,7 +181,6 @@ void sub_8045CB0(void)
|
||||
uVar5 = 3;
|
||||
}
|
||||
else {
|
||||
// TODO: Ternary?
|
||||
uVar5 = -(tile->terrainType & TERRAIN_TYPE_IN_MONSTER_HOUSE) >> 0x1f & 2;
|
||||
}
|
||||
}
|
||||
|
||||
183
src/code_807CD9C.c
Normal file
183
src/code_807CD9C.c
Normal file
@@ -0,0 +1,183 @@
|
||||
#include "global.h"
|
||||
|
||||
#include "constants/ability.h"
|
||||
#include "constants/type.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "dungeon_ai.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "moves.h"
|
||||
#include "move_util.h"
|
||||
|
||||
extern u8 UseAttack(struct Entity *);
|
||||
extern void sub_805E804(void);
|
||||
void sub_806A2BC(struct Entity *pokemon, u8 param_2);
|
||||
extern u8 sub_8044B28(void);
|
||||
extern void sub_80426C8(u32, u32);
|
||||
extern void sub_8068FE0(struct Entity *, u32, struct Entity *r2);
|
||||
extern void nullsub_93(struct Position *);
|
||||
extern void sub_80522F4(struct Entity *, struct Entity *, u8 *);
|
||||
extern void SetMessageArgument(char[], struct Entity*, u32);
|
||||
extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
|
||||
extern void sub_80694C0(struct Entity *, s32, s32, u32);
|
||||
extern void sub_804535C(struct Entity *, u32);
|
||||
extern void sub_804AC20(struct Position *);
|
||||
extern void sub_807EC28(u32);
|
||||
extern void sub_806A5B8(struct Entity *);
|
||||
|
||||
extern u32 gUnknown_80F5FAC[];
|
||||
extern u8 *gUnknown_80F9C4C[];
|
||||
extern u8 *gUnknown_80F9C70[];
|
||||
extern u8 *gUnknown_80F9C8C[];
|
||||
extern u8 *gUnknown_80F9CBC[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 *gUnknown_80FCAC0[];
|
||||
|
||||
void sub_807E1A0(struct Entity *pokemon,struct Entity *target,u8 param_3,s16 param_4,s32 param_5)
|
||||
{
|
||||
struct EntityInfo *targetInfo;
|
||||
u8 flag;
|
||||
struct Move move;
|
||||
s32 newHP;
|
||||
s32 param_4_s32;
|
||||
|
||||
param_4_s32 = param_4;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
targetInfo = target->info;
|
||||
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
|
||||
if (!sub_80571F0(target,&move)) {
|
||||
if (!targetInfo->isNotTeamMember) {
|
||||
newHP = targetInfo->HP;
|
||||
newHP /= 2;
|
||||
if (MonsterIsType(target, TYPE_FIRE)) {
|
||||
newHP /= 2;
|
||||
}
|
||||
if (newHP < 1) {
|
||||
newHP = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
newHP = param_5;
|
||||
if (MonsterIsType(target, TYPE_FIRE)) {
|
||||
newHP /= 2;
|
||||
}
|
||||
}
|
||||
sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807E254(struct Entity *pokemon,struct Entity *target)
|
||||
{
|
||||
struct Position pokemonPos;
|
||||
struct Position targetPos;
|
||||
|
||||
|
||||
if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) {
|
||||
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
|
||||
}
|
||||
else if(HasAbility(target, ABILITY_SUCTION_CUPS))
|
||||
{
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
|
||||
}
|
||||
else
|
||||
{
|
||||
pokemonPos.x = pokemon->pos.x;
|
||||
pokemonPos.y = pokemon->pos.y;
|
||||
targetPos.x = target->pos.x;
|
||||
targetPos.y = target->pos.y;
|
||||
nullsub_93(&pokemonPos);
|
||||
nullsub_93(&targetPos);
|
||||
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
|
||||
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
|
||||
sub_804535C(pokemon,0x0);
|
||||
sub_804535C(target,0x0);
|
||||
|
||||
if (EntityExists(pokemon)) {
|
||||
if (pokemon->info->isTeamLeader) {
|
||||
sub_804AC20(&pokemon->pos);
|
||||
sub_807EC28(0);
|
||||
}
|
||||
sub_806A5B8(pokemon);
|
||||
sub_8075900(pokemon,gDungeon->unk3A08);
|
||||
}
|
||||
|
||||
if (EntityExists(target)) {
|
||||
if (target->info->isTeamLeader) {
|
||||
sub_804AC20(&target->pos);
|
||||
sub_807EC28(0);
|
||||
}
|
||||
sub_806A5B8(target);
|
||||
sub_8075900(target,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807E378(void)
|
||||
{
|
||||
u16 uVar2;
|
||||
struct Entity *leader;
|
||||
|
||||
leader = GetLeader();
|
||||
if (EntityExists(leader)) {
|
||||
|
||||
uVar2 = gDungeon->windTurns;
|
||||
if ((gDungeon->windTurns < 1) ||
|
||||
(gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) {
|
||||
gDungeon->unk67A = 3;
|
||||
}
|
||||
|
||||
if (gDungeon->unk67A == 0) {
|
||||
if (gDungeon->windTurns < 0xfa) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C4C);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0);
|
||||
gDungeon->unk67A = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk67A == 1) {
|
||||
if (gDungeon->windTurns < 0x96) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C70);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1);
|
||||
gDungeon->unk67A = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk67A == 2) {
|
||||
if (gDungeon->windTurns < 0x32) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C8C);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2);
|
||||
gDungeon->unk67A = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->windTurns < 1) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9CBC);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3);
|
||||
gDungeon->unk67A = 4;
|
||||
sub_8068FE0(leader,0x21e,leader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -110,7 +110,8 @@ enum OptionsMenuStates {
|
||||
OPTIONS_MENU_PRE_HINT_SELECTION,
|
||||
OPTIONS_MENU_HINT_SELECTION,
|
||||
OPTIONS_MENU_DISPLAY_HINT,
|
||||
OPTIONS_MENU_CONFIRM_NEW_OPTIONS = 7,
|
||||
OPTIONS_MENU_UNKNOWN_6,
|
||||
OPTIONS_MENU_CONFIRM_NEW_OPTIONS,
|
||||
};
|
||||
|
||||
u32 sub_801DCC4(void)
|
||||
|
||||
179
src/weather.c
179
src/weather.c
@@ -1,196 +1,17 @@
|
||||
#include "global.h"
|
||||
#include "weather.h"
|
||||
|
||||
#include "constants/ability.h"
|
||||
#include "constants/item.h"
|
||||
#include "constants/move_id.h"
|
||||
#include "constants/type.h"
|
||||
#include "constants/weather.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_leader.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "dungeon_ai.h"
|
||||
#include "dungeon_pokemon_attributes.h"
|
||||
#include "moves.h"
|
||||
#include "move_util.h"
|
||||
|
||||
extern void TriggerWeatherAbilities(void);
|
||||
extern void sub_807EAA0(u32, u32);
|
||||
void sub_807E5E4(u8);
|
||||
extern u8 UseAttack(struct Entity *);
|
||||
extern void sub_805E804(void);
|
||||
void sub_806A2BC(struct Entity *pokemon, u8 param_2);
|
||||
extern u8 sub_8044B28(void);
|
||||
extern void sub_80426C8(u32, u32);
|
||||
extern void sub_8068FE0(struct Entity *, u32, struct Entity *r2);
|
||||
extern void nullsub_93(struct Position *);
|
||||
extern void sub_80522F4(struct Entity *, struct Entity *, u8 *);
|
||||
extern void SetMessageArgument(char[], struct Entity*, u32);
|
||||
extern void sub_806F370(struct Entity *r0, struct Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
|
||||
extern void sub_80694C0(struct Entity *, s32, s32, u32);
|
||||
extern void sub_804535C(struct Entity *, u32);
|
||||
extern void sub_804AC20(struct Position *);
|
||||
extern void sub_807EC28(u32);
|
||||
extern void sub_806A5B8(struct Entity *);
|
||||
|
||||
extern u32 gUnknown_80F5FAC[];
|
||||
extern u8 *gUnknown_80F9C4C[];
|
||||
extern u8 *gUnknown_80F9C70[];
|
||||
extern u8 *gUnknown_80F9C8C[];
|
||||
extern u8 *gUnknown_80F9CBC[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 *gUnknown_80FCAC0[];
|
||||
|
||||
|
||||
void sub_807E1A0(struct Entity *pokemon,struct Entity *target,u8 param_3,s16 param_4,s32 param_5)
|
||||
{
|
||||
struct EntityInfo *targetInfo;
|
||||
u8 flag;
|
||||
struct Move move;
|
||||
s32 newHP;
|
||||
s32 param_4_s32;
|
||||
|
||||
param_4_s32 = param_4;
|
||||
|
||||
if (EntityExists(target)) {
|
||||
targetInfo = target->info;
|
||||
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
|
||||
if (!sub_80571F0(target,&move)) {
|
||||
if (!targetInfo->isNotTeamMember) {
|
||||
newHP = targetInfo->HP;
|
||||
newHP /= 2;
|
||||
if (MonsterIsType(target, TYPE_FIRE)) {
|
||||
newHP /= 2;
|
||||
}
|
||||
if (newHP < 1) {
|
||||
newHP = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
newHP = param_5;
|
||||
if (MonsterIsType(target, TYPE_FIRE)) {
|
||||
newHP /= 2;
|
||||
}
|
||||
}
|
||||
sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807E254(struct Entity *pokemon,struct Entity *target)
|
||||
{
|
||||
struct Position pokemonPos;
|
||||
struct Position targetPos;
|
||||
|
||||
|
||||
if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) {
|
||||
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
|
||||
}
|
||||
else if(HasAbility(target, ABILITY_SUCTION_CUPS))
|
||||
{
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
|
||||
}
|
||||
else
|
||||
{
|
||||
pokemonPos.x = pokemon->pos.x;
|
||||
pokemonPos.y = pokemon->pos.y;
|
||||
targetPos.x = target->pos.x;
|
||||
targetPos.y = target->pos.y;
|
||||
nullsub_93(&pokemonPos);
|
||||
nullsub_93(&targetPos);
|
||||
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
|
||||
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
|
||||
sub_804535C(pokemon,0x0);
|
||||
sub_804535C(target,0x0);
|
||||
|
||||
if (EntityExists(pokemon)) {
|
||||
if (pokemon->info->isTeamLeader) {
|
||||
sub_804AC20(&pokemon->pos);
|
||||
sub_807EC28(0);
|
||||
}
|
||||
sub_806A5B8(pokemon);
|
||||
sub_8075900(pokemon,gDungeon->unk3A08);
|
||||
}
|
||||
|
||||
if (EntityExists(target)) {
|
||||
if (target->info->isTeamLeader) {
|
||||
sub_804AC20(&target->pos);
|
||||
sub_807EC28(0);
|
||||
}
|
||||
sub_806A5B8(target);
|
||||
sub_8075900(target,gDungeon->unk3A08);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807E378(void)
|
||||
{
|
||||
u16 uVar2;
|
||||
struct Entity *leader;
|
||||
|
||||
leader = GetLeader();
|
||||
if (EntityExists(leader)) {
|
||||
|
||||
uVar2 = gDungeon->windTurns;
|
||||
if ((gDungeon->windTurns < 1) ||
|
||||
(gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) {
|
||||
gDungeon->unk67A = 3;
|
||||
}
|
||||
|
||||
if (gDungeon->unk67A == 0) {
|
||||
if (gDungeon->windTurns < 0xfa) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C4C);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0);
|
||||
gDungeon->unk67A = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk67A == 1) {
|
||||
if (gDungeon->windTurns < 0x96) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C70);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1);
|
||||
gDungeon->unk67A = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->unk67A == 2) {
|
||||
if (gDungeon->windTurns < 0x32) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9C8C);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2);
|
||||
gDungeon->unk67A = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gDungeon->windTurns < 1) {
|
||||
sub_805E804();
|
||||
sub_806A2BC(leader,1);
|
||||
UseAttack(leader);
|
||||
if (sub_8044B28() == 0) {
|
||||
SendMessage(leader,*gUnknown_80F9CBC);
|
||||
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3);
|
||||
gDungeon->unk67A = 4;
|
||||
sub_8068FE0(leader,0x21e,leader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetApparentWeather(struct Entity *pokemon)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user