diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-11-18 21:38:57 +0100 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-11-18 21:38:57 +0100 |
commit | 185402fe213935c577a64684e28df2a8850066c1 (patch) | |
tree | 67e92b1f1c0b2f50b1e94f218fa6272ad1f256f2 /src | |
parent | 8fd30813062f9588529461f44df333a6bcfde411 (diff) |
more work on berry blender
Diffstat (limited to 'src')
-rw-r--r-- | src/berry_blender.c | 686 |
1 files changed, 658 insertions, 28 deletions
diff --git a/src/berry_blender.c b/src/berry_blender.c index f626fef91..21706d4dc 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -20,6 +20,8 @@ #include "berry.h" #include "items.h" #include "string_util.h" +#include "international_string_util.h" +#include "rng.h" // Static type declarations #define BLENDER_SCORE_BEST 0 @@ -111,12 +113,10 @@ struct BerryBlenderData u8 field_41; u8 field_42; u8 field_43; - u8 field_44; - u8 field_45; + u16 field_44; u8 field_46; u8 field_47; - u8 field_48; - u8 field_49; + u16 field_48; u16 arrowPos; s16 field_4C; s16 field_4E; @@ -165,23 +165,8 @@ struct BerryBlenderData u8 field_8B; u8 field_8C; u8 field_8D; - u8 field_8E; - u8 field_8F; - - u8 field_90; - u8 field_91; - u8 field_92; - u8 field_93; - u8 field_94; - u8 field_95; - u8 field_96; - u8 field_97; - u8 field_98; - u8 field_99; - u8 field_9A; - u8 field_9B; - u8 field_9C; - u8 field_9D; + u16 field_8E[BLENDER_MAX_PLAYERS]; + u16 field_96[BLENDER_MAX_PLAYERS]; u8 field_9E; u8 field_9F; @@ -307,9 +292,7 @@ struct BerryBlenderData s16 field_11C; s16 field_11E; - u8 field_120; - u8 field_121; - u8 field_122; + u8 field_120[3]; u8 field_123; u16 scores[BLENDER_MAX_PLAYERS][BLENDER_SCORES_NO]; u8 field_13C; @@ -388,16 +371,19 @@ extern void sub_8197DF8(u8 windowId, bool8 copyToVram); extern void sub_809882C(u8, u16, u8); extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8); extern void sub_81AABF0(void (*callback)(void)); +extern void sub_800B4C0(void); // this file's functions void BerryBlender_SetGpuRegs(void); void sub_8080EA4(u8 taskId); void sub_8080FD0(u8 taskId); void sub_80810F8(u8 taskId); +void sub_8081224(u8 taskId); void sub_80833F8(struct Sprite *sprite); void sub_8082F68(struct Sprite *sprite); void sub_8083010(struct Sprite *sprite); void sub_80830C0(struct Sprite *sprite); +void sub_8082F9C(struct Sprite *sprite); void Blender_SetPlayerNamesLocal(u8 opponentsNum); void sub_807FAC8(void); void sub_8082D28(void); @@ -410,8 +396,13 @@ void sub_8081898(void); void sub_8082CB4(struct BgAffineSrcData *bgAffineSrc); bool8 sub_8083380(void); void sub_808074C(void); -void sub_80807BC(void); +void Blender_PrintPlayerNames(void); void sub_8080588(void); +void Blender_SetBankBerryData(u8 bank, u16 itemId); +void Blender_AddTextPrinter(u8 windowId, const u8 *string, u8 width, s8 x, s8 y, s32 state); +void sub_8080DF8(void); +void sub_8082E84(void); +void sub_80832BC(s16* a0, u16 a1); extern struct BerryBlenderData *sBerryBlenderData; @@ -972,12 +963,12 @@ const s16 gUnknown_08339C78[][5] = {250, 140, 10, -2, -1}, }; -const u8 gUnknown_08339CA0[][3] = +static const u8 sOpponentBerrySets[][3] = { {4, 3, 2}, {0, 4, 3}, {1, 0, 4}, {2, 1, 0}, {3, 2, 1}, {0, 2, 3}, {1, 3, 4}, {2, 4, 0}, {3, 0, 1}, {4, 1, 2}, }; -const u8 gUnknown_08339CBE[] = {30, 31, 32, 33, 34}; +static const u8 sSpecialOpponentBerrySets[] = {30, 31, 32, 33, 34}; const u8 gUnknown_08339CC3[] = {1, 1, 2, 3, 4}; @@ -1471,7 +1462,7 @@ void sub_8080018(void) sBerryBlenderData->framesToWait = 0; PlaySE(SE_TRACK_DOOR); sub_808074C(); - sub_80807BC(); + Blender_PrintPlayerNames(); } sub_8082CB4(&sBerryBlenderData->bgAffineSrc); break; @@ -1520,3 +1511,642 @@ void sub_8080018(void) RunTextPrinters(); UpdatePaletteFade(); } + +void sub_8080588(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + + SetVBlankCallback(VBlankCB0_BerryBlender); + + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(1, sBerryBlenderBgTemplates, ARRAY_COUNT(sBerryBlenderBgTemplates)); + + SetBgTilemapBuffer(1, sBerryBlenderData->tilemapBuffers[0]); + SetBgTilemapBuffer(2, sBerryBlenderData->tilemapBuffers[1]); + + sub_809882C(0, 1, 0xD0); + copy_textbox_border_tile_patterns_to_vram(0, 0x14, 0xF0); + InitBerryBlenderWindows(); + + sBerryBlenderData->field_44 = 0; + sBerryBlenderData->field_4C = 0; + sBerryBlenderData->arrowPos = 0; + sBerryBlenderData->field_4E = 0; + sBerryBlenderData->field_11C = 0; + sBerryBlenderData->field_11E = 0; +} + +u8 sub_8080624(u16 arrowPos, u8 playerId) +{ + u32 var1 = (arrowPos / 256) + 24; + u8 arrID = sBerryBlenderData->field_96[playerId]; + u32 var2 = gUnknown_083399E7[arrID]; + + if (var1 >= var2 && var1 < var2 + 48) + { + if (var1 >= var2 + 20 && var1 < var2 + 28) + return 2; + else + return 1; + } + + return 0; +} + +void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum, struct BlenderBerry* playerBerry) +{ + u16 opponentSetId = 0; + u16 opponentBerryId; + u16 var; + u16 i; + + if (playerBerryItemId == ITEM_ENIGMA_BERRY) + { + for (i = 0; i < FLAVOUR_COUNT; i++) + { + if (playerBerry->flavours[opponentSetId] > playerBerry->flavours[i]) + opponentSetId = i; + } + opponentSetId += 5; + } + else + { + opponentSetId = playerBerryItemId - FIRST_BERRY_INDEX; + if (opponentSetId >= 5) + opponentSetId = (opponentSetId % 5) + 5; + } + for (i = 0; i < playersNum - 1; i++) + { + opponentBerryId = sOpponentBerrySets[opponentSetId][i]; + var = playerBerryItemId - 163; + if (!FlagGet(0x340) && gSpecialVar_0x8004 == 1) + { + opponentSetId %= 5; + opponentBerryId = sSpecialOpponentBerrySets[opponentSetId]; + if (var <= 4) + opponentBerryId -= 5; + } + Blender_SetBankBerryData(i + 1, opponentBerryId + FIRST_BERRY_INDEX); + } +} + +void sub_808074C(void) +{ + s32 i, j; + + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_96[i] = 0xFF; + sBerryBlenderData->field_8E[i] = gUnknown_083399D0[sBerryBlenderData->playersNo - 2][i]; + } + for (j = 0; j < BLENDER_MAX_PLAYERS; j++) + { + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->field_8E[i] == j) + sBerryBlenderData->field_96[j] = i; + } + } +} + +void Blender_PrintPlayerNames(void) +{ + s32 i, width; + u32 multiplayerId = 0; + u8 text[20]; + + if (gReceivedRemoteLinkPlayers) + multiplayerId = GetMultiplayerId(); + + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->field_8E[i] != 0xFF) + { + sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]] = sBerryBlenderData->syncArrowSprite2Ids[i]; + StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSpriteIds[sBerryBlenderData->field_8E[i]]], i); + + text[0] = EOS; + StringCopy(text, gLinkPlayers[sBerryBlenderData->field_8E[i]].name); + width = GetStringCenterAlignXOffset(1, text, 0x38); + + if (multiplayerId == sBerryBlenderData->field_8E[i]) + Blender_AddTextPrinter(i, text, width, 1, 0, 2); + else + Blender_AddTextPrinter(i, text, width, 1, 0, 1); + + PutWindowTilemap(i); + CopyWindowToVram(i, 3); + } + } +} + +void sub_80808D4(void) +{ + s32 i, j; + + switch (sBerryBlenderData->mainState) + { + case 0: + sub_800B4C0(); + sub_8080588(); + Blender_SetBankBerryData(0, gSpecialVar_ItemId); + Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); + Blender_SetOpponentsBerryData(gSpecialVar_ItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]); + + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_64[i] = 0; + for (j = 0; j < 3; j++) + { + sBerryBlenderData->scores[i][j] = 0; + } + } + + sBerryBlenderData->field_70 = 0; + sBerryBlenderData->loadGfxState = 0; + gLinkType = 0x4422; + sBerryBlenderData->mainState++; + break; + case 1: + if (LoadBerryBlenderGfx()) + { + sBerryBlenderData->mainState++; + sub_8082D28(); + } + break; + case 2: + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->syncArrowSprite2Ids[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[sBerryBlenderData->syncArrowSprite2Ids[i]], i + 8); + } + sBerryBlenderData->mainState++; + break; + case 3: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + sBerryBlenderData->mainState++; + sBerryBlenderData->framesToWait = 0; + break; + case 4: + if (++sBerryBlenderData->framesToWait == 2) + sub_807F9D0(); + if (!gPaletteFade.active) + sBerryBlenderData->mainState = 8; + break; + case 8: + sBerryBlenderData->mainState = 11; + sBerryBlenderData->field_114 = 0; + break; + case 11: + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + u32 var = gUnknown_083399D0[sBerryBlenderData->playersNo - 2][i]; + if (sBerryBlenderData->field_114 == var) + { + sub_807FD90(sBerryBlenderData->chosenItemId[sBerryBlenderData->field_114], i); + break; + } + } + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->mainState++; + sBerryBlenderData->field_114++; + break; + case 12: + if (++sBerryBlenderData->framesToWait > 60) + { + if (sBerryBlenderData->field_114 >= sBerryBlenderData->playersNo) + { + sBerryBlenderData->arrowPos = gUnknown_083399DC[gUnknown_083399E4[sBerryBlenderData->playersNo - 2]] - 22528; + sBerryBlenderData->mainState++; + } + else + { + sBerryBlenderData->mainState--; + } + sBerryBlenderData->framesToWait = 0; + } + break; + case 13: + sBerryBlenderData->mainState++; + sub_808074C(); + PlaySE(SE_RU_HYUU); + sub_8082CB4(&sBerryBlenderData->bgAffineSrc); + ShowBg(2); + break; + case 14: + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); + sBerryBlenderData->arrowPos += 0x200; + sBerryBlenderData->field_11A += 4; + if (sBerryBlenderData->field_11A > 255) + { + sBerryBlenderData->mainState++; + sBerryBlenderData->field_11A = 256; + sBerryBlenderData->arrowPos = gUnknown_083399DC[gUnknown_083399E4[sBerryBlenderData->playersNo - 2]]; + SetGpuRegBits(REG_OFFSET_BG2CNT, 2); + sBerryBlenderData->framesToWait = 0; + PlaySE(SE_TRACK_DOOR); + Blender_PrintPlayerNames(); + } + sub_8082CB4(&sBerryBlenderData->bgAffineSrc); + break; + case 15: + if (sub_8083380()) + { + sBerryBlenderData->mainState++; + } + sub_8082CB4(&sBerryBlenderData->bgAffineSrc); + break; + case 16: + CreateSprite(&gUnknown_08339C2C, 120, -16, 3); + sBerryBlenderData->mainState++; + break; + case 18: + sBerryBlenderData->mainState++; + break; + case 19: + sBerryBlenderData->mainState++; + break; + case 20: + sBerryBlenderData->mainState++; + break; + case 21: + sub_8080DF8(); + sBerryBlenderData->field_4C = 128; + sBerryBlenderData->gameFrameTime = 0; + sBerryBlenderData->field_123 = 0; + sBerryBlenderData->field_72 = 0; + SetMainCallback2(sub_8081898); + + if (gSpecialVar_0x8004 == 1) + { + if (!FlagGet(FLAG_340)) + sBerryBlenderData->field_120[0] = CreateTask(sub_8081224, 10); + else + sBerryBlenderData->field_120[0] = CreateTask(gUnknown_083399EC[0], 10); + } + + if (gSpecialVar_0x8004 > 1) + { + for (i = 0; i < gSpecialVar_0x8004; i++) + sBerryBlenderData->field_120[i] = CreateTask(gUnknown_083399EC[i], 10 + i); + } + + if (GetCurrentMapMusic() != BGM_CYCLING) + sBerryBlenderData->field_154 = GetCurrentMapMusic(); + + PlayBGM(BGM_CYCLING); + PlaySE(SE_MOTER); + Blender_ControlHitPitch(); + break; + } + + Blender_DummiedOutFunc(sBerryBlenderData->field_11C, sBerryBlenderData->field_11E); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); +} + +void sub_8080DF8(void) +{ + s32 i; + for (i = 0; i < 4; i++) + { + gSendCmd[0] = 0; + gSendCmd[2] = 0; + gRecvCmds[i][0] = 0; + gRecvCmds[i][2] = 0; + } +} + +void sub_8080E20(u8 taskId) +{ + if(++gTasks[taskId].data[0] > gTasks[taskId].data[1]) + { + gRecvCmds[gTasks[taskId].data[2]][2] = 0x2345; + DestroyTask(taskId); + } +} + +void sub_8080E6C(u8 a0, u8 a1) +{ + u8 taskId = CreateTask(sub_8080E20, 80); + gTasks[taskId].data[1] = a1; + gTasks[taskId].data[2] = a0; +} + +void sub_8080EA4(u8 taskId) +{ + if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2) + { + if (gTasks[taskId].data[0] == 0) + { + if (sBerryBlenderData->field_123 == 0) + { + u8 rand = Random() / 655; + if (sBerryBlenderData->field_4C < 500) + { + if (rand > 75) + gRecvCmds[1][2] = 0x4523; + else + gRecvCmds[1][2] = 0x5432; + + gRecvCmds[1][2] = 0x5432; + } + else if (sBerryBlenderData->field_4C < 1500) + { + if (rand > 80) + { + gRecvCmds[1][2] = 0x4523; + } + else + { + u8 value = rand - 21; + if (value < 60) + gRecvCmds[1][2] = 0x5432; + else if (rand < 10) + sub_8080E6C(1, 5); + } + } + else if (rand <= 90) + { + u8 value = rand - 71; + if (value < 20) + gRecvCmds[1][2] = 0x5432; + else if (rand < 30) + sub_8080E6C(1, 5); + } + else + { + gRecvCmds[1][2] = 0x4523; + } + } + else + { + gRecvCmds[1][2] = 0x4523; + } + + gTasks[taskId].data[0] = 1; + } + } + else + { + gTasks[taskId].data[0] = 0; + } +} + +void sub_8080FD0(u8 taskId) +{ + u32 var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; + u32 var2 = sBerryBlenderData->field_96[2] & 0xFF; + if ((var1 >> 8) > gUnknown_083399E7[var2] + 20 && (var1 >> 8) < gUnknown_083399E7[var2] + 40) + { + if (gTasks[taskId].data[0] == 0) + { + if (sBerryBlenderData->field_123 == 0) + { + u8 rand = Random() / 655; + if (sBerryBlenderData->field_4C < 500) + { + if (rand > 66) + gRecvCmds[2][2] = 0x4523; + else + gRecvCmds[2][2] = 0x5432; + } + else + { + u8 value; + if (rand > 65) + gRecvCmds[2][2] = 0x4523; + value = rand - 41; + if (value < 25) + gRecvCmds[2][2] = 0x5432; + if (rand < 10) + sub_8080E6C(2, 5); + } + + gTasks[taskId].data[0] = 1; + } + else + { + gRecvCmds[2][2] = 0x4523; + gTasks[taskId].data[0] = 1; + } + } + } + else + { + gTasks[taskId].data[0] = 0; + } +} + +void sub_80810F8(u8 taskId) +{ + u32 var1, var2; + + var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; + var2 = sBerryBlenderData->field_96[3] & 0xFF; + if ((var1 >> 8) > gUnknown_083399E7[var2] + 20 && (var1 >> 8) < gUnknown_083399E7[var2] + 40) + { + if (gTasks[taskId].data[0] == 0) + { + if (sBerryBlenderData->field_123 == 0) + { + u8 rand = (Random() / 655); + if (sBerryBlenderData->field_4C < 500) + { + if (rand > 88) + gRecvCmds[3][2] = 0x4523; + else + gRecvCmds[3][2] = 0x5432; + } + else + { + if (rand > 60) + { + gRecvCmds[3][2] = 0x4523; + } + else + { + s8 value = rand - 56; // makes me wonder what the original code was + u8 value2 = value; + if (value2 < 5) + gRecvCmds[3][2] = 0x5432; + } + if (rand < 5) + sub_8080E6C(3, 5); + } + gTasks[taskId].data[0] = 1; + } + else + { + gRecvCmds[3][2] = 0x4523; + gTasks[taskId].data[0] = 1; + } + } + } + else + { + gTasks[taskId].data[0] = 0; + } +} + +void sub_8081224(u8 taskId) +{ + if (sub_8080624(sBerryBlenderData->arrowPos, 1) == 2) + { + if (gTasks[taskId].data[0] == 0) + { + gRecvCmds[1][2] = 0x4523; + gTasks[taskId].data[0] = 1; + } + } + else + { + gTasks[taskId].data[0] = 0; + } +} + +void sub_8081288(u16 a0, u8 a1) +{ + u8 spriteId; + + spriteId = CreateSprite(&gUnknown_08339B40, + sBlenderSyncArrowsPos[a1][0] - (10 * gUnknown_083399C0[a1][0]), + sBlenderSyncArrowsPos[a1][1] - (10 * gUnknown_083399C0[a1][1]), + 1); + if (a0 == 0x4523) + { + StartSpriteAnim(&gSprites[spriteId], 2); + gSprites[spriteId].callback = sub_8082F9C; + PlaySE(SE_RU_GASHIN); + } + else if (a0 == 0x5432) + { + StartSpriteAnim(&gSprites[spriteId], 0); + PlaySE(SE_SEIKAI); + } + else if (a0 == 0x2345) + { + StartSpriteAnim(&gSprites[spriteId], 1); + PlaySE(SE_HAZURE); + } + sub_8082E84(); +} + +void sub_8081370(u16 a0) +{ + Blender_ControlHitPitch(); + switch (a0) + { + case 0x4523: + if (sBerryBlenderData->field_4C < 1500) + sBerryBlenderData->field_4C += (384 / gUnknown_08339CC3[sBerryBlenderData->playersNo]); + else + { + sBerryBlenderData->field_4C += (128 / gUnknown_08339CC3[sBerryBlenderData->playersNo]); + sub_80832BC(&sBerryBlenderData->field_11C, (sBerryBlenderData->field_4C / 100) - 10); + sub_80832BC(&sBerryBlenderData->field_11E, (sBerryBlenderData->field_4C / 100) - 10); + } + break; + case 0x5432: + if (sBerryBlenderData->field_4C < 1500) + sBerryBlenderData->field_4C += (256 / gUnknown_08339CC3[sBerryBlenderData->playersNo]); + break; + case 0x2345: + sBerryBlenderData->field_4C -= (256 / gUnknown_08339CC3[sBerryBlenderData->playersNo]); + if (sBerryBlenderData->field_4C < 128) + sBerryBlenderData->field_4C = 128; + break; + } +} + +bool32 sub_80814B0(u16 arg0, u16 arg1, u16 arg2) +{ + if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled) + { + if ((arg0 & 0xFF00) == arg2) + return TRUE; + } + else + { + if (arg0 == arg1) + return TRUE; + } + + return FALSE; +} + +/* +void sub_80814B0(void) +{ + s32 i; + + if (gSpecialVar_0x8004 != 0) + { + if (gSendCmd[2] != 0) + { + gRecvCmds[2][0] = gSendCmd[2]; + gRecvCmds[0][0] = 0x4444; + gSendCmd[2] = 0; + } + for (i = 1; i < 4; i++) + { + if (gRecvCmds[2][i] != 0) + gRecvCmds[0][i] = 0x4444; + } + } + for (i = 0; i < gBerryBlenderData->playersNo; i++) + { + if (gRecvCmds[0][i] == 0x4444) + { + u32 var = gBerryBlenderData->field_A2[i]; + if (gRecvCmds[2][i] == 0x4523) + { + sub_804FD30(0x4523); + gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 55); + if (gBerryBlenderData->field_13E >= 1000) + gBerryBlenderData->field_13E = 1000; + sub_804FC48(0x4523, var); + gBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++; + } + else if (gRecvCmds[2][i] == 0x5432) + { + sub_804FD30(0x5432); + gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 70); + sub_804FC48(0x5432, var); + gBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++; + } + else if (gRecvCmds[2][i] == 0x2345) + { + sub_804FC48(0x2345, var); + sub_804FD30(0x2345); + if (gBerryBlenderData->field_4.win_field_F > 1000) + gBerryBlenderData->field_13E = 1000; + if (gBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999) + gBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++; + } + if (gRecvCmds[2][i] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) + { + if (gBerryBlenderData->field_56 > 1500) + m4aMPlayTempoControl(&gMPlay_BGM, ((gBerryBlenderData->field_56 - 750) / 20) + 256); + else + m4aMPlayTempoControl(&gMPlay_BGM, 256); + } + } + } + if (gSpecialVar_0x8004 != 0) + { + for (i = 0; i < gBerryBlenderData->playersNo; i++) + { + gRecvCmds[0][i] = 0; + gRecvCmds[2][i] = 0; + } + } +}*/ + |