From e518a40508555d55bff7b2f020da092a0501eb1b Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Fri, 16 Feb 2018 15:21:27 +0530 Subject: [WIP} Start decomp Ground Shake --- src/fldeff_groundshake.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 src/fldeff_groundshake.c (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c new file mode 100644 index 000000000..a4b36e539 --- /dev/null +++ b/src/fldeff_groundshake.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "constants/flags.h" +#include "constants/songs.h" +#include "event_data.h" +#include "fldeff_groundshake.h" +#include "malloc.h" +#include "menu.h" +#include "party_menu.h" +#include "pokemon.h" +#include "random.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" + +bool8 sub_81BE66C(void) +{ + if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A)) + return 0; + return FlagGet(FLAG_0x14E); +} + +void sub_81BE698(u8 taskId) +{ + sub_8151E50(&(gUnknown_0203CF18->unk4)); +} + +void sub_81BE6AC(void) +{ + gUnknown_0203CF18 = NULL; +} + +void sub_81BE6B8(void) +{ + if(gUnknown_0203CF18 != NULL) + { + gUnknown_0203CF18 = NULL; + return; + } + if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E)) + return; + + gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18)); + sub_8151B3C(&(gUnknown_0203CF18->unk4)); + sub_8151B68(&(gUnknown_0203CF18->unk4), gUnknown_08617E18); + sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1); + gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF); +} + +void sub_81BE72C(void) +{ + if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E) || gUnknown_0203CF18 == NULL) + return; + if(FuncIsActiveTask(sub_81BE698)) + DestroyTask(gUnknown_0203CF18->taskId); + sub_8151D28(&(gUnknown_0203CF18->unk4), 1, 1); + sub_8151C50(&(gUnknown_0203CF18->unk4), 1, 1); + Free(gUnknown_0203CF18); + gUnknown_0203CF18 = NULL; +} + +void sub_81BE79C(void) +{ + u16 rand; + bool8 chance; + + if(VarGet(VAR_0x40CB) != 0) + { + FlagClear(FLAG_0x14E); + return; + } + rand = Random(); + chance = rand & 1; + if(FlagGet(FLAG_0x09D) == TRUE) + chance = TRUE; + if(chance) + { + FlagSet(FLAG_0x14E); + sub_81BE6B8(); + return; + } + FlagClear(FLAG_0x14E); +} + -- cgit v1.2.3 From 52b631a092f0e5357eea2d72d22c5db7ad03f7f2 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Sun, 18 Feb 2018 04:30:20 +0530 Subject: Decompile more functions --- src/fldeff_groundshake.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index a4b36e539..04e7f7674 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -1,13 +1,17 @@ #include "global.h" +#include "global.fieldmap.h" #include "constants/flags.h" #include "constants/songs.h" #include "event_data.h" +#include "field_camera.h" +#include "field_map_obj.h" #include "fldeff_groundshake.h" #include "malloc.h" #include "menu.h" #include "party_menu.h" #include "pokemon.h" #include "random.h" +#include "script.h" #include "sound.h" #include "sprite.h" #include "string_util.h" @@ -83,3 +87,133 @@ void sub_81BE79C(void) FlagClear(FLAG_0x14E); } +void sub_81BE7F4(void) +{ + CreateTask(sub_81BE808, 0x8); +} + +void sub_81BE808(u8 taskId) +{ + u8 mapObjectIdBuffer; + struct MapObject *fieldMapObject; + struct MapObject *playerAvatarMapObject; + + TryGetFieldObjectIdByLocalIdAndMap(0x2D, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectIdBuffer); + fieldMapObject = &(gMapObjects[mapObjectIdBuffer]); + gSprites[fieldMapObject->spriteId].pos2.y += 4; + playerAvatarMapObject = &(gMapObjects[gPlayerAvatar.mapObjectId]); + + if((gSprites[fieldMapObject->spriteId].pos1.y + gSprites[fieldMapObject->spriteId].pos2.y) >= + (gSprites[playerAvatarMapObject->spriteId].pos1.y + gSprites[playerAvatarMapObject->spriteId].pos2.y)) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + } + +} + +void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d) +{ + u8 taskId; + + taskId = CreateTask(sub_81BE900, 0x9); + gTasks[taskId].data[0] = b; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = c; + gTasks[taskId].data[3] = d; + gTasks[taskId].data[4] = a; + SetCameraPanningCallback(NULL); + PlaySE(SE_W070); +} + +void sub_81BE900(u8 taskId) +{ + s16 *data; + + data = gTasks[taskId].data; + data[1]++; + if((data[1] % data[3]) == 0) + { + data[1] = 0; + data[2]--; + data[0] = -data[0]; + data[4] = -data[4]; + SetCameraPanning(data[0], data[4]); + if(!data[2]) + { + sub_81BE968(); + DestroyTask(taskId); + InstallCameraPanAheadCallback(); + } + } +} + +void sub_81BE968(void) +{ + u8 taskId; + + taskId = FindTaskIdByFunc(sub_81BE9C0); + if(taskId != 0xFF) + gTasks[taskId].data[0]++; +} + +extern const struct SpriteSheet gUnknown_08617D94[]; + +void sub_81BE994(void) +{ + LoadSpriteSheets(gUnknown_08617D94); + sub_81BEA20(); + CreateTask(sub_81BE9C0, 0x8); + sp136_strengh_sound(2, 1, 16, 3); +} + +void sub_81BE9C0(u8 taskId) +{ + u16 *data; + + data = gTasks[taskId].data; + data[1]++; + if(data[1] == 1000 || data[0] == 17) + gTasks[taskId].func = sub_81BEA00; +} + +void sub_81BEA00(u8 taskId) +{ + FreeSpriteTilesByTag(4000); + DestroyTask(taskId); + EnableBothScriptContexts(); +} + +extern const struct SpriteTemplate gUnknown_08617E34; +extern const struct SpriteTemplate gUnknown_08617E60; + +void sub_81BEA20(void) +{ + u8 count; + u8 spriteId; + const s16 *x; + const s16 *y; + + for(count = 0; count <=7; count++) + { + x = &(gUnknown_08617D64[0]); + y = &(gUnknown_08617D64[1]); + spriteId = CreateSprite(&gUnknown_08617E60, x[count*3] + 120, y[count*3], 8); + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].oam.paletteNum = 0; + gSprites[spriteId].data[0] = count; + } + + for(count = 0; count <=7; count++) + { + + x = &(gUnknown_08617D64[0]); + y = &(gUnknown_08617D64[1]); + + spriteId = CreateSprite(&gUnknown_08617E34, x[count*3] + 115, y[count*3] - 3, 8); + gSprites[spriteId].oam.priority = 0; + gSprites[spriteId].oam.paletteNum = 0; + gSprites[spriteId].data[0] = count; + } +} + -- cgit v1.2.3 From b1cb82fc670ebbb7bcb8de85c780344e6dbd9349 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Sun, 18 Feb 2018 17:33:48 +0530 Subject: Finish fldeff_groundshake --- src/fldeff_groundshake.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index 04e7f7674..e07b7b2ff 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -7,17 +7,15 @@ #include "field_map_obj.h" #include "fldeff_groundshake.h" #include "malloc.h" -#include "menu.h" -#include "party_menu.h" -#include "pokemon.h" #include "random.h" #include "script.h" #include "sound.h" #include "sprite.h" -#include "string_util.h" -#include "strings.h" #include "task.h" +extern const struct SpriteTemplate gUnknown_08617E34; +extern const struct SpriteTemplate gUnknown_08617E60; + bool8 sub_81BE66C(void) { if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A)) @@ -184,36 +182,34 @@ void sub_81BEA00(u8 taskId) EnableBothScriptContexts(); } -extern const struct SpriteTemplate gUnknown_08617E34; -extern const struct SpriteTemplate gUnknown_08617E60; - void sub_81BEA20(void) { u8 count; u8 spriteId; - const s16 *x; - const s16 *y; for(count = 0; count <=7; count++) { - x = &(gUnknown_08617D64[0]); - y = &(gUnknown_08617D64[1]); - spriteId = CreateSprite(&gUnknown_08617E60, x[count*3] + 120, y[count*3], 8); + spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[count][0] + 120, gUnknown_08617D64[count][1], 8); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.paletteNum = 0; gSprites[spriteId].data[0] = count; } - for(count = 0; count <=7; count++) { - - x = &(gUnknown_08617D64[0]); - y = &(gUnknown_08617D64[1]); - - spriteId = CreateSprite(&gUnknown_08617E34, x[count*3] + 115, y[count*3] - 3, 8); + spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[count][0] + 115, gUnknown_08617D64[count][1] - 3, 8); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.paletteNum = 0; gSprites[spriteId].data[0] = count; } } +void sub_81BEAD8(struct Sprite* sprite) +{ + sprite->data[1] += 2; + sprite->pos2.y = (sprite->data[1] + (s16)((u32)sprite->data[1] >> 0x1F)) >> 1; + if((sprite->pos1.y) + (sprite->pos2.y) > gUnknown_08617D64[sprite->data[0]][2]) + { + DestroySprite(sprite); + sub_81BE968(); + } +} -- cgit v1.2.3 From caaf41fd4997b0ec5e406c4590711d09ad6f3a66 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Mon, 19 Feb 2018 00:53:06 +0530 Subject: Refine logic --- src/fldeff_groundshake.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index e07b7b2ff..34524ffd5 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -107,7 +107,6 @@ void sub_81BE808(u8 taskId) DestroyTask(taskId); EnableBothScriptContexts(); } - } void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d) @@ -187,14 +186,14 @@ void sub_81BEA20(void) u8 count; u8 spriteId; - for(count = 0; count <=7; count++) + for(count = 0; count <= 7; count++) { spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[count][0] + 120, gUnknown_08617D64[count][1], 8); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.paletteNum = 0; gSprites[spriteId].data[0] = count; } - for(count = 0; count <=7; count++) + for(count = 0; count <= 7; count++) { spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[count][0] + 115, gUnknown_08617D64[count][1] - 3, 8); gSprites[spriteId].oam.priority = 0; @@ -206,8 +205,8 @@ void sub_81BEA20(void) void sub_81BEAD8(struct Sprite* sprite) { sprite->data[1] += 2; - sprite->pos2.y = (sprite->data[1] + (s16)((u32)sprite->data[1] >> 0x1F)) >> 1; - if((sprite->pos1.y) + (sprite->pos2.y) > gUnknown_08617D64[sprite->data[0]][2]) + sprite->pos2.y = (sprite->data[1] / 2); + if(((sprite->pos1.y) + (sprite->pos2.y)) > gUnknown_08617D64[sprite->data[0]][2]) { DestroySprite(sprite); sub_81BE968(); -- cgit v1.2.3 From 9719e2fa22d98a5f97c8d213b285a19ac4e25c57 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Mon, 19 Feb 2018 15:37:02 +0530 Subject: Start decompile fossil_specials.s --- src/fossil_specials.c | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/fossil_specials.c (limited to 'src') diff --git a/src/fossil_specials.c b/src/fossil_specials.c new file mode 100644 index 000000000..c5539114d --- /dev/null +++ b/src/fossil_specials.c @@ -0,0 +1,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; + } +} -- cgit v1.2.3 From a3c17fad22523551b78ba60321688f1ed1e39b6a Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 22 Feb 2018 12:17:46 +0530 Subject: Decompile Fossil Special & Groundshake Data --- src/fldeff_groundshake.c | 123 +++++- src/fldeff_sweetscent.c | 3 +- src/fossil_specials.c | 1006 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 1102 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index 34524ffd5..92aaf5238 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -5,7 +5,6 @@ #include "event_data.h" #include "field_camera.h" #include "field_map_obj.h" -#include "fldeff_groundshake.h" #include "malloc.h" #include "random.h" #include "script.h" @@ -13,9 +12,109 @@ #include "sprite.h" #include "task.h" -extern const struct SpriteTemplate gUnknown_08617E34; -extern const struct SpriteTemplate gUnknown_08617E60; +// structures +struct InnerStruct203CF18 +{ + u8 filler[0xC4]; +}; + +struct Struct203CF18 { + u8 taskId; + struct InnerStruct203CF18 unk4; +}; //size = 0xC8 + +// extern data +extern const struct SpriteSheet gUnknown_08617D94[]; +extern const s16 gUnknown_08617D64[][3]; + +// extern functions +extern void sub_8151B68(struct InnerStruct203CF18 *, const u8*); +extern void sub_8151B3C(struct InnerStruct203CF18 *); +extern void sub_8151CA8(struct InnerStruct203CF18 *, u8, u8); +extern void sub_8151C50(struct InnerStruct203CF18 *, u8, u8); +extern void sub_8151D28(struct InnerStruct203CF18 *, u8, u8); +extern void sub_8151E50(struct InnerStruct203CF18 *); + +// static functions +static void sub_81BE808(u8 taskId); +static void sub_81BE900(u8 taskId); +static void sub_81BE968(void); +static void sub_81BE9C0(u8 taskId); +static void sub_81BEA00(u8 taskId); +static void sub_81BEA20(void); +static void sub_81BEAD8(struct Sprite* sprite); +//.rodata +static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b}; + +static const union AnimCmd gSpriteAnim_8617E20[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gSpriteAnimTable_8617E28[] = +{ + gSpriteAnim_8617E20, +}; + +static const struct OamData gUnknown_08617E2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteTemplate gUnknown_08617E34 = { + 0x0FA0, 0xFFFF, &gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8 +}; + +static const union AnimCmd gSpriteAnim_8617E4C[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd *const gSpriteAnim_8617E54[] = +{ + gSpriteAnim_8617E4C, +}; + +static const struct OamData gSpriteAnim_8617E58 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct SpriteTemplate gUnknown_08617E60 = { + 0x0FA0, 0xFFFF, &gSpriteAnim_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8 +}; + +// ewram +EWRAM_DATA struct Struct203CF18 *gUnknown_0203CF18 = NULL; + +//text bool8 sub_81BE66C(void) { if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A)) @@ -90,7 +189,7 @@ void sub_81BE7F4(void) CreateTask(sub_81BE808, 0x8); } -void sub_81BE808(u8 taskId) +static void sub_81BE808(u8 taskId) { u8 mapObjectIdBuffer; struct MapObject *fieldMapObject; @@ -109,7 +208,7 @@ void sub_81BE808(u8 taskId) } } -void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d) +static void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d) { u8 taskId; @@ -123,7 +222,7 @@ void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d) PlaySE(SE_W070); } -void sub_81BE900(u8 taskId) +static void sub_81BE900(u8 taskId) { s16 *data; @@ -145,7 +244,7 @@ void sub_81BE900(u8 taskId) } } -void sub_81BE968(void) +static void sub_81BE968(void) { u8 taskId; @@ -154,8 +253,6 @@ void sub_81BE968(void) gTasks[taskId].data[0]++; } -extern const struct SpriteSheet gUnknown_08617D94[]; - void sub_81BE994(void) { LoadSpriteSheets(gUnknown_08617D94); @@ -164,7 +261,7 @@ void sub_81BE994(void) sp136_strengh_sound(2, 1, 16, 3); } -void sub_81BE9C0(u8 taskId) +static void sub_81BE9C0(u8 taskId) { u16 *data; @@ -174,14 +271,14 @@ void sub_81BE9C0(u8 taskId) gTasks[taskId].func = sub_81BEA00; } -void sub_81BEA00(u8 taskId) +static void sub_81BEA00(u8 taskId) { FreeSpriteTilesByTag(4000); DestroyTask(taskId); EnableBothScriptContexts(); } -void sub_81BEA20(void) +static void sub_81BEA20(void) { u8 count; u8 spriteId; @@ -202,7 +299,7 @@ void sub_81BEA20(void) } } -void sub_81BEAD8(struct Sprite* sprite) +static void sub_81BEAD8(struct Sprite* sprite) { sprite->data[1] += 2; sprite->pos2.y = (sprite->data[1] / 2); diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 3dfcd640d..100e440a5 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -6,7 +6,6 @@ #include "field_effect.h" #include "field_player_avatar.h" #include "field_screen.h" -#include "fldeff_groundshake.h" #include "palette.h" #include "party_menu.h" #include "rom6.h" @@ -20,6 +19,8 @@ void hm2_sweet_scent(void); void sub_8159F5C(void); void sub_8159FEC(u8 taskId); void sub_815A090(u8 taskId); +void sub_81BE6B8(void); +void sub_81BE72C(void); bool8 SetUpFieldMove_SweetScent(void) { diff --git a/src/fossil_specials.c b/src/fossil_specials.c index c5539114d..749c37e4d 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -6,10 +6,10 @@ #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 "menu.h" #include "random.h" #include "script.h" #include "sound.h" @@ -17,27 +17,129 @@ #include "task.h" #include "window.h" -//struct StructUnknown_0203CF14 +#define ROOT_FOSSIL_GFX_TILE_LENGTH 0x80 +#define ROOT_FOSSIL_GFX_PALETTE_LENGTH 0x100 +//struct struct Struct8617DA4 { u8 x; u8 y; u16 tileId; }; +struct Struct203CF10 { + u8 *buffer; + u8 curr_buffer_index; +}; -extern const struct Struct8617DA4 gUnknown_08617DA4[]; -extern const u8 gUnknown_08617274[]; //mirage tower -extern const u8 gUnknown_08617B94[]; //mirage tower tilemap +struct DynamicSpriteFrameImage{ + u8 *data; + u16 size; +}; -extern void * gUnknown_0203CF04; -extern void * gUnknown_0203CF08; -extern u16 (*gUnknown_0203CF14)[2]; +struct Struct203CF0C { + u8 *frameImageTiles; + struct DynamicSpriteFrameImage *frameImage; + u8 spriteId; + u16 *frameImagePalette; + u16 unk10; +}; +// static functions /*static*/ void sub_81BED50(u8 taskId); /*static*/ void sub_81BEBF4(u8 taskId); /*static*/ void sub_81BF028(u8 taskId); +/*static*/ void sub_81BF248(struct Sprite *); + +// .rodata +static const u8 gUnknown_08617274[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}; +static const u8 gMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); +static const u16 gUnknown_08617B94[] = INCBIN_U16("graphics/misc/mirage_tower.bin"); +static const u16 gRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal"); +static const u8 gRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp"); +static const u8 gMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp"); +static const u16 gMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal"); +const s16 gUnknown_08617D64[][3] = + { + { 0, 10, 65}, + { 17, 3, 50}, + {-12, 0, 75}, + { 10, 15, 90}, + { 7, 8, 65}, + {-18, 5, 75}, + { 22, -10, 55}, + {-24, -4, 65}, + }; + +const struct SpriteSheet gUnknown_08617D94[] = +{ + {gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0}, + {NULL} +}; + +static const struct Struct8617DA4 gUnknown_08617DA4[] = + { + {0x12, 0x35, 0x251}, + {0x13, 0x35, 0x251}, + {0x14, 0x35, 0x251}, + {0x12, 0x36, 0x251}, + {0x13, 0x36, 0x251}, + {0x14, 0x36, 0x251}, + {0x12, 0x37, 0x251}, + {0x13, 0x37, 0x251}, + {0x14, 0x37, 0x251}, + {0x12, 0x38, 0x251}, + {0x13, 0x38, 0x251}, + {0x14, 0x38, 0x251}, + {0x12, 0x39, 0x259}, + {0x13, 0x39, 0x259}, + {0x14, 0x39, 0x259}, + {0x12, 0x3A, 0x121}, + {0x13, 0x3A, 0x121}, + {0x14, 0x3A, 0x121}, + }; + +static const union AnimCmd gSpriteAnim_8617DEC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const struct OamData gOamData_8617DF4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 3, + .affineParam = 0, +}; + +static const union AnimCmd *const gSpriteAnimTable_8617DFC[] = +{ + gSpriteAnim_8617DEC, +}; + +static const struct SpriteTemplate gUnknown_08617E00 = { + 0xFFFF, 0xFFFF, &gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +// ewram +EWRAM_DATA u8* gUnknown_0203CF04 = NULL; +EWRAM_DATA u8* gUnknown_0203CF08 = NULL; +EWRAM_DATA struct Struct203CF0C *gUnknown_0203CF0C = NULL; +EWRAM_DATA struct Struct203CF10 *gUnknown_0203CF10 = NULL; +EWRAM_DATA u16 *gUnknown_0203CF14 = NULL; + +// text void sub_81BEB24(void) { u8 count; @@ -63,15 +165,15 @@ void sub_81BEB7C(void) void sub_81BEB90(void) { - SetGpuReg(REG_OFFSET_BG0HOFS, (*gUnknown_0203CF14)[0]); - SetGpuReg(REG_OFFSET_BG0VOFS, (*gUnknown_0203CF14)[1]); + 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]; + gUnknown_0203CF14[0] = -gUnknown_0203CF14[0]; gTasks[taskId].data[0] = 2; sub_81BEB90(); } @@ -79,6 +181,7 @@ void sub_81BEBB4(u8 taskId) gTasks[taskId].data[0]--; } + void sub_81BEBF4(u8 taskId) { u8 zero; @@ -91,8 +194,8 @@ void sub_81BEBF4(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - gUnknown_0203CF04 = (u8 **) AllocZeroed(0x920); - gUnknown_0203CF08 = (u8 **) AllocZeroed(0x800); + gUnknown_0203CF04 = (u8 *)AllocZeroed(0x920); + gUnknown_0203CF08 = (u8 *)AllocZeroed(0x800); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); gTasks[taskId].data[0]++; @@ -117,13 +220,884 @@ void sub_81BEBF4(u8 taskId) gTasks[taskId].data[0]++; break; case 6: - gUnknown_0203CF14 = (u16(*)[2]) Alloc(4); + gUnknown_0203CF14 = (u16 *)Alloc(4); zero = 0; - (*gUnknown_0203CF14)[0] = 2; - (*gUnknown_0203CF14)[1] = zero; + gUnknown_0203CF14[0] = 2; + gUnknown_0203CF14[1] = zero; CreateTask(sub_81BEBB4, 0xA); DestroyTask(taskId); EnableBothScriptContexts(); break; } } + +#define OUTER_BUFFER_LENGTH 0x60 +#define INNER_BUFFER_LENGTH 0x30 + +//void sub_81BF2B8(u8 *buffer, u16 offset, u8 a, u8 buffer_size, u8 d); + +#ifdef NONMATCHING +void sub_81BED50(u8 taskId) +{ + u8 count, index, size, next_index, buffer_index, anotherTaskId, anotherCount; + u16 rand1, rand2, temp; + u8 left, right; + u16 left16, right16; + u8 *buffer; + struct Task *currTask; + + switch(gTasks[taskId].data[0]) + { + case 0: + gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH << 3); + break; + case 2: + if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) + { + if(gTasks[taskId].data[1] > 1) + { + index = gTasks[taskId].data[3]; + gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH); + for(count = 0; count <= (INNER_BUFFER_LENGTH - 1); count++) + gUnknown_0203CF10[index].buffer[count] = count; + for(count = 0; count <= (INNER_BUFFER_LENGTH - 1); count++) + { + rand1 = Random() % 0x30; + rand2 = Random() % 0x30; + temp = gUnknown_0203CF10[index].buffer[rand2]; + gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1]; + gUnknown_0203CF10[index].buffer[rand1] = temp; + } + if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) + gTasks[taskId].data[3]++; + gTasks[taskId].data[1] = 0; + } + gTasks[taskId].data[1]++; + } + currTask = &(gTasks[taskId]); + right = currTask->data[3]; + left = currTask->data[2]; + while(left < right) + { + anotherCount = 0; + do + { + buffer = gUnknown_0203CF04; + buffer_index = gUnknown_0203CF10[left].curr_buffer_index; + gUnknown_0203CF10[left].curr_buffer_index = buffer_index + 1; + sub_81BF2B8(buffer, gUnknown_0203CF10[left].buffer[buffer_index] + (INNER_BUFFER_LENGTH * (OUTER_BUFFER_LENGTH - 1 - left)), 0, INNER_BUFFER_LENGTH, 1); + anotherCount++; + }while(!anotherCount); + + if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) + { + Free(gUnknown_0203CF10[left].buffer); + gUnknown_0203CF10[left].buffer = NULL; + currTask->data[2]++; + if(left & 1) + gUnknown_0203CF04[1]--; + } + left++; + } + LoadBgTiles(0, gUnknown_0203CF04, 0x920, 0); + if(gUnknown_0203CF10[0x5F].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) + break; + return; + case 3: + UnsetBgTilemapBuffer(0); + anotherTaskId = FindTaskIdByFunc(sub_81BEBB4); + if(anotherTaskId != 0xFF) + DestroyTask(anotherTaskId); + gUnknown_0203CF14[1] = gUnknown_0203CF14[0] = 0; + + sub_81BEB90(); + + break; + case 4: + Free(gUnknown_0203CF14); + gUnknown_0203CF14 = NULL; + Free(gUnknown_0203CF10); + gUnknown_0203CF10 = NULL; + Free(gUnknown_0203CF04); + gUnknown_0203CF04 = NULL; + Free(gUnknown_0203CF08); + gUnknown_0203CF08 = NULL; + + break; + case 5: + SetGpuRegBits(0xC, 0x2); + SetGpuRegBits(0x8, 0x0); + SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0); + sub_81971D0(); + + break; + case 6: + ShowBg(0); + + break; + case 7: + DestroyTask(taskId); + EnableBothScriptContexts(); + break; + } + gTasks[taskId].data[0]++; +} +#else +ASM_DIRECT +void sub_81BED50(u8 taskId) +{ + asm("\n\ + .syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + ldr r1, =gTasks\n\ + lsls r0, 2\n\ + add r0, r10\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x8]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + adds r6, r1, 0\n\ + cmp r0, 0x7\n\ + bls _081BED7C\n\ + b _081BF002\n\ + _081BED7C:\n\ + lsls r0, 2\n\ + ldr r1, =_081BED90\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ + _081BED90:\n\ + .4byte _081BEDB0\n\ + .4byte _081BF002\n\ + .4byte _081BEDC4\n\ + .4byte _081BEF64\n\ + .4byte _081BEF94\n\ + .4byte _081BEFD0\n\ + .4byte _081BEFF0\n\ + .4byte _081BEFF8\n\ + _081BEDB0:\n\ + ldr r4, =gUnknown_0203CF10\n\ + movs r0, 0xC0\n\ + lsls r0, 2\n\ + bl AllocZeroed\n\ + str r0, [r4]\n\ + b _081BF002\n\ + .pool\n\ + _081BEDC4:\n\ + mov r1, r10\n\ + lsls r0, r1, 2\n\ + adds r1, r0, r1\n\ + lsls r1, 3\n\ + adds r2, r1, r6\n\ + ldrh r3, [r2, 0xE]\n\ + movs r4, 0xE\n\ + ldrsh r1, [r2, r4]\n\ + str r0, [sp, 0x8]\n\ + cmp r1, 0x5F\n\ + bgt _081BEE8A\n\ + movs r1, 0xA\n\ + ldrsh r0, [r2, r1]\n\ + cmp r0, 0x1\n\ + ble _081BEE7C\n\ + lsls r0, r3, 24\n\ + lsrs r4, r0, 24\n\ + movs r0, 0x30\n\ + bl Alloc\n\ + ldr r3, =gUnknown_0203CF10\n\ + ldr r1, [r3]\n\ + lsls r2, r4, 3\n\ + adds r1, r2, r1\n\ + str r0, [r1]\n\ + movs r5, 0\n\ + adds r4, r2, 0\n\ + _081BEDFA:\n\ + ldr r0, [r3]\n\ + adds r0, r4, r0\n\ + ldr r0, [r0]\n\ + adds r0, r5\n\ + strb r5, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x2F\n\ + bls _081BEDFA\n\ + movs r5, 0\n\ + ldr r7, =gUnknown_0203CF10\n\ + adds r6, r2, 0\n\ + _081BEE14:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x30\n\ + bl __umodsi3\n\ + adds r4, r0, 0\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x30\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + ldr r1, [r7]\n\ + adds r1, r6, r1\n\ + ldr r1, [r1]\n\ + adds r0, r1, r0\n\ + ldrb r2, [r0]\n\ + adds r1, r4 \n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + ldr r0, [r7]\n\ + adds r0, r6, r0\n\ + ldr r0, [r0]\n\ + adds r0, r4\n\ + strb r2, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0x2F\n\ + bls _081BEE14\n\ + ldr r0, =gTasks\n\ + ldr r1, [sp, 0x8]\n\ + add r1, r10\n\ + lsls r1, 3\n\ + adds r2, r1, r0\n\ + ldrh r3, [r2, 0xE]\n\ + movs r4, 0xE\n\ + ldrsh r1, [r2, r4]\n\ + adds r6, r0, 0\n\ + cmp r1, 0x5F\n\ + bgt _081BEE78\n\ + adds r0, r3, 0x1\n\ + strh r0, [r2, 0xE]\n\ + _081BEE78:\n\ + movs r0, 0\n\ + strh r0, [r2, 0xA]\n\ + _081BEE7C:\n\ + ldr r1, [sp, 0x8]\n\ + add r1, r10\n\ + lsls r1, 3\n\ + adds r1, r6\n\ + ldrh r0, [r1, 0xA]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0xA]\n\ + _081BEE8A:\n\ + ldr r0, [sp, 0x8]\n\ + add r0, r10\n\ + lsls r0, 3\n\ + adds r0, r6\n\ + ldrb r4, [r0, 0xE]\n\ + ldrb r5, [r0, 0xC]\n\ + lsls r0, r4, 16\n\ + cmp r5, r4\n\ + bcs _081BEF32\n\ + str r0, [sp, 0xC]\n\ + _081BEE9E:\n\ + movs r6, 0\n\ + adds r0, r5, 0x1\n\ + str r0, [sp, 0x4]\n\ + lsls r4, r5, 3\n\ + movs r2, 0x5F\n\ + subs r1, r2, r5\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 4\n\ + mov r9, r0\n\ + _081BEEB2:\n\ + ldr r0, =gUnknown_0203CF04\n\ + ldr r0, [r0]\n\ + ldr r7, =gUnknown_0203CF10\n\ + ldr r3, [r7]\n\ + adds r3, r4, r3\n\ + ldrb r2, [r3, 0x4]\n\ + adds r1, r2, 0x1\n\ + strb r1, [r3, 0x4]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + ldr r1, [r3]\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + add r1, r9\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + movs r2, 0x1\n\ + mov r8, r2\n\ + str r2, [sp]\n\ + movs r2, 0\n\ + movs r3, 0x30\n\ + bl sub_81BF2B8\n\ + adds r0, r6, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + cmp r6, 0\n\ + beq _081BEEB2\n\ + ldr r0, [r7]\n\ + adds r1, r4, r0\n\ + ldrb r0, [r1, 0x4]\n\ + cmp r0, 0x2F\n\ + bls _081BEF24\n\ + ldr r0, [r1]\n\ + bl Free\n\ + ldr r0, [r7]\n\ + adds r0, r4, r0\n\ + movs r1, 0\n\ + str r1, [r0]\n\ + ldr r1, [sp, 0x8]\n\ + add r1, r10\n\ + lsls r1, 3\n\ + ldr r4, =gTasks\n\ + adds r1, r4\n\ + ldrh r0, [r1, 0xC]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0xC]\n\ + mov r0, r8\n\ + ands r5, r0\n\ + cmp r5, 0x1\n\ + bne _081BEF24\n\ + ldr r0, =gUnknown_0203CF14\n\ + ldr r1, [r0]\n\ + ldrh r0, [r1, 0x2]\n\ + subs r0, 0x1\n\ + strh r0, [r1, 0x2]\n\ + _081BEF24:\n\ + ldr r1, [sp, 0x4]\n\ + lsls r0, r1, 16\n\ + lsrs r5, r0, 16\n\ + ldr r2, [sp, 0xC]\n\ + lsrs r0, r2, 16\n\ + cmp r5, r0\n\ + bcc _081BEE9E\n\ + _081BEF32:\n\ + ldr r0, =gUnknown_0203CF04\n\ + ldr r1, [r0]\n\ + movs r2, 0x92\n\ + lsls r2, 4\n\ + movs r0, 0\n\ + movs r3, 0\n\ + bl LoadBgTiles\n\ + ldr r0, =gUnknown_0203CF10\n\ + ldr r0, [r0]\n\ + movs r4, 0xBE\n\ + lsls r4, 2\n\ + adds r0, r4\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r0, 0x2F\n\ + bhi _081BF002\n\ + b _081BF014\n\ + .pool\n\ + _081BEF64:\n\ + movs r0, 0\n\ + bl UnsetBgTilemapBuffer\n\ + ldr r0, =sub_81BEBB4\n\ + bl FindTaskIdByFunc\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0xFF\n\ + beq _081BEF7C\n\ + bl DestroyTask\n\ + _081BEF7C:\n\ + ldr r0, =gUnknown_0203CF14\n\ + ldr r1, [r0]\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + strh r0, [r1, 0x2]\n\ + bl sub_81BEB90\n\ + b _081BF002\n\ + .pool\n\ + _081BEF94:\n\ + ldr r4, =gUnknown_0203CF14\n\ + ldr r0, [r4]\n\ + bl Free\n\ + movs r5, 0\n\ + str r5, [r4]\n\ + ldr r4, =gUnknown_0203CF10\n\ + ldr r0, [r4]\n\ + bl Free\n\ + str r5, [r4]\n\ + ldr r4, =gUnknown_0203CF04\n\ + ldr r0, [r4]\n\ + bl Free\n\ + str r5, [r4]\n\ + ldr r4, =gUnknown_0203CF08\n\ + ldr r0, [r4]\n\ + bl Free\n\ + str r5, [r4]\n\ + b _081BF002\n\ + .pool\n\ + _081BEFD0:\n\ + movs r0, 0xC\n\ + movs r1, 0x2\n\ + bl SetGpuRegBits\n\ + movs r0, 0x8\n\ + movs r1, 0\n\ + bl SetGpuRegBits\n\ + movs r0, 0\n\ + movs r1, 0x7\n\ + movs r2, 0\n\ + bl SetBgAttribute\n\ + bl sub_81971D0\n\ + b _081BF002\n\ + _081BEFF0:\n\ + movs r0, 0\n\ + bl ShowBg\n\ + b _081BF002\n\ + _081BEFF8:\n\ + mov r0, r10\n\ + bl DestroyTask\n\ + bl EnableBothScriptContexts\n\ + _081BF002:\n\ + ldr r0, =gTasks\n\ + mov r2, r10\n\ + lsls r1, r2, 2\n\ + add r1, r10\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + _081BF014:\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +void sub_81BF028(u8 taskId) +{ + u8 spriteId, zero; + u16 count, rand1, rand2, temp, switch_val; + u16 count2; + u32 count3; + + u8 *buffer; + struct SpriteTemplate fossilTemplate; +; + switch_val = gTasks[taskId].data[0] - 1; + switch(switch_val) + { + case 0: + gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(0x14); + gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_TILE_LENGTH); + gUnknown_0203CF0C->frameImage = (struct InMemorySpriteFrameImage *)AllocZeroed(0x8); + gUnknown_0203CF0C->frameImagePalette = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_PALETTE_LENGTH << 1); + gUnknown_0203CF0C->unk10 = 0; + break; + case 1: + buffer = gUnknown_0203CF0C->frameImageTiles; + for(count = 0; count <= (ROOT_FOSSIL_GFX_TILE_LENGTH - 1); count++, buffer++) + *buffer = gRootFossil_Gfx[count]; + break; + case 2: + gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; + gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_TILE_LENGTH; + break; + case 3: + fossilTemplate = gUnknown_08617E00; + fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage); + + spriteId = CreateSprite(&fossilTemplate, 128, -10, 1); + gUnknown_0203CF0C->spriteId = spriteId; + zero = 0; + gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero; + gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x; + gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; + case 4: + for(count = 0; count <= (ROOT_FOSSIL_GFX_PALETTE_LENGTH -1); count++) + gUnknown_0203CF0C->frameImagePalette[count] = count; + break; + case 5: + for(count = 0; count <= ((ROOT_FOSSIL_GFX_PALETTE_LENGTH <<1) -1); count++) + { + rand1 = Random() & 0xFF; + rand2 = Random() & 0xFF; + temp = gUnknown_0203CF0C->frameImagePalette[rand2]; + gUnknown_0203CF0C->frameImagePalette[rand2] = gUnknown_0203CF0C->frameImagePalette[rand1]; + gUnknown_0203CF0C->frameImagePalette[rand1] = temp; + } + gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; + break; + case 6: + if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) + return; + DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]); + Free(gUnknown_0203CF0C->frameImagePalette); + gUnknown_0203CF0C->frameImagePalette = NULL; + Free(gUnknown_0203CF0C->frameImage); + gUnknown_0203CF0C->frameImage = NULL; + Free(gUnknown_0203CF0C->frameImageTiles); + gUnknown_0203CF0C->frameImageTiles = NULL; + Free(gUnknown_0203CF0C); + gUnknown_0203CF0C = NULL; + break; + case 7: + EnableBothScriptContexts(); + } + gTasks[taskId].data[0]++; +} + +#else +ASM_DIRECT +void sub_81BF028(u8 taskId) +{ + asm("\n\ + .syntax unified\n\ + sub_81BF028: @ 81BF028\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x18\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + ldr r1, =gTasks\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldrh r0, [r0, 0x8]\n\ + subs r0, 0x1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x7\n\ + bls _081BF04C\n\ + b _081BF228\n\ + _081BF04C:\n\ + lsls r0, 2\n\ + ldr r1, =_081BF060\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ + _081BF060:\n\ + .4byte _081BF080\n\ + .4byte _081BF0B4\n\ + .4byte _081BF0DC\n\ + .4byte _081BF0F0\n\ + .4byte _081BF148\n\ + .4byte _081BF170\n\ + .4byte _081BF1CC\n\ + .4byte _081BF224\n\ + _081BF080:\n\ + ldr r4, =gUnknown_0203CF0C\n\ + movs r0, 0x14\n\ + bl AllocZeroed\n\ + str r0, [r4]\n\ + movs r0, 0x80\n\ + bl AllocZeroed\n\ + ldr r1, [r4]\n\ + str r0, [r1]\n\ + movs r0, 0x8\n\ + bl AllocZeroed\n\ + ldr r1, [r4]\n\ + str r0, [r1, 0x4]\n\ + movs r0, 0x80\n\ + lsls r0, 2\n\ + bl AllocZeroed\n\ + ldr r1, [r4]\n\ + str r0, [r1, 0xC]\n\ + movs r0, 0\n\ + strh r0, [r1, 0x10]\n\ + b _081BF228\n\ + .pool\n\ + _081BF0B4:\n\ + ldr r0, =gUnknown_0203CF0C\n\ + ldr r0, [r0]\n\ + ldr r1, [r0]\n\ + movs r5, 0\n\ + ldr r2, =gRootFossil_Gfx\n\ + _081BF0BE:\n\ + adds r0, r5, r2\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + adds r1, 0x1\n\ + cmp r5, 0x7F\n\ + bls _081BF0BE\n\ + b _081BF228\n\ + .pool\n\ + _081BF0DC:\n\ + ldr r0, =gUnknown_0203CF0C\n\ + ldr r0, [r0]\n\ + ldr r1, [r0, 0x4]\n\ + ldr r0, [r0]\n\ + str r0, [r1]\n\ + movs r0, 0x80\n\ + strh r0, [r1, 0x4]\n\ + b _081BF228\n\ + .pool\n\ + _081BF0F0:\n\ + mov r1, sp\n\ + ldr r0, =gUnknown_08617E00\n\ + ldm r0!, {r2-r4}\n\ + stm r1!, {r2-r4}\n\ + ldm r0!, {r2-r4}\n\ + stm r1!, {r2-r4}\n\ + ldr r4, =gUnknown_0203CF0C\n\ + ldr r0, [r4]\n\ + ldr r0, [r0, 0x4]\n\ + str r0, [sp, 0xC]\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + mov r0, sp\n\ + movs r1, 0x80\n\ + movs r3, 0x1\n\ + bl CreateSprite\n\ + ldr r1, [r4]\n\ + movs r3, 0\n\ + strb r0, [r1, 0x8]\n\ + ldr r2, =gSprites\n\ + ldr r0, [r4]\n\ + ldrb r1, [r0, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + adds r0, 0x28\n\ + strb r3, [r0]\n\ + ldr r3, [r4]\n\ + ldrb r1, [r3, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldrh r1, [r0, 0x20]\n\ + strh r1, [r0, 0x2E]\n\ + ldrb r1, [r3, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + movs r1, 0x1\n\ + strh r1, [r0, 0x30]\n\ + _081BF148:\n\ + movs r5, 0\n\ + ldr r2, =gUnknown_0203CF0C\n\ + _081BF14C:\n\ + ldr r0, [r2]\n\ + ldr r1, [r0, 0xC]\n\ + lsls r0, r5, 1\n\ + adds r0, r1\n\ + strh r5, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, 0xFF\n\ + bls _081BF14C\n\ + b _081BF228\n\ + .pool\n\ + _081BF170:\n\ + movs r5, 0\n\ + movs r6, 0xFF\n\ + ldr r0, =0x000001ff\n\ + mov r8, r0\n\ + _081BF178:\n\ + bl Random\n\ + adds r4, r6, 0\n\ + ands r4, r0\n\ + bl Random\n\ + adds r1, r6, 0\n\ + ands r1, r0\n\ + ldr r0, =gUnknown_0203CF0C\n\ + ldr r3, [r0]\n\ + ldr r0, [r3, 0xC]\n\ + lsls r1, 1\n\ + adds r1, r0\n\ + ldrh r2, [r1]\n\ + lsls r4, 1\n\ + adds r4, r0\n\ + ldrh r0, [r4]\n\ + strh r0, [r1]\n\ + strh r2, [r4]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + cmp r5, r8\n\ + bls _081BF178\n\ + ldr r2, =gSprites\n\ + ldrb r1, [r3, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r0, 2\n\ + adds r2, 0x1C\n\ + adds r0, r2\n\ + ldr r1, =sub_81BF248\n\ + str r1, [r0]\n\ + b _081BF228\n\ + .pool\n\ + _081BF1CC:\n\ + ldr r3, =gSprites\n\ + ldr r5, =gUnknown_0203CF0C\n\ + ldr r0, [r5]\n\ + ldrb r1, [r0, 0x8]\n\ + lsls r0, r1, 4\n\ + adds r0, r1\n\ + lsls r2, r0, 2\n\ + adds r0, r3, 0\n\ + adds r0, 0x1C\n\ + adds r0, r2, r0\n\ + ldr r1, [r0]\n\ + ldr r0, =SpriteCallbackDummy\n\ + cmp r1, r0\n\ + bne _081BF238\n\ + adds r0, r2, r3\n\ + bl DestroySprite\n\ + ldr r0, [r5]\n\ + ldr r0, [r0, 0xC]\n\ + bl Free\n\ + ldr r0, [r5]\n\ + movs r4, 0\n\ + str r4, [r0, 0xC]\n\ + ldr r0, [r0, 0x4]\n\ + bl Free\n\ + ldr r0, [r5]\n\ + str r4, [r0, 0x4]\n\ + ldr r0, [r0]\n\ + bl Free\n\ + ldr r0, [r5]\n\ + str r4, [r0]\n\ + bl Free\n\ + str r4, [r5]\n\ + b _081BF228\n\ + .pool\n\ + _081BF224:\n\ + bl EnableBothScriptContexts\n\ + _081BF228:\n\ + ldr r0, =gTasks\n\ + lsls r1, r7, 2\n\ + adds r1, r7\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x8]\n\ + adds r0, 0x1\n\ + strh r0, [r1, 0x8]\n\ + _081BF238:\n\ + add sp, 0x18\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +void sub_81BF248(struct Sprite *sprite) +{ + u8 count; + u16 x; + u16 y; + u8 *buffer; + + if(gUnknown_0203CF0C->unk10 > 0xFF) + { + sprite->callback = SpriteCallbackDummy; + return; + } + if(sprite->pos2.y > 0x5F) + { + for(count = 0; count <= 1; count++) + { + buffer = gUnknown_0203CF0C->frameImageTiles; + x = gUnknown_0203CF0C->unk10; + gUnknown_0203CF0C->unk10 = x+1; + sub_81BF2B8(buffer,gUnknown_0203CF0C->frameImagePalette[x] , 0, 0x10, 0); + } + StartSpriteAnim(sprite, 0x0); + } + else + sprite->pos2.y++; +} + +#else +ASM_DIRECT +void sub_81BF248(struct Sprite *sprite) +{ + asm("\n\ + .syntax unified\n\ + push {r4,r5,lr}\n\ + sub sp, 0x4\n\ + adds r5, r0, 0\n\ + ldr r0, =gUnknown_0203CF0C\n\ + ldr r0, [r0]\n\ + ldrh r0, [r0, 0x10]\n\ + cmp r0, 0xFF\n\ + bls _081BF268\n\ + ldr r0, =SpriteCallbackDummy\n\ + str r0, [r5, 0x1C]\n\ + b _081BF2B0\n\ + .pool\n\ + _081BF268:\n\ + ldrh r1, [r5, 0x22]\n\ + movs r2, 0x22\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0x5F\n\ + ble _081BF2AC\n\ + movs r4, 0\n\ + _081BF274:\n\ + ldr r0, =gUnknown_0203CF0C\n\ + ldr r3, [r0]\n\ + ldr r0, [r3]\n\ + ldrh r1, [r3, 0x10]\n\ + adds r2, r1, 0x1\n\ + strh r2, [r3, 0x10]\n\ + lsls r1, 16\n\ + ldr r2, [r3, 0xC]\n\ + lsrs r1, 15\n\ + adds r1, r2\n\ + ldrh r1, [r1]\n\ + movs r2, 0\n\ + str r2, [sp]\n\ + movs r3, 0x10\n\ + bl sub_81BF2B8\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0x1\n\ + bls _081BF274\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + bl StartSpriteAnim\n\ + b _081BF2B0\n\ + .pool\n\ + _081BF2AC:\n\ + adds r0, r1, 0x1\n\ + strh r0, [r5, 0x22]\n\ + _081BF2B0:\n\ + add sp, 0x4\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +extern u16 gUnknown_030012A8[8]; + + + -- cgit v1.2.3 From 48fdddf6384628a86ae156e684bbaec907cf590d Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 22 Feb 2018 15:15:03 +0530 Subject: Bring non-matchings in a compiling state --- src/fossil_specials.c | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/fossil_specials.c b/src/fossil_specials.c index 749c37e4d..432ea5246 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -41,7 +41,7 @@ struct Struct203CF0C { u8 *frameImageTiles; struct DynamicSpriteFrameImage *frameImage; u8 spriteId; - u16 *frameImagePalette; + u16 *unkC; u16 unk10; }; @@ -50,6 +50,7 @@ struct Struct203CF0C { /*static*/ void sub_81BEBF4(u8 taskId); /*static*/ void sub_81BF028(u8 taskId); /*static*/ void sub_81BF248(struct Sprite *); +/*static*/ void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e); // .rodata static const u8 gUnknown_08617274[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00}; @@ -139,6 +140,9 @@ EWRAM_DATA struct Struct203CF0C *gUnknown_0203CF0C = NULL; EWRAM_DATA struct Struct203CF10 *gUnknown_0203CF10 = NULL; EWRAM_DATA u16 *gUnknown_0203CF14 = NULL; +// iwram +IWRAM_DATA u16 gUnknown_030012A8[8] = {0, 0, 0, 0, 0, 0, 0, 0}; + // text void sub_81BEB24(void) { @@ -234,8 +238,6 @@ void sub_81BEBF4(u8 taskId) #define OUTER_BUFFER_LENGTH 0x60 #define INNER_BUFFER_LENGTH 0x30 -//void sub_81BF2B8(u8 *buffer, u16 offset, u8 a, u8 buffer_size, u8 d); - #ifdef NONMATCHING void sub_81BED50(u8 taskId) { @@ -699,8 +701,8 @@ void sub_81BF028(u8 taskId) case 0: gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(0x14); gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_TILE_LENGTH); - gUnknown_0203CF0C->frameImage = (struct InMemorySpriteFrameImage *)AllocZeroed(0x8); - gUnknown_0203CF0C->frameImagePalette = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_PALETTE_LENGTH << 1); + gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *)AllocZeroed(0x8); + gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_PALETTE_LENGTH << 1); gUnknown_0203CF0C->unk10 = 0; break; case 1: @@ -724,16 +726,16 @@ void sub_81BF028(u8 taskId) gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; case 4: for(count = 0; count <= (ROOT_FOSSIL_GFX_PALETTE_LENGTH -1); count++) - gUnknown_0203CF0C->frameImagePalette[count] = count; + gUnknown_0203CF0C->unkC[count] = count; break; case 5: for(count = 0; count <= ((ROOT_FOSSIL_GFX_PALETTE_LENGTH <<1) -1); count++) { rand1 = Random() & 0xFF; rand2 = Random() & 0xFF; - temp = gUnknown_0203CF0C->frameImagePalette[rand2]; - gUnknown_0203CF0C->frameImagePalette[rand2] = gUnknown_0203CF0C->frameImagePalette[rand1]; - gUnknown_0203CF0C->frameImagePalette[rand1] = temp; + temp = gUnknown_0203CF0C->unkC[rand2]; + gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; + gUnknown_0203CF0C->unkC[rand1] = temp; } gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; break; @@ -741,8 +743,8 @@ void sub_81BF028(u8 taskId) if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]); - Free(gUnknown_0203CF0C->frameImagePalette); - gUnknown_0203CF0C->frameImagePalette = NULL; + Free(gUnknown_0203CF0C->unkC); + gUnknown_0203CF0C->unkC = NULL; Free(gUnknown_0203CF0C->frameImage); gUnknown_0203CF0C->frameImage = NULL; Free(gUnknown_0203CF0C->frameImageTiles); @@ -1008,29 +1010,33 @@ void sub_81BF028(u8 taskId) #ifdef NONMATCHING void sub_81BF248(struct Sprite *sprite) { - u8 count; + u16 x; - u16 y; u8 *buffer; + u8 count; if(gUnknown_0203CF0C->unk10 > 0xFF) { sprite->callback = SpriteCallbackDummy; return; } - if(sprite->pos2.y > 0x5F) + if(sprite->pos1.y > 0x5F) { - for(count = 0; count <= 1; count++) + count = 0; + do { buffer = gUnknown_0203CF0C->frameImageTiles; x = gUnknown_0203CF0C->unk10; gUnknown_0203CF0C->unk10 = x+1; - sub_81BF2B8(buffer,gUnknown_0203CF0C->frameImagePalette[x] , 0, 0x10, 0); + sub_81BF2B8(buffer, gUnknown_0203CF0C->unkC[x], 0, 0x10, 0); + count++; } + while(count <= 1); + StartSpriteAnim(sprite, 0x0); } else - sprite->pos2.y++; + sprite->pos1.y++; } #else @@ -1096,8 +1102,3 @@ void sub_81BF248(struct Sprite *sprite) .syntax divided"); } #endif // NONMATCHING - -extern u16 gUnknown_030012A8[8]; - - - -- cgit v1.2.3 From 5e76251ea9624612c5a5808865949e337cadca49 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Fri, 23 Feb 2018 01:52:08 +0530 Subject: match 2 functions --- src/fossil_specials.c | 432 +++++++------------------------------------------- 1 file changed, 58 insertions(+), 374 deletions(-) (limited to 'src') diff --git a/src/fossil_specials.c b/src/fossil_specials.c index 432ea5246..3ff2767c7 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -684,62 +684,69 @@ void sub_81BED50(u8 taskId) } #endif // NONMATCHING -#ifdef NONMATCHING void sub_81BF028(u8 taskId) { - u8 spriteId, zero; - u16 count, rand1, rand2, temp, switch_val; - u16 count2; - u32 count3; - + u16 i; + u16 j; u8 *buffer; - struct SpriteTemplate fossilTemplate; -; - switch_val = gTasks[taskId].data[0] - 1; - switch(switch_val) + + switch(gTasks[taskId].data[0]) { - case 0: + case 1: gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(0x14); - gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_TILE_LENGTH); - gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *)AllocZeroed(0x8); - gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_PALETTE_LENGTH << 1); + gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(0x80); + gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(0x8); + gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(0x200); gUnknown_0203CF0C->unk10 = 0; break; - case 1: - buffer = gUnknown_0203CF0C->frameImageTiles; - for(count = 0; count <= (ROOT_FOSSIL_GFX_TILE_LENGTH - 1); count++, buffer++) - *buffer = gRootFossil_Gfx[count]; - break; case 2: - gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; - gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_TILE_LENGTH; + { + buffer = gUnknown_0203CF0C->frameImageTiles; + for(i = 0; i < 0x80; i++, buffer++) + *buffer = gRootFossil_Gfx[i]; + } break; case 3: - fossilTemplate = gUnknown_08617E00; - fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage); - - spriteId = CreateSprite(&fossilTemplate, 128, -10, 1); - gUnknown_0203CF0C->spriteId = spriteId; - zero = 0; - gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero; - gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x; - gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; - case 4: - for(count = 0; count <= (ROOT_FOSSIL_GFX_PALETTE_LENGTH -1); count++) - gUnknown_0203CF0C->unkC[count] = count; + gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; + gUnknown_0203CF0C->frameImage->size = 0x80; break; - case 5: - for(count = 0; count <= ((ROOT_FOSSIL_GFX_PALETTE_LENGTH <<1) -1); count++) + case 4: { - rand1 = Random() & 0xFF; - rand2 = Random() & 0xFF; - temp = gUnknown_0203CF0C->unkC[rand2]; - gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; - gUnknown_0203CF0C->unkC[rand1] = temp; + u8 spriteId, zero; + struct SpriteTemplate fossilTemplate; + + fossilTemplate = gUnknown_08617E00; + fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage); + spriteId = CreateSprite(&fossilTemplate, 128, -16, 1); + gUnknown_0203CF0C->spriteId = spriteId; + zero = 0; + gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero; + gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x; + gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; } - gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; + case 5: + for(i = 0; i < 0x100; i++) + gUnknown_0203CF0C->unkC[i] = i; break; case 6: + { + u16 rand1, rand2, temp; + + j = 0x1FF; + for(i = 0; i <= j; i++) + { + + rand1 = Random() % 0x100; + rand2 = Random() % 0x100; + j = 0x1FF; + temp = gUnknown_0203CF0C->unkC[rand2]; + gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; + gUnknown_0203CF0C->unkC[rand1] = temp; + } + gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248; + break; + } + case 7: if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]); @@ -752,353 +759,30 @@ void sub_81BF028(u8 taskId) Free(gUnknown_0203CF0C); gUnknown_0203CF0C = NULL; break; - case 7: + case 8: EnableBothScriptContexts(); } - gTasks[taskId].data[0]++; + ++gTasks[taskId].data[0]; } -#else -ASM_DIRECT -void sub_81BF028(u8 taskId) -{ - asm("\n\ - .syntax unified\n\ - sub_81BF028: @ 81BF028\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x18\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - ldr r1, =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x8]\n\ - subs r0, 0x1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x7\n\ - bls _081BF04C\n\ - b _081BF228\n\ - _081BF04C:\n\ - lsls r0, 2\n\ - ldr r1, =_081BF060\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ - _081BF060:\n\ - .4byte _081BF080\n\ - .4byte _081BF0B4\n\ - .4byte _081BF0DC\n\ - .4byte _081BF0F0\n\ - .4byte _081BF148\n\ - .4byte _081BF170\n\ - .4byte _081BF1CC\n\ - .4byte _081BF224\n\ - _081BF080:\n\ - ldr r4, =gUnknown_0203CF0C\n\ - movs r0, 0x14\n\ - bl AllocZeroed\n\ - str r0, [r4]\n\ - movs r0, 0x80\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1]\n\ - movs r0, 0x8\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1, 0x4]\n\ - movs r0, 0x80\n\ - lsls r0, 2\n\ - bl AllocZeroed\n\ - ldr r1, [r4]\n\ - str r0, [r1, 0xC]\n\ - movs r0, 0\n\ - strh r0, [r1, 0x10]\n\ - b _081BF228\n\ - .pool\n\ - _081BF0B4:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldr r1, [r0]\n\ - movs r5, 0\n\ - ldr r2, =gRootFossil_Gfx\n\ - _081BF0BE:\n\ - adds r0, r5, r2\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - adds r1, 0x1\n\ - cmp r5, 0x7F\n\ - bls _081BF0BE\n\ - b _081BF228\n\ - .pool\n\ - _081BF0DC:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldr r1, [r0, 0x4]\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ - movs r0, 0x80\n\ - strh r0, [r1, 0x4]\n\ - b _081BF228\n\ - .pool\n\ - _081BF0F0:\n\ - mov r1, sp\n\ - ldr r0, =gUnknown_08617E00\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldr r4, =gUnknown_0203CF0C\n\ - ldr r0, [r4]\n\ - ldr r0, [r0, 0x4]\n\ - str r0, [sp, 0xC]\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - mov r0, sp\n\ - movs r1, 0x80\n\ - movs r3, 0x1\n\ - bl CreateSprite\n\ - ldr r1, [r4]\n\ - movs r3, 0\n\ - strb r0, [r1, 0x8]\n\ - ldr r2, =gSprites\n\ - ldr r0, [r4]\n\ - ldrb r1, [r0, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - adds r0, 0x28\n\ - strb r3, [r0]\n\ - ldr r3, [r4]\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldrh r1, [r0, 0x20]\n\ - strh r1, [r0, 0x2E]\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x30]\n\ - _081BF148:\n\ - movs r5, 0\n\ - ldr r2, =gUnknown_0203CF0C\n\ - _081BF14C:\n\ - ldr r0, [r2]\n\ - ldr r1, [r0, 0xC]\n\ - lsls r0, r5, 1\n\ - adds r0, r1\n\ - strh r5, [r0]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, 0xFF\n\ - bls _081BF14C\n\ - b _081BF228\n\ - .pool\n\ - _081BF170:\n\ - movs r5, 0\n\ - movs r6, 0xFF\n\ - ldr r0, =0x000001ff\n\ - mov r8, r0\n\ - _081BF178:\n\ - bl Random\n\ - adds r4, r6, 0\n\ - ands r4, r0\n\ - bl Random\n\ - adds r1, r6, 0\n\ - ands r1, r0\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r3, [r0]\n\ - ldr r0, [r3, 0xC]\n\ - lsls r1, 1\n\ - adds r1, r0\n\ - ldrh r2, [r1]\n\ - lsls r4, 1\n\ - adds r4, r0\n\ - ldrh r0, [r4]\n\ - strh r0, [r1]\n\ - strh r2, [r4]\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bls _081BF178\n\ - ldr r2, =gSprites\n\ - ldrb r1, [r3, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, 0x1C\n\ - adds r0, r2\n\ - ldr r1, =sub_81BF248\n\ - str r1, [r0]\n\ - b _081BF228\n\ - .pool\n\ - _081BF1CC:\n\ - ldr r3, =gSprites\n\ - ldr r5, =gUnknown_0203CF0C\n\ - ldr r0, [r5]\n\ - ldrb r1, [r0, 0x8]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r2, r0, 2\n\ - adds r0, r3, 0\n\ - adds r0, 0x1C\n\ - adds r0, r2, r0\n\ - ldr r1, [r0]\n\ - ldr r0, =SpriteCallbackDummy\n\ - cmp r1, r0\n\ - bne _081BF238\n\ - adds r0, r2, r3\n\ - bl DestroySprite\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0xC]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - movs r4, 0\n\ - str r4, [r0, 0xC]\n\ - ldr r0, [r0, 0x4]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - str r4, [r0, 0x4]\n\ - ldr r0, [r0]\n\ - bl Free\n\ - ldr r0, [r5]\n\ - str r4, [r0]\n\ - bl Free\n\ - str r4, [r5]\n\ - b _081BF228\n\ - .pool\n\ - _081BF224:\n\ - bl EnableBothScriptContexts\n\ - _081BF228:\n\ - ldr r0, =gTasks\n\ - lsls r1, r7, 2\n\ - adds r1, r7\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - _081BF238:\n\ - add sp, 0x18\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING -#ifdef NONMATCHING void sub_81BF248(struct Sprite *sprite) { - - u16 x; - u8 *buffer; - u8 count; - - if(gUnknown_0203CF0C->unk10 > 0xFF) + if (gUnknown_0203CF0C->unk10 > 0xFF) { sprite->callback = SpriteCallbackDummy; - return; } - if(sprite->pos1.y > 0x5F) + else if (sprite->pos1.y >= 0x60) { - count = 0; - do + u8 i; + for (i = 0; i < 2; i++) { - buffer = gUnknown_0203CF0C->frameImageTiles; - x = gUnknown_0203CF0C->unk10; - gUnknown_0203CF0C->unk10 = x+1; - sub_81BF2B8(buffer, gUnknown_0203CF0C->unkC[x], 0, 0x10, 0); - count++; + sub_81BF2B8(gUnknown_0203CF0C->frameImageTiles, gUnknown_0203CF0C->unkC[gUnknown_0203CF0C->unk10++], 0, 16, 0); } - while(count <= 1); - - StartSpriteAnim(sprite, 0x0); + StartSpriteAnim(sprite, 0); } else + { sprite->pos1.y++; + } } - -#else -ASM_DIRECT -void sub_81BF248(struct Sprite *sprite) -{ - asm("\n\ - .syntax unified\n\ - push {r4,r5,lr}\n\ - sub sp, 0x4\n\ - adds r5, r0, 0\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r0, [r0]\n\ - ldrh r0, [r0, 0x10]\n\ - cmp r0, 0xFF\n\ - bls _081BF268\n\ - ldr r0, =SpriteCallbackDummy\n\ - str r0, [r5, 0x1C]\n\ - b _081BF2B0\n\ - .pool\n\ - _081BF268:\n\ - ldrh r1, [r5, 0x22]\n\ - movs r2, 0x22\n\ - ldrsh r0, [r5, r2]\n\ - cmp r0, 0x5F\n\ - ble _081BF2AC\n\ - movs r4, 0\n\ - _081BF274:\n\ - ldr r0, =gUnknown_0203CF0C\n\ - ldr r3, [r0]\n\ - ldr r0, [r3]\n\ - ldrh r1, [r3, 0x10]\n\ - adds r2, r1, 0x1\n\ - strh r2, [r3, 0x10]\n\ - lsls r1, 16\n\ - ldr r2, [r3, 0xC]\n\ - lsrs r1, 15\n\ - adds r1, r2\n\ - ldrh r1, [r1]\n\ - movs r2, 0\n\ - str r2, [sp]\n\ - movs r3, 0x10\n\ - bl sub_81BF2B8\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0x1\n\ - bls _081BF274\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - bl StartSpriteAnim\n\ - b _081BF2B0\n\ - .pool\n\ - _081BF2AC:\n\ - adds r0, r1, 0x1\n\ - strh r0, [r5, 0x22]\n\ - _081BF2B0:\n\ - add sp, 0x4\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING -- cgit v1.2.3 From 392b869fa33a1e40f572e90d0b2a4f730a04c900 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Sun, 25 Feb 2018 17:23:51 +0530 Subject: Code cleanup --- src/fldeff_groundshake.c | 18 ++--- src/fossil_specials.c | 193 ++++++++++++++++++++++------------------------- 2 files changed, 101 insertions(+), 110 deletions(-) (limited to 'src') diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index 92aaf5238..e16b01b6e 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -44,7 +44,7 @@ static void sub_81BEA00(u8 taskId); static void sub_81BEA20(void); static void sub_81BEAD8(struct Sprite* sprite); -//.rodata +// rodata static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b}; static const union AnimCmd gSpriteAnim_8617E20[] = @@ -114,7 +114,7 @@ static const struct SpriteTemplate gUnknown_08617E60 = { // ewram EWRAM_DATA struct Struct203CF18 *gUnknown_0203CF18 = NULL; -//text +// text bool8 sub_81BE66C(void) { if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A)) @@ -280,22 +280,22 @@ static void sub_81BEA00(u8 taskId) static void sub_81BEA20(void) { - u8 count; + u8 i; u8 spriteId; - for(count = 0; count <= 7; count++) + for(i = 0; i < 8; i++) { - spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[count][0] + 120, gUnknown_08617D64[count][1], 8); + spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[i][0] + 120, gUnknown_08617D64[i][1], 8); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.paletteNum = 0; - gSprites[spriteId].data[0] = count; + gSprites[spriteId].data[0] = i; } - for(count = 0; count <= 7; count++) + for(i = 0; i < 8; i++) { - spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[count][0] + 115, gUnknown_08617D64[count][1] - 3, 8); + spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[i][0] + 115, gUnknown_08617D64[i][1] - 3, 8); gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.paletteNum = 0; - gSprites[spriteId].data[0] = count; + gSprites[spriteId].data[0] = i; } } diff --git a/src/fossil_specials.c b/src/fossil_specials.c index 3ff2767c7..926849cd9 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -17,8 +17,10 @@ #include "task.h" #include "window.h" -#define ROOT_FOSSIL_GFX_TILE_LENGTH 0x80 -#define ROOT_FOSSIL_GFX_PALETTE_LENGTH 0x100 +#define MIRAGE_TOWER_GFX_LENGTH (sizeof(gUnknown_08617274) + sizeof(gMirageTower_Gfx)) +#define MIRAGE_TOWER_PALETTE_LENGTH 0x800 +#define ROOT_FOSSIL_GFX_LENGTH sizeof(gRootFossil_Gfx) +#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100 //struct struct Struct8617DA4 { @@ -46,10 +48,10 @@ struct Struct203CF0C { }; // static functions -/*static*/ void sub_81BED50(u8 taskId); -/*static*/ void sub_81BEBF4(u8 taskId); -/*static*/ void sub_81BF028(u8 taskId); -/*static*/ void sub_81BF248(struct Sprite *); +static void sub_81BED50(u8 taskId); +static void sub_81BEBF4(u8 taskId); +static void sub_81BF028(u8 taskId); +static void sub_81BF248(struct Sprite *); /*static*/ void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e); // .rodata @@ -146,9 +148,9 @@ IWRAM_DATA u16 gUnknown_030012A8[8] = {0, 0, 0, 0, 0, 0, 0, 0}; // text 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); + u8 i; + for(i = 0; i < (sizeof(gUnknown_08617DA4)/sizeof(gUnknown_08617DA4[0])); i++) + MapGridSetMetatileIdAt(gUnknown_08617DA4[i].x + 7, gUnknown_08617DA4[i].y + 7, gUnknown_08617DA4[i].tileId); DrawWholeMapView(); } @@ -185,8 +187,7 @@ void sub_81BEBB4(u8 taskId) gTasks[taskId].data[0]--; } - -void sub_81BEBF4(u8 taskId) +static void sub_81BEBF4(u8 taskId) { u8 zero; @@ -198,15 +199,15 @@ void sub_81BEBF4(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - gUnknown_0203CF04 = (u8 *)AllocZeroed(0x920); - gUnknown_0203CF08 = (u8 *)AllocZeroed(0x800); + gUnknown_0203CF04 = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH); + gUnknown_0203CF08 = (u8 *)AllocZeroed(MIRAGE_TOWER_PALETTE_LENGTH); 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); + CpuSet(gUnknown_08617274, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH / 2); + LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0); gTasks[taskId].data[0]++; break; case 3: @@ -235,87 +236,83 @@ void sub_81BEBF4(u8 taskId) } } +#ifdef NONMATCHING #define OUTER_BUFFER_LENGTH 0x60 #define INNER_BUFFER_LENGTH 0x30 - -#ifdef NONMATCHING -void sub_81BED50(u8 taskId) +static void sub_81BED50(u8 taskId) { - u8 count, index, size, next_index, buffer_index, anotherTaskId, anotherCount; - u16 rand1, rand2, temp; - u8 left, right; - u16 left16, right16; - u8 *buffer; - struct Task *currTask; + u8 anotherTaskId, j; + switch(gTasks[taskId].data[0]) { - case 0: - gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH << 3); + case 1: + gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10)); break; - case 2: - if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) + case 3: { - if(gTasks[taskId].data[1] > 1) + u16 i; + u16 left; + u32 index, next; + + index = (u16)gTasks[taskId].data[3]; + if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) { - index = gTasks[taskId].data[3]; - gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH); - for(count = 0; count <= (INNER_BUFFER_LENGTH - 1); count++) - gUnknown_0203CF10[index].buffer[count] = count; - for(count = 0; count <= (INNER_BUFFER_LENGTH - 1); count++) + if(gTasks[taskId].data[1] > 1) { - rand1 = Random() % 0x30; - rand2 = Random() % 0x30; - temp = gUnknown_0203CF10[index].buffer[rand2]; - gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1]; - gUnknown_0203CF10[index].buffer[rand1] = temp; + index = (u8)index; + gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH); + for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++) + gUnknown_0203CF10[index].buffer[i] = i; + for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++) + { + u16 rand1, rand2, temp; + + rand1 = Random() % 0x30; + rand2 = Random() % 0x30; + temp = gUnknown_0203CF10[index].buffer[rand2]; + gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1]; + gUnknown_0203CF10[index].buffer[rand1] = temp; + } + if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) + gTasks[taskId].data[3]++; + gTasks[taskId].data[1] = 0; } - if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) - gTasks[taskId].data[3]++; - gTasks[taskId].data[1] = 0; + gTasks[taskId].data[1]++; } - gTasks[taskId].data[1]++; - } - currTask = &(gTasks[taskId]); - right = currTask->data[3]; - left = currTask->data[2]; - while(left < right) - { - anotherCount = 0; - do + index = (u8)gTasks[taskId].data[3]; + for(left = (u8)gTasks[taskId].data[2]; left < (u16)index; left = next) { - buffer = gUnknown_0203CF04; - buffer_index = gUnknown_0203CF10[left].curr_buffer_index; - gUnknown_0203CF10[left].curr_buffer_index = buffer_index + 1; - sub_81BF2B8(buffer, gUnknown_0203CF10[left].buffer[buffer_index] + (INNER_BUFFER_LENGTH * (OUTER_BUFFER_LENGTH - 1 - left)), 0, INNER_BUFFER_LENGTH, 1); - anotherCount++; - }while(!anotherCount); - - if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) - { - Free(gUnknown_0203CF10[left].buffer); - gUnknown_0203CF10[left].buffer = NULL; - currTask->data[2]++; - if(left & 1) - gUnknown_0203CF04[1]--; + j = 0; + next = left + 1; + while(!j) + { + sub_81BF2B8(gUnknown_0203CF04, ((((OUTER_BUFFER_LENGTH - 1) - left) * INNER_BUFFER_LENGTH) + gUnknown_0203CF10[left].buffer[(gUnknown_0203CF10[left].curr_buffer_index)++]), 0, INNER_BUFFER_LENGTH, 1); + j++; + } + if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) + { + Free(gUnknown_0203CF10[left].buffer); + gUnknown_0203CF10[left].buffer = NULL; + gTasks[taskId].data[2]++; + if((left % 2) == 1) + gUnknown_0203CF14[1]--; + } } - left++; + LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0); + if(gUnknown_0203CF10[OUTER_BUFFER_LENGTH - 1].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) + break; + return; } - LoadBgTiles(0, gUnknown_0203CF04, 0x920, 0); - if(gUnknown_0203CF10[0x5F].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) - break; - return; - case 3: + case 4: UnsetBgTilemapBuffer(0); anotherTaskId = FindTaskIdByFunc(sub_81BEBB4); if(anotherTaskId != 0xFF) DestroyTask(anotherTaskId); gUnknown_0203CF14[1] = gUnknown_0203CF14[0] = 0; - sub_81BEB90(); - break; - case 4: + case 5: Free(gUnknown_0203CF14); gUnknown_0203CF14 = NULL; Free(gUnknown_0203CF10); @@ -324,29 +321,27 @@ void sub_81BED50(u8 taskId) gUnknown_0203CF04 = NULL; Free(gUnknown_0203CF08); gUnknown_0203CF08 = NULL; - break; - case 5: - SetGpuRegBits(0xC, 0x2); - SetGpuRegBits(0x8, 0x0); + case 6: + SetGpuRegBits(REG_OFFSET_BG2CNT, 0x2); + SetGpuRegBits(REG_OFFSET_BG0CNT, 0x0); SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0); sub_81971D0(); - break; - case 6: + case 7: ShowBg(0); - break; - case 7: + case 8: DestroyTask(taskId); EnableBothScriptContexts(); break; } gTasks[taskId].data[0]++; } + #else ASM_DIRECT -void sub_81BED50(u8 taskId) +static void sub_81BED50(u8 taskId) { asm("\n\ .syntax unified\n\ @@ -684,31 +679,30 @@ void sub_81BED50(u8 taskId) } #endif // NONMATCHING -void sub_81BF028(u8 taskId) +static void sub_81BF028(u8 taskId) { u16 i; - u16 j; - u8 *buffer; switch(gTasks[taskId].data[0]) { case 1: - gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(0x14); - gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(0x80); - gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(0x8); - gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(0x200); + gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(sizeof(struct Struct203CF0C)); + gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_LENGTH); + gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(sizeof(struct DynamicSpriteFrameImage)); + gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)); gUnknown_0203CF0C->unk10 = 0; break; case 2: { + u8 *buffer; buffer = gUnknown_0203CF0C->frameImageTiles; - for(i = 0; i < 0x80; i++, buffer++) + for(i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++) *buffer = gRootFossil_Gfx[i]; } break; case 3: gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles; - gUnknown_0203CF0C->frameImage->size = 0x80; + gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH; break; case 4: { @@ -725,20 +719,18 @@ void sub_81BF028(u8 taskId) gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1; } case 5: - for(i = 0; i < 0x100; i++) + for(i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++) gUnknown_0203CF0C->unkC[i] = i; break; case 6: { - u16 rand1, rand2, temp; - - j = 0x1FF; + u16 rand1, rand2, temp, j; + j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1; for(i = 0; i <= j; i++) { - rand1 = Random() % 0x100; rand2 = Random() % 0x100; - j = 0x1FF; + j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1; temp = gUnknown_0203CF0C->unkC[rand2]; gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1]; gUnknown_0203CF0C->unkC[rand1] = temp; @@ -765,10 +757,9 @@ void sub_81BF028(u8 taskId) ++gTasks[taskId].data[0]; } - -void sub_81BF248(struct Sprite *sprite) +static void sub_81BF248(struct Sprite *sprite) { - if (gUnknown_0203CF0C->unk10 > 0xFF) + if (gUnknown_0203CF0C->unk10 >= (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH)) { sprite->callback = SpriteCallbackDummy; } -- cgit v1.2.3 From 2d7d686cc11770d782a605cd5173f596e71ba2e4 Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Mon, 26 Feb 2018 17:54:54 +0530 Subject: Decompile fldeff_flash --- src/fldeff_flash.c | 355 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 355 insertions(+) create mode 100644 src/fldeff_flash.c (limited to 'src') diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c new file mode 100644 index 000000000..6a3a1a963 --- /dev/null +++ b/src/fldeff_flash.c @@ -0,0 +1,355 @@ +#include "global.h" +#include "constants/songs.h" +#include "event_data.h" +#include "event_scripts.h" +#include "field_effect.h" +#include "gpu_regs.h" +#include "gba/io_reg.h" +#include "main.h" +#include "palette.h" +#include "party_menu.h" +#include "overworld.h" +#include "rom6.h" +#include "script.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" + +// structures +struct FlashStruct +{ + u8 unk0; + u8 unk1; + bool8 unk2; + bool8 unk3; + void (*func)(void); +}; + +// extern data +extern u8 EventScript_2926F8[]; + +// extern functions +extern bool8 ShouldDoBrailleFlyEffect(void); +extern void sub_8179918(void); + +// static functions +void hm2_flash(void); +void sub_81371B4(void); +bool8 sub_8137304(void); +void sub_8137404(u8 taskId); +void sub_8137420(u8 taskId); +void sub_81374C4(u8 taskId); +void sub_813750C(u8 taskId); +void sub_8137574(u8 taskId); +void sub_81375BC(u8 taskId); +void sub_81375D8(u8 taskId); +void sub_8137678(u8 taskId); +void sub_81376DC(u8 taskId); + +// rodata +extern struct FlashStruct gUnknown_085B27C8[]; + +/*static const*/ extern u16 gCaveTransitionPalette_White[];// = {0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF}; +/*static const*/ extern u16 gCaveTransitionPalette_Black[];// = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; + +/*static const*/ extern u16 gUnknown_085B2890[];// = INCBIN_U16("graphics/misc/83F808C.gbapal"); +/*static const*/ extern u16 gUnknown_085B28A0[];// = INCBIN_U16("graphics/misc/83F809C.gbapal"); +/*static const*/ extern u16 gCaveTransitionTilemap[];// = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz"); +/*static const*/ extern u8 gCaveTransitionTiles[];// = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); + +// ewram + +// text + +bool8 SetUpFieldMove_Flash(void) +{ + if(ShouldDoBrailleFlyEffect()) + { + gSpecialVar_Result = GetCursorSelectionMonId(); + gUnknown_03005DB0 = FieldCallback_Teleport; + gUnknown_0203CEEC = sub_8179918; + return TRUE; + } + else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH)) + { + gUnknown_03005DB0 = FieldCallback_Teleport; + gUnknown_0203CEEC = hm2_flash; + return TRUE; + } + + return FALSE; +} + +void hm2_flash(void) +{ + u8 taskId = oei_task_add(); + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16; + gTasks[taskId].data[9] = (uintptr_t)sub_81371B4; +} + +void sub_81371B4(void) +{ + PlaySE(SE_W115); + FlagSet(FLAG_SYS_USE_FLASH); + ScriptContext1_SetupScript(EventScript_2926F8); +} + +void sub_81371D4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_81371EC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void c2_change_map(void) +{ + u16 ime; + + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG2HOFS, 0); + SetGpuReg(REG_OFFSET_BG2VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); + DmaFill32(3, 0, (void *)OAM, OAM_SIZE); + DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); + ResetPaletteFade(); + ResetTasks(); + ResetSpriteData(); + ime = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = ime; + SetVBlankCallback(sub_81371EC); + SetMainCallback2(sub_81371D4); + if (!sub_8137304()) + SetMainCallback2(gMain.savedCallback); +} + +bool8 sub_8137304(void) +{ + u8 i; + u8 v0 = get_map_light_from_warp0(); + u8 v1 = Overworld_GetMapTypeOfSaveblockLocation(); + + for (i = 0; gUnknown_085B27C8[i].unk0; i++) + { + if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1) + { + gUnknown_085B27C8[i].func(); + return TRUE; + } + } + + return FALSE; +} + +bool8 sub_8137360(u8 a1, u8 a2) +{ + u8 i; + u8 v0 = a1; + u8 v1 = a2; + + for (i = 0; gUnknown_085B27C8[i].unk0; i++) + { + if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1) + { + return gUnknown_085B27C8[i].unk2; + } + } + + return FALSE; +} + +bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2) +{ + u8 i; + u8 v0 = a1; + u8 v1 = a2; + + for (i = 0; gUnknown_085B27C8[i].unk0; i++) + { + if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1) + { + return gUnknown_085B27C8[i].unk3; + } + } + + return FALSE; +} + +void sub_81373F0(void) +{ + CreateTask(sub_8137404, 0); +} + +void sub_8137404(u8 taskId) +{ + gTasks[taskId].func = sub_8137420; +} + +void sub_8137420(u8 taskId) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); + LoadPalette(gUnknown_085B28A0, 0xE0, 0x10); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 + | BLDCNT_EFFECT_BLEND + | BLDCNT_TGT2_BG1 + | BLDCNT_TGT2_BG2 + | BLDCNT_TGT2_BG3 + | BLDCNT_TGT2_OBJ + | BLDCNT_TGT2_BD); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) + | BGCNT_CHARBASE(3) + | BGCNT_SCREENBASE(31) + | BGCNT_16COLOR + | BGCNT_TXT256x256); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 + | DISPCNT_OBJ_1D_MAP + | DISPCNT_BG0_ON + | DISPCNT_OBJ_ON); + gTasks[taskId].func = sub_81374C4; + gTasks[taskId].data[0] = 16; + gTasks[taskId].data[1] = 0; +} + +void sub_81374C4(u8 taskId) +{ + u16 count = gTasks[taskId].data[1]; + u16 blend = count + 0x1000; + + SetGpuReg(REG_OFFSET_BLDALPHA, blend); + if (count <= 0x10) + { + gTasks[taskId].data[1]++; + } + else + { + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_813750C; + } +} + +void sub_813750C(u8 taskId) +{ + u16 count; + + SetGpuReg(REG_OFFSET_BLDALPHA, 4112); + count = gTasks[taskId].data[2]; + + if (count < 8) + { + gTasks[taskId].data[2]++; + LoadPalette(&gUnknown_085B28A0[count], 0xE0, 16 - 2 * count); + } + else + { + LoadPalette(gCaveTransitionPalette_White, 0, 0x20); + gTasks[taskId].func = sub_8137574; + gTasks[taskId].data[2] = 8; + } +} + +void sub_8137574(u8 taskId) +{ + if (gTasks[taskId].data[2]) + gTasks[taskId].data[2]--; + else + SetMainCallback2(gMain.savedCallback); +} + +void sub_81375A8(void) +{ + CreateTask(sub_81375BC, 0); +} + +void sub_81375BC(u8 taskId) +{ + gTasks[taskId].func = sub_81375D8; +} + +void sub_81375D8(u8 taskId) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) + | BGCNT_CHARBASE(3) + | BGCNT_SCREENBASE(31) + | BGCNT_16COLOR + | BGCNT_TXT256x256); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 + | DISPCNT_OBJ_1D_MAP + | DISPCNT_BG0_ON + | DISPCNT_OBJ_ON); + LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); + LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); + gTasks[taskId].func = sub_8137678; + gTasks[taskId].data[0] = 16; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; +} + +void sub_8137678(u8 taskId) +{ + u16 count = gTasks[taskId].data[2]; + + if (count < 16) + { + gTasks[taskId].data[2]++; + gTasks[taskId].data[2]++; + LoadPalette(&gUnknown_085B2890[15 - count], 0xE0, 2 * (count + 1)); + } + else + { + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 + | BLDCNT_EFFECT_BLEND + | BLDCNT_TGT2_BG1 + | BLDCNT_TGT2_BG2 + | BLDCNT_TGT2_BG3 + | BLDCNT_TGT2_OBJ + | BLDCNT_TGT2_BD); + gTasks[taskId].func = sub_81376DC; + } +} + +void sub_81376DC(u8 taskId) +{ + u16 count = 16 - gTasks[taskId].data[1]; + u16 blend = count + 0x1000; + + SetGpuReg(REG_OFFSET_BLDALPHA, blend); + if (count) + { + gTasks[taskId].data[1]++; + } + else + { + LoadPalette(gCaveTransitionPalette_Black, 0, 0x20); + SetMainCallback2(gMain.savedCallback); + } +} -- cgit v1.2.3 From 835777dec2e978bb6e89e46830950aa4b357d51c Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Tue, 27 Feb 2018 10:33:23 +0530 Subject: Decompile fleff_flash rodata --- src/fldeff_flash.c | 104 ++++++++++++++++++++++++++--------------------- src/fldeff_groundshake.c | 14 +------ src/fldeff_softboiled.c | 18 ++++---- src/fldeff_strength.c | 10 +++-- 4 files changed, 74 insertions(+), 72 deletions(-) (limited to 'src') diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index 6a3a1a963..f31fe2b47 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/songs.h" +#include "braille_puzzles.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" @@ -25,42 +26,53 @@ struct FlashStruct void (*func)(void); }; -// extern data -extern u8 EventScript_2926F8[]; - -// extern functions -extern bool8 ShouldDoBrailleFlyEffect(void); -extern void sub_8179918(void); - // static functions -void hm2_flash(void); -void sub_81371B4(void); -bool8 sub_8137304(void); -void sub_8137404(u8 taskId); -void sub_8137420(u8 taskId); -void sub_81374C4(u8 taskId); -void sub_813750C(u8 taskId); -void sub_8137574(u8 taskId); -void sub_81375BC(u8 taskId); -void sub_81375D8(u8 taskId); -void sub_8137678(u8 taskId); -void sub_81376DC(u8 taskId); +static void hm2_flash(void); +static void sub_81371B4(void); +static bool8 sub_8137304(void); +static void sub_81373F0(void); +static void sub_8137404(u8 taskId); +static void sub_8137420(u8 taskId); +static void sub_81374C4(u8 taskId); +static void sub_813750C(u8 taskId); +static void sub_8137574(u8 taskId); +static void sub_81375A8(void); +static void sub_81375BC(u8 taskId); +static void sub_81375D8(u8 taskId); +static void sub_8137678(u8 taskId); +static void sub_81376DC(u8 taskId); // rodata -extern struct FlashStruct gUnknown_085B27C8[]; - -/*static const*/ extern u16 gCaveTransitionPalette_White[];// = {0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF, 0x7FFF}; -/*static const*/ extern u16 gCaveTransitionPalette_Black[];// = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}; +static const struct FlashStruct gUnknown_085B27C8[] = +{ + {1, 4, 1, 0, sub_81375A8}, + {2, 4, 1, 0, sub_81375A8}, + {3, 4, 1, 0, sub_81375A8}, + {5, 4, 1, 0, sub_81375A8}, + {6, 4, 1, 0, sub_81375A8}, + {7, 4, 1, 0, sub_81375A8}, + {8, 4, 1, 0, sub_81375A8}, + {9, 4, 1, 0, sub_81375A8}, + {4, 1, 0, 1, sub_81373F0}, + {4, 2, 0, 1, sub_81373F0}, + {4, 3, 0, 1, sub_81373F0}, + {4, 5, 0, 1, sub_81373F0}, + {4, 6, 0, 1, sub_81373F0}, + {4, 7, 0, 1, sub_81373F0}, + {4, 8, 0, 1, sub_81373F0}, + {4, 9, 0, 1, sub_81373F0}, + {0, 0, 0, 0, NULL}, +}; -/*static const*/ extern u16 gUnknown_085B2890[];// = INCBIN_U16("graphics/misc/83F808C.gbapal"); -/*static const*/ extern u16 gUnknown_085B28A0[];// = INCBIN_U16("graphics/misc/83F809C.gbapal"); -/*static const*/ extern u16 gCaveTransitionTilemap[];// = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz"); -/*static const*/ extern u8 gCaveTransitionTiles[];// = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); +static const u16 gCaveTransitionPalette_White[] = INCBIN_U16("graphics/misc/cave_transition_white.gbapal"); +static const u16 gCaveTransitionPalette_Black[] = INCBIN_U16("graphics/misc/cave_transition_black.gbapal"); -// ewram +static const u16 gUnknown_085B2890[] = INCBIN_U16("graphics/misc/85B2890.gbapal"); +static const u16 gUnknown_085B28A0[] = INCBIN_U16("graphics/misc/85B28A0.gbapal"); +static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz"); +static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz"); // text - bool8 SetUpFieldMove_Flash(void) { if(ShouldDoBrailleFlyEffect()) @@ -80,7 +92,7 @@ bool8 SetUpFieldMove_Flash(void) return FALSE; } -void hm2_flash(void) +static void hm2_flash(void) { u8 taskId = oei_task_add(); gFieldEffectArguments[0] = GetCursorSelectionMonId(); @@ -88,14 +100,14 @@ void hm2_flash(void) gTasks[taskId].data[9] = (uintptr_t)sub_81371B4; } -void sub_81371B4(void) +static void sub_81371B4(void) { PlaySE(SE_W115); FlagSet(FLAG_SYS_USE_FLASH); ScriptContext1_SetupScript(EventScript_2926F8); } -void sub_81371D4(void) +static void sub_81371D4(void) { RunTasks(); AnimateSprites(); @@ -103,7 +115,7 @@ void sub_81371D4(void) UpdatePaletteFade(); } -void sub_81371EC(void) +static void sub_81371EC(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -141,7 +153,7 @@ void c2_change_map(void) SetMainCallback2(gMain.savedCallback); } -bool8 sub_8137304(void) +static bool8 sub_8137304(void) { u8 i; u8 v0 = get_map_light_from_warp0(); @@ -193,17 +205,17 @@ bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2) return FALSE; } -void sub_81373F0(void) +static void sub_81373F0(void) { CreateTask(sub_8137404, 0); } -void sub_8137404(u8 taskId) +static void sub_8137404(u8 taskId) { gTasks[taskId].func = sub_8137420; } -void sub_8137420(u8 taskId) +static void sub_8137420(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); @@ -233,7 +245,7 @@ void sub_8137420(u8 taskId) gTasks[taskId].data[1] = 0; } -void sub_81374C4(u8 taskId) +static void sub_81374C4(u8 taskId) { u16 count = gTasks[taskId].data[1]; u16 blend = count + 0x1000; @@ -250,11 +262,11 @@ void sub_81374C4(u8 taskId) } } -void sub_813750C(u8 taskId) +static void sub_813750C(u8 taskId) { u16 count; - SetGpuReg(REG_OFFSET_BLDALPHA, 4112); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16)); count = gTasks[taskId].data[2]; if (count < 8) @@ -270,7 +282,7 @@ void sub_813750C(u8 taskId) } } -void sub_8137574(u8 taskId) +static void sub_8137574(u8 taskId) { if (gTasks[taskId].data[2]) gTasks[taskId].data[2]--; @@ -278,17 +290,17 @@ void sub_8137574(u8 taskId) SetMainCallback2(gMain.savedCallback); } -void sub_81375A8(void) +static void sub_81375A8(void) { CreateTask(sub_81375BC, 0); } -void sub_81375BC(u8 taskId) +static void sub_81375BC(u8 taskId) { gTasks[taskId].func = sub_81375D8; } -void sub_81375D8(u8 taskId) +static void sub_81375D8(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); @@ -313,7 +325,7 @@ void sub_81375D8(u8 taskId) gTasks[taskId].data[2] = 0; } -void sub_8137678(u8 taskId) +static void sub_8137678(u8 taskId) { u16 count = gTasks[taskId].data[2]; @@ -337,7 +349,7 @@ void sub_8137678(u8 taskId) } } -void sub_81376DC(u8 taskId) +static void sub_81376DC(u8 taskId) { u16 count = 16 - gTasks[taskId].data[1]; u16 blend = count + 0x1000; diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c index e16b01b6e..bee4d2c4b 100644 --- a/src/fldeff_groundshake.c +++ b/src/fldeff_groundshake.c @@ -7,17 +7,13 @@ #include "field_map_obj.h" #include "malloc.h" #include "random.h" +#include "roulette_util.h" #include "script.h" #include "sound.h" #include "sprite.h" #include "task.h" // structures -struct InnerStruct203CF18 -{ - u8 filler[0xC4]; -}; - struct Struct203CF18 { u8 taskId; struct InnerStruct203CF18 unk4; @@ -27,14 +23,6 @@ struct Struct203CF18 { extern const struct SpriteSheet gUnknown_08617D94[]; extern const s16 gUnknown_08617D64[][3]; -// extern functions -extern void sub_8151B68(struct InnerStruct203CF18 *, const u8*); -extern void sub_8151B3C(struct InnerStruct203CF18 *); -extern void sub_8151CA8(struct InnerStruct203CF18 *, u8, u8); -extern void sub_8151C50(struct InnerStruct203CF18 *, u8, u8); -extern void sub_8151D28(struct InnerStruct203CF18 *, u8, u8); -extern void sub_8151E50(struct InnerStruct203CF18 *); - // static functions static void sub_81BE808(u8 taskId); static void sub_81BE900(u8 taskId); diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index b61cf9f32..d0a40a9a9 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -9,10 +9,10 @@ #include "strings.h" #include "task.h" -void sub_816166C(u8 taskId); -void sub_81617B8(u8 taskId); -void sub_81616C0(u8 taskId); -void sub_8161724(u8 taskId); +static void sub_816166C(u8 taskId); +static void sub_81616C0(u8 taskId); +static void sub_8161724(u8 taskId); +static void sub_81617B8(u8 taskId); bool8 SetUpFieldMove_SoftBoiled(void) { @@ -63,13 +63,13 @@ void sub_81615A8(u8 taskId) sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C); } -void sub_816166C(u8 taskId) +static void sub_816166C(u8 taskId) { PlaySE(SE_KAIFUKU); sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0); } -void sub_81616C0(u8 taskId) +static void sub_81616C0(u8 taskId) { GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); @@ -78,7 +78,7 @@ void sub_81616C0(u8 taskId) gTasks[taskId].func = sub_8161724; } -void sub_8161724(u8 taskId) +static void sub_8161724(u8 taskId) { if(sub_81B1BD4() == 1) return; @@ -92,7 +92,7 @@ void sub_8161724(u8 taskId) gTasks[taskId].func = sub_81B1370; } -void sub_8161784(u8 taskId) +static void sub_8161784(u8 taskId) { if(sub_81B1BD4() == 1) return; @@ -100,7 +100,7 @@ void sub_8161784(u8 taskId) gTasks[taskId].func = sub_81B1370; } -void sub_81617B8(u8 taskId) +static void sub_81617B8(u8 taskId) { PlaySE(SE_SELECT); sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0); diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index c1965d983..162479c73 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -7,9 +7,11 @@ #include "script.h" #include "task.h" -void FldEff_UseStrength(void); -void sub_8145E74(void); +// static functions +static void FldEff_UseStrength(void); +static void sub_8145E74(void); +// text bool8 SetUpFieldMove_Strength(void) { if (npc_before_player_of_type(87) == TRUE) @@ -22,7 +24,7 @@ bool8 SetUpFieldMove_Strength(void) return FALSE; } -void FldEff_UseStrength(void) +static void FldEff_UseStrength(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); ScriptContext1_SetupScript(FieryPath_EventScript_2908FD); @@ -37,7 +39,7 @@ bool8 sub_8145E2C(void) return FALSE; } -void sub_8145E74(void) +static void sub_8145E74(void) { FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH); EnableBothScriptContexts(); -- cgit v1.2.3 From 2f9d69f67fef723e3a92bb19c73952f6896e27ad Mon Sep 17 00:00:00 2001 From: KDSKardabox Date: Thu, 1 Mar 2018 09:11:26 +0530 Subject: use free_and_set_null macros --- src/fldeff_flash.c | 2 +- src/fossil_specials.c | 27 +++++++++------------------ 2 files changed, 10 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index f31fe2b47..4f3a091ce 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -75,7 +75,7 @@ static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transitio // text bool8 SetUpFieldMove_Flash(void) { - if(ShouldDoBrailleFlyEffect()) + if (ShouldDoBrailleFlyEffect()) { gSpecialVar_Result = GetCursorSelectionMonId(); gUnknown_03005DB0 = FieldCallback_Teleport; diff --git a/src/fossil_specials.c b/src/fossil_specials.c index 926849cd9..95fafc17b 100644 --- a/src/fossil_specials.c +++ b/src/fossil_specials.c @@ -292,8 +292,7 @@ static void sub_81BED50(u8 taskId) } if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1)) { - Free(gUnknown_0203CF10[left].buffer); - gUnknown_0203CF10[left].buffer = NULL; + FREE_AND_SET_NULL(gUnknown_0203CF10[left].buffer); gTasks[taskId].data[2]++; if((left % 2) == 1) gUnknown_0203CF14[1]--; @@ -313,14 +312,10 @@ static void sub_81BED50(u8 taskId) sub_81BEB90(); break; case 5: - Free(gUnknown_0203CF14); - gUnknown_0203CF14 = NULL; - Free(gUnknown_0203CF10); - gUnknown_0203CF10 = NULL; - Free(gUnknown_0203CF04); - gUnknown_0203CF04 = NULL; - Free(gUnknown_0203CF08); - gUnknown_0203CF08 = NULL; + FREE_AND_SET_NULL(gUnknown_0203CF14); + FREE_AND_SET_NULL(gUnknown_0203CF10); + FREE_AND_SET_NULL(gUnknown_0203CF04); + FREE_AND_SET_NULL(gUnknown_0203CF08); break; case 6: SetGpuRegBits(REG_OFFSET_BG2CNT, 0x2); @@ -742,14 +737,10 @@ static void sub_81BF028(u8 taskId) if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) return; DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]); - Free(gUnknown_0203CF0C->unkC); - gUnknown_0203CF0C->unkC = NULL; - Free(gUnknown_0203CF0C->frameImage); - gUnknown_0203CF0C->frameImage = NULL; - Free(gUnknown_0203CF0C->frameImageTiles); - gUnknown_0203CF0C->frameImageTiles = NULL; - Free(gUnknown_0203CF0C); - gUnknown_0203CF0C = NULL; + FREE_AND_SET_NULL(gUnknown_0203CF0C->unkC);; + FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImage); + FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImageTiles); + FREE_AND_SET_NULL(gUnknown_0203CF0C); break; case 8: EnableBothScriptContexts(); -- cgit v1.2.3