Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
                    }
                }
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }