protected bool update_item_repair(TactileLibrary.Data_Item item) { if (get_scene_map() == null) { return(true); } switch (Item_Action) { // Makes stat up window case 0: switch (Item_Timer) { case 3: item_user.item_effect(item, Item_Inventory_Target); Global.game_system.play_se(System_Sounds.Gain); get_scene_map().set_repair_popup(item_user.actor.items[Item_Inventory_Target], item_user, 242); Item_Action++; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Wait for popup case 1: if (!get_scene_map().is_map_popup_active()) { Item_Action++; } break; // Finish case 2: Item_Phase = 2; // Consume item item_user.use_item(Item_Used); break; } return(true); }
internal override void update() { if (Item_Calling) { In_Item_Use = true; Item_Calling = false; } if (In_Item_Use) { bool cont = false; while (!cont) { cont = true; switch (Item_Phase) { // Set up, suspend case 0: if (!Global.game_state.skip_ai_turn_activating && !Global.game_system.preparations) { if (Global.game_state.is_player_turn) { Global.scene.suspend(); } } else { cont = false; } Item_User_Id = Global.game_system.Item_User; Item_Used = Global.game_system.Item_Used; Item_Inventory_Target = Global.game_system.Item_Inventory_Target; ItemPromotionId = Global.game_system.ItemPromotionId; ItemTargetLoc = Global.game_system.ItemTargetLoc; Global.game_system.Item_User = -1; Global.game_system.Item_Used = -1; Global.game_system.Item_Inventory_Target = -1; Global.game_system.ItemPromotionId = -1; Global.game_system.ItemTargetLoc = new Vector2(-1, -1); Item_Phase = 1; Global.game_state.add_item_metric(item_user, Item_Used); break; case 1: TactileLibrary.Data_Item item = item_user.actor.items[Item_Used].to_item; // Promotion if (item.Promotes.Any()) { cont = update_item_promotion(item); } // Healing/Status Healing/Torch/Pure Water else if (item.can_heal_hp() || item.Status_Remove.Intersect(item_user.actor.negative_states).Any() || item.Torch_Radius > 0 || item.is_stat_buffer()) { cont = update_item_healing(item); } // Placeable else if (item.is_placeable()) { cont = update_item_placement(item); } // Stat/Growth Booster else if (item.is_stat_booster() || item.is_growth_booster()) { cont = update_item_stat_boost(item); } // Repair Kit else if (item.can_repair) { cont = update_item_repair(item); } // Status Healing catch //Debug else if (item.Status_Remove.Count > 0) { cont = update_item_healing(item); } else { #if DEBUG throw new ArgumentException("this item does nothing?"); #endif cont = update_item_healing(item); } //Item_Phase = 2; //Debug break; case 2: Item_Phase = 3; Item_Timer = 0; break; default: switch (Item_Timer) { case 0: if (item_user.has_canto() && !item_user.full_move()) { item_user.cantoing = true; if (item_user.is_active_player_team && !item_user.berserk) //Multi { item_user.open_move_range(); } } else { item_user.start_wait(false); Global.game_system.Menu_Canto = Canto_Records.None; } item_user.queue_move_range_update(); refresh_move_ranges(); Item_Timer++; break; case 1: if (!Global.game_system.is_interpreter_running && !Global.scene.is_message_window_active) { Item_Timer++; } break; case 2: end_item_use(); highlight_test(); break; } break; } } } }
protected bool update_item_healing(TactileLibrary.Data_Item item) { if (get_scene_map() == null) { return(true); } bool unit_visible = !Global.game_state.skip_ai_turn_activating && (!Global.game_map.fow || item.Torch_Radius > 0 || (item_user.visible_by() || Global.game_map.fow_visibility[Constants.Team.PLAYER_TEAM].Contains(item_user.loc))); switch (Item_Action) { // Makes HP window, stops map sprite case 0: switch (Item_Timer) { case 0: if (!Scrolling) { if (!unit_visible) { Item_Action++; break; } item_user.sprite_moving = false; item_user.frame = 0; item_user.facing = 2; if (item.can_heal_hp() && !item_user.actor.is_full_hp()) { get_scene_map().create_hud(Item_User_Id); } Item_Timer++; } else { return(true); } break; case 1: item_user.facing = 6; Item_Timer++; break; case 23: Item_Action = 1; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Map sprite animates case 1: switch (Item_Timer) { case 0: if (!unit_visible) { Item_Action++; break; } item_user.frame = 1; Item_Timer++; break; case 4: item_user.frame = 2; Item_Timer++; break; case 10: Item_Action = 2; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Starts item animation case 2: switch (Item_Timer) { case 0: if (!unit_visible) { Item_Action++; break; } get_scene_map().set_map_effect(item_user.loc, 0, Map_Animations.item_effect_id(item.Id)); Item_Timer++; break; case 30: Item_Action = 3; Item_Timer = 0; break; default: Item_Timer++; break; } break; // HP gain case 3: switch (Item_Timer) { case 0: item_user.item_effect(item, Item_Inventory_Target); if (!unit_visible) { Item_Action++; break; } Item_Timer++; break; case 1: if (!get_scene_map().is_map_effect_active()) { if (get_scene_map().combat_hud_ready()) { Item_Timer++; } } break; case 27: item_user.frame = 1; Item_Timer++; break; case 35: item_user.frame = 0; Item_Timer++; break; case 47: Item_Action = 4; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Finish case 4: Item_Phase = 2; // Consume item item_user.actor.use_item(Item_Used); if (!unit_visible) { break; } get_scene_map().clear_combat(); break; } return(unit_visible); return(true); }
protected bool update_item_placement(TactileLibrary.Data_Item item) { if (get_scene_map() == null) { return(true); } bool unit_visible = !Global.game_state.skip_ai_turn_activating && (!Global.game_map.fow || item.Torch_Radius > 0 || (item_user.visible_by() || Global.game_map.fow_visibility[Constants.Team.PLAYER_TEAM].Contains(item_user.loc))); switch (Item_Action) { // Starts item animation case 0: switch (Item_Timer) { case 0: if (!unit_visible) { Item_Action++; break; } get_scene_map().set_map_effect(ItemTargetLoc, 0, Map_Animations.item_effect_id(item.Id)); Item_Timer++; break; case 30: Item_Action = 1; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Spawn placeable case 1: switch (item.Placeable) { case TactileLibrary.Placeables.Mine: break; case TactileLibrary.Placeables.Light_Rune: Global.game_map.add_light_rune(ItemTargetLoc, this.item_user.team); break; } Item_Action = 2; break; // Wait case 2: switch (Item_Timer) { case 20: Item_Action = 3; Item_Timer = 0; break; default: Item_Timer++; break; } break; // Finish case 3: Item_Phase = 2; // Consume item item_user.use_item(Item_Used); break; } return(true); }
protected bool update_item_promotion(TactileLibrary.Data_Item item) { if (get_scene_map() == null) { return(true); } switch (Item_Action) { case 0: switch (Item_Timer) { case 0: #if DEBUG if (!item_user.actor.PromotedBy(item)) { throw new ArgumentException("Invalid promotion item for this class"); } #endif item_user.sprite_moving = false; item_user.frame = 0; item_user.facing = 2; Item_Timer++; return(false); case 1: if (!Scrolling) { Item_Timer++; item_user.item_effect(item, Item_Inventory_Target); Global.game_system.Class_Changer = Item_User_Id; // Make sure any preselected promotion choices are actually in the promotion list var promotionChoices = item_user.actor.actor_class.Promotion.Keys; if (ItemPromotionId > -1 && promotionChoices.Contains(ItemPromotionId)) { Global.game_system.Class_Change_To = ItemPromotionId; } else { Global.game_system.Class_Change_To = (int)item_user.actor.promotes_to(); } Transition_To_Battle = true; if (Global.game_system.preparations) { Battle_Transition_Timer = 0; Item_Timer++; return(false); } else { Battle_Transition_Timer = Global.BattleSceneConfig.BattleTransitionTime; } } break; case 2: Battle_Transition_Timer--; if (Battle_Transition_Timer == 0) { Item_Timer++; } break; case 3: if (Global.game_system.preparations) { Global.game_system.Battle_Mode = Constants.Animation_Modes.Full; } else { Global.game_system.Battle_Mode = Global.game_options.animation_mode == (byte)Constants.Animation_Modes.Map ? Constants.Animation_Modes.Map : Constants.Animation_Modes.Full; //Yeti } Global.scene_change("Scene_Promotion"); Item_Action = 1; Item_Timer = 0; break; } break; case 1: Item_Action = 2; break; case 2: switch (Item_Timer) { case 1: Transition_To_Battle = false; if (Global.game_system.preparations) { Global.game_system.Class_Changer = -1; // Consume item item_user.actor.use_item(Item_Used, true); item_user.recover_all(); end_item_use(); get_scene_map().resume_preparations_item_menu(); } else { Battle_Transition_Timer = Global.BattleSceneConfig.BattleTransitionTime; Item_Timer++; } break; case 2: if (Battle_Transition_Timer > 0) { Battle_Transition_Timer--; } if (Battle_Transition_Timer == 0) { Global.game_system.Class_Changer = -1; Item_Phase = 2; // Consume item item_user.actor.use_item(Item_Used, true); } break; default: Item_Timer++; break; } break; } return(true); }