Ejemplo n.º 1
0
        internal static void copy_protection()
        {
            string code_path_str;
            char   input_expected;
            char   input_key;

            ovr034.Load24x24Set(0x1A, 0, 1, "tiles");
            ovr034.Load24x24Set(0x16, 0x1A, 2, "tiles");

            seg037.DrawFrame_Outer();

            Seg041.DisplayString("Align the espruar and dethek runes", 0, 10, 2, 3);
            Seg041.DisplayString("shown below, on translation wheel", 0, 10, 3, 3);
            Seg041.DisplayString("like this:", 0, 10, 4, 3);
            int attempt = 0;

            do
            {
                int var_6 = seg051.Random(26);
                int var_7 = seg051.Random(22);

                ovr034.DrawIsoTile(var_6, 3, 0x11);
                ovr034.DrawIsoTile(var_7 + 0x1a, 7, 0x11);

                seg040.DrawOverlay();
                int code_path = seg051.Random(3);

                switch (code_path)
                {
                case 0:
                    code_path_str = "-..-..-..";
                    break;

                case 1:
                    code_path_str = "- - - - -";
                    break;

                case 2:
                    code_path_str = ".........";
                    break;

                default:
                    code_path_str = string.Empty;
                    break;
                }

                int code_row = seg051.Random(6);

                string text = "Type the character in box number " + (6 - code_row);

                Seg041.DisplayString(text, 0, 10, 12, 3);

                Seg041.DisplayString("under the ", 0, 10, 13, 3);
                Seg041.DisplayString(code_path_str, 0, 15, 13, 14);
                Seg041.DisplayString("path.", 0, 10, 13, 0x19);

                int code_index = var_6 + 0x22 - var_7 + (code_path * 12) + ((5 - code_row) << 1);

                while (code_index < 0)
                {
                    code_index += 36;
                }

                while (code_index > 35)
                {
                    code_index -= 36;
                }

                input_expected = codeWheel[code_row][code_index];

                string input = Seg041.GetUserInputString(1, 0, 13, "type character and press return: ");

                input_key = (input == null || input.Length == 0) ? ' ' : input[0];
                attempt++;

                if (input_key != input_expected)
                {
                    Seg041.DisplayStatusText(0, 14, "Sorry, that's incorrect.");
                }
                else
                {
                    return;
                }
            } while (input_key != input_expected && attempt < 3);

            if (attempt >= 3)
            {
                seg044.PlaySound(Sound.sound_1);
                seg044.PlaySound(Sound.sound_5);
                gbl.game_speed_var = 9;
                Seg041.DisplayStatusText(0, 14, "An unseen force hurls you into the abyss!");
                seg049.SysDelay(0x3E8);
                seg043.print_and_exit();
            }
        }
Ejemplo n.º 2
0
        internal static void DuelClass(Player player)
        {
            List <MenuItem> list = new List <MenuItem>();

            list.Add(new MenuItem("Pick New Class", true));

            foreach (var _class in gbl.RaceClasses[(int)player.race])
            {
                if (SecondClassAllowed(_class, player) == true)
                {
                    list.Add(new MenuItem(ovr020.classString[(int)_class]));
                }
            }

            if (list.Count == 1)
            {
                Seg041.DisplayStatusText(15, 4, player.name + " doesn't qualify.");
                list.Clear();
                return;
            }

            MenuItem list_ptr;
            int      index     = 1;
            bool     show_exit = true;
            bool     var_F     = true;

            char input_key;

            do
            {
                input_key = ovr027.sl_select_item(out list_ptr, ref index, ref var_F, show_exit, list,
                                                  0x16, 0x26, 2, 1, gbl.defaultMenuColors, "Select", string.Empty);

                if (input_key == 0)
                {
                    return;
                }
            } while (input_key != 'S');

            player.exp          = 0;
            player.attacksCount = 2;
            int newClass = 0;

            while (newClass <= 7 && ovr020.classString[newClass] != list_ptr.Text)
            {
                newClass++;
            }

            list.Clear();

            player.ClassLevelsOld[(int)HumanCurrentClass_Unknown(player)] = HumanCurrentClassLevel_Zero(player);

            player.multiclassLevel = player.HitDice;
            player.HitDice         = 1;

            player.ClassLevel[(int)HumanCurrentClass_Unknown(player)] = 0;
            player.ClassLevel[newClass] = 1;

            for (int i = 0; i < 5; i++)
            {
                player.spellCastCount[0, i] = 0;
                player.spellCastCount[1, i] = 0;
                player.spellCastCount[2, i] = 0;
            }

            if (newClass == 0)
            {
                player.spellCastCount[0, 0] = 1;
            }
            else if (newClass == 5)
            {
                player.spellCastCount[2, 0] = 1;
                player.LearnSpell(Spells.detect_magic_MU);
                player.LearnSpell(Spells.read_magic);
                player.LearnSpell(Spells.sleep);
            }

            player._class = (ClassId)newClass;

            Seg041.DisplayStatusText(0, 10, player.name + " is now a 1st level " + ovr020.classString[newClass] + ".");

            player.spellList.Clear();

            ReclacClassBonuses(player);
            calc_cleric_spells(true, player);
            reclac_saving_throws(player);
            reclac_thief_skills(player);

            foreach (var item in player.items)
            {
                if ((gbl.ItemDataTable[item.type].classFlags & player.classFlags) == 0 &&
                    item.cursed == false)
                {
                    item.readied = false;
                }
            }
        }
Ejemplo n.º 3
0
        internal static char main_3d_world_menu() /* sub_438DF */
        {
            char input_key = '\0';                /* simeon */

            gbl.area2_ptr.field_592 = 0;

            if (gbl.game_state == GameState.DungeonMap)
            {
                bool stop_loop = false;

                do
                {
                    bool special_key;

                    input_key = ovr027.displayInput(out special_key, false, 1, gbl.defaultMenuColors,
                                                    "Area Cast View Encamp Search Look", string.Empty);

                    if (special_key == false)
                    {
                        switch (input_key)
                        {
                        case 'A':
                            if (gbl.area_ptr.block_area_view == 0 ||
                                Cheats.always_show_areamap)
                            {
                                gbl.mapAreaDisplay = !gbl.mapAreaDisplay;

                                ovr031.Draw3dWorld(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            }
                            else
                            {
                                Seg041.DisplayStatusText(0, 14, "Not Here");
                            }

                            break;

                        case 'C':
                            if (gbl.SelectedPlayer.health_status == Status.okey)
                            {
                                gbl.menuSelectedWord = 1;
                                ovr016.cast_spell();
                            }

                            break;

                        case 'V':
                            gbl.menuSelectedWord = 1;
                            ovr020.viewPlayer();
                            break;

                        case 'E':
                            stop_loop            = true;
                            gbl.menuSelectedWord = 1;
                            break;

                        case 'S':
                            gbl.area2_ptr.search_flags ^= 1;
                            break;

                        case 'L':
                            gbl.area2_ptr.search_flags |= 2;
                            ovr021.step_game_time(2, 1);
                            gbl.ecl_offset = gbl.SearchLocationAddr;
                            stop_loop      = true;
                            break;
                        }
                    }
                    else
                    {
                        switch (input_key)
                        {
                        case 'H':     // forward
                            TryStepForward();
                            stop_loop = true;
                            break;

                        case 'P':     // turn 180
                            gbl.mapDirection = (byte)((gbl.mapDirection + 4) % 8);

                            gbl.mapWallType = ovr031.getMap_wall_type(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            ovr031.Draw3dWorld(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            break;

                        case 'K':     // turn left
                            gbl.mapDirection = (byte)((gbl.mapDirection + 6) % 8);

                            seg044.PlaySound(Sound.sound_a);
                            gbl.mapWallType = ovr031.getMap_wall_type(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            ovr031.Draw3dWorld(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            break;

                        case 'M':     // turn right
                            gbl.mapDirection = (byte)((gbl.mapDirection + 2) % 8);

                            seg044.PlaySound(Sound.sound_a);

                            gbl.mapWallType = ovr031.getMap_wall_type(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            ovr031.Draw3dWorld(gbl.mapDirection, gbl.mapPosY, gbl.mapPosX);
                            break;

                        default:
                            ovr020.scroll_team_list(input_key);
                            ovr025.PartySummary(gbl.SelectedPlayer);
                            break;
                        }
                    }

                    ovr025.display_map_position_time();
                } while (stop_loop == false);
            }

            if (gbl.bottomTextHasBeenCleared == false)
            {
                seg037.draw8x8_clear_area(TextRegion.NormalBottom);

                gbl.bottomTextHasBeenCleared = true;
            }

            return(input_key);
        }