diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-10 22:14:25 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-10 22:14:25 -0400 |
commit | aa498800067ba2689ae5bf5433459ba088bfa83b (patch) | |
tree | fa818e8610731a92798a66278ff15fc3321486a7 /src | |
parent | 03e47515e153e7c8757bdb28de87f149d5022a82 (diff) |
Fix remaining issues in teachy_tv
Diffstat (limited to 'src')
-rw-r--r-- | src/teachy_tv.c | 531 |
1 files changed, 124 insertions, 407 deletions
diff --git a/src/teachy_tv.c b/src/teachy_tv.c index ca2e509a7..49e8d99c3 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -47,10 +47,10 @@ struct TeachyTvCtrlBlk struct TeachyTvBuf { MainCallback savedCallback; - u8 buffer1[0x1000]; - u8 buffer2[0x1000]; - u8 buffer3[0x1000]; - u8 buffer4[0x1000]; + u16 buffer1[0x800]; + u16 buffer2[0x800]; + u16 buffer3[0x800]; + u16 buffer4[0x800]; u8 var_4004; u8 var_4005; u8 var_4006; @@ -97,13 +97,13 @@ void TeachyTvBackToOptionList(u8 taskId); void TeachyTvSetupBagItemsByOptionChosen(void); void TeachyTvPrepBattle(u8 taskId); void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); -void TeachyTvLoadBg3Map(void *); +void TeachyTvLoadBg3Map(u16 *); u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); void TeachyTvRestorePlayerPartyCallback(void); void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size); -void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); +void TeachyTvPushBackNewMapPalIndexArrayEntry(const struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); @@ -403,16 +403,6 @@ void (* const gTeachyTvFuncCluster5[])(u8) = TeachyTvBackToOptionList, }; -void (* const * const gTeachyTvFuncClusterArray[])(u8) = -{ - gTeachyTvFuncCluster0, - gTeachyTvFuncCluster1, - gTeachyTvFuncCluster2, - gTeachyTvFuncCluster3, - gTeachyTvFuncCluster4, - gTeachyTvFuncCluster5, -}; - void TeachyTvCallback(void) { RunTasks(); @@ -537,13 +527,13 @@ void TeachyTvSetupBg(void) void TeachyTvLoadGraphic(void) { - u16 src = 0; + u16 src = RGB_BLACK; reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(1, gUnknown_8E86240, 0, 0, 0); LZDecompressWram(gUnknown_8E86BE8, gUnknown_203F450->buffer1); LZDecompressWram(gUnknown_8E86D6C, gUnknown_203F450->buffer4); LoadCompressedPalette(gUnknown_8E86F98, 0, 0x80); - LoadPalette(&src, 0, 2); + LoadPalette(&src, 0, sizeof(src)); LoadSpritePalette(&gUnknown_83A5348); TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); } @@ -573,7 +563,8 @@ u8 TeachyTvSetupWindow(void) return ListMenuInit( &gMultiuseListMenuTemplate, gTeachyTV_StaticResources.scrollOffset, - gTeachyTV_StaticResources.selectedRow); + gTeachyTV_StaticResources.selectedRow + ); } void TeachyTvSetupScrollIndicatorArrowPair(void) @@ -583,11 +574,10 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) struct TeachyTvBuf * temp = gUnknown_203F450; temp->var_4007 = 0xFF; } - - else { - u8 res = AddScrollIndicatorArrowPair(&gTeachyTvScrollIndicatorArrowPairTemplateArray, &(gTeachyTV_StaticResources.scrollOffset)); - gUnknown_203F450->var_4007 = res; - } + else + { + gUnknown_203F450->var_4007 = AddScrollIndicatorArrowPair(&gTeachyTvScrollIndicatorArrowPairTemplateArray, &(gTeachyTV_StaticResources.scrollOffset)); + } } void TeachyTvRemoveScrollIndicatorArrowPair(void) @@ -658,8 +648,7 @@ void TeachyTvBg2AnimController(void) void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { s16 *data = gTasks[taskId].data; - int v1 = data[1]; - struct Sprite *objAddr = &gSprites[v1]; + struct Sprite *objAddr = &gSprites[data[1]]; int op; ClearWindowTilemap(1); @@ -669,14 +658,14 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { if (op <= 3) { - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(data[1], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); ChangeBgY(3, 0x3000, 2); gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4005 -= 3; } else if (op <= 5) - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(data[1], 0x78, 0x38, 0); } data[4] = 0; @@ -684,12 +673,10 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x, objAddr->pos2.y, 0, 1); } -void TeachyTvInitTextPrinter(const char *text) +void TeachyTvInitTextPrinter(const u8 *text) { - u8 spd; gTextFlags.autoScroll = 0; - spd = GetTextSpeedSetting(); - AddTextPrinterParameterized2(0, 4, (const char *)text, spd, 0, 1, 0xC, 3); + AddTextPrinterParameterized2(0, 4, text, GetTextSpeedSetting(), 0, 1, 0xC, 3); } void TeachyTvFree(void) @@ -836,8 +823,16 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) } else { - void (* const * const *array)(u8) = gTeachyTvFuncClusterArray; - void (* const * const cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; + static void (* const * const array[])(u8) = + { + gTeachyTvFuncCluster0, + gTeachyTvFuncCluster1, + gTeachyTvFuncCluster2, + gTeachyTvFuncCluster3, + gTeachyTvFuncCluster4, + gTeachyTvFuncCluster5, + }; + void (*const *cluster)(u8) = array[gTeachyTV_StaticResources.optionChosen]; cluster[data[3]](taskId); } } @@ -845,8 +840,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const *texts = (const u8 *const []) - { + static const u8 *const texts[] = { gUnknown_841B8BF, gUnknown_841BB40, gUnknown_841BE76, @@ -861,7 +855,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const *texts = (const u8 *const []) + static const u8 *const texts[] = { gUnknown_841BA41, gUnknown_841BD10, @@ -936,14 +930,14 @@ const u8 gTeachyTvGrassAnimArray[] = void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0xCC); @@ -955,7 +949,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { s16 *data = gTasks[taskId].data; - StartSpriteAnim(&gSprites[(s16)data[1]], 5); + StartSpriteAnim(&gSprites[data[1]], 5); data[2] = 0; data[4] = 0; data[5] = 1; @@ -1082,7 +1076,6 @@ void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId) if (op <= 3) { TeachyTvPrepBattle(taskId); - } else if (op <= 5) { @@ -1105,76 +1098,62 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8 *funcIdx = gTeachyTvSwitchFuncArray; - int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; - data[3] = arg; + data[3] = gTeachyTvSwitchFuncArray[gTeachyTV_StaticResources.optionChosen]; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; } } void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode) { - int res; struct Sprite *obj; - int objId; - const struct SpriteTemplate *const *objTemAddr; + u8 spriteId; - u8 subprio = subpriority; - if (gUnknown_203F450->var_4006 != 1) + if (gUnknown_203F450->var_4006 != 1 && TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y)) { - res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); - if (res) + spriteId = CreateSprite(gUnknown_83A0010[4], 0, 0, subpriority); + obj = &gSprites[spriteId]; + obj->pos2.x = x; + obj->pos2.y = y + 8; + obj->callback = TeachyTvGrassAnimationObjCallback; + obj->data[0] = taskId; + if (mode == 1) { - objTemAddr = gUnknown_83A0010; - objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); - obj = gSprites + objId; - obj->pos2.x = x; - obj->pos2.y = y + 8; - obj->callback = TeachyTvGrassAnimationObjCallback; - obj->data[0] = taskId; - if (mode == 1) - { - SeekSpriteAnim(obj, 4); - obj->oam.priority = 2; - } - else - { - SetSubspriteTables(obj, gTeachyTvSubspriteTableArray); - obj->subspriteTableNum = 0; - obj->subspriteMode = 1; - } + SeekSpriteAnim(obj, 4); + obj->oam.priority = 2; + } + else + { + SetSubspriteTables(obj, gTeachyTvSubspriteTableArray); + obj->subspriteTableNum = 0; + obj->subspriteMode = 1; } } } void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) { - s16 diff1, diff2, *data = gTasks[sprite->data[0]].data; + s16 diff1, diff2; + s16 *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; + if (gUnknown_203F450->var_4006 == 1) DestroySprite(sprite); - else { - if (!sprite->animCmdIndex) + else + { + if (sprite->animCmdIndex == 0) sprite->subspriteTableNum = 1; else sprite->subspriteTableNum = 0; sprite->pos2.x += (u16)data[4]; sprite->pos2.y += (u16)data[5]; - if (!sprite->animEnded) - return; - sprite->subpriority = 0; - diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); - diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); - diff1 += 0xF; - if ((u16)diff1 <= 0x1E) + if (sprite->animEnded) { - if (diff2 > -0x10) - { - if (diff2 <= 0x17) - return; - } + sprite->subpriority = 0; + diff1 = sprite->pos2.x - objAddr->pos2.x; + diff2 = sprite->pos2.y - objAddr->pos2.y; + if (diff1 <= -16 || diff1 >= 16 || diff2 <= -16 || diff2 >= 24) + DestroySprite(sprite); } - DestroySprite(sprite); } } @@ -1237,337 +1216,74 @@ void TeachyTvRestorePlayerPartyCallback(void) CB2_ReturnToTeachyTV(); } -#ifdef NONMATCHING -void TeachyTvLoadBg3Map(void *buffer) -{ - u16 *mapArray; - int v2; - int v3; - int v4; - int v5; - int mapEntry; - int v7; - u16 v8; - int i; - char *MapTileBlockBuf; - void *FourMapTileBlocksTempBuf; - unsigned int j; - u16 *v13; - u8 *v14; - void *tileset; - u8 *palIndexArray; - unsigned int v17; - u32 v18; - int v19; - struct MapData * md; - - md = &Route1_Layout; - v14 = (u8 *)buffer; - v17 = 0; - mapArray = (u16 *)AllocZeroed(0x800); - tileset = AllocZeroed(0x8000); - palIndexArray = Alloc(0x10); - memset(palIndexArray, 0xFF, 0x10); - TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280); - TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180); - v2 = 0; - do +void TeachyTvLoadBg3Map(u16 *buffer) +{ + u16 * r7; + u8 * r5; + u16 r4, r2, r3; + u16 r4_1; + void * sp08; + void * sp0C; + u16 sp10 = 0; + const struct MapData *layout = &Route1_Layout; // r8 + u16 * r6 = AllocZeroed(0x800); + sp08 = AllocZeroed(0x8000); + sp0C = Alloc(16); + memset(sp0C, 0xFF, 16); + + TeachyTvLoadMapTilesetToBuffer(layout->primaryTileset, sp08, 0x280); + TeachyTvLoadMapTilesetToBuffer(layout->secondaryTileset, sp08 + 0x5000, 0x180); + + for (r4 = 0; r4 < 9; r4++) { - v3 = 0; - v19 = v2 + 6; - v4 = 16 * v2; - v5 = v2 << 6; - v18 = v2 + 1; - do + // sp+18 = r4 + 6 + // r10 = r4 << 4 + // r9 = r4 << 6 + // sp14 <- r4++ + for (r2 = 0; r2 < 16; r2++) { - mapEntry = md->map[v3 + 24 * v19 + 8] & 0x3FF; - v7 = 0; - v8 = v3 + 1; - if (v4 + v3 <= 0) + r4_1 = layout->map[8 + (r4 + 6) * layout->width + r2] & 0x3FF; + for (r3 = 0; r3 < (r4 << 4) + r2; r3++) { -LABEL_9: - if (mapArray[v7]) - goto LABEL_11; + if (r6[r3] == 0) + break; + if (r6[r3] == r4_1) + break; } - else + if (r6[r3] == 0) { - for (i = *mapArray; i; i = mapArray[v7]) - { - if (i == mapEntry) - goto LABEL_9; - v7 = (u16)(v7 + 1); - if (v7 >= v4 + v3) - goto LABEL_9; - } + r6[r3] = r4_1; + sp10++; } - mapArray[v7] = mapEntry; - v17 = (u16)(v17 + 1); -LABEL_11: - TeachyTvPushBackNewMapPalIndexArrayEntry( - md, - (u16 *)&v14[2 * (v5 + 2 * v3)], - palIndexArray, - mapEntry, - v7); - v3 = v8; + TeachyTvPushBackNewMapPalIndexArrayEntry(layout, &buffer[64 * r4 + 2 * r2], sp0C, r4_1, r3); } - while ((u16)v8 <= 0xF); - v2 = v18; } - while ((u16)v18 <= 8); - MapTileBlockBuf = (char *)Alloc(v17 << 7); - FourMapTileBlocksTempBuf = Alloc(0x80); - for (j = 0; j < v17; j = (u16)j + 1) + + r7 = Alloc(sp10 * 0x80); + r5 = Alloc(0x80); + for (r4 = 0; r4 < sp10; r4++) { - memset(FourMapTileBlocksTempBuf, 0, 0x80); - v13 = &mapArray[j]; - if (*v13 <= 0x27F) - TeachyTvComputeMapTilesFromTilesetAndMetaTiles( - (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), - (u8 *)FourMapTileBlocksTempBuf, - (u8 *)tileset); + memset(r5, 0, 0x80); + if (r6[r4] < 0x280) + { + TeachyTvComputeMapTilesFromTilesetAndMetaTiles(layout->primaryTileset->metatiles + r6[r4] * 16, r5, sp08); + } else - TeachyTvComputeMapTilesFromTilesetAndMetaTiles( - (u16 *)(16 * (*v13 - 0x280) + (u16*)(md->secondaryTileset->metatiles)), - (u8 *)FourMapTileBlocksTempBuf, - (u8 *)tileset); - - CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20); + { + TeachyTvComputeMapTilesFromTilesetAndMetaTiles(layout->secondaryTileset->metatiles + (r6[r4] - 0x280) * 16, r5, sp08); + } + CpuFastCopy(r5, r7 + r4 * 0x40, 0x80); } - LoadBgTiles(3, MapTileBlockBuf, (u16)v17 << 7, 0); - TeachyTvLoadMapPalette(&Route1_Layout, palIndexArray); - Free(FourMapTileBlocksTempBuf); - Free(MapTileBlockBuf); - Free(palIndexArray); - Free(tileset); - Free(mapArray); -} -#else -NAKED -void TeachyTvLoadBg3Map(void *buffer) -{ - asm_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, 0x1C\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0\n\ - str r0, [sp, 0x10]\n\ - ldr r1, _0815BE1C @ =Route1_Layout\n\ - mov r8, r1\n\ - movs r0, 0x80\n\ - lsls r0, 4\n\ - bl AllocZeroed\n\ - adds r6, r0, 0\n\ - movs r0, 0x80\n\ - lsls r0, 8\n\ - bl AllocZeroed\n\ - str r0, [sp, 0x8]\n\ - movs r0, 0x10\n\ - bl Alloc\n\ - str r0, [sp, 0xC]\n\ - movs r1, 0xFF\n\ - movs r2, 0x10\n\ - bl memset\n\ - mov r2, r8\n\ - ldr r0, [r2, 0x10]\n\ - movs r2, 0xA0\n\ - lsls r2, 2\n\ - ldr r1, [sp, 0x8]\n\ - bl TeachyTvLoadMapTilesetToBuffer\n\ - mov r3, r8\n\ - ldr r0, [r3, 0x14]\n\ - ldr r2, [sp, 0x8]\n\ - movs r3, 0xA0\n\ - lsls r3, 7\n\ - adds r1, r2, r3\n\ - movs r2, 0xC0\n\ - lsls r2, 1\n\ - bl TeachyTvLoadMapTilesetToBuffer\n\ - movs r4, 0\n\ - _0815BDDE:\n\ - movs r2, 0\n\ - adds r0, r4, 0x6\n\ - str r0, [sp, 0x18]\n\ - lsls r1, r4, 4\n\ - mov r10, r1\n\ - lsls r3, r4, 6\n\ - mov r9, r3\n\ - adds r4, 0x1\n\ - str r4, [sp, 0x14]\n\ - _0815BDF0:\n\ - mov r1, r8\n\ - ldr r0, [r1]\n\ - ldr r3, [sp, 0x18]\n\ - muls r0, r3\n\ - ldr r1, [r1, 0xC]\n\ - adds r0, r2, r0\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r1, [r0, 0x10]\n\ - ldr r3, _0815BE20 @ =0x000003ff\n\ - adds r0, r3, 0\n\ - adds r4, r0, 0\n\ - ands r4, r1\n\ - movs r3, 0\n\ - mov r0, r10\n\ - adds r1, r0, r2\n\ - lsls r5, r2, 1\n\ - adds r7, r2, 0x1\n\ - cmp r3, r1\n\ - bge _0815BE3C\n\ - ldrh r0, [r6]\n\ - b _0815BE34\n\ - .align 2, 0\n\ - _0815BE1C: .4byte Route1_Layout\n\ - _0815BE20: .4byte 0x000003ff\n\ - _0815BE24:\n\ - adds r0, r3, 0x1\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - cmp r3, r1\n\ - bge _0815BE3C\n\ - lsls r0, r3, 1\n\ - adds r0, r6\n\ - ldrh r0, [r0]\n\ - _0815BE34:\n\ - cmp r0, 0\n\ - beq _0815BE46\n\ - cmp r0, r4\n\ - bne _0815BE24\n\ - _0815BE3C:\n\ - lsls r0, r3, 1\n\ - adds r0, r6\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - bne _0815BE56\n\ - _0815BE46:\n\ - lsls r0, r3, 1\n\ - adds r0, r6\n\ - strh r4, [r0]\n\ - ldr r0, [sp, 0x10]\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - str r0, [sp, 0x10]\n\ - _0815BE56:\n\ - mov r2, r9\n\ - adds r1, r2, r5\n\ - lsls r1, 1\n\ - ldr r0, [sp, 0x4]\n\ - adds r1, r0, r1\n\ - str r3, [sp]\n\ - mov r0, r8\n\ - ldr r2, [sp, 0xC]\n\ - adds r3, r4, 0\n\ - bl TeachyTvPushBackNewMapPalIndexArrayEntry\n\ - lsls r0, r7, 16\n\ - lsrs r2, r0, 16\n\ - cmp r2, 0xF\n\ - bls _0815BDF0\n\ - ldr r1, [sp, 0x14]\n\ - lsls r0, r1, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x8\n\ - bls _0815BDDE\n\ - ldr r2, [sp, 0x10]\n\ - lsls r0, r2, 7\n\ - bl Alloc\n\ - adds r7, r0, 0\n\ - movs r0, 0x80\n\ - bl Alloc\n\ - adds r5, r0, 0\n\ - movs r4, 0\n\ - ldr r3, [sp, 0x10]\n\ - lsls r3, 23\n\ - mov r9, r3\n\ - ldr r0, [sp, 0x10]\n\ - cmp r4, r0\n\ - bcs _0815BF00\n\ - ldr r1, _0815BECC @ =0x0000027f\n\ - mov r10, r1\n\ - _0815BEA2:\n\ - adds r0, r5, 0\n\ - movs r1, 0\n\ - movs r2, 0x80\n\ - bl memset\n\ - lsls r0, r4, 1\n\ - adds r1, r0, r6\n\ - ldrh r0, [r1]\n\ - cmp r0, r10\n\ - bhi _0815BED0\n\ - mov r2, r8\n\ - ldr r0, [r2, 0x10]\n\ - ldrh r1, [r1]\n\ - lsls r1, 4\n\ - ldr r0, [r0, 0xC]\n\ - adds r0, r1\n\ - adds r1, r5, 0\n\ - ldr r2, [sp, 0x8]\n\ - bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ - b _0815BEE8\n\ - .align 2, 0\n\ - _0815BECC: .4byte 0x0000027f\n\ - _0815BED0:\n\ - mov r3, r8\n\ - ldr r0, [r3, 0x14]\n\ - ldrh r1, [r1]\n\ - ldr r2, _0815BF44 @ =0xfffffd80\n\ - adds r1, r2\n\ - lsls r1, 4\n\ - ldr r0, [r0, 0xC]\n\ - adds r0, r1\n\ - adds r1, r5, 0\n\ - ldr r2, [sp, 0x8]\n\ - bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ - _0815BEE8:\n\ - lsls r1, r4, 7\n\ - adds r1, r7, r1\n\ - adds r0, r5, 0\n\ - movs r2, 0x20\n\ - bl CpuFastSet\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r3, [sp, 0x10]\n\ - cmp r4, r3\n\ - bcc _0815BEA2\n\ - _0815BF00:\n\ - mov r0, r9\n\ - lsrs r2, r0, 16\n\ - movs r0, 0x3\n\ - adds r1, r7, 0\n\ - movs r3, 0\n\ - bl LoadBgTiles\n\ - mov r0, r8\n\ - ldr r1, [sp, 0xC]\n\ - bl TeachyTvLoadMapPalette\n\ - adds r0, r5, 0\n\ - bl Free\n\ - adds r0, r7, 0\n\ - bl Free\n\ - ldr r0, [sp, 0xC]\n\ - bl Free\n\ - ldr r0, [sp, 0x8]\n\ - bl Free\n\ - adds r0, r6, 0\n\ - bl Free\n\ - add sp, 0x1C\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\ - .align 2, 0\n\ - _0815BF44: .4byte 0xfffffd80\n\ - "); + + LoadBgTiles(3, r7, sp10 * 0x80, 0); + TeachyTvLoadMapPalette(layout, sp0C); + + Free(r5); + Free(r7); + Free(sp0C); + Free(sp08); + Free(r6); } -#endif void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) { @@ -1580,7 +1296,7 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) } } -void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) +void TeachyTvPushBackNewMapPalIndexArrayEntry(const struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; @@ -1604,8 +1320,9 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { - u8 i, j, * src, *buffer = (u8 *)AllocZeroed(0x20); - src = AllocZeroed(0x20); + u8 i, j; + u8 * buffer = AllocZeroed(0x20); + u8 * src = AllocZeroed(0x20); CpuFastSet(tileset, buffer, 8); if (metaTile & 1) { |