diff --git a/ModMenuField.flow b/ModMenuField.flow new file mode 100644 index 0000000..d6a0daa --- /dev/null +++ b/ModMenuField.flow @@ -0,0 +1,2123 @@ +// Import the MessageScript into the script +// The compiler will insert constant variables for each of the +// window identifiers. +import( "build/input/extracted/etc/field.bf" ); +import( "ModMenuField.msg" ); +import( "Math.flow" ); +import( "Utilities.flow" ); +import( "SkillSelection.flow" ); +import( "PersonaSelection.flow" ); + +// Store this for animating the last spawned npc +global int gLastSpawnedNpcModelHandle; +global int gFldAnimGapId; +global int gFldAnimGapIndex; +global float gFldAnimSpeed; +global bool gFldAnimShouldLoop; +global int gNpcAnimGapId; +global int gNpcAnimGapIndex; +global int gFldAnimTime; +global float gLastCamXRot; +global float gLastCamYRot; +global float gLastCamZRot; +global int gFieldMajor; +global int gFieldMinor; +global int gEventMajor; +global int gEventMinor; + +void fld_square_menu_hook() +{ + ALL_ENABLE_SHARE_PLAY(); //Re-enables screen recording + BIT_OFF( 4099 ); //Removes your "tired" status + + while ( true ) + { + int selection = SEL_GENERIC( -1, ModMenu ); + switch ( selection ) + { + case -1: + return; + case 0: + PlayerEditorDisplay(); + break; + case 1: + BattleTypeSelect(); + return; + case 2: + TeleportModeStart(); + break; + case 3: + BgmSelect(); + break; + case 4: + FieldSelect(); + return; + case 5: + EventSelect(); + return; + case 6: + CameraEditorDisplay(); + break; + case 7: + NpcControlMenuDisplay(); + break; + case 8: + FlagsEditorDisplay(); + break; + case 9: + CalendarEditorDisplay(); + return; + case 10: + SUB_Call_GroupChat(); + break; + case 11: + AboutDialogDisplay(); + break; + } + } +} + +// Player Editor +void PlayerEditorDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC( PlayerMenuName, PlayerMenu ); + switch ( selection ) + { + case -1: + return; + case 0: + PersonaEditorOpen(); + break; + case 1: + StatEditorDisplay(); + break; + case 2: + ItemEditorDisplay(); + break; + case 3: + CommuSetRankSelect(); + break; + case 4: // Set Protag Name + INIT_IME_DRIVER(); + CALL_NAME_ENTRY(); + END_IME_DRIVER(); + break; + case 5: // Set Team Name + INIT_IME_DRIVER(); + CALL_PHANTOM_NAME_ENTRY(); + END_IME_DRIVER(); + break; + case 6: + PlayerAnimViewerDisplay(); + break; + case 7: + PlayerSelectModelScale(); + break; + case 8: + PlayerAttachItemModel(FLD_PC_GET_RESHND(0)); + break; + case 9: + PlayerSetMaxMoney(); + break; + } + } +} + +// Persona Stock Editor +void PersonaEditorOpen() +{ + while ( true ) + { + int selection = SEL_GENERIC( PersonaMenuName, PersonaMenu ); + switch ( selection ) + { + case -1: + return; + case 0: + PersonaAddMenuOpen(); + break; + case 1: + PersonaDeleteAllSelect(); + break; + case 2: + PersonaAddSkillMenuOpen(); + break; + case 3: + PersonaAddAllToCompendium(); + break; + } + } +} + +void PersonaAddMenuOpen() +{ + while ( true ) + { + int selection = SEL_GENERIC_NOT_HELP( PersonaAddMenuName, PersonaAddMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + PersonaAddSelect( false ); + break; + case 1: + PersonaAddSelect( true ); + break; + } + } +} + +void PersonaAddSelect( bool useNumberInput ) +{ + int personaId; + if ( useNumberInput ) + { + personaId = SelectNumberPrompt( PersonaAddPrompt, 3 ); + if ( personaId == -1 ) + return; + } + else + { + personaId = PersonaSelectByName(); + if ( personaId == -1 ) + return; + } + + ADD_PERSONA_STOCK( personaId ); + MSG_SYSTEM( PersonaAdded ); +} + +void PersonaDeleteAllSelect() +{ + bool deleteConfirm = SelectNoYesPrompt( PersonaDelPrompt ); + + if ( deleteConfirm ) { + CLEAR_PERSONA_STOCK(); + MSG_SYSTEM( PersonaDeleted ); + } + +} + +void PersonaAddSkillMenuOpen() +{ + while ( true ) + { + int selection = SEL_GENERIC_NOT_HELP( PersonaAddSkillMenuName, PersonaAddSkillMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + PersonaAddSkillSelect( false ); + break; + case 1: + PersonaAddSkillSelect( true ); + break; + } + } +} + +void PersonaAddSkillSelect( bool useNumberInput ) +{ + int unitId = SEL_GENERIC_NOT_HELP( UnitMenuName, UnitSelect ); + if ( unitId == -1 ) // Cancel + return; + + int skillId; + if ( useNumberInput ) + { + skillId = SelectNumberPrompt( SkillPrompt, 3 ); + if ( skillId == -1 ) // Cancel + return; + } + else + { + skillId = SkillSelectByName(); + if ( skillId == -1 ) + return; + } + + SKILL_ADD( ( unitId + 1 ), skillId ); + FADEIN( 0, 10 ); + FADE_SYNC(); + FLD_REQ_FLASHBACK( 152, 51 ); + FLD_END_FLASHBACK(); +} + +void PersonaAddAllToCompendium() +{ + for ( int i = 0; i < 463; i++ ) + { + if ( i % 6 == 0 ) + CLEAR_PERSONA_STOCK(); + + ADD_PERSONA_STOCK( i ); + } + CLEAR_PERSONA_STOCK(); +} + +// Stat Editor +void StatEditorDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC( StatsMenuName, StatsMenu ); + + if ( selection == -1 ) + return; + + int pointsToAdd = SelectNumberPrompt( StatPrompt, 2 ); + + if ( pointsToAdd == -1 ) + continue; + + switch ( selection ) + { + case -1: + return; + case 0: // Knowledge + StatAddPointAndDisplay( pointsToAdd, 0, 0, 0, 0 ); + break; + case 1: // Charm + StatAddPointAndDisplay( 0, pointsToAdd, 0, 0, 0 ); + break; + case 2: // Proficiency + StatAddPointAndDisplay( 0, 0, pointsToAdd, 0, 0 ); + break; + case 3: // Guts + StatAddPointAndDisplay( 0, 0, 0, pointsToAdd, 0 ); + break; + case 4: // Kindness + StatAddPointAndDisplay( 0, 0, 0, 0, pointsToAdd ); + break; + } + } +} + +void StatAddPointAndDisplay( int p1, int p2, int p3, int p4, int p5 ) +{ + ADD_PC_ALL_PARAM( p1, p2, p3, p4, p5 ); + DISP_PC_PARAM_METER(); +} + +// Item Editor +void ItemEditorDisplay() +{ + while ( true ) + { + int itemType = SEL_GENERIC( ItemMenuName, ItemMenu ); + + switch ( itemType ) + { + case -1: + return; + case 0: // Consumables + ItemGetSelect( 0x3000 ); + break; + case 1: // Accessories + ItemGetSelect( 0x2000 ); + break; + case 2: // Key Items + ItemGetSelect( 0x4000 ); + break; + case 3: // Ranged Weapons + ItemGetSelect( 0x8000 ); + break; + case 4: // Melee Weapons + ItemGetSelect( 0x0000 ); + break; + case 5: // Outfits + ItemGetSelect( 0x7000 ); + break; + case 6: // Armor + ItemGetSelect( 0x1000 ); + break; + case 7: // Materials + ItemGetSelect( 0x5000 ); + break; + case 8: // Skill Cards + ItemGetSelect( 0x6000 ); + break; + } + } +} + +void ItemGetSelect( int type ) +{ + int itemId = SelectNumberPrompt( ItemPrompt, 4 ); + if (itemId == -1) + return; + int amount = SelectNumberPrompt( ItemPrompt2, 2 ); + if (amount == -1) + return; + + GET_ITEM_BUF_RESET(); + GET_ITEM_BUF_SET( type + itemId, amount ); + SET_ITEM_NUM( type + itemId, GET_ITEM_NUM( type + itemId ) + amount ); + GET_ITEMS_WINDOW( 0 ); +} + +void CommuSetRankSelect() +{ + int cmmId = SEL_GENERIC( CommuMenuName, CommuMenu ) + 1; + + if ( cmmId <= 0 || cmmId >= 22 ) + return; + + DisplayMessagePrompt( CmmDialog2 ); + int lvl = SEL_GENERIC_NOT_HELP( -1, OneThruTen ) + 1; + + if ( lvl == 0 ) + return; + + CMM_RANKUP( cmmId, lvl, 1 ); + + if ( !CMM_EXIST( cmmId ) ) { + CMM_OPEN( cmmId ); + } + + CMM_SET_LV( cmmId, lvl ); + CMM_ADD_POINT( cmmId, 9999 ); +} + +void PlayerAnimViewerDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC_NOT_HELP( AnimMenuName, AnimMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: // Joker Animation Viewer + FieldModelAnimViewerDisplay( FLD_PC_GET_RESHND( 0 ) ); + break; + case 1: // Morgana Out of Bag + SUB_MoruShowFace(); + break; + case 2: // Morgana In Bag + SUB_MoruReturnBag(); + break; + case 3: // Show Bag + BIT_ON( 4206 ); + BIT_OFF( 4207 ); + BIT_OFF( 4112 ); + DisplayMessagePrompt( BagShowHide ); + break; + case 4: // Hide Bag + BIT_OFF( 4206 ); + BIT_ON( 4207 ); + BIT_ON( 4112 ); + DisplayMessagePrompt( BagShowHide ); + break; + case 5: // Umbrella On + FLD_BAG_ANIM_DISABLE(); + FLD_UMBRELLA_ANIM_CHANGE( 1 ); + case 6: // Umbrella Off + FLD_BAG_ANIM_DISABLE(); + FLD_UMBRELLA_ANIM_CHANGE( 0 ); + } + } +} + +// Field Model Anim Viewer +void FieldModelAnimViewerDisplay( int resHandle ) +{ + while ( true ) + { + int selection = SEL_GENERIC( GAPMenuName, GAPMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + FieldModelAnimSelectId(); + break; + case 1: + FieldModelAnimSelectIndex(); + break; + case 2: + FieldModelAnimSelectLoop(); + break; + case 3: + FieldModelAnimSelectSpeed(); + break; + case 4: + FieldModelAnimSelectTime(); + break; + case 5: + FieldModelPlayAnim( resHandle, gFldAnimGapId, gFldAnimGapIndex ); + break; + } + } +} + +void FieldModelPlayAnim( int resHandle, int gapid, int index ) +{ + int clone = FLD_MODEL_CLONE_ADDMOTION( resHandle, gapid ); + FLD_UNIT_WAIT_DISABLE( clone ); + MDL_ANIM( clone, index, gFldAnimShouldLoop, 0, gFldAnimSpeed ); + WAIT(gFldAnimTime); + FLD_MODEL_REVERT_ADDMOTION( resHandle, clone ); + //FLD_UNIT_SET_WAIT( resHandle ); +} + +void FieldModelAnimSelectId() +{ + int temp = SelectNumberPrompt( GapPrompt, 3 ); // Gap filename last 3 digits + if ( temp != -1 ) + gFldAnimGapId = temp; +} + +void FieldModelAnimSelectIndex() +{ + int temp = SelectNumberPrompt( GapPrompt2, 2 ); + if ( temp != -1 ) + gFldAnimGapIndex = temp; +} + +void FieldModelAnimSelectLoop() +{ + gFldAnimShouldLoop = SelectOffOnPrompt( GapPrompt3 ); +} + +void FieldModelAnimSelectSpeed() +{ + float temp = SelectFloatPrompt( GapPrompt5 ); + if ( temp != -1 ) + gFldAnimSpeed = temp / 10; +} + +void FieldModelAnimSelectTime() +{ + int temp = SelectNumberPrompt( GapPrompt6, 1 ); + if ( temp != -1 ) + gFldAnimTime = temp * 30; +} + +void PlayerSelectModelScale() +{ + float temp = SelectFloatPrompt( ScalePrompt ); + if ( temp != -1 ) + { + float modelScale = temp / 10; + FLD_MODEL_SET_SCALE( FLD_PC_GET_RESHND( 0 ), modelScale ); + } +} + +void PlayerAttachItemModel(int resHandle) +{ + int itemModelMajor = SelectNumberPrompt( ItemSpawnPrompt, 4 ); + int itemModelMinor = SelectNumberPrompt( ItemSpawnPrompt2, 3 ); + //FLD_PC_MODEL_ATTACH_ITEM( resHandle, itemModelMajor, itemModelMinor ); + int itemModel = FLD_ITEM_MODEL_LOAD( itemModelMajor, itemModelMinor ); + FLD_MODEL_LOADSYNC( itemModel ); + FLD_MODEL_SET_VISIBLE( itemModel, 1, 0 ); + FLD_MODEL_ATTACH_TRANSLATE( itemModel, resHandle, 101 ); + FLD_MODEL_ATTACH_ROTATE( itemModel, resHandle, 101 ); +} + +// Camera Editor +void CameraEditorDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC( CameraMenuName, CameraMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + CameraInputPos(); + break; + case 1: + CameraInputFov(); + break; + case 2: + CameraInputRot(); + break; + case 3: + CameraUnlock(); + break; + case 4: + CameraLock(); + break; + case 5: + CAMERA_SHAKE_STOP(); + break; + } + } +} + +void CameraInputPos() +{ + DisplayMessagePrompt( CameraPrompt ); + + while ( !PAD_CHK_PRESS( PadButton.Triangle ) ) + { + bool anyValueSet = false; + + if ( PAD_CHK_PRESS( PadButton.Any ) ) // if any button is pressed + { + float x = FLD_CAMERA_GET_X_POS(); + float y = FLD_CAMERA_GET_Y_POS(); + float z = FLD_CAMERA_GET_Z_POS(); + float multiplier = 1f; + + if ( PAD_CHK_PRESS( PadButton.Cross ) ) + multiplier = 3f; + + if ( PAD_CHK_PRESS( PadButton.Up ) ) + { + y = y + ( 5f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Right ) ) + { + x = x + ( 5f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Down ) ) + { + y = y - ( 5f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Left ) ) + { + x = x - ( 5f * multiplier ); + anyValueSet = true; + } + + if ( anyValueSet ) + FLD_CAMERA_SET_POS( x, y, z ); + } + + WAIT( 3 ); + } +} + +void CameraInputFov() +{ + DisplayMessagePrompt( CameraPrompt ); + + while ( !PAD_CHK_PRESS( PadButton.Triangle ) ) + { + bool anyValueSet = false; + + if ( PAD_CHK_PRESS( PadButton.Any ) ) + { + float fov = FLD_CAMERA_GET_FOVY(); + float multiplier = 1f; + + if ( PAD_CHK_PRESS( PadButton.Cross ) ) + multiplier = 5f; + + if ( PAD_CHK_PRESS( PadButton.Up ) ) + { + fov = fov + ( 1f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Right ) ) + { + fov = fov + ( 1f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Down ) ) + { + fov = fov - ( 1f * multiplier ); + anyValueSet = true; + } + + if ( PAD_CHK_PRESS( PadButton.Left ) ) + { + fov = fov + ( 1f * multiplier ); + anyValueSet = true; + } + + if ( anyValueSet ) + FLD_CAMERA_SET_FOVY(fov); + } + + WAIT( 3 ); + } +} + +void CameraInputRot() +{ + const float ADD_VELOCITY_PER_PRESS = 15f; + float cameraVelocityX = 0f; + float cameraVelocityY = 0f; + float cameraVelocityZ = 0f; + + if ( ( gLastCamXRot == 0f ) && ( gLastCamYRot == 0f ) && ( gLastCamZRot == 0f ) ) + { + gLastCamXRot = FLD_CAMERA_GET_X_ROT(); + gLastCamYRot = FLD_CAMERA_GET_Y_ROT(); + gLastCamZRot = FLD_CAMERA_GET_Z_ROT(); + } + + int runs = 0; + + while ( !PAD_CHK_PRESS( PadButton.Triangle ) ) + { + if ( ++runs > 4 ) + { + runs = 0; + cameraVelocityX /= 2; + cameraVelocityY /= 2; + cameraVelocityZ /= 2; + } + + if ( PAD_CHK_PRESS( PadButton.Any ) ) + { + if ( PAD_CHK_PRESS( PadButton.Up ) ) + { + if ( PAD_CHK_PRESS( PadButton.Square ) ) + cameraVelocityZ += ADD_VELOCITY_PER_PRESS; + else + cameraVelocityY += ADD_VELOCITY_PER_PRESS; + } + + if ( PAD_CHK_PRESS( PadButton.Right ) ) + cameraVelocityX += ADD_VELOCITY_PER_PRESS; + + if ( PAD_CHK_PRESS( PadButton.Down ) ) + { + if ( PAD_CHK_PRESS( PadButton.Square ) ) + cameraVelocityZ -= ADD_VELOCITY_PER_PRESS; + else + cameraVelocityY -= ADD_VELOCITY_PER_PRESS; + } + + if ( PAD_CHK_PRESS( PadButton.Left ) ) + cameraVelocityX -= ADD_VELOCITY_PER_PRESS; + } + + gLastCamXRot += cameraVelocityX; + gLastCamYRot += cameraVelocityY; + gLastCamZRot += cameraVelocityZ; + CameraSetRot( gLastCamXRot, gLastCamYRot, gLastCamZRot ); + + SYNC(); + } +} + +void CameraSetRot( float x, float y, float z ) +{ + float qX; + float qY; + float qZ; + float qW; + QuaternionFromEulerDegrees( x, y, z, out qX, out qY, out qZ, out qW ); + + FLD_CAMERA_SET_ROT( qX, qY, qZ, qW ); +} + +void CameraUnlock() +{ + FLD_CAMERA_UNLOCK(); + FLD_CAMERA_BEHIND_UNLOCK(); +} + +void CameraLock() +{ + FLD_CAMERA_LOCK(); + FLD_CAMERA_BEHIND_LOCK(); +} + +// Npc Model Control +void NpcControlMenuDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC( SpawnMenuName, SpawnMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: // Spawn Model + NpcSpawnSelect(); + break; + case 1: // Animate Model + NpcAnimViewerDisplay( gLastSpawnedNpcModelHandle ); + break; + case 2: // Scale Model + NpcScale(); + break; + case 3: // Attach Item Model + PlayerAttachItemModel(gLastSpawnedNpcModelHandle); + break; + case 4: // Spawn Object + NpcSpawnObjectModel(FLD_PC_GET_RESHND(0)); + break; + } + } +} + +void NpcSpawnSelect() +{ + int modelIdMajor = SelectNumberPrompt( NPCPrompt, 4 ); + if ( modelIdMajor == -1 ) + return; + int modelIdMinor = SelectNumberPrompt( NPCPrompt2, 3 ); + if ( modelIdMinor == -1 ) + return; + int modelIdSub = SelectNumberPrompt( NPCPrompt3, 2 ); + if ( modelIdSub == -1 ) + return; + gLastSpawnedNpcModelHandle = NpcSpawn( modelIdMajor, modelIdMinor, modelIdSub ); +} + +int NpcSpawn( int modelIdMajor, int modelIdMinor, int modelIdSub ) +{ + int pcHandle = FLD_PC_GET_RESHND( 0 ); + float x = FLD_MODEL_GET_X_TRANSLATE( pcHandle ); + float y = FLD_MODEL_GET_Y_TRANSLATE( pcHandle ); + float z = FLD_MODEL_GET_Z_TRANSLATE( pcHandle ); + float xr = FLD_MODEL_GET_X_ROTATE( pcHandle ); + float yr = FLD_MODEL_GET_Y_ROTATE( pcHandle ); + float zr = FLD_MODEL_GET_Z_ROTATE( pcHandle ); + + int npcHandle = FLD_NPC_MODEL_LOAD( modelIdMajor, modelIdMinor, modelIdSub ); + FLD_MODEL_LOADSYNC( npcHandle ); + FLD_MODEL_SET_TRANSLATE( npcHandle, x, y, z, 0 ); + FLD_MODEL_SET_ROTATE( npcHandle, xr, yr, zr, 0 ); + FLD_MODEL_SET_VISIBLE( npcHandle, 1, 0 ); + + return npcHandle; +} + +void NpcAnimViewerDisplay( int resHandle ) +{ + while ( true ) + { + int selection = SEL_GENERIC( GAPMenuName, GAPMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + NpcModelAnimSelectId(); + break; + case 1: + NpcModelAnimSelectIndex(); + break; + case 2: + FieldModelAnimSelectLoop(); + break; + case 3: + FieldModelAnimSelectSpeed(); + break; + case 4: + FieldModelAnimSelectTime(); + break; + case 5: + FieldModelPlayAnim( resHandle, gNpcAnimGapId, gNpcAnimGapIndex ); + break; + } + } +} + +void NpcModelAnimSelectId() +{ + int temp = SelectNumberPrompt( GapPrompt, 3 ); + if ( temp != -1 ) + gNpcAnimGapId = temp; +} + +void NpcModelAnimSelectIndex() +{ + int temp = SelectNumberPrompt( GapPrompt2, 2 ); + if ( temp != -1 ) + gNpcAnimGapIndex = temp; +} + +void NpcScale() +{ + float temp = SelectFloatPrompt( ScalePrompt ); + if ( temp != -1 ) + { + float modelScale = temp / 10; + FLD_MODEL_SET_SCALE( gLastSpawnedNpcModelHandle, modelScale ); + } +} + +void NpcSpawnObjectModel( int resHandle ) +{ + float x = FLD_MODEL_GET_X_TRANSLATE( resHandle ); + float y = FLD_MODEL_GET_Y_TRANSLATE( resHandle ); + float z = FLD_MODEL_GET_Z_TRANSLATE( resHandle ); + float xr = FLD_MODEL_GET_X_ROTATE( resHandle ); + float yr = FLD_MODEL_GET_Y_ROTATE( resHandle ); + float zr = FLD_MODEL_GET_Z_ROTATE( resHandle ); + + int itemModelMajor = SelectNumberPrompt( ObjectSpawnPrompt, 3 ); + int itemModelMinor = SelectNumberPrompt( ObjectSpawnPrompt2, 3 ); + + int objectModel = FLD_OBJ_MODEL_LOAD( itemModelMajor, itemModelMinor ); + FLD_MODEL_LOADSYNC( objectModel ); + //FLD_OBJ_MODEL_LINKBG( objectModel ); + + FLD_MODEL_SET_TRANSLATE( objectModel, x, y, z, 0 ); + FLD_MODEL_SET_ROTATE( objectModel, xr, yr, zr, 0 ); + FLD_MODEL_SYNC_TRANSLATE( objectModel ); + FLD_MODEL_SYNC_ROTATE( objectModel ); + FLD_MODEL_SET_VISIBLE( objectModel, 1, 0 ); +} + +// Battle +void BattleTypeSelect() +{ + int selection = SEL_GENERIC_NOT_HELP( BattleTypeName, BattleTypeMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + RegularBattle(); + break; + case 1: + BossSelectMenu(); + break; + case 2: + EventBattle(); + break; + } +} + +void RegularBattle() +{ + int encount = SelectNumberPrompt( EncounterPrompt, 3 ); + + if ( encount == -1 ) + return; + + CALL_BATTLE( encount ); + WAIT_BATTLE(); + ReloadPreviousField(); +} + +// Boss Select +void BossSelectMenu() +{ + int selection = SEL_GENERIC_NOT_HELP( PalaceName, PalaceMenu ); + + switch ( selection ) + { + case -1: + break; + case 0: + Palace1(); + break; + case 1: + Palace2(); + break; + case 2: + Palace3(); + break; + case 3: + Palace4(); + break; + case 4: + Palace5(); + break; + case 5: + Palace6(); + break; + case 6: + Palace7(); + break; + case 7: + Palace8(); + break; + case 8: + Misc1(); + break; + } +} + +//Dungeon/Palace Select +void Palace1() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace1 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 1 ); + break; + case 1: + FLD_START_BOSS( 2 ); + break; + case 2: + FLD_START_BOSS( 3 ); + break; + case 3: + FLD_START_BOSS( 4 ); + break; + case 4: + FLD_START_BOSS( 5 ); + break; + case 5: + FLD_START_BOSS( 6 ); + break; + case 6: + FLD_START_BOSS( 7 ); + break; + case 7: + FLD_START_BOSS( 8 ); + break; + case 8: + FLD_START_BOSS( 9 ); + break; + case 9: + FLD_START_BOSS( 10 ); + break; + case 10: + FLD_START_BOSS( 11 ); + break; + case 11: + FLD_START_BOSS( 12 ); + break; + case 12: + FLD_START_BOSS( 13 ); + break; + } +} + +void Palace2() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace2 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 14 ); + break; + case 1: + FLD_START_BOSS( 15 ); + break; + case 2: + FLD_START_BOSS( 16 ); + break; + case 3: + FLD_START_BOSS( 17 ); + break; + case 4: + FLD_START_BOSS( 18 ); + break; + } +} + +void Palace3() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace3 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 19 ); + break; + case 1: + FLD_START_BOSS( 20 ); + break; + case 2: + FLD_START_BOSS( 21 ); + break; + case 3: + FLD_START_BOSS( 22 ); + break; + case 4: + FLD_START_BOSS( 23 ); + break; + case 5: + FLD_START_BOSS( 24 ); + break; + case 6: + FLD_START_BOSS( 25 ); + break; + } +} + +void Palace4() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace4 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 26 ); + break; + case 1: + FLD_START_BOSS( 27 ); + break; + case 2: + FLD_START_BOSS( 28 ); + break; + case 3: + FLD_START_BOSS( 29 ); + break; + case 4: + FLD_START_BOSS( 30 ); + break; + case 5: + FLD_START_BOSS( 31 ); + break; + } +} + +void Palace5() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace5 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 32 ); + break; + case 1: + FLD_START_BOSS( 33 ); + break; + case 2: + FLD_START_BOSS( 34 ); + break; + case 3: + FLD_START_BOSS( 35 ); + break; + case 4: + FLD_START_BOSS( 36 ); + break; + case 5: + FLD_START_BOSS( 37 ); + break; + } +} + +void Palace6() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace6 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 38 ); + break; + case 1: + FLD_START_BOSS( 39 ); + break; + case 2: + FLD_START_BOSS( 40 ); + break; + case 3: + FLD_START_BOSS( 41 ); + break; + case 4: + FLD_START_BOSS( 42 ); + break; + case 5: + FLD_START_BOSS( 43 ); + break; + case 6: + FLD_START_BOSS( 44 ); + break; + case 7: + FLD_START_BOSS( 45 ); + break; + case 8: + FLD_START_BOSS( 46 ); + break; + case 9: + FLD_START_BOSS( 47 ); + break; + case 10: + FLD_START_BOSS( 48 ); + break; + } +} + +void Palace7() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace7 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 49 ); + break; + case 1: + FLD_START_BOSS( 50 ); + break; + case 2: + FLD_START_BOSS( 51 ); + break; + case 3: + FLD_START_BOSS( 52 ); + break; + case 4: + FLD_START_BOSS( 53 ); + break; + case 5: + FLD_START_BOSS( 54 ); + break; + case 6: + FLD_START_BOSS( 55 ); + break; + case 7: + FLD_START_BOSS( 56 ); + break; + case 8: + FLD_START_BOSS( 57 ); + break; + case 9: + FLD_START_BOSS( 58 ); + break; + case 10: + FLD_START_BOSS( 59 ); + break; + } +} + +void Palace8() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Palace8 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 60 ); + break; + case 1: + FLD_START_BOSS( 61 ); + break; + case 2: + FLD_START_BOSS( 62 ); + break; + case 3: + FLD_START_BOSS( 63 ); + break; + case 4: + FLD_START_BOSS( 64 ); + break; + case 5: + FLD_START_BOSS( 65 ); + break; + case 6: + FLD_START_BOSS( 66 ); + break; + case 7: + FLD_START_BOSS( 67 ); + break; + case 8: + FLD_START_BOSS( 68 ); + break; + case 9: + FLD_START_BOSS( 69 ); + break; + } +} + +void Misc1() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Misc1 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 0 ); + break; + case 1: + FLD_START_BOSS( 70 ); + break; + case 2: + FLD_START_BOSS( 71 ); + break; + case 3: + FLD_START_BOSS( 72 ); + break; + case 4: + FLD_START_BOSS( 73 ); + break; + case 5: + FLD_START_BOSS( 74 ); + break; + case 6: + FLD_START_BOSS( 75 ); + break; + case 7: + FLD_START_BOSS( 76 ); + break; + case 8: + FLD_START_BOSS( 77 ); + break; + case 9: + FLD_START_BOSS( 78 ); + break; + case 10: + FLD_START_BOSS( 79 ); + break; + case 11: + Misc2(); //next + break; + } +} + +void Misc2() +{ + int selection = SEL_GENERIC_NOT_HELP( -1, Misc2 ); + + switch ( selection ) + { + case -1: + break; + case 0: + FLD_START_BOSS( 80 ); + break; + case 1: + FLD_START_BOSS( 81 ); + break; + case 2: + FLD_START_BOSS( 82 ); + break; + case 3: + FLD_START_BOSS( 83 ); + break; + case 4: + FLD_START_BOSS( 84 ); + break; + case 5: + FLD_START_BOSS( 85 ); + break; + case 6: + FLD_START_BOSS( 86 ); + break; + case 7: + FLD_START_BOSS( 87 ); + break; + case 8: + Misc1(); //previous + break; + } +} + +void EventBattle() +{ + while ( true ) + { + int selection = SEL_GENERIC_NOT_HELP( EventBattleName, EventBattleSelect ); + switch ( selection ) + { + case -1: + return; + case 0: + CALL_EVENTBATTLE( 422, 1, 779 ); + break; + case 1: + CALL_EVENTBATTLE( 422, 3, 781 ); + break; + case 2: + CALL_EVENTBATTLE( 448, 1, 786 ); + break; + case 3: + CALL_EVENTBATTLE( 459, 2, 785 ); + break; + case 4: + CALL_EVENTBATTLE( 500, 1, 790 ); + break; + case 5: + CALL_EVENTBATTLE( 131, 1, 647 ); + break; + } + } + + WAIT_BATTLE(); + + // TODO(TGE): does not reload the field, stuck on loading screen + // however the mod menu remains accessible. + ReloadPreviousField(); +} + +// Teleport Mode +void TeleportModeStart() +{ + const float ADD_VELOCITY_PER_PRESS = 5f; + + int playerResHandle = FLD_PC_GET_RESHND( 0 ); + + float playerVelocityX = 0f; + float playerVelocityY = 0f; + float playerVelocityZ = 0f; + int runs = 0; + + while ( !PAD_CHK_PRESS( PadButton.Triangle ) ) + { + ++runs; + if ( runs > 4 ) + { + runs = 0; + playerVelocityX /= 2; + playerVelocityY /= 2; + playerVelocityZ /= 2; + } + + if ( PAD_CHK_PRESS( PadButton.Any ) ) + { + if ( PAD_CHK_PRESS( PadButton.Up ) ) + { + if ( PAD_CHK_PRESS( PadButton.Square ) ) + playerVelocityZ += ADD_VELOCITY_PER_PRESS; + else + playerVelocityY += ADD_VELOCITY_PER_PRESS; + } + + if ( PAD_CHK_PRESS( PadButton.Right ) ) + { + playerVelocityX += ADD_VELOCITY_PER_PRESS; + } + + if ( PAD_CHK_PRESS( PadButton.Down ) ) + { + if ( PAD_CHK_PRESS( PadButton.Square ) ) + playerVelocityZ -= ADD_VELOCITY_PER_PRESS; + else + playerVelocityY -= ADD_VELOCITY_PER_PRESS; + } + + if ( PAD_CHK_PRESS( PadButton.Left ) ) + { + playerVelocityX -= ADD_VELOCITY_PER_PRESS; + } + } + + float x = FLD_MODEL_GET_X_TRANSLATE( playerResHandle ) + playerVelocityX; + float y = FLD_MODEL_GET_Y_TRANSLATE( playerResHandle ) + playerVelocityY; + float z = FLD_MODEL_GET_Z_TRANSLATE( playerResHandle ) + playerVelocityZ; + FLD_MODEL_RUN_TRANSLATE( playerResHandle, x, y, z ); + + SYNC(); + } +} + +// BGM Select +void BgmSelect() +{ + // Display the dialog window + MSG_WND_DSP(); + + // Display dialog + MSG( SelectBgmDialog, 0 ); + + // Close the dialog window + MSG_WND_CLS(); + + int bgmId = SelectNumber( 3 ); + if ( bgmId == -1 ) + return; + + // Play bgm + BGM( bgmId ); +} + +// Field Select +void FieldSelect() +{ + while ( true ) + { + int selection = SEL_GENERIC( FieldMenuName, FieldMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + int temp = SelectNumberPrompt( FieldDlg, 3 ); + if ( temp == -1 ) + break; + gFieldMajor = temp; + + temp = SelectNumberPrompt( FieldDlg2, 3 ); + if ( temp == -1 ) + break; + gFieldMinor = temp; + break; + case 1: + if (gFieldMajor == 0 && gFieldMinor == 0) + MSG_SYSTEM( LoadCheckError ); + else + CALL_FIELD( gFieldMajor, gFieldMinor, 0, 0 ); + return; + } + } + +} + +// Event Select +void EventSelect() +{ + while ( true ) + { + int selection = SEL_GENERIC( EventMenuName, EventMenu ); + + switch ( selection ) + { + case -1: + return; + case 0: + EventSelectIds(); + break; + case 1: + EventLoadSelected(); + return; + } + } +} + +void EventSelectIds() +{ + int temp = SelectNumberPrompt( EventDlg, 3 ); + if ( temp == -1 ) + return; + gEventMajor = temp; + + temp = SelectNumberPrompt( EventDlg2, 3 ); + if ( temp == -1 ) + return; + + gEventMinor = temp; +} + +void EventLoadSelected() +{ + if ( gEventMajor == 0 && gEventMinor == 0 ) + { + MSG_SYSTEM(LoadCheckError); + return; + } + + CALL_EVENT( gEventMajor, gEventMinor ); + ReloadPreviousField(); +} + +void PlayerSetMaxMoney() +{ + GET_MONEY_WINDOW( 999999, 0 ); + CALL_GLOBAL_MONEY_PANEL(); + CHANGE_GLOBAL_MONEY( 999999, 0 ); + DEL_GLOBAL_MONEY_PANEL(); +} + +// Calendar Editor +void CalendarEditorDisplay() +{ + while ( true ) + { + int selection = SEL_GENERIC( CalendarMenuName, CalendarMenu ); + + switch (selection) + { + case -1: + return; + case 0: + CalendarSetNextDaySelect(); + break; + case 1: + CallCalendar(); + return; + case 2: + ChangeWeather(); + break; + } + } +} + +void CalendarSetNextDaySelect() +{ + int month = SEL_GENERIC_NOT_HELP( MonthMenuName, MonthMenu ) + 1; + + if ( month <= 0 ) + return; + + PUTS( "Month: " ); + PUT( month ); + + int day = SelectNumberPrompt( CalendarPrompt2, 2 ); + + PUTS( "Day: " ); + PUT( day ); + + if ( day <= 0 ) + { + // No matter how down you feel on some days, every day is still a positive one. + MSG_SYSTEM( CalendarError ); + return; + } + + int daysInMonth = 0; + + if ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ) daysInMonth = 31; + else if ( month == 2 ) daysInMonth = 29; + else if ( month == 4 || month == 6 || month == 9 || month == 11 ) daysInMonth = 30; + + // Verify that the day doesn't exceed the number of possible days in the specified month + if ( day > daysInMonth ) + { + MSG_SYSTEM( CalendarError ); + return; + } + + int thisMonth = GET_MONTH(); + int thisDay = GET_DAY(); + + PUTS( "Current Month: " ); + PUT( thisMonth ); + PUTS( "Current Day: " ); + PUT( thisDay ); + + // We can only go backwards one day at a time, including jumping from the start of one month to the end of the previous month + if ( ( ( month == thisMonth ) && ( ( day - thisDay ) < -1 ) ) || + ( ( month - thisMonth == -1 ) && ( thisDay == 1 && day != daysInMonth ) ) || + ( month - thisMonth < -1 ) + ) + { + MSG_SYSTEM( CalendarBackwardsError ); + return; + } + + SET_NEXT_DAY( month, day, 1 ); + PUT( month ); + PUT( day ); +} + +void CallCalendar() +{ + Fld_FadeOut_CallCalendar(); + CALL_CALENDAR(); +} + +void ChangeWeather() +{ + int selection = SEL_GENERIC_NOT_HELP( WeatherMenuName, WeatherMenu ); + + switch (selection) + { + case -1: + break; + default: + PUSH_WEATHER( selection ); + break; + } +} + +// Flags Editor +void FlagsEditorDisplay() +{ + // Flags start at 0x2D66 in the save file + // section is 0x460 bytes long + while ( true ) + { + int selection = SEL_GENERIC( FlagMenuName, FlagMenu ); + + switch (selection) + { + case -1: + return; + case 0: + SelectHUDDisplayFlag(); + break; + case 1: + SelectAddPartyMember(); + break; + case 2: + SelectRemovePartyMember(); + break; + case 3: + EnablePartyEditing(); + break; + case 4: + SelectNavigator(); + break; + case 5: + SelectRomanceFlags(); + break; + case 6: + RoomEditorDisplay(); + break; + case 7: // Manual Input + SelectBitToggle(); + break; + case 8: + PrintEnabledBits(); + break; + case 9: + FlagMassEditor(); + break; + } + } +} + +void FlagMassEditor() { + while ( true ) + { + int selection = SEL_GENERIC( FlagMenuName, FlagMassEditor ); + + switch (selection) + { + case -1: + return; + case 0: + DisableAllBits(); + break; + case 1: + EnableAllBits(); + break; + case 2: + ToggleAllBits(); + break; + case 3: + ToggleRange(); + break; + } + } +} + +void DisableAllBits() { + for ( int i = 0; i < 8960; i++ ) { + BIT_OFF( i ); + } +} + +void EnableAllBits() { + for ( int i = 0; i < 8960; i++ ) { + BIT_ON( i ); + } +} + +void ToggleAllBits() { + for ( int i = 0; i < 8960; i++ ) { + if (BIT_CHK(i)) { + BIT_OFF(i); + } + else { + BIT_ON(i); + } + } +} + +void PrintEnabledBits() { + for ( int i = 0; i < 8960; i++ ) { + if (BIT_CHK(i)) { + PUT(i); + } + } +} + +void ToggleRange() { + DisplayMessagePrompt( FlagRangePrompt ); + int range1 = SelectNumber( 4 ); + DisplayMessagePrompt( FlagRangePrompt2 ); + int range2 = SelectNumber( 4 ); + + int onOff = SEL_GENERIC_NOT_HELP( -1, SelectOnOff ); + + switch (onOff) + { + case -1: // Back + break; + case 0: // On + for ( int i = range1; i < range2; i++ ) + { + BIT_ON( i ); + } + break; + case 1: // Off + for ( int i = range1; i < range2; i++ ) + { + BIT_OFF( i ); + } + break; + } +} + +void SelectHUDDisplayFlag() +{ + int dateDisplay = SEL_GENERIC_NOT_HELP( -1, DateDisplayDlg ); + int hud = 0; + + switch (dateDisplay) { + case -1: + return; + case 0: + DATE_DISP( 1 ); + FLD_PANEL_DISP( 1 ); + hud = 1; + break; + case 1: + DATE_DISP( 0 ); + FLD_PANEL_DISP( 0 ); + hud = 2; + break; + } + + MSG_WND_DSP(); + + switch ( hud ) { + case 0: + break; + case 1: + MSG_SYSTEM( HudTest1); + break; + case 2: + MSG_SYSTEM( HudTest2); + break; + } + + MSG_WND_CLS(); +} + +void SelectAddPartyMember() +{ + int unit = SEL_GENERIC_NOT_HELP( UnitMenuName, UnitSelect2 ) + 48; + if ( unit == 47 ) // Cancel + return; + + BIT_ON( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0100 + unit ); +} + +void SelectRemovePartyMember() +{ + int unit = SEL_GENERIC_NOT_HELP( UnitMenuName, UnitSelect2 ) + 48; + if ( unit == 47 ) // Cancel + return; + + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0100 + unit ); +} + +void EnablePartyEditing() +{ + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 0); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 1); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 2); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 3); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 4); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 5); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 6); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 0x0103 + 7); +} + +void SelectNavigator() +{ + int navi = SEL_GENERIC_NOT_HELP( NaviMenuName, NaviMenu ); + + switch ( navi ) + { + case -1: + break; + case 0: // Morgana + BIT_ON( 0 + 0x0800 + 0x0800 + 0x1000 + 12 ); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 13 ); + break; + case 1: // Futaba + BIT_ON( 0 + 0x0800 + 0x0800 + 0x1000 + 13 ); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 12 ); + break; + case 2: // None + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 12 ); + BIT_OFF( 0 + 0x0800 + 0x0800 + 0x1000 + 13 ); + break; + } +} + +void SelectRomanceFlags() { + int lover = SEL_GENERIC_NOT_HELP( LoveMenuName, LoveMenu ); + if ( lover == -1 ) + return; + + lover += (0x0800 + 720); + SelectItemToggle( lover ); +} + +void SelectBitToggle() +{ + int id = SelectNumber( 4 ); + if (id == -1) + return; + + int onOff = SEL_GENERIC_NOT_HELP( -1, SelectOnOff ); + + switch (onOff) + { + case -1: // Back + break; + case 0: // On + BIT_ON( id ); + break; + case 1: // Off + BIT_OFF( id ); + break; + } +} + +void SelectItemToggle(int flag) +{ + int selection = SEL_GENERIC_NOT_HELP( -1, DateDisplayDlg ); + + switch (selection) { + case -1: + break; + case 0: + BIT_ON( flag ); + break; + case 1: + BIT_OFF( flag ); + break; + } +} + +// Room Editor +void RoomEditorDisplay() +{ + while ( true ) + { + int roomSel = SEL_GENERIC_NOT_HELP( -1, RoomEdit ); + + switch (roomSel) + { + case -1: + return; + case 0: + FurnitureEditorDisplay(); + break; + case 1: + CollectibleEditorDisplay(); + break; + case 2: + CleanlinessEditorDisplay(); + break; + } + } +} + +// Furniture Editor +void FurnitureEditorDisplay() +{ + while ( true ) + { + int furnSel = SEL_GENERIC_NOT_HELP( -1, FurnEdit ); + + switch ( furnSel ) + { + case -1: + return; + case 0: // Plant + SelectItemToggle(4230); + break; + case 1: // Sayuri + SelectItemToggle(101); + break; + case 2: // DVD Player + SelectItemToggle(3142); + break; + case 3: // Game Console + SelectItemToggle(3146); + break; + case 4: // Old TV Set + SelectItemToggle(4232); + break; + case 5: // Radio + SelectItemToggle(4233); + break; + case 6: // Cat Bed + SelectItemToggle(8121); + break; + case 7: // UFO Game Prizes + int ufoPrize = SelectNumber(1); + switch (ufoPrize) + { + case 0: // + SelectItemToggle(8186); + break; + case 1: // + SelectItemToggle(8187); + break; + case 2: // + SelectItemToggle(8188); + break; + case 3: // + SelectItemToggle(8189); + break; + case 4: // + SelectItemToggle(8190); + break; + } + break; + } + } +} + +// Collectible Editor +void CollectibleEditorDisplay() +{ + while ( true ) + { + int collSel = SEL_GENERIC_NOT_HELP( -1, CollEdit ); + + switch ( collSel ) + { + case -1: + return; + case 0: // Swan Boat + SelectItemToggle(3456); + break; + case 1: // Ramen + SelectItemToggle(3457); + break; + case 2: // Pennant + SelectItemToggle(3458); + break; + case 3: // Statue + SelectItemToggle(3459); + break; + case 4: // Sky Tree + SelectItemToggle(3460); + break; + case 5: // Big Hera + SelectItemToggle(3461); + break; + case 6: // Shumai + SelectItemToggle(3462); + break; + case 7: // Fusen + SelectItemToggle(3463); + break; + case 8: // I Love + SelectItemToggle(3464); + break; + case 9: // Idol + SelectItemToggle(3465); + break; + case 10: // Next + CollectibleEditorDisplay2(); + break; + } + } +} + +void CollectibleEditorDisplay2() +{ + while ( true ) + { + int collectables = SEL_GENERIC_NOT_HELP( -1, CollEdit2 ); + + switch ( collectables ) + { + case -1: + return; + case 0: // Seiza + SelectItemToggle(3466); + break; + case 1: // Syogi + SelectItemToggle(3467); + break; + case 2: // Hero + SelectItemToggle(3468); + break; + case 3: // Hamaya + SelectItemToggle(3469); + break; + case 4: // Jyainyan + SelectItemToggle(3470); + break; + case 5: // Sushi + SelectItemToggle(3471); + break; + case 6: // Choco + SelectItemToggle(3472); + break; + case 7: // Kumade + SelectItemToggle(3473); + break; + case 8: // Previous + return; + } + } +} + +// Cleanliness Editor +void CleanlinessEditorDisplay() +{ + while ( true ) + { + int cleanSel = SEL_GENERIC_NOT_HELP( -1, CleanEdit ); + switch (cleanSel) + { + case -1: + return; + case 0: // Bookshelf + SelectItemToggle(4229); + break; + case 1: // Work Bench + SelectItemToggle(4231); + break; + case 2: // Visitors Table + SelectItemToggle(8176); + break; + case 3: // Training Chair + SelectItemToggle(3144); + break; + case 4: // Winter Heater + SelectItemToggle(8147); + break; + case 5: // Laptop + SelectItemToggle(3237); + break; + } + } +} + +// About Dialog +void AboutDialogDisplay() +{ + DisplayMessagePrompt( AboutDlg ); +} + +void ReloadPreviousField() +{ + if ( FLD_GET_MAJOR() != FLD_GET_PREV_MAJOR() || FLD_GET_MINOR() != FLD_GET_PREV_MINOR() ) + { + // Reload previous field + CALL_FIELD( FLD_GET_PREV_MAJOR(), FLD_GET_PREV_MINOR(), 0, 0 ); + } +} diff --git a/ModMenuField.msg b/ModMenuField.msg new file mode 100644 index 0000000..67160d1 --- /dev/null +++ b/ModMenuField.msg @@ -0,0 +1,918 @@ +[dlg ModMenuName] +Amicitia Mod Menu[w][e] + +[sel ModMenu] +[s]Player[f 4 26 0 36][e] +[s]Battle Select[f 4 26 1 37][e] +[s]Teleport[f 4 26 2 38][e] +[s]Sound Test[f 4 26 3 39][e] +[s]Field Select[f 4 26 4 40][e] +[s]Event Select[f 4 26 5 41][e] +[s]Camera[f 4 26 6 42][e] +[s]NPCs[f 4 26 7 43][e] +[s]Flags[f 4 26 8 44][e] +[s]Calendar[f 4 26 9 45][e] +[s]Check Phone/Auto Recover[f 4 26 10 46][e] +[s]About[f 4 26 11 47][e] + +[dlg GENERIC_HELP_36] +[s]Edit your Personas, items, stats,[n]money, or even your name.[e] + +[dlg GENERIC_HELP_37] +[s]Choose a type of battle[n]to start, then begin[n]the fight![e] + +[dlg GENERIC_HELP_38] +[s]Clip through walls and explore[n]out of bounds areas. Hold[n]Square to change axis.[e] + +[dlg GENERIC_HELP_39] +[s]Select a BGM ID to[n]play back an audio track.[e] + +[dlg GENERIC_HELP_40] +[s]Enter the ID of a field pack[n]to warp to that map.[e] + +[dlg GENERIC_HELP_41] +[s]Enter the ID of an event pack[n]to start the event.[e] + +[dlg GENERIC_HELP_42] +[s]Change the camera's position,[n]rotation, and field of view.[e] + +[dlg GENERIC_HELP_43] +[s]Spawn NPC models and[n]preview their animations.[e] + +[dlg GENERIC_HELP_44] +[s]Change various values[n]in the game's memory.[e] + +[dlg GENERIC_HELP_45] +[s]Set a date and time and[n]travel directly to it.[e] + +[dlg GENERIC_HELP_46] +[s]View your IM messages[n]or auto heal the party[n]just like the Square Button is[n]supposed to do.[e] + +[dlg GENERIC_HELP_47] +[s]Show some info about the[n]development of this mod.[e] + + +[dlg PlayerMenuName] +Player Options[w][e] + +[sel PlayerMenu] +[s]Personas[f 4 26 0 50][e] +[s]Social Stats[f 4 26 1 51][e] +[s]Items[f 4 26 2 52][e] +[s]Set Confidant Rank[f 4 26 3 53][e] +[s]Set Protag Name[f 4 26 4 54][e] +[s]Set Team Name[f 4 26 5 55][e] +[s]Animation Test[f 4 26 6 56][e] +[s]Set Scale[f 4 26 7 57][e] +[s]Attach Item Model[f 4 26 8 58][e] +[s]Max Money[f 4 26 9 59][e] + +[dlg GENERIC_HELP_50] +[s]Add or remove your Personas, or[n]give you or your party[n]members new Skills.[e] + +[dlg GENERIC_HELP_51] +[s]Add points to your Knowledge,[n]Charm, Proficiency, Guts[n]or Kindness.[e] + +[dlg GENERIC_HELP_52] +[s]Give yourself a desired amount of[n]any consumables, weapons, armor,[n]costumes, or even key items.[e] + +[dlg GENERIC_HELP_53] +[s]Select a Confidant and set your[n]current rank with their Arcana.[e] + +[dlg GENERIC_HELP_54] +[s]Rename the protagonist at any[n]point in the game.[n][e] + +[dlg GENERIC_HELP_55] +[s]Change the group name of the[n]Phantom Thieves at any[n]point in the game.[n][e] + +[dlg GENERIC_HELP_56] +[s]Select one of the protagonist's[n]Field GAP files and view[n]its animations.[e] + +[dlg GENERIC_HELP_57] +[s]Change the size of the[n]selected model.[e] + +[dlg GENERIC_HELP_58] +[s]Adds 999,999 yen to your wallet.[e] + + +[dlg ItemMenuName] +Select Item Type...[w][e] + +[sel ItemMenu] +Consumables[f 4 26 0 61][e] +Accessories[f 4 26 1 62][e] +Key Items[f 4 26 2 63][e] +Ranged Weapons[f 4 26 3 64][e] +Melee Weapons[f 4 26 4 65][e] +Outfits[f 4 26 5 66][e] +Armor[f 4 26 6 67][e] +Materials[f 4 26 7 68][e] +Skill Cards[f 4 26 8 69][e] + +[dlg GENERIC_HELP_61] +[s]Items that recover HP & SP,[n]relieve status ailments, or[n]provide buffs or debuffs.[e] + +[dlg GENERIC_HELP_62] +[s]Items that you can equip to your[n]party members for stat[n]enhancements.[e] + +[dlg GENERIC_HELP_63] +[s]Passive items that are acquired[n]throughout the story.[e] + +[dlg GENERIC_HELP_64] +[s]Arms that can be equipped to[n]fire bullets during battle.[e] + +[dlg GENERIC_HELP_65] +[s]Weapons used for basic physical[n]attacks during battle.[e] + +[dlg GENERIC_HELP_66] +[s]Equippable appearance changes[n]for party members that modify[n]their model in the Metaverse.[e] + +[dlg GENERIC_HELP_67] +[s]Equippable items that can boost[n]defense or provide other benefits.[e] + +[dlg GENERIC_HELP_68] +[s]Items that can be sold to Iwai[n]or used to create tools.[e] + +[dlg GENERIC_HELP_69] +[s]Items that can be used to assign[n]Skills to one of your Personas.[e] + + +[dlg CommuMenuName] +Select Confidant...[w][e] + +[sel CommuMenu] +Igor[f 4 26 0 72][e] +Morgana[f 4 26 1 73][e] +Makoto Niijima[f 4 26 2 74][e] +Haru Okumura[f 4 26 3 75][e] +Yusuke Kitagawa[f 4 26 4 76][e] +Sojiro Sakura[f 4 26 5 77][e] +Ann Takamaki[f 4 26 6 78][e] +Ryuji Sakamoto[f 4 26 7 79][e] +Goro Akechi[f 4 26 8 80][e] +Futaba Sakura[f 4 26 9 81][e] +Chihaya Mifune[f 4 26 10 82][e] +Caroline and Justine[f 4 26 11 83][e] +Munehisa Iwai[f 4 26 12 84][e] +Tae Takemi[f 4 26 13 85][e] +Sayado Kawakami[f 4 26 14 86][e] +Ichiko Ohya[f 4 26 15 87][e] +Shinya Oda[f 4 26 16 88][e] +Hifumi Togo[f 4 26 17 89][e] +Yuuki Mishima[f 4 26 18 90][e] +Toranosuke Yoshida[f 4 26 19 91][e] +Sae Niijima[f 4 26 20 92][e] + +[dlg GENERIC_HELP_72] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Fool[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_73] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Magician[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_74] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Priestess[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_75] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Empress[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_76] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Emperor[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_77] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Heirophant[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_78] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Lovers[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_79] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Chariot[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_80] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Justice[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_81] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Hermit[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_82] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Fortune[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_83] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Strength[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_84] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Hanged Man[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_85] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Death[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_86] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Temperance[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_87] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Devil[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_88] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Tower[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_89] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Star[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_90] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Moon[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_91] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Sun[clr 0][n]Arcana.[e] + +[dlg GENERIC_HELP_92] +[s]Set the desired rank for[n]the Confidant of the [clr 9]Judgement[clr 0][n]Arcana.[e] + +[dlg UNUSED_HELP_59] +[s]Set the desired rank for[n]the Confidant of the [clr 9]World[clr 0][n]Arcana.[e] + +[dlg StatsMenuName] +Select Stat Type...[w][e] + +[sel StatsMenu] +Knowledge[f 4 26 0 96][e] +Charm[f 4 26 1 97][e] +Proficiency[f 4 26 2 98][e] +Guts[f 4 26 3 99][e] +Kindness[f 4 26 4 100][e] + +[dlg GENERIC_HELP_96] +[s]Increase your [clr 26]Knowledge[clr 0] stat[n]by the specified number of[n]points.[e] + +[dlg GENERIC_HELP_97] +[s]Increase your [clr 26]Charm[clr 0] stat[n]by the specified number of[n]points.[e] + +[dlg GENERIC_HELP_98] +[s]Increase your [clr 26]Proficiency[clr 0] stat[n]by the specified number of[n]points.[e] + +[dlg GENERIC_HELP_99] +[s]Increase your [clr 26]Guts[clr 0] stat[n]by the specified number of[n]points.[e] + +[dlg GENERIC_HELP_100] +[s]Increase your [clr 26]Kindness[clr 0] stat[n]by the specified number of[n]points.[e] + +[dlg StatPrompt [Stats]] +Add how many points?[n](max. 2 digits, press Circle to end)[w][e] + +[dlg ItemPrompt [Items]] +Enter the item ID you want.[n](max. 4 digits, press Circle to end)[w][e] + +[dlg ItemPrompt2 [Items]] +Enter how many items you want.[n](max. 2 digits, press Circle to end)[w][e] + +[dlg CmmDialog [Confidant Rank]] +Enter the Confidant's Arcana ID.[n](max. 2 digits, press Circle to end)[w][e] + +[dlg CmmDialog2 [Confidant Rank]] +Enter the desired Confidant rank.[w][e] + + +[dlg AnimMenuName] +Player Animation[w][e] + +[sel AnimMenu] +Field Animation Test[e] +Morgana Out of Bag[e] +Morgana In Bag[e] +Show Bag[e] +Hide Bag[e] +Umbrella On[e] +Umbrella Off[e] + +[dlg GAPMenuName] +GAP Playback[w][e] + +[sel GAPMenu] +Set GAP ID[f 4 26 0 110][e] +Set GAP Index[f 4 26 1 111][e] +Toggle Loop[f 4 26 5 112][e] +Set Speed[f 4 26 3 113][e] +Set Time[f 4 26 4 114][e] +Playback animation[f 4 26 5 115][e] + +[dlg GENERIC_HELP_110] +[s]Input the filename of[n]a [clr 9]field GAP file for[clr 0][n]this character. (Starts with [clr 9]af[clr 0])[e] + +[dlg GENERIC_HELP_111] +[s]Input the index of the[n]animation from the [clr 26]GAP[clr 0][n]that you want to view.[e] + +[dlg GENERIC_HELP_112] +[s]Decide whether you want[n]the animation to repeat or not[n]when it's finished.[e] + +[dlg GENERIC_HELP_113] +[s]Decide the playback speed[n]of the animation.[e] + +[dlg GENERIC_HELP_114] +[s]Decide how many seconds you[n]would like to play the[n]animation for.[e] + +[dlg GENERIC_HELP_115] +[s]Execute the animation playback[n][clr 9]after the above settings[clr 0][n]have been completed.[e] + +[dlg ScalePrompt [Scale Model]] +Set the character's model scale.[n](press Circle to end)[n]Default is 10.[w][e] + + +[dlg CameraMenuName] +Camera Options[w][e] + +[sel CameraMenu] +Reposition Camera[f 4 26 0 119][e] +Adjust FOV[f 4 26 1 120][e] +Rotate Camera[f 4 26 2 121][e] +Unlock Camera[f 4 26 3 122][e] +Lock Camera[f 4 26 4 123][e] +Disable Camera Shake[f 4 26 5 124][e] + +[dlg GENERIC_HELP_119] +[s]Move the camera along the X, Y[n]or Z axis. Hold Square to change[n]the axis.[e] + +[dlg GENERIC_HELP_120] +[s]Zoom the camera in and out by[n]changing the Field of View.[e] + +[dlg GENERIC_HELP_121] +[s]Change the orientation of the[n]camera with the D-pad.[e] + +[dlg GENERIC_HELP_122] +[s]Make the camera follow the player[n]again if previously locked.[e] + +[dlg GENERIC_HELP_123] +[s]Makes the camera stationary,[n]which is required to modify it.[e] + +[sel OneThruTen] +1[e] +2[e] +3[e] +4[e] +5[e] +6[e] +7[e] +8[e] +9[e] +10[e] + +[dlg CalendarMenuName] +Calendar Options[w][e] + +[sel CalendarMenu] +Set Next Day[f 4 26 0 127][e] +Call Calendar[f 4 26 1 128][e] +Set Weather[f 4 26 2 129][e] + +[dlg GENERIC_HELP_127] +[s]Choose the day and month[n]to warp to.[e] + +[dlg GENERIC_HELP_128] +[s]End the current day and warp[n]to the next specified day.[e] + +[dlg GENERIC_HELP_129] +[s]Change the current weather[n]condition value. Weather should[n]change after reloading map.[e] + +[dlg CalendarPrompt[Calendar]] +Choose what month to start in.[n](press Circle to end)[w][e] + +[dlg CalendarPrompt2 [Calendar]] +Choose what day to start on.[n](max. 2 digits, press Circle to end)[w][e] + +[dlg EventDlg [Event Select]] +Choose the first 3 digits of +[n]the event to load.[n](max. 3 digits, press Circle to end)[w][e] + +[dlg EventDlg2 [Event Select]] +Choose the last 3 digits of +[n]the event to load.[n](max. 3 digits, press Circle to end)[w][e] + +[dlg FieldDlg [Field Select]] +Choose the first 3 digits of +[n]the field to load.[n](max. 3 digits, press Circle to end)[w][e] + +[dlg FieldDlg2 [Field Select]] +Choose the last 3 digits of +[n]the field to load.[n](max. 3 digits, press Circle to end)[w][e] + +[dlg SpawnMenuName] +NPC Options[w][e] + +[sel SpawnMenu] +Spawn Model[f 4 26 0 138][e] +Animate Model[f 4 26 1 139][e] +Set Model Scale[f 4 26 2 140][e] +Attach Item Model[f 4 26 3 141][e] +Spawn Object Model[f 4 26 4 142][e] + +[dlg GENERIC_HELP_138] +[s]Input a [clr 9]GMD filename[clr 0][n]to spawn a character model from.[e] + +[dlg GENERIC_HELP_139] +[s]Apply field animations[n]to the last NPC you spawned.[e] + +[dlg PersonaMenuName] +Persona Options[w][e] + +[sel PersonaMenu] +Add Persona[f 4 26 0 142][e] +Delete Personas[f 4 26 1 143][e] +Add Skill[f 4 26 2 144][e] +Unlock Full Compendium[f 4 26 3 145][e] + +[dlg GENERIC_HELP_142] +[s]Input a Persona's name or ID[n]to add it to your stock.[e] + +[dlg GENERIC_HELP_143] +[s]Permanently remove all Personas[n]from your current stock.[e] + +[dlg GENERIC_HELP_144] +[s]Choose a party member and the[n]name or ID of a Skill to add[n]to their current Persona.[e] + + +[dlg UnitMenuName] +Select Party Member[w][e] + +[sel UnitSelect] +Joker[e] +Ryuji[e] +Morgana[e] +Ann[e] +Yusuke[e] +Makoto[e] +Haru[e] +Futaba[e] +Akechi[e] + +[sel UnitSelect2] +Ryuji[e] +Morgana[e] +Ann[e] +Yusuke[e] +Makoto[e] +Haru[e] +Futaba[e] +Akechi[e] + +[dlg PersonaDelPrompt [Delete Personas]] +This will permanently remove all +[n]Personas in your stock. Are you sure?[w][e] + +[dlg UnitPrompt [Add Skill]] +Choose a character to add a skill to +[n]their currently equipped Persona.[w][e] + +[dlg SkillPrompt [Add Skill]] +Enter the ID of the skill to add. +[n](max. 3 digits, press Circle to end)[w][e] + +[dlg PersonaAddPrompt [Add Persona]] +Input the ID of the Persona to add. +[n](max. 3 digits, press Circle to end)[w][e] + +[dlg NPCPrompt [Model Select]] +Set the first (4 digits) of the NPC +[n]filename to load. (Press Circle to end)[w][e] + +[dlg NPCPrompt2 [Model Select]] +Set the next (3 digits) of the NPC +[n]model filename to load. (Press Circle to end)[w][e] + +[dlg NPCPrompt3 [Model Select]] +Set the last (2 digits) of the NPC +[n]model filename to load. (Press Circle to end)[w][e] + +[dlg GapPrompt [Animation Test]] +Select the GAP ID. +[n](max. 3 digits, press Circle to end)[w][e] + +[dlg GapPrompt2 [Animation Test]] +Select which animation to play. +[n](max. 2 digits, press Circle to end)[w][e] + +[dlg GapPrompt3 [Animation Test]] +Select whether to loop or not.[w][e] + +[dlg GapPrompt4 [Animation Test]] +Select the third parameter. +[n](max. 2 digits, press Circle to end)[w][e] + +[dlg GapPrompt5 [Animation Test]] +Select the animation speed. Default is 10. +[n](max. 2 digits, press Circle to end)[w][e] + +[dlg GapPrompt6 [Animation Test]] +Select the number of seconds to play.[w][e] + +[dlg CameraPrompt [Camera Mode]] +Use the D-Pad to manipulate the camera. +[n]Press Triangle to quit. +[n](Camera must be locked first!)[w][e] + +[dlg SelectBgmDialog [Ultimate DJ TGE]] +Select a bgm to play.[w][e] + + +[dlg FlagMenuName] +Flag Options[w][e] + +[sel FlagMenu] +HUD Display[f 4 26 0 165][e] +Add Party Members[f 4 26 1 166][e] +Remove Party Members[f 4 26 2 167][e] +Enable Party Editing[f 4 26 3 168][e] +Navigator[f 4 26 4 169][e] +Change Romance Route[f 4 26 5 170][e] +Room Editor[f 4 26 6 171][e] +Manual Input[f 4 26 7 172][e] +Print Enabled Flags[f 4 26 8 173][e] +Mass Flag Editor[f 4 26 9 174][e] + +[dlg GENERIC_HELP_165] +[s]Show or hide the user interface[n]elements, such as the date, time,[n]and mission list.[e] + +[dlg GENERIC_HELP_166] +[s]Make a Persona user available to[n]add to your party.[e] + +[dlg GENERIC_HELP_167] +[s]Revoke a Persona user's[n]availability to be added[n]to your party.[e] + +[dlg GENERIC_HELP_168] +[s]Allow choosing your own[n]party members from the Stats[n]menu in the pause menu.[e] + +[dlg GENERIC_HELP_169] +[s]Change which character[n]currently serves as the Navigator.[e] + +[dlg GENERIC_HELP_170] +[s]Start or end a relationship with[n]a female Confidant.[e] + +[dlg GENERIC_HELP_171] +[s]Modify the state of the[n]protagonist's bedroom in[n]the Leblanc attic.[e] + +[dlg GENERIC_HELP_172] +[s]Enter an 4-digit decimal value[n]of a bit to either[n]enable or disable it.[e] + +[dlg GENERIC_HELP_173] +[s]Print all currently enabled[n]bit flag values to the[n]TTY log.[e] + +[dlg FieldMenuName] +Field Select[e] + +[sel FieldMenu] +Enter Field ID[f 4 26 0 176][e] +Load Field[f 4 26 1 177][e] + +[dlg GENERIC_HELP_176] +[s]Input the 6 digits of a[n][clr 9]field pack's[clr 0] filename[n](found in ps3.cpk/field)[e] + +[dlg GENERIC_HELP_177] +[s]Attempt to load the selected[n]field. [clr 9]WARNING: Some fields may[n]softlock the game.[clr 0][e] + +[dlg EventMenuName] +Event Select[e] + +[sel EventMenu] +Enter Event ID[f 4 26 0 180][e] +Load Event[f 4 26 1 181][e] + +[dlg GENERIC_HELP_180] +[s]Input the 6 digits of a[n][clr 9]event pack's[clr 0] filename[n](found in data.cpk/event)[e] + +[dlg GENERIC_HELP_181] +[s]Attempt to load the selected[n]event. [clr 9]WARNING: Some events may[n]softlock the game.[clr 0][e] + +[dlg NaviMenuName] +Select Navigator[w][e] + +[sel NaviMenu] +Morgana[e] +Futaba[e] +None[e] + +[sel DateDisplayDlg] +Enable[e] +Disable[e] + +[dlg LoveMenuName] +Select Relationship[w][e] + +[sel LoveMenu] +Makoto[e] +Haru[e] +Ann[e] +Futaba[e] +Chihaya[e] +Takemi[e] +Kawakami[e] +Ohya[e] +Hifumi[e] + +[dlg AboutDlg[About this menu]] +Created by [clr 1]TGE[clr 0], [clr 6]ShrineFox[clr 0] and [clr 15]CaptainSwag101[clr 0] +[n]using TGE's [clr 9]AtlusScriptCompiler[clr 0] tool. Visit +[n]https://amicitia.github.io to learn more![w][e] + +[sel RoomEdit] +Furniture[e] +Collectibles[e] +Cleanliness[e] + +[sel FurnEdit] +Plant[e] +Sayuri[e] +DVD Player[e] +Game Console[e] +Old TV Set[e] +Radio[e] +Cat Bed[e] +UFO Game Prizes...[e] + +[sel CollEdit] +Swan Boat[e] +Ramen[e] +Pennant[e] +Statue[e] +Sky Tree[e] +Big Hera[e] +Shumai[e] +Fusen[e] +I Love[e] +Idol[e] +More...[e] + +[sel CollEdit2] +Seiza[e] +Syogi[e] +Hero[e] +Hamaya[e] +Jyainyan[e] +Sushi[e] +Choco[e] +Kumade[e] +Prev...[e] + +[sel CleanEdit] +Bookshelf[e] +Workbench[e] +Visitor Table[e] +Training Chair[e] +Winter Heater[e] +Laptop[e] + +[dlg MonthMenuName] +Select a Month[e] + +[sel MonthMenu] +January[e] +February[e] +March[e] +April[e] +May[e] +June[e] +July[e] +August[e] +September[e] +October[e] +November[e] +December[e] + +[dlg CalendarError] +Invalid day selected.[n] +Please try again.[w][e] + +[dlg CalendarBackwardsError] +You can only go back one day at a time.[w][e] + +[dlg SelectBossName] +Boss Event Select[w][e] + +[sel Palace1] +Battle Scenario 1[e] +Battle with Morgana[e] +Battle Scenario 2[e] +Battle Scenario 3[e] +Sub Battle 1[e] +Sub Battle 2[e] +Gun Tutorial[e] +Hold Up Tutorial[e] +All Out Attack Tutorial[e] +Persona Recruit Tutorial[e] +Mini Boss 1[e] +Mini Boss 2[e] +Shadow Kamoshida[e] + +[sel Palace2] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +Battle Scenario[e] +Shadow Madarame[e] + +[sel Palace3] +Battle Scenario[e] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +Mini Boss 4[e] +Mini Boss 5[e] +Shadow Kaneshiro[e] + +[sel Palace4] +Bandit[e] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +Mini Boss 4[e] +Shadow Wakaba[e] + +[sel Palace5] +Cognitive Sugimura[e] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +Mini Boss 4[e] +Shadow Okumura[e] + +[sel Palace6] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3 (05_B)[e] +Mini Boss 4 (05_BOSS)[e] +Akechi's First Battle[e] +Mini Boss (Dark Zone)[e] +Mini Boss (Camera Room)[e] +Mini Boss (Dice)[e] +Slot (ENYRY) Battle[e] +Escape Battle[e] +Shadow Sae[e] + +[sel Palace7] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +Mini Boss 4[e] +First Target[e] +Second Target[e] +Third Target[e] +Fourth Target[e] +Fifth Target[e] +Akechi[e] +Shadow Shido[e] + +[sel Palace8] +Mini Boss 1[e] +Mini Boss 2[e] +Mini Boss 3[e] +The Holy Grail[e] +The Twins[e] +Uriel[e] +Raphael[e] +Gabriel[e] +Michael[e] +Yaldabaoth[e] + +[sel Misc1] +D00_SCENARIO_BATTLE_01[e] +QUEST_BATTLE[e] +Yusuke Co-op[e] +int_CLEAR[e] +ALERT_CLEAR_EX[e] +PALACE_CLEAR_SYS[e] +PALACE_CALL_CALENDAR[e] +SYMBOL_ENCOUNT_START[e] +D_ENCOUNT_START[e] +dungeon_return_calendar[e] +dungeon_return[e] +Next[e] + +[sel Misc2] +dungeon_exit_time_set[e] +dungeon_start_format[e] +DUNGEON_START_SAVE[e] +result_counter_clear[e] +MVP_CHOICE[e] +D_ENCOUNT_NO_GET[e] +Dummy[e] +Dummy[e] +Previous[e] + +[dlg HudTest1] +HUD has been enabled.[w][e] + +[dlg HudTest2] +HUD has been disabled.[w][e] + +[dlg PersonaAdded] +The chosen Persona has been[n]added to your stock.[w][e] + +[dlg PersonaDeleted] +All Personas have been deleted.[w][e] + +[dlg WeatherChanged] +Weather has been changed.[w][e] + +[dlg LoadCheckError] +Set the required parameters[n]before attempting to load![w][e] + +[dlg WeatherMenuName] +Weather Select[w][e] + +[sel WeatherMenu] +Sunny[e] +Rainy[e] +Cloudy[e] +Snow[e] +Rainy Season[e] +Typhoon Warning[e] +Sunny Pollen Warning[e] +Cloudy Pollen Warning[e] +Torrential Rain[e] +Sunny Heatwave/Hot Night[e] +Sunny Flu Season[e] +Cloudy Flu Season[e] + +[dlg BattleTypeName] +Battle Type Select[w][e] + +[sel BattleTypeMenu] +Regular Encounter[e] +Boss Encounter[e] +Event Battle[e] + +[dlg EventBattleName] +Battle Type Select[w][e] + +[sel PalaceMenu] +Castle[e] +Art Museum[e] +First World Bank[e] +Pyramid[e] +Space Station[e] +Casino[e] +Cruise Ship[e] +Mementos Depths[e] +Misc[e] + +[dlg PalaceName] +Palace Select[e] + +[sel EventBattleSelect] +Akechi[e] +Akechi Phase 2[e] +Holy Grail[e] +Yaldabaoth[e] +Velvet Twins[e] +MISC[e] + +[dlg EncounterPrompt] +Set the number of the encounter[n]you want to fight (3 digits).[w][e] + +[sel FlagMassEditor] +Disable all flags[e] +Enable all flags[e] +Swap enabled/disabled flags[e] +Toggle range of flags[e] + +[dlg PersonaAddSkillMenuName] +Persona Options[w][e] + +[sel PersonaAddSkillMenu] +Add Skill[e] +Add Skill (Manual Input)[e] + +[dlg PersonaAddMenuName] +Persona Options[w][e] + +[sel PersonaAddMenu] +Add Persona[e] +Add Persona (Manual Input)[e] + +[dlg BagShowHide] +The bag has been toggled.[n]To see the change, go to a new field[n]or reload the current one.[w][e] + +[dlg GENERIC_HELP_229] +Removes the swaying effect[n]of the camera that's[n]used in dungeons.[w][e] + +[dlg GENERIC_HELP_230] +Select an item's model ID to[n]spawn it and connect it to[n]the character's model.[w][e] + +[dlg GENERIC_HELP_231] +Select a range of flags[n]to either enable or disable.[w][e] + +[dlg ItemSpawnPrompt] +Enter the first half of the model's[n]ID from data.cpk/model/item.[n](Max 4 digits, press Circle to end).[w][e] + +[dlg ItemSpawnPrompt2] +Enter the last half of the model's[n]ID from data.cpk/model/item.[n](Max 3 digits, press Circle to end).[w][e] + +[dlg ObjectSpawnPrompt] +Enter the first half of the[n]model's ID from data.cpk/model/field_tex/object.[n](Max 3 digits, press Circle to end).[w][e] + +[dlg ObjectSpawnPrompt2] +Enter the last half of the[n]model's ID from data.cpk/model/field_tex/object.[n](Max 3 digits, press Circle to end).[w][e] + +[dlg FlagRangePrompt] +Enter the start of the[n]range to narrow down.[n](Max 4 digits, press Circle to end).[w][e] + +[dlg FlagRangePrompt2] +Enter the end of the[n]range to narrow down.[n](Max 4 digits, press Circle to end).[w][e] + +[dlg GENERIC_HELP_238] +Unlocks all Personas in the[n]Compendium. [clr 9]This will delete all[n]Personas in your current stock![clr 0][w][e] diff --git a/build.bat b/build.bat index 9b16efd..8834f5e 100644 --- a/build.bat +++ b/build.bat @@ -12,7 +12,9 @@ if not exist %OUTPUT_PATH%\field mkdir %OUTPUT_PATH%\field if not exist %OUTPUT_PATH%\script\field mkdir %OUTPUT_PATH%\script\field copy .\camp\shared\sharedUI.spd "%OUTPUT_PATH%\camp\shared\sharedUI.spd" -%COMPILER% .\field\field.bf.flow -Compile -OutFormat V3BE -Library P5 -Encoding P5 -Out "%OUTPUT_PATH%\field\field.bf" +%PAKPACK% unpack "%INPUT_PATH%\fldPack.pac" %INPUT_PATH%\extracted + +%COMPILER% ModMenuField.flow -Compile -OutFormat V3BE -Library P5 -Encoding P5 -Out "%OUTPUT_PATH%\field\field.bf" -Hook %COMPILER% .\dungeon\dungeon.bf.flow -Compile -OutFormat V3BE -Library P5 -Encoding P5 -Out "%OUTPUT_PATH%\field\dungeon.bf" %COMPILER% .\mementos\at_dng.bf.flow -Compile -OutFormat V3BE -Library P5 -Encoding P5 -Out "%OUTPUT_PATH%\field\at_dng.bf" %COMPILER% .\introduction\fscr0150_002_100.bf.flow -Compile -OutFormat V3BE -Library P5 -Encoding P5 -Out "%OUTPUT_PATH%\script\field\fscr0150_002_100.bf"