Fix remaining issues in teachy_tv

This commit is contained in:
PikalaxALT
2019-06-10 22:14:25 -04:00
parent 03e47515e1
commit aa49880006
2 changed files with 125 additions and 412 deletions
+123 -406
View File
@@ -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)
void TeachyTvLoadBg3Map(u16 *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;
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);
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
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)
{
memset(FourMapTileBlocksTempBuf, 0, 0x80);
v13 = &mapArray[j];
if (*v13 <= 0x27F)
TeachyTvComputeMapTilesFromTilesetAndMetaTiles(
(u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)),
(u8 *)FourMapTileBlocksTempBuf,
(u8 *)tileset);
else
TeachyTvComputeMapTilesFromTilesetAndMetaTiles(
(u16 *)(16 * (*v13 - 0x280) + (u16*)(md->secondaryTileset->metatiles)),
(u8 *)FourMapTileBlocksTempBuf,
(u8 *)tileset);
CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20);
r7 = Alloc(sp10 * 0x80);
r5 = Alloc(0x80);
for (r4 = 0; r4 < sp10; r4++)
{
memset(r5, 0, 0x80);
if (r6[r4] < 0x280)
{
TeachyTvComputeMapTilesFromTilesetAndMetaTiles(layout->primaryTileset->metatiles + r6[r4] * 16, r5, sp08);
}
else
{
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);
LoadBgTiles(3, r7, sp10 * 0x80, 0);
TeachyTvLoadMapPalette(layout, sp0C);
Free(r5);
Free(r7);
Free(sp0C);
Free(sp08);
Free(r6);
}
#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\
");
}
#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)
{
+2 -6
View File
@@ -1638,12 +1638,8 @@ gUnknown_203F43C: @ 203F43C
gUnknown_203F440: @ 203F440
.space 0x4
gTeachyTV_StaticResources: @ 203F444
.space 12
gUnknown_203F450: @ 203F450
.space 0x4
.align 2
.include "src/teachy_tv.o"
.align 2
.include "src/unk_815C980.o"
.align 2