summaryrefslogtreecommitdiff
path: root/src/code_8086A3C.c
blob: d740ccde5a33a49fd29313cce5deef05ffdc6e8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "global.h"
#include "dungeon_entity.h"
#include "gUnknown_203B418.h"
#include "pokemon.h"

extern struct unkStruct_203B418 *gUnknown_203B418;
extern void sub_807191C(struct DungeonEntity *);
extern struct DungeonEntity *sub_8085480(void);
extern struct DungeonEntity *sub_8085680(u32);
extern void sub_808EC94(u8 *param_1, u8 param_2);
extern void sub_8097FF8(void);
extern u8 sub_8044B28(void);
extern u8 HasRecruitedMon(u32);
extern u8 gUnknown_202E038[];
extern void sub_8083E88(u32);
extern void sub_8085374();
extern void sub_80854D4();
extern void sub_8085930(u32);
extern void sub_80855E4(void *);
extern void sub_8085860(s32 r0, u32 r1);
extern void sub_8068FE0(struct DungeonEntity *, u32, u32);
extern void sub_8097FA8(u32);

void sub_8086A3C(struct DungeonEntity *param_1)
{
    param_1->unk70->unk15C = 1;
    param_1->unk70->unk15E = 1;
}

void sub_8086A54(struct DungeonEntity *param_1)
{
    param_1->unk70->unk15C = 1;
    param_1->unk70->unk15E = 0;
}

void SetupBossFightHP(struct DungeonEntity *param_1, s32 newHP, u16 param_3)
{

  // NOTE: needed two of these to match.. very dumb
  struct subStruct_8048524 *iVar1;
  struct subStruct_8048524 *iVar2;
  
  iVar1 = param_1->unk70;
  iVar2 = param_1->unk70;
  
  iVar1->isBoss = TRUE;

  // BUG: Source of the Reviver Seed Boss Glitch
  //
  // Video to demonstration:
  // https://www.youtube.com/watch?v=rHu7EehrZ68
  iVar1->bossHPBackup = iVar1->maxHP;
  if (newHP != 0) {
    iVar1->maxHP = newHP;
    iVar1->HP = newHP;
  }

  gUnknown_203B418->unk66A = param_3;
  sub_808EC94(iVar2->unk8C,iVar2->isBoss);
  sub_807191C(param_1);
}

void sub_8086AC0(void)
{
    if(!sub_8044B28())
        if(gUnknown_203B418->unk2 == 0)
            sub_8097FF8();
}

u8 sub_8086AE4(s16 _index)
{
    s32 pokeIndex = _index;

    if(gUnknown_203B418->unk65C == 0)
        return 1;
    else
        return HasRecruitedMon(pokeIndex);
}

void sub_8086B14(void)
{
  struct DungeonEntity * iVar1;
  struct DungeonEntity * iVar2;
  struct DungeonEntity * uVar3;
  
  iVar1 = sub_8085480();
  iVar2 = sub_8085680(4);
  uVar3 = sub_8085680(3);
  sub_8083E88(0x72);
  sub_8085374();
  sub_80854D4();
  sub_8085930(4);
  sub_80855E4(sub_8086A3C);
  sub_8086A3C(uVar3);
  iVar2->unk70->unk15C = 1;
  sub_8085860(iVar1->posWorldX,iVar1->posWorldY + -2);
  CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_DIGLETT);
  CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_SKARMORY);
}

void sub_8086B94(void)
{
  struct DungeonEntity * iVar1;
  struct DungeonEntity * iVar2;
  struct DungeonEntity * uVar3;
  
  iVar1 = sub_8085480();
  iVar2 = sub_8085680(4);
  uVar3 = sub_8085680(3);

  sub_8068FE0(uVar3,0x21c,0);
  sub_8068FE0(iVar2,0x21c,0);
  sub_80854D4();
  sub_8085930(4);
  sub_8085860(iVar1->posWorldX,iVar1->posWorldY);
}

void sub_8086BDC(char param_1, s32 param_2)
{
  if ((((param_2 * 0x1000000) - 0x1000000U) >> 0x18 < 2) && (param_1 == 3)) {
    sub_8097FA8(1);
    gUnknown_203B418->unk2 = 1;
  }
}