diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-01-12 00:53:22 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-01-11 21:53:22 -0800 |
commit | 0db72319326c6b29b0fdcdd1e7767a7e7ba46a1d (patch) | |
tree | 72c2e0376b41092430ac41031392a267f8b0d424 /src | |
parent | 7972880b75f034a0ad09047397c2207a22761b21 (diff) |
decompile braille_puzzles.c (#187)
* begin decompiling braille_puzzles.c
* finish decompiling braille_puzzles.c
Diffstat (limited to 'src')
-rw-r--r-- | src/braille_puzzles.c | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c new file mode 100644 index 000000000..1493f1793 --- /dev/null +++ b/src/braille_puzzles.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "event_data.h" +#include "flags.h" +#include "asm.h" +#include "field_camera.h" +#include "field_effect.h" +#include "map_obj_lock.h" +#include "sound.h" +#include "script.h" +#include "songs.h" +#include "species.h" +#include "task.h" +#include "menu.h" + +extern u8 gPlayerPartyCount; +extern u8 gUnknown_03005CE0; + +extern u32 gUnknown_0202FF84[]; + +extern u8 gUnknown_0815EF19[]; + +void UseFlyAncientTomb_Callback(void); +void UseFlyAncientTomb_Finish(void); +void Task_BrailleWait(u8 taskId); +bool32 BrailleWait_CheckButtonPress(void); +void SealedChamberShakingEffect(u8 taskId); + +bool8 ShouldDoBrailleDigEffect(void) +{ + if(!FlagGet(SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x47)) + { + if(gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3) + return TRUE; + else if(gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 3) + return TRUE; + else if(gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 3) + return TRUE; + } + + return FALSE; +} + +void DoBrailleDigEffect(void) +{ + MapGridSetMetatileIdAt(16, 8, 554); + MapGridSetMetatileIdAt(17, 8, 555); + MapGridSetMetatileIdAt(18, 8, 556); + MapGridSetMetatileIdAt(16, 9, 3634); + MapGridSetMetatileIdAt(17, 9, 563); + MapGridSetMetatileIdAt(18, 9, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_DIG); + ScriptContext2_Disable(); +} + +bool8 CheckRelicanthWailord(void) +{ + if(GetMonData(&gPlayerParty, MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH) + { + CalculatePlayerPartyCount(); + + if(GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD) + return TRUE; + } + return FALSE; +} + +bool8 ShouldDoBrailleStrengthEffect(void) +{ + if(!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x6)) + { + if(gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23) + return TRUE; + else if(gSaveBlock1.pos.x == 9 && gSaveBlock1.pos.y == 23) + return TRUE; + else if(gSaveBlock1.pos.x == 11 && gSaveBlock1.pos.y == 23) + return TRUE; + } + + return FALSE; +} + +void DoBrailleStrengthEffect(void) +{ + FieldEffectActiveListRemove(0x28); + MapGridSetMetatileIdAt(14, 26, 554); + MapGridSetMetatileIdAt(15, 26, 555); + MapGridSetMetatileIdAt(16, 26, 556); + MapGridSetMetatileIdAt(14, 27, 3634); + MapGridSetMetatileIdAt(15, 27, 563); + MapGridSetMetatileIdAt(16, 27, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_STRENGTH); + ScriptContext2_Disable(); +} + +bool8 ShouldDoBrailleFlyEffect(void) +{ + if(!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x44)) + { + if(gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25) + return TRUE; + } + + return FALSE; +} + +void DoBrailleFlyEffect(void) +{ + gUnknown_0202FF84[0] = gUnknown_03005CE0; + FieldEffectStart(0x3C); +} + +bool8 FldEff_UseFlyAncientTomb(void) +{ + u8 taskId = oei_task_add(); + + gTasks[taskId].data[8] = (u32)UseFlyAncientTomb_Callback >> 16; + gTasks[taskId].data[9] = (u32)UseFlyAncientTomb_Callback; + return FALSE; +} + +void UseFlyAncientTomb_Callback(void) +{ + FieldEffectActiveListRemove(0x3C); + UseFlyAncientTomb_Finish(); +} + +void UseFlyAncientTomb_Finish(void) +{ + MapGridSetMetatileIdAt(14, 26, 554); + MapGridSetMetatileIdAt(15, 26, 555); + MapGridSetMetatileIdAt(16, 26, 556); + MapGridSetMetatileIdAt(14, 27, 3634); + MapGridSetMetatileIdAt(15, 27, 563); + MapGridSetMetatileIdAt(16, 27, 3636); + DrawWholeMapView(); + PlaySE(SE_BAN); + FlagSet(SYS_BRAILLE_FLY); + ScriptContext2_Disable(); +} + +void DoBrailleWait(void) +{ + if(!FlagGet(SYS_BRAILLE_WAIT)) + CreateTask(Task_BrailleWait, 0x50); +} + +void Task_BrailleWait(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch(data[0]) + { + case 0: + data[1] = 7200; + data[0] = 1; + break; + case 1: + if(BrailleWait_CheckButtonPress() != FALSE) + { + MenuZeroFillScreen(); + PlaySE(5); + data[0] = 2; + } + else + { + data[1] = data[1] - 1; + if(data[1] == 0) + { + MenuZeroFillScreen(); + data[0] = 3; + data[1] = 30; + } + } + break; + case 2: + if(BrailleWait_CheckButtonPress() == FALSE) + { + data[1] = data[1] - 1; + if(data[1] == 0) + data[0] = 4; + break; + } + sub_8064E2C(); + DestroyTask(taskId); + ScriptContext2_Disable(); + break; + case 3: + data[1] = data[1] - 1; + if(data[1] == 0) + data[0] = 4; + break; + case 4: + sub_8064E2C(); + ScriptContext1_SetupScript(gUnknown_0815EF19); + DestroyTask(taskId); + break; + } +} + +bool32 BrailleWait_CheckButtonPress(void) +{ + u16 var = 0xFF; + + if(gSaveBlock2.optionsButtonMode == 1) + var |= 0x300; + if(gSaveBlock2.optionsButtonMode == 2) + var |= 0x200; + + if((var & gMain.newKeys) != FALSE) + return TRUE; + else + return FALSE; +} + +void DoSealedChamberShakingEffect1(void) +{ + u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); + + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 2; + gTasks[taskId].data[5] = 5; + gTasks[taskId].data[6] = 50; + SetCameraPanningCallback(0); +} + +void DoSealedChamberShakingEffect2(void) +{ + u8 taskId = CreateTask(SealedChamberShakingEffect, 0x9); + + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 3; + gTasks[taskId].data[5] = 5; + gTasks[taskId].data[6] = 2; + SetCameraPanningCallback(0); +} + +void SealedChamberShakingEffect(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[1]++; + + if(!(task->data[1] % task->data[5])) + { + task->data[1] = 0; + task->data[2]++; + task->data[4] = -task->data[4]; + SetCameraPanning(0, task->data[4]); + if(task->data[2] == task->data[6]) + { + DestroyTask(taskId); + EnableBothScriptContexts(); + InstallCameraPanAheadCallback(); + } + } +} |