summaryrefslogtreecommitdiff
path: root/src/fossil_specials.c
blob: c5539114de5d17fce9dc9c3e10d3594d99a25e78 (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
125
126
127
128
129
#include "global.h"
#include "constants/flags.h"
#include "constants/songs.h"
#include "bg.h"
#include "event_data.h"
#include "field_camera.h"
#include "field_map_obj.h"
#include "fieldmap.h"
#include "fldeff_groundshake.h"
#include "global.fieldmap.h"
#include "gpu_regs.h"
#include "malloc.h"
#include "random.h"
#include "script.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "window.h"

//struct StructUnknown_0203CF14

struct Struct8617DA4 {
    u8 x;
    u8 y;
    u16 tileId;
};


extern const struct Struct8617DA4 gUnknown_08617DA4[];
extern const u8 gUnknown_08617274[]; //mirage tower
extern const u8 gUnknown_08617B94[]; //mirage tower tilemap

extern void * gUnknown_0203CF04;
extern void * gUnknown_0203CF08;
extern u16 (*gUnknown_0203CF14)[2];

/*static*/ void sub_81BED50(u8 taskId);
/*static*/ void sub_81BEBF4(u8 taskId);
/*static*/ void sub_81BF028(u8 taskId);

void sub_81BEB24(void)
{
    u8 count;
    for(count = 0; count <= 0x11; count++)
        MapGridSetMetatileIdAt(gUnknown_08617DA4[count].x + 7, gUnknown_08617DA4[count].y + 7, gUnknown_08617DA4[count].tileId);
    DrawWholeMapView();
}

void sub_81BEB54(void)
{
    CreateTask(sub_81BED50, 0x9);
}

void sub_81BEB68(void)
{
    CreateTask(sub_81BEBF4, 0x9);
}

void sub_81BEB7C(void)
{
    CreateTask(sub_81BF028, 0x9);
}

void sub_81BEB90(void)
{
    SetGpuReg(REG_OFFSET_BG0HOFS, (*gUnknown_0203CF14)[0]);
    SetGpuReg(REG_OFFSET_BG0VOFS, (*gUnknown_0203CF14)[1]);
}

void sub_81BEBB4(u8 taskId)
{
    if(!(gTasks[taskId].data[0]))
    {
        (*gUnknown_0203CF14)[0] = -(*gUnknown_0203CF14)[0];
        gTasks[taskId].data[0] = 2;
        sub_81BEB90();
    }
    else
        gTasks[taskId].data[0]--;
}

void sub_81BEBF4(u8 taskId)
{
    u8 zero;

    switch(gTasks[taskId].data[0])
    {
    case 0:
        FreeAllWindowBuffers();
        SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 2);
        gTasks[taskId].data[0]++;
        break;
    case 1:
        gUnknown_0203CF04 = (u8 **) AllocZeroed(0x920);
        gUnknown_0203CF08 = (u8 **) AllocZeroed(0x800);
        ChangeBgX(0, 0, 0);
        ChangeBgY(0, 0, 0);
        gTasks[taskId].data[0]++;
        break;
    case 2:
        CpuSet(gUnknown_08617274, gUnknown_0203CF04, 0x490);
        LoadBgTiles(0, gUnknown_0203CF04, 0x920, 0);
        gTasks[taskId].data[0]++;
        break;
    case 3:
        SetBgTilemapBuffer(0, gUnknown_0203CF08);
        CopyToBgTilemapBufferRect_ChangePalette(0, &gUnknown_08617B94, 12, 29, 6, 12, 17);
        CopyBgTilemapBufferToVram(0);
        gTasks[taskId].data[0]++;
        break;
    case 4:
        ShowBg(0);
        gTasks[taskId].data[0]++;
        break;
    case 5:
        sub_81BEB24();
        gTasks[taskId].data[0]++;
        break;
    case 6:
        gUnknown_0203CF14 = (u16(*)[2]) Alloc(4);
        zero = 0;
        (*gUnknown_0203CF14)[0] = 2;
        (*gUnknown_0203CF14)[1] = zero;
        CreateTask(sub_81BEBB4, 0xA);
        DestroyTask(taskId);
        EnableBothScriptContexts();
        break;
    }
}