@@ -365,7 +365,113 @@ void func_800DA950(void) // 0x800DA950
365365
366366INCLUDE_ASM ("asm/maps/map1_s03/nonmatchings/map1_s03" , func_800DAA28 );
367367
368- INCLUDE_ASM ("asm/maps/map1_s03/nonmatchings/map1_s03" , func_800DABC4 );
368+ void func_800DABC4 (void )
369+ {
370+ switch (g_SysWork .sysStateStep_C [0 ])
371+ {
372+ case 0 :
373+ sharedFunc_800D20E4_0_s00 ();
374+ if (g_MapEventParam -> field_5 == 17 || g_MapEventParam -> field_5 == 18 )
375+ {
376+ if (Savegame_EventFlagGet (EventFlag_M1S03_KeyDownTheDrain ))
377+ {
378+ func_800862F8 (false, FILE_TIM_HOLEKEY1_TIM , false);
379+ }
380+ else
381+ {
382+ func_800862F8 (false, FILE_TIM_HOLEKEY0_TIM , false);
383+ Savegame_EventFlagSet (EventFlag_112 );
384+ }
385+ }
386+ else if (g_MapEventParam -> field_5 == 19 || g_MapEventParam -> field_5 == 20 )
387+ {
388+ if ((g_MapEventParam -> unk_4_4 == 3 ) || Savegame_EventFlagGet (EventFlag_M1S02_UsedRubberBall ))
389+ {
390+ func_800862F8 (false, FILE_TIM_BALLHOLE_TIM , false);
391+ }
392+ else
393+ {
394+ func_800862F8 (false, FILE_TIM_BALLHOL1_TIM , false);
395+ }
396+ }
397+ SysWork_StateStepIncrement (0 );
398+ /* fallthrough */
399+ case 1 :
400+ func_80085DF0 ();
401+ return ;
402+ case 2 :
403+ func_80086C58 (& g_SysWork .player_4C .chara_0 , 59 );
404+ return ;
405+ case 3 :
406+ SysWork_StateStepIncrementAfterFade (false, true, 0 , 0 , false);
407+ SysWork_StateStepIncrement (0 );
408+ /* fallthrough */
409+ case 4 :
410+ func_800862F8 (true, 0 , false);
411+ return ;
412+ case 5 :
413+ SysWork_StateStepIncrementAfterFade (1 , true, 0 , 0 , false);
414+ return ;
415+ case 6 :
416+ func_800862F8 (2 , 0 , false);
417+ SysWork_StateStepIncrementAfterFade (2 , false, 0 , 0 , false);
418+ return ;
419+ case 7 :
420+ func_800862F8 (2 , 0 , false);
421+ if (g_MapEventParam -> field_5 == 19 || g_MapEventParam -> field_5 == 20 )
422+ {
423+ if (g_MapEventParam -> unk_4_4 == 3 )
424+ {
425+ Savegame_EventFlagSet (EventFlag_M1S02_UsedRubberBall );
426+ MapMsg_DisplayAndHandleSelection (false, 36 , false, false, 0 , false);
427+ }
428+ else
429+ {
430+ if (Savegame_EventFlagGet (EventFlag_M1S02_UsedRubberBall ))
431+ {
432+ MapMsg_DisplayAndHandleSelection (false, 34 , false, false, 0 , false); // "The ball is stuffed inside the pipe."
433+ }
434+ else
435+ {
436+ MapMsg_DisplayAndHandleSelection (false, 35 , false, false, 0 , false); // "Nothing special."
437+ }
438+ }
439+ }
440+ else
441+ {
442+ if (Savegame_EventFlagGet (EventFlag_M1S02_PickupClassroomKey ))
443+ {
444+ MapMsg_DisplayAndHandleSelection (false, 35 , false, false, 0 , false); // "Nothing special."
445+ }
446+ else
447+ {
448+ if (!Savegame_EventFlagGet (EventFlag_M1S03_KeyDownTheDrain ))
449+ {
450+ MapMsg_DisplayAndHandleSelection (false, 32 , false, false, 0 , false); // "There's a hanging key."
451+ }
452+ else
453+ {
454+ MapMsg_DisplayAndHandleSelection (false, 33 , false, false, 0 , false); // "The key went down the drain."
455+ }
456+ }
457+ }
458+ return ;
459+ case 8 :
460+ func_800862F8 (2 , 0 , false);
461+ SysWork_StateStepIncrementAfterFade (2 , true, 0 , 0 , false);
462+ return ;
463+ case 9 :
464+ SysWork_StateStepIncrementAfterFade (2 , false, 0 , 0 , false);
465+ return ;
466+ case 10 :
467+ func_80086C58 (& g_SysWork .player_4C .chara_0 , 60 );
468+ return ;
469+ default :
470+ sharedFunc_800D2244_0_s00 (false);
471+ SysWork_StateSetNext (SysState_Gameplay );
472+ return ;
473+ }
474+ }
369475
370476INCLUDE_RODATA ("asm/maps/map1_s03/nonmatchings/map1_s03" , D_800CBAA4 );
371477
0 commit comments