Exemplo n.º 1
0
        internal static void import_char01(ref Player player, string arg_8)
        {
            Classes.File file;

            seg042.find_and_open_file(out file, false, Path.Combine(Config.GetSavePath(), arg_8));

            seg041.displayString("Loading...Please Wait", 0, 10, 0x18, 0);

            if (gbl.import_from == ImportSource.Curse)
            {
                byte[] data = new byte[Player.StructSize];
                seg051.BlockRead(Player.StructSize, data, file);
                seg051.Close(file);

                player = new Player(data, 0);

            }
            else if (gbl.import_from == ImportSource.Pool)
            {
                byte[] data = new byte[PoolRadPlayer.StructSize];
                seg051.BlockRead(PoolRadPlayer.StructSize, data, file);
                seg051.Close(file);

                PoolRadPlayer poolRadPlayer = new PoolRadPlayer(data);

                player = ConvertPoolRadPlayer(poolRadPlayer);
            }
            else if (gbl.import_from == ImportSource.Hillsfar)
            {
                byte[] data = new byte[HillsFarPlayer.StructSize];
                seg051.BlockRead(HillsFarPlayer.StructSize, data, file);
                seg051.Close(file);

                HillsFarPlayer var_1C4 = new HillsFarPlayer(data);

                player = ConvertHillsFarPlayer(var_1C4, arg_8);

                var_1C4 = null;
            }

            if (gbl.import_from == ImportSource.Curse)
            {
                arg_8 = System.IO.Path.GetFileNameWithoutExtension(arg_8);
            }
            else
            {
                arg_8 = seg042.clean_string(player.name);
            }

            string filename = Path.Combine(Config.GetSavePath(), arg_8 + ".swg");
            if (seg042.file_find(filename) == true)
            {
                byte[] data = new byte[Item.StructSize];

                seg042.find_and_open_file(out file, false, filename);

                while (true)
                {
                    if (seg051.BlockRead(Item.StructSize, data, file) == Item.StructSize)
                    {
                        player.items.Add(new Item(data, 0));
                    }
                    else
                    {
                        break;
                    }
                }

                seg051.Close(file);
            }

            filename = Path.Combine(Config.GetSavePath(), arg_8 + ".fx");
            if (seg042.file_find(filename) == true)
            {
                byte[] data = new byte[Affect.StructSize];
                seg042.find_and_open_file(out file, false, filename);

                while (true)
                {
                    if (seg051.BlockRead(Affect.StructSize, data, file) == Affect.StructSize)
                    {
                        Affect tmp_affect = new Affect(data, 0);

                        player.affects.Add(new Affect(data, 0));
                    }
                    else
                    {
                        break;
                    }
                }

                seg051.Close(file);
            }

            filename = Path.Combine(Config.GetSavePath(), arg_8 + ".spc");
            if (gbl.import_from == ImportSource.Pool)
            {
                if (seg042.file_find(filename) == true)
                {
                    byte[] data = new byte[Affect.StructSize];
                    seg042.find_and_open_file(out file, false, filename);

                    while (true)
                    {
                        if (seg051.BlockRead(Affect.StructSize, data, file) == Affect.StructSize)
                        {
                            if (asc_49280.MemberOf(data[0]) == true)
                            {
                                Affect tmpAffect = new Affect(data, 0);
                                player.affects.Add(tmpAffect);
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                    seg051.Close(file);

                }
            }

            seg043.clear_keyboard();
            ovr025.reclac_player_values(player);
            ovr026.ReclacClassBonuses(player);
        }
Exemplo n.º 2
0
        // sub_48F35
        internal static void TransferHillsFarCharacter(HillsFarPlayer hf_player, Player player, Player previousSelectPlayer)
        {
            if (player.stats2.Str.cur < hf_player.stat_str)
            {
                player.stats2.Str.Load(hf_player.stat_str);
            }

            if (player.stats2.Str00.cur < hf_player.stat_str00)
            {
                player.stats2.Str00.Load(hf_player.stat_str00);
            }

            if (player.stats2.Int.cur < hf_player.stat_int)
            {
                player.stats2.Int.Load(hf_player.stat_int);
            }

            if (player.stats2.Wis.cur < hf_player.stat_wis)
            {
                player.stats2.Wis.Load(hf_player.stat_wis);
            }

            if (player.stats2.Dex.cur < hf_player.stat_dex)
            {
                player.stats2.Dex.Load(hf_player.stat_dex);
            }

            if (player.stats2.Con.cur < hf_player.stat_con)
            {
                player.stats2.Con.Load(hf_player.stat_con);
            }

            if (player.stats2.Cha.cur < hf_player.stat_cha)
            {
                player.stats2.Cha.Load(hf_player.stat_cha);
            }

            if (player.exp < hf_player.field_2E)
            {
                player.exp = hf_player.field_2E;
            }

            // If imported player has more than 500 platinum import that amount.
            if (player.Money.GetGoldWorth() < hf_player.field_28)
            {
                for (int slot = 0; slot < 5; slot++)
                {
                    ovr022.DropCoins(slot, player.Money.GetCoins(slot), player);
                }
                ovr022.addPlayerGold((short)(hf_player.field_28 / 5));
            }

            if (player.age < hf_player.age)
            {
                player.age = hf_player.age;
            }

            player.cleric_lvl = (hf_player.field_B7 > 0) ? (byte)1 : (byte)0;
            player.magic_user_lvl = (hf_player.field_B8 > 0) ? (byte)1 : (byte)0;
            player.fighter_lvl = (hf_player.field_B9 > 0) ? (byte)1 : (byte)0;
            player.thief_lvl = (hf_player.field_BA > 0) ? (byte)1 : (byte)0;

            player.HitDice = 1;

            if (hf_player.field_26 != 0)
            {
                player.field_192 = 1;
            }

            SilentTrainPlayer();
            gbl.SelectedPlayer = previousSelectPlayer;

            player.hit_point_max = hf_player.field_21;
            player.hit_point_rolled = (byte)(player.hit_point_max - ovr018.get_con_hp_adj(player));
            player.hit_point_current = hf_player.field_20;
        }
Exemplo n.º 3
0
        private static Player ConvertHillsFarPlayer(HillsFarPlayer hf_player, string arg_8)
        {
            Player player = new Player();
            Classes.File file;

            player.items = new List<Item>();
            player.affects = new List<Affect>();
            player.actions = null;

            string fileExt = ".guy";

            if (PlayerFileExists(fileExt, hf_player.name) == true)
            {
                string savename = Path.Combine(Config.GetSavePath(), Path.ChangeExtension(arg_8, fileExt));

                seg042.find_and_open_file(out file, false, savename);

                byte[] data = new byte[Player.StructSize];

                seg051.BlockRead(Player.StructSize, data, file);
                seg051.Close(file);

                player = new Player(data, 0);

                Player PreviousSelectedPlayer = gbl.SelectedPlayer;
                gbl.SelectedPlayer = player;

                TransferHillsFarCharacter(hf_player, player, PreviousSelectedPlayer);

                if (hf_player.field_1D > 0)
                {
                    Item newItem = new Item(0, Affects.helpless, (Affects)hf_player.field_1D,
                        (short)(hf_player.field_1D * 200), 0, 0,
                        false, 0, false, 0, 0, 0x57, 0xa7, 0xa8, ItemType.Necklace, true);

                    player.items.Add(newItem);
                }

                if (hf_player.field_23 > 0)
                {
                    Item newItem = new Item(0, Affects.poison_plus_4, (Affects)hf_player.field_23,
                        (short)(hf_player.field_23 * 0x15E), 0, 1,
                        false, 0, false, 0, 1, 0x45, 0xa7, 0xce, ItemType.WandB, true);

                    player.items.Add(newItem);
                }

                if (hf_player.field_86 > 0)
                {
                    Item newItem = new Item(0, Affects.helpless, (Affects)hf_player.field_86,
                        (short)(hf_player.field_86 * 0xc8), 0, 0,
                        false, 0, false, 0, 0, 0x42, 0xa7, 0xa8, ItemType.RingInvis, true);

                    player.items.Add(newItem);
                }

                if (hf_player.field_87 > 0)
                {
                    Item newItem = new Item(0, Affects.highConRegen, (Affects)hf_player.field_87,
                        (short)(hf_player.field_87 * 0x190), 0, (short)(hf_player.field_87 * 10),
                        false, 0, false, 0, 0, 0x40, 0xa7, 0xb9, ItemType.Necklace, true);

                    player.items.Add(newItem);
                }
            }
            else
            {
                fileExt = ".cha";

                if (PlayerFileExists(fileExt, hf_player.name) == true)
                {
                    byte[] data = new byte[PoolRadPlayer.StructSize];

                    string savename = System.IO.Path.Combine(Config.GetSavePath(), Path.ChangeExtension(arg_8, fileExt));

                    seg042.find_and_open_file(out file, false, savename);

                    seg051.BlockRead(PoolRadPlayer.StructSize, data, file);
                    seg051.Close(file);

                    PoolRadPlayer poolRadPlayer = new PoolRadPlayer(data);

                    player = ConvertPoolRadPlayer(poolRadPlayer);

                    Player PreviousSelectedPlayer = gbl.SelectedPlayer;
                    gbl.SelectedPlayer = player;

                    TransferHillsFarCharacter(hf_player, player, PreviousSelectedPlayer);
                }
                else
                {
                    Player PreviousSelectedPlayer = gbl.SelectedPlayer;
                    gbl.SelectedPlayer = player;

                    for (int i = 0; i < 6; i++)
                    {
                        player.icon_colours[i] = (byte)(((gbl.default_icon_colours[i] + 8) << 4) + gbl.default_icon_colours[i]);
                    }

                    player.base_ac = 50;
                    player.thac0 = 40;
                    player.health_status = Status.okey;
                    player.in_combat = true;
                    player.field_13F = 1;
                    player.field_140 = 1;
                    player.field_DE = 1;

                    player.mod_id = seg051.Random((byte)0xff);
                    player.icon_id = 0x0A;

                    player.attacksCount = 2;
                    player.attack1_DiceCountBase = 1;
                    player.attack1_DiceSizeBase = 2;
                    player.field_125 = 1;
                    player.base_movement = 12;

                    player.name = hf_player.name;
                    player.stats2.Str.Load(hf_player.stat_str);
                    player.stats2.Str00.Load(hf_player.stat_str00);
                    player.stats2.Int.Load(hf_player.stat_int);
                    player.stats2.Wis.Load(hf_player.stat_wis);
                    player.stats2.Dex.Load(hf_player.stat_dex);
                    player.stats2.Con.Load(hf_player.stat_con);
                    player.stats2.Cha.Load(hf_player.stat_cha);

                    player.race = (Race)(hf_player.field_2D + 1);

                    if (player.race == Race.half_orc)
                    {
                        player.race = Race.human;
                    }

                    switch (player.race)
                    {
                        case Race.halfling:
                            player.icon_size = 1;
                            ovr024.add_affect(false, 0xff, 0, Affects.con_saving_bonus, player);
                            break;

                        case Race.dwarf:
                            player.icon_size = 1;
                            ovr024.add_affect(false, 0xff, 0, Affects.con_saving_bonus, player);
                            ovr024.add_affect(false, 0xff, 0, Affects.dwarf_vs_orc, player);
                            ovr024.add_affect(false, 0xff, 0, Affects.dwarf_and_gnome_vs_giants, player);
                            break;

                        case Race.gnome:
                            player.icon_size = 1;
                            ovr024.add_affect(false, 0xff, 0, Affects.con_saving_bonus, player);
                            ovr024.add_affect(false, 0xff, 0, Affects.gnome_vs_man_sized_giant, player);
                            ovr024.add_affect(false, 0xff, 0, Affects.dwarf_and_gnome_vs_giants, player);
                            ovr024.add_affect(false, 0xff, 0, Affects.affect_30, player);
                            break;

                        case Race.elf:
                            player.icon_size = 2;
                            ovr024.add_affect(false, 0xff, 0, Affects.elf_resist_sleep, player);
                            break;

                        case Race.half_elf:
                            player.icon_size = 2;
                            ovr024.add_affect(false, 0xff, 0, Affects.halfelf_resistance, player);
                            break;

                        default:
                            player.icon_size = 2;
                            break;
                    }

                    player._class = HillsFarClassMap[hf_player.field_35 & 0x0F];
                    player.age = hf_player.age;

                    player.cleric_lvl = (hf_player.field_B7 > 0) ? (byte)1 : (byte)0;
                    player.magic_user_lvl = (hf_player.field_B8 > 0) ? (byte)1 : (byte)0;
                    player.fighter_lvl = (hf_player.field_B9 > 0) ? (byte)1 : (byte)0;
                    player.thief_lvl = (hf_player.field_BA > 0) ? (byte)1 : (byte)0;
                    player.HitDice = 1;
                    player.sex = hf_player.field_2C;
                    player.alignment = hf_player.alignment;
                    player.exp = hf_player.field_2E;

                    if (player.magic_user_lvl > 0)
                    {
                        player.LearnSpell(Spells.detect_magic_MU);
                        player.LearnSpell(Spells.read_magic);
                        player.LearnSpell(Spells.shield);
                        player.LearnSpell(Spells.sleep);
                    }

                    SilentTrainPlayer();

                    ovr022.addPlayerGold(300);
                    gbl.SelectedPlayer = PreviousSelectedPlayer;
                    player.hit_point_max = hf_player.field_21;
                    player.hit_point_rolled = (byte)(player.hit_point_max - ovr018.get_con_hp_adj(player));
                    player.hit_point_current = hf_player.field_20;
                }
            }

            return player;
        }