summaryrefslogtreecommitdiff
path: root/src/wizard2.c
diff options
context:
space:
mode:
authorManoj Srivastava <srivasta@debian.org>2020-05-22 19:57:41 -0700
committerManoj Srivastava <srivasta@debian.org>2020-05-22 20:02:19 -0700
commitc3d2579ad8d7eb33059aa8fdbaf5b564411a57f2 (patch)
tree1570cda0676fdcf4171a69a7fe313c1b89a52b0c /src/wizard2.c
parent986b7742bf244b4073ecca0723615f70be8a1ab6 (diff)
parent4e9b9c402ed95bf9a17fd6d795bc49bb4128a6fa (diff)
Merge branch 'upstream' into debian-cmake-fixes
Diffstat (limited to 'src/wizard2.c')
-rw-r--r--src/wizard2.c1950
1 files changed, 0 insertions, 1950 deletions
diff --git a/src/wizard2.c b/src/wizard2.c
deleted file mode 100644
index a19b72e0..00000000
--- a/src/wizard2.c
+++ /dev/null
@@ -1,1950 +0,0 @@
-/* File: wizard2.c */
-
-/* Purpose: Wizard commands */
-
-/*
- * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke
- *
- * This software may be copied and distributed for educational, research, and
- * not for profit purposes provided that this copyright and statement are
- * included in all such copies.
- */
-
-#include "angband.h"
-
-void do_cmd_wizard_body(s16b);
-extern void status_main(void);
-
-/*
- * Adds a lvl to a monster
- */
-void wiz_inc_monster_level(int level)
-{
- monster_type *m_ptr;
- int ii, jj;
-
- if (!tgt_pt(&ii, &jj)) return;
-
- if (cave[jj][ii].m_idx)
- {
- m_ptr = &m_list[cave[jj][ii].m_idx];
-
- m_ptr->exp = MONSTER_EXP(m_ptr->level + level);
- monster_check_experience(cave[jj][ii].m_idx, FALSE);
- }
-}
-
-void wiz_align_monster(int status)
-{
- monster_type *m_ptr;
- int ii, jj;
-
- if (!tgt_pt(&ii, &jj)) return;
-
- if (cave[jj][ii].m_idx)
- {
- m_ptr = &m_list[cave[jj][ii].m_idx];
-
- m_ptr->status = status;
- }
-}
-
-/*
- * Teleport directly to a town
- */
-void teleport_player_town(int town)
-{
- int x = 0, y = 0;
-
- autosave_checkpoint();
-
- /* Change town */
- dun_level = 0;
- p_ptr->town_num = town;
-
- for (x = 0; x < max_wild_x; x++)
- for (y = 0; y < max_wild_y; y++)
- if (p_ptr->town_num == wf_info[wild_map[y][x].feat].entrance) goto finteletown;
-finteletown:
- p_ptr->wilderness_y = y;
- p_ptr->wilderness_x = x;
-
- p_ptr->inside_arena = 0;
- leaving_quest = p_ptr->inside_quest;
- p_ptr->inside_quest = 0;
-
- /* Leaving */
- p_ptr->leaving = TRUE;
-}
-
-
-/*
- * Hack -- Rerate Hitpoints
- */
-void do_cmd_rerate(void)
-{
- int min_value, max_value, i, percent;
-
- min_value = (PY_MAX_LEVEL * 3 * (p_ptr->hitdie - 1)) / 8;
- min_value += PY_MAX_LEVEL;
-
- max_value = (PY_MAX_LEVEL * 5 * (p_ptr->hitdie - 1)) / 8;
- max_value += PY_MAX_LEVEL;
-
- player_hp[0] = p_ptr->hitdie;
-
- /* Rerate */
- while (1)
- {
- /* Collect values */
- for (i = 1; i < PY_MAX_LEVEL; i++)
- {
- player_hp[i] = randint(p_ptr->hitdie);
- player_hp[i] += player_hp[i - 1];
- }
-
- /* Legal values */
- if ((player_hp[PY_MAX_LEVEL - 1] >= min_value) &&
- (player_hp[PY_MAX_LEVEL - 1] <= max_value)) break;
- }
-
- percent = (int)(((long)player_hp[PY_MAX_LEVEL - 1] * 200L) /
- (p_ptr->hitdie + ((PY_MAX_LEVEL - 1) * p_ptr->hitdie)));
-
- /* Update and redraw hitpoints */
- p_ptr->update |= (PU_HP);
- p_ptr->redraw |= (PR_HP);
-
- /* Window stuff */
- p_ptr->window |= (PW_PLAYER);
-
- /* Handle stuff */
- handle_stuff();
-
- /* Message */
- msg_format("Current Life Rating is %d/100.", percent);
-}
-
-
-/*
- * Create the artifact of the specified number -- DAN
- *
- */
-static void wiz_create_named_art()
-{
- object_type forge;
- object_type *q_ptr;
- int i, a_idx;
- cptr p = "Number of the artifact :";
- char out_val[80] = "";
- artifact_type *a_ptr;
-
- if (!get_string(p, out_val, 4)) return;
- a_idx = atoi(out_val);
-
- /* Return if out-of-bounds */
- if ((a_idx <= 0) || (a_idx >= max_a_idx)) return;
-
- a_ptr = &a_info[a_idx];
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Wipe the object */
- object_wipe(q_ptr);
-
- /* Ignore "empty" artifacts */
- if (!a_ptr->name) return;
-
- /* Acquire the "kind" index */
- i = lookup_kind(a_ptr->tval, a_ptr->sval);
-
- /* Oops */
- if (!i) return;
-
- /* Create the artifact */
- object_prep(q_ptr, i);
-
- /* Save the name */
- q_ptr->name1 = a_idx;
-
- apply_magic(q_ptr, -1, TRUE, TRUE, TRUE);
-
- /* Identify it fully */
- object_aware(q_ptr);
- object_known(q_ptr);
-
- /* Mark the item as fully known */
- q_ptr->ident |= (IDENT_MENTAL);
-
- /* Drop the artifact from heaven */
- drop_near(q_ptr, -1, p_ptr->py, p_ptr->px);
-
- /* All done */
- msg_print("Allocated.");
-}
-
-/*
- * Hack -- quick debugging hook
- */
-void do_cmd_wiz_hack_ben(int num)
-{
- s32b a;
-
- /* MAKE(r_ptr, monster_race);
- COPY(r_ptr, &r_info[500], monster_race);
-
- r_ptr->level = 1;
- r_ptr->flags6 |= RF6_BLINK;
- r_ptr->freq_inate = r_ptr->freq_spell = 90;
-
- place_monster_one_race = r_ptr;
- place_monster_one(p_ptr->py - 1, p_ptr->px, 500, 0, TRUE, MSTATUS_PET);*/
-
- get_lua_var("a", 'd', &a);
- msg_format("a: %d", a);
-
- /* Success */
- return;
-}
-
-void do_cmd_lua_script()
-{
- char script[80] = "tome_dofile_anywhere(ANGBAND_DIR_CORE, 'gen_idx.lua')";
-
- if (!get_string("Script:", script, 80)) return;
-
- exec_lua(script);
-
- /* Success */
- return;
-}
-
-
-#ifdef MONSTER_HORDES
-
-/* Summon a horde of monsters */
-static void do_cmd_summon_horde()
-{
- int wy = p_ptr->py, wx = p_ptr->px;
- int attempts = 1000;
-
- while (--attempts)
- {
- scatter(&wy, &wx, p_ptr->py, p_ptr->px, 3);
- if (cave_naked_bold(wy, wx)) break;
- }
-
- (void)alloc_horde(wy, wx);
-}
-
-#endif /* MONSTER_HORDES */
-
-
-/*
- * Output a long int in binary format.
- */
-static void prt_binary(u32b flags, int row, int col)
-{
- int i;
- u32b bitmask;
-
- /* Scan the flags */
- for (i = bitmask = 1; i <= 32; i++, bitmask *= 2)
- {
- /* Dump set bits */
- if (flags & bitmask)
- {
- Term_putch(col++, row, TERM_BLUE, '*');
- }
-
- /* Dump unset bits */
- else
- {
- Term_putch(col++, row, TERM_WHITE, '-');
- }
- }
-}
-
-
-/*
- * Hack -- Teleport to the target
- */
-static void do_cmd_wiz_bamf(void)
-{
- /* Must have a target */
- if (!target_who) return;
-
- /* Teleport to the target */
- teleport_player_to(target_row, target_col);
-}
-
-
-/*
- * Aux function for "do_cmd_wiz_change()". -RAK-
- */
-static void do_cmd_wiz_change_aux(void)
-{
- int i;
- int tmp_int;
- long tmp_long;
- char tmp_val[160];
- char ppp[80];
-
-
- /* Query the stats */
- for (i = 0; i < 6; i++)
- {
- /* Prompt */
- sprintf(ppp, "%s: (3-118): ", stat_names[i]);
-
- /* Default */
- sprintf(tmp_val, "%d", p_ptr->stat_max[i]);
-
- /* Query */
- if (!get_string(ppp, tmp_val, 3)) return;
-
- /* Extract */
- tmp_int = atoi(tmp_val);
-
- /* Verify */
- if (tmp_int > 18 + 100) tmp_int = 18 + 100;
- else if (tmp_int < 3) tmp_int = 3;
-
- /* Save it */
- p_ptr->stat_cur[i] = p_ptr->stat_max[i] = tmp_int;
- }
-
-
- /* Default */
- sprintf(tmp_val, "%ld", (long)(p_ptr->au));
-
- /* Query */
- if (!get_string("Gold: ", tmp_val, 9)) return;
-
- /* Extract */
- tmp_long = atol(tmp_val);
-
- /* Verify */
- if (tmp_long < 0) tmp_long = 0L;
-
- /* Save */
- p_ptr->au = tmp_long;
-
-
- /* Default */
- sprintf(tmp_val, "%ld", (long)(p_ptr->max_exp));
-
- /* Query */
- if (!get_string("Experience: ", tmp_val, 9)) return;
-
- /* Extract */
- tmp_long = atol(tmp_val);
-
- /* Verify */
- if (tmp_long < 0) tmp_long = 0L;
-
- /* Save */
- p_ptr->max_exp = tmp_long;
- p_ptr->exp = tmp_long;
-
- /* Update */
- check_experience();
-
- /* Default */
- sprintf(tmp_val, "%d", p_ptr->luck_base);
-
- /* Query */
- if (!get_string("Luck(base): ", tmp_val, 3)) return;
-
- /* Extract */
- tmp_long = atol(tmp_val);
-
- /* Save */
- p_ptr->luck_base = tmp_long;
- p_ptr->luck_max = tmp_long;
-}
-
-
-/*
- * Change various "permanent" player variables.
- */
-static void do_cmd_wiz_change(void)
-{
- /* Interact */
- do_cmd_wiz_change_aux();
-
- /* Redraw everything */
- do_cmd_redraw();
-}
-
-
-/*
- * Wizard routines for creating objects -RAK-
- * And for manipulating them! -Bernd-
- *
- * This has been rewritten to make the whole procedure
- * of debugging objects much easier and more comfortable.
- *
- * The following functions are meant to play with objects:
- * Create, modify, roll for them (for statistic purposes) and more.
- * The original functions were by RAK.
- * The function to show an item's debug information was written
- * by David Reeve Sward <sward+@CMU.EDU>.
- * Bernd (wiebelt@mathematik.hu-berlin.de)
- *
- * Here are the low-level functions
- * - wiz_display_item()
- * display an item's debug-info
- * - wiz_create_itemtype()
- * specify tval and sval (type and subtype of object)
- * - wiz_tweak_item()
- * specify pval, +AC, +tohit, +todam
- * Note that the wizard can leave this function anytime,
- * thus accepting the default-values for the remaining values.
- * pval comes first now, since it is most important.
- * - wiz_reroll_item()
- * apply some magic to the item or turn it into an artifact.
- * - wiz_roll_item()
- * Get some statistics about the rarity of an item:
- * We create a lot of fake items and see if they are of the
- * same type (tval and sval), then we compare pval and +AC.
- * If the fake-item is better or equal it is counted.
- * Note that cursed items that are better or equal (absolute values)
- * are counted, too.
- * HINT: This is *very* useful for balancing the game!
- * - wiz_quantity_item()
- * change the quantity of an item, but be sane about it.
- *
- * And now the high-level functions
- * - do_cmd_wiz_play()
- * play with an existing object
- * - wiz_create_item()
- * create a new object
- *
- * Note -- You do not have to specify "pval" and other item-properties
- * directly. Just apply magic until you are satisfied with the item.
- *
- * Note -- For some items (such as wands, staffs, some rings, etc), you
- * must apply magic, or you will get "broken" or "uncharged" objects.
- *
- * Note -- Redefining artifacts via "do_cmd_wiz_play()" may destroy
- * the artifact. Be careful.
- *
- * Hack -- this function will allow you to create multiple artifacts.
- * This "feature" may induce crashes or other nasty effects.
- */
-
-/*
- * Just display an item's properties (debug-info)
- * Originally by David Reeve Sward <sward+@CMU.EDU>
- * Verbose item flags by -Bernd-
- */
-static void wiz_display_item(object_type *o_ptr)
-{
- int i, j = 13;
- u32b f1, f2, f3, f4, f5, esp;
- char buf[256];
-
- /* Extract the flags */
- object_flags(o_ptr, &f1, &f2, &f3, &f4, &f5, &esp);
-
- /* Clear the screen */
- for (i = 1; i <= 23; i++) prt("", i, j - 2);
-
- /* Describe fully */
- object_desc_store(buf, o_ptr, TRUE, 3);
-
- prt(buf, 2, j);
-
- prt(format("kind = %-5d level = %-4d tval = %-5d sval = %-5d",
- o_ptr->k_idx, k_info[o_ptr->k_idx].level,
- o_ptr->tval, o_ptr->sval), 4, j);
-
- prt(format("number = %-3d wgt = %-6d ac = %-5d damage = %dd%d",
- o_ptr->number, o_ptr->weight,
- o_ptr->ac, o_ptr->dd, o_ptr->ds), 5, j);
-
- prt(format("pval = %-5d toac = %-5d tohit = %-4d todam = %-4d",
- o_ptr->pval, o_ptr->to_a, o_ptr->to_h, o_ptr->to_d), 6, j);
-
- prt(format("name1 = %-4d name2 = %-4d cost = %ld pval2 = %-5d",
- o_ptr->name1, o_ptr->name2, (long)object_value(o_ptr), o_ptr->pval2), 7, j);
-
- prt(format("ident = %04x timeout = %-d",
- o_ptr->ident, o_ptr->timeout), 8, j);
-
- prt("+------------FLAGS1------------+", 10, j);
- prt("AFFECT........SLAY........BRAND.", 11, j);
- prt(" cvae xsqpaefc", 12, j);
- prt("siwdcc ssidsahanvudotgddhuoclio", 13, j);
- prt("tnieoh trnipttmiinmrrnrrraiierl", 14, j);
- prt("rtsxna..lcfgdkcpmldncltggpksdced", 15, j);
- prt_binary(f1, 16, j);
-
- prt("+------------FLAGS2------------+", 17, j);
- prt("SUST....IMMUN.RESIST............", 18, j);
- prt(" aefcprpsaefcpfldbc sn ", 19, j);
- prt("siwdcc cliooeatcliooeialoshtncd", 20, j);
- prt("tnieoh ierlifraierliatrnnnrhehi", 21, j);
- prt("rtsxna..dcedslatdcedsrekdfddrxss", 22, j);
- prt_binary(f2, 23, j);
-
- prt("+------------FLAGS3------------+", 10, j + 32);
- prt("fe ehsi st iiiiadta hp", 11, j + 32);
- prt("il n taihnf ee ggggcregb vr", 12, j + 32);
- prt("re nowysdose eld nnnntalrl ym", 13, j + 32);
- prt("ec omrcyewta ieirmsrrrriieaeccc", 14, j + 32);
- prt("aa taauktmatlnpgeihaefcvnpvsuuu", 15, j + 32);
- prt("uu egirnyoahivaeggoclioaeoasrrr", 16, j + 32);
- prt("rr litsopdretitsehtierltxrtesss", 17, j + 32);
- prt("aa echewestreshtntsdcedeptedeee", 18, j + 32);
- prt_binary(f3, 19, j + 32);
-}
-
-
-/*
- * A list of tvals and their textual names
- */
-tval_desc2 tvals[] =
-{
- { TV_SWORD, "Sword" },
- { TV_POLEARM, "Polearm" },
- { TV_HAFTED, "Hafted Weapon" },
- { TV_AXE, "Axe" },
- { TV_BOW, "Bow" },
- { TV_BOOMERANG, "Boomerang" },
- { TV_ARROW, "Arrows" },
- { TV_BOLT, "Bolts" },
- { TV_SHOT, "Shots" },
- { TV_SHIELD, "Shield" },
- { TV_CROWN, "Crown" },
- { TV_HELM, "Helm" },
- { TV_GLOVES, "Gloves" },
- { TV_BOOTS, "Boots" },
- { TV_CLOAK, "Cloak" },
- { TV_DRAG_ARMOR, "Dragon Scale Mail" },
- { TV_HARD_ARMOR, "Hard Armor" },
- { TV_SOFT_ARMOR, "Soft Armor" },
- { TV_RING, "Ring" },
- { TV_AMULET, "Amulet" },
- { TV_LITE, "Lite" },
- { TV_POTION, "Potion" },
- { TV_POTION2, "Potion" },
- { TV_SCROLL, "Scroll" },
- { TV_WAND, "Wand" },
- { TV_STAFF, "Staff" },
- { TV_ROD_MAIN, "Rod" },
- { TV_ROD, "Rod Tip" },
- { TV_BOOK, "Schools Spellbook", },
- { TV_SYMBIOTIC_BOOK, "Symbiotic Spellbook", },
- { TV_DRUID_BOOK, "Elemental Stone" },
- { TV_MUSIC_BOOK, "Music Book" },
- { TV_DAEMON_BOOK, "Daemon Book" },
- { TV_SPIKE, "Spikes" },
- { TV_DIGGING, "Digger" },
- { TV_CHEST, "Chest" },
- { TV_FOOD, "Food" },
- { TV_FLASK, "Flask" },
- { TV_MSTAFF, "Mage Staff" },
- { TV_BATERIE, "Essence" },
- { TV_PARCHMENT, "Parchment" },
- { TV_INSTRUMENT, "Musical Instrument" },
- { TV_RUNE1, "Rune 1" },
- { TV_RUNE2, "Rune 2" },
- { TV_JUNK, "Junk" },
- { TV_TRAPKIT, "Trapping Kit" },
- { 0, NULL }
-};
-
-
-/*
- * Strip an "object name" into a buffer
- */
-static void strip_name(char *buf, int k_idx)
-{
- char *t;
-
- object_kind *k_ptr = &k_info[k_idx];
-
- cptr str = (k_name + k_ptr->name);
-
-
- /* Skip past leading characters */
- while ((*str == ' ') || (*str == '&')) str++;
-
- /* Copy useful chars */
- for (t = buf; *str; str++)
- {
- if (*str != '~') *t++ = *str;
- }
-
- /* Terminate the new name */
- *t = '\0';
-}
-
-
-/*
- * Hack -- title for each column
- *
- * XXX XXX XXX This will not work with "EBCDIC", I would think.
- */
-static char head[4] = { 'a', 'A', '0', ':' };
-
-
-/*
- * Print a string as required by wiz_create_itemtype().
- * Trims characters from the beginning until it fits in the space
- * before the next row or the edge of the screen.
- */
-static void wci_string(cptr string, int num)
-{
- int row = 2 + (num % 20), col = 30 * (num / 20);
- int ch = head[num / 20] + (num % 20), max_len = 0;
-
- if (76-col < (signed)max_len)
- max_len = 76-col;
- else
- max_len = 30-6;
-
- if (strlen(string) > (unsigned)max_len)
- string = string + (strlen(string) - max_len);
-
- prt(format("[%c] %s", ch, string), row, col);
-}
-
-/*
- * Specify tval and sval (type and subtype of object) originally
- * by RAK, heavily modified by -Bernd-
- *
- * This function returns the k_idx of an object type, or zero if failed
- *
- * List up to 50 choices in three columns
- */
-static int wiz_create_itemtype(void)
-{
- int i, num, max_num;
- int tval;
-
- cptr tval_desc2;
- char ch;
-
- int choice[60];
-
- char buf[160];
-
-
- /* Clear screen */
- Term_clear();
-
- /* Print all tval's and their descriptions */
- for (num = 0; (num < 60) && tvals[num].tval; num++)
- {
- wci_string(tvals[num].desc, num);
- }
-
- /* Me need to know the maximal possible tval_index */
- max_num = num;
-
- /* Choose! */
- if (!get_com("Get what type of object? ", &ch)) return (0);
-
- /* Analyze choice */
- num = -1;
- if ((ch >= head[0]) && (ch < head[0] + 20)) num = ch - head[0];
- if ((ch >= head[1]) && (ch < head[1] + 20)) num = ch - head[1] + 20;
- if ((ch >= head[2]) && (ch < head[2] + 17)) num = ch - head[2] + 40;
-
- /* Bail out if choice is illegal */
- if ((num < 0) || (num >= max_num)) return (0);
-
- /* Base object type chosen, fill in tval */
- tval = tvals[num].tval;
- tval_desc2 = tvals[num].desc;
-
-
- /*** And now we go for k_idx ***/
-
- /* Clear screen */
- Term_clear();
-
- /* We have to search the whole itemlist. */
- for (num = 0, i = 1; (num < 60) && (i < max_k_idx); i++)
- {
- object_kind *k_ptr = &k_info[i];
-
- /* Analyze matching items */
- if (k_ptr->tval == tval)
- {
- /* Hack -- Skip instant artifacts */
- if (k_ptr->flags3 & (TR3_INSTA_ART)) continue;
-
- /* Acquire the "name" of object "i" */
- strip_name(buf, i);
-
- /* Print it */
- wci_string(buf, num);
-
- /* Remember the object index */
- choice[num++] = i;
- }
- }
-
- /* Me need to know the maximal possible remembered object_index */
- max_num = num;
-
- /* Choose! */
- if (!get_com(format("What Kind of %s? ", tval_desc2), &ch)) return (0);
-
- /* Analyze choice */
- num = -1;
- if ((ch >= head[0]) && (ch < head[0] + 20)) num = ch - head[0];
- if ((ch >= head[1]) && (ch < head[1] + 20)) num = ch - head[1] + 20;
- if ((ch >= head[2]) && (ch < head[2] + 17)) num = ch - head[2] + 40;
-
- /* Bail out if choice is "illegal" */
- if ((num < 0) || (num >= max_num)) return (0);
-
- /* And return successful */
- return (choice[num]);
-}
-
-
-/*
- * Tweak an item
- */
-static void wiz_tweak_item(object_type *o_ptr)
-{
- cptr p;
- char tmp_val[80];
- u32b f1, f2, f3, f4, f5, esp;
-
- /* Extract the flags */
- object_flags(o_ptr, &f1, &f2, &f3, &f4, &f5, &esp);
-
-
- p = "Enter new 'pval' setting: ";
- sprintf(tmp_val, "%ld", (long int) o_ptr->pval);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->pval = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'pval2' setting: ";
- sprintf(tmp_val, "%d", o_ptr->pval2);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->pval2 = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'pval3' setting: ";
- sprintf(tmp_val, "%ld", (long int) o_ptr->pval3);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->pval3 = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'to_a' setting: ";
- sprintf(tmp_val, "%d", o_ptr->to_a);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->to_a = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'to_h' setting: ";
- sprintf(tmp_val, "%d", o_ptr->to_h);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->to_h = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'to_d' setting: ";
- sprintf(tmp_val, "%d", o_ptr->to_d);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->to_d = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'name2' setting: ";
- sprintf(tmp_val, "%d", o_ptr->name2);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->name2 = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'name2b' setting: ";
- sprintf(tmp_val, "%d", o_ptr->name2b);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->name2b = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'sval' setting: ";
- sprintf(tmp_val, "%d", o_ptr->sval);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->sval = atoi(tmp_val);
- wiz_display_item(o_ptr);
-
- p = "Enter new 'obj exp' setting: ";
- sprintf(tmp_val, "%ld", (long int) o_ptr->exp);
- if (!get_string(p, tmp_val, 9)) return;
- wiz_display_item(o_ptr);
- o_ptr->exp = atoi(tmp_val);
- if (f4 & TR4_LEVELS) check_experience_obj(o_ptr);
-
- p = "Enter new 'timeout' setting: ";
- sprintf(tmp_val, "%d", o_ptr->timeout);
- if (!get_string(p, tmp_val, 5)) return;
- o_ptr->timeout = atoi(tmp_val);
- wiz_display_item(o_ptr);
-}
-
-
-/*
- * Apply magic to an item or turn it into an artifact. -Bernd-
- */
-static void wiz_reroll_item(object_type *o_ptr)
-{
- object_type forge;
- object_type *q_ptr;
-
- char ch;
-
- bool_ changed = FALSE;
-
-
- /* Hack -- leave artifacts alone */
- if (artifact_p(o_ptr) || o_ptr->art_name) return;
-
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Copy the object */
- object_copy(q_ptr, o_ptr);
-
-
- /* Main loop. Ask for magification and artifactification */
- while (TRUE)
- {
- /* Display full item debug information */
- wiz_display_item(q_ptr);
-
- /* Ask wizard what to do. */
- if (!get_com("[a]ccept, [b]ad, [n]ormal, [g]ood, [e]xcellent, [r]andart? ", &ch))
- {
- changed = FALSE;
- break;
- }
-
- /* Create/change it! */
- if (ch == 'A' || ch == 'a')
- {
- changed = TRUE;
- break;
- }
-
- /* Apply bad magic, but first clear object */
- else if (ch == 'b' || ch == 'B')
- {
- object_prep(q_ptr, o_ptr->k_idx);
- hack_apply_magic_power = -2;
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
- }
-
- /* Apply normal magic, but first clear object */
- else if (ch == 'n' || ch == 'N')
- {
- object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
- }
-
- /* Apply good magic, but first clear object */
- else if (ch == 'g' || ch == 'g')
- {
- object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, dun_level, FALSE, TRUE, FALSE);
- }
-
- /* Apply great magic, but first clear object */
- else if (ch == 'e' || ch == 'e')
- {
- object_prep(q_ptr, o_ptr->k_idx);
- apply_magic(q_ptr, dun_level, FALSE, TRUE, TRUE);
- }
-
- /* Apply great magic, but first clear object */
- else if (ch == 'r' || ch == 'r')
- {
- object_prep(q_ptr, o_ptr->k_idx);
- create_artifact(q_ptr, FALSE, TRUE);
- }
- }
-
-
- /* Notice change */
- if (changed)
- {
- /* Apply changes */
- object_copy(o_ptr, q_ptr);
-
- /* Recalculate bonuses */
- p_ptr->update |= (PU_BONUS);
-
- /* Combine / Reorder the pack (later) */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
- p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
- }
-}
-
-
-
-/*
- * Maximum number of rolls
- */
-#define TEST_ROLL 100000
-
-
-/*
- * Try to create an item again. Output some statistics. -Bernd-
- *
- * The statistics are correct now. We acquire a clean grid, and then
- * repeatedly place an object in this grid, copying it into an item
- * holder, and then deleting the object. We fiddle with the artifact
- * counter flags to prevent weirdness. We use the items to collect
- * statistics on item creation relative to the initial item.
- */
-static void wiz_statistics(object_type *o_ptr)
-{
- long i, matches, better, worse, other;
-
- char ch;
- char *quality;
-
- bool_ good, great;
-
- object_type forge;
- object_type *q_ptr;
-
- obj_theme theme;
-
- cptr q = "Rolls: %ld, Matches: %ld, Better: %ld, Worse: %ld, Other: %ld";
-
- /* We can have everything */
- theme.treasure = OBJ_GENE_TREASURE;
- theme.combat = OBJ_GENE_COMBAT;
- theme.magic = OBJ_GENE_MAGIC;
- theme.tools = OBJ_GENE_TOOL;
-
- /* XXX XXX XXX Mega-Hack -- allow multiple artifacts */
- if (artifact_p(o_ptr))
- {
- if (o_ptr->tval == TV_RANDART)
- {
- random_artifacts[o_ptr->sval].generated = FALSE;
- }
- else
- {
- a_info[o_ptr->name1].cur_num = 0;
- }
- }
-
-
- /* Interact */
- while (TRUE)
- {
- cptr pmt = "Roll for [n]ormal, [g]ood, or [e]xcellent treasure? ";
-
- /* Display item */
- wiz_display_item(o_ptr);
-
- /* Get choices */
- if (!get_com(pmt, &ch)) break;
-
- if (ch == 'n' || ch == 'N')
- {
- good = FALSE;
- great = FALSE;
- quality = "normal";
- }
- else if (ch == 'g' || ch == 'G')
- {
- good = TRUE;
- great = FALSE;
- quality = "good";
- }
- else if (ch == 'e' || ch == 'E')
- {
- good = TRUE;
- great = TRUE;
- quality = "excellent";
- }
- else
- {
- good = FALSE;
- great = FALSE;
- break;
- }
-
- /* Let us know what we are doing */
- msg_format("Creating a lot of %s items. Base level = %d.",
- quality, dun_level);
- msg_print(NULL);
-
- /* Set counters to zero */
- matches = better = worse = other = 0;
-
- /* Let's rock and roll */
- for (i = 0; i <= TEST_ROLL; i++)
- {
- /* Output every few rolls */
- if ((i < 100) || (i % 100 == 0))
- {
- /* Do not wait */
- inkey_scan = TRUE;
-
- /* Allow interupt */
- if (inkey())
- {
- /* Flush */
- flush();
-
- /* Stop rolling */
- break;
- }
-
- /* Dump the stats */
- prt(format(q, i, matches, better, worse, other), 0, 0);
- Term_fresh();
- }
-
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Wipe the object */
- object_wipe(q_ptr);
-
- /* Create an object */
- make_object(q_ptr, good, great, theme);
-
-
- /* XXX XXX XXX Mega-Hack -- allow multiple artifacts */
- if (artifact_p(q_ptr))
- {
- if (q_ptr->tval == TV_RANDART)
- {
- random_artifacts[q_ptr->sval].generated = FALSE;
- }
- else
- {
- a_info[q_ptr->name1].cur_num = 0;
- }
- }
-
-
- /* Test for the same tval and sval. */
- if ((o_ptr->tval) != (q_ptr->tval)) continue;
- if ((o_ptr->sval) != (q_ptr->sval)) continue;
-
- /* Check for match */
- if ((q_ptr->pval == o_ptr->pval) &&
- (q_ptr->to_a == o_ptr->to_a) &&
- (q_ptr->to_h == o_ptr->to_h) &&
- (q_ptr->to_d == o_ptr->to_d))
- {
- matches++;
- }
-
- /* Check for better */
- else if ((q_ptr->pval >= o_ptr->pval) &&
- (q_ptr->to_a >= o_ptr->to_a) &&
- (q_ptr->to_h >= o_ptr->to_h) &&
- (q_ptr->to_d >= o_ptr->to_d))
- {
- better++;
- }
-
- /* Check for worse */
- else if ((q_ptr->pval <= o_ptr->pval) &&
- (q_ptr->to_a <= o_ptr->to_a) &&
- (q_ptr->to_h <= o_ptr->to_h) &&
- (q_ptr->to_d <= o_ptr->to_d))
- {
- worse++;
- }
-
- /* Assume different */
- else
- {
- other++;
- }
- }
-
- /* Final dump */
- msg_format(q, i, matches, better, worse, other);
- msg_print(NULL);
- }
-
-
- /* Hack -- Normally only make a single artifact */
- if (artifact_p(o_ptr))
- {
- if (o_ptr->tval == TV_RANDART)
- {
- random_artifacts[o_ptr->sval].generated = TRUE;
- }
- else
- {
- a_info[o_ptr->name1].cur_num = 1;
- }
- }
-}
-
-
-/*
- * Change the quantity of a the item
- */
-static void wiz_quantity_item(object_type *o_ptr)
-{
- int tmp_int;
- char tmp_val[100];
-
- /* Default */
- sprintf(tmp_val, "%d", o_ptr->number);
-
- /* Query */
- if (get_string("Quantity: ", tmp_val, 2))
- {
- /* Extract */
- tmp_int = atoi(tmp_val);
-
- /* Paranoia */
- if (tmp_int < 1) tmp_int = 1;
- if (tmp_int > 99) tmp_int = 99;
-
- /* Accept modifications */
- o_ptr->number = tmp_int;
- }
-}
-
-
-
-/*
- * Play with an item. Options include:
- * - Output statistics (via wiz_roll_item)
- * - Reroll item (via wiz_reroll_item)
- * - Change properties (via wiz_tweak_item)
- * - Change the number of items (via wiz_quantity_item)
- */
-static void do_cmd_wiz_play(void)
-{
- int item;
-
- object_type forge;
- object_type *q_ptr;
-
- object_type *o_ptr;
-
- char ch;
-
- bool_ changed;
-
- cptr q, s;
-
- /* Get an item */
- q = "Play with which object? ";
- s = "You have nothing to play with.";
- if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return;
-
- /* Get the item */
- o_ptr = get_object(item);
-
-
- /* The item was not changed */
- changed = FALSE;
-
-
- /* Icky */
- character_icky = TRUE;
-
- /* Save the screen */
- Term_save();
-
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Copy object */
- object_copy(q_ptr, o_ptr);
-
-
- /* The main loop */
- while (TRUE)
- {
- /* Display the item */
- wiz_display_item(q_ptr);
-
- /* Get choice */
- if (!get_com("[a]ccept [s]tatistics [r]eroll [t]weak [q]uantity apply[m]agic? ", &ch))
- {
- changed = FALSE;
- break;
- }
-
- if (ch == 'A' || ch == 'a')
- {
- changed = TRUE;
- break;
- }
-
- if (ch == 's' || ch == 'S')
- {
- wiz_statistics(q_ptr);
- }
-
- if (ch == 'r' || ch == 'r')
- {
- wiz_reroll_item(q_ptr);
- }
-
- if (ch == 't' || ch == 'T')
- {
- wiz_tweak_item(q_ptr);
- }
-
- if (ch == 'q' || ch == 'Q')
- {
- wiz_quantity_item(q_ptr);
- }
-
- if (ch == 'm' || ch == 'M')
- {
- int e = q_ptr->name2, eb = q_ptr->name2b;
-
- object_prep(q_ptr, q_ptr->k_idx);
- q_ptr->name2 = e;
- q_ptr->name2b = eb;
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
- }
- }
-
-
- /* Restore the screen */
- Term_load();
-
- /* Not Icky */
- character_icky = FALSE;
-
-
- /* Accept change */
- if (changed)
- {
- /* Message */
- msg_print("Changes accepted.");
-
- /* Change */
- object_copy(o_ptr, q_ptr);
-
- /* Recalculate bonuses */
- p_ptr->update |= (PU_BONUS);
-
- /* Combine / Reorder the pack (later) */
- p_ptr->notice |= (PN_COMBINE | PN_REORDER);
-
- /* Window stuff */
- p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
- }
-
- /* Ignore change */
- else
- {
- msg_print("Changes ignored.");
- }
-}
-
-
-/*
- * Wizard routine for creating objects -RAK-
- * Heavily modified to allow magification and artifactification -Bernd-
- *
- * Note that wizards cannot create objects on top of other objects.
- *
- * Hack -- this routine always makes a "dungeon object", and applies
- * magic to it, and attempts to decline cursed items.
- */
-static void wiz_create_item(void)
-{
- object_type forge;
- object_type *q_ptr;
-
- int k_idx;
-
-
- /* Icky */
- character_icky = TRUE;
-
- /* Save the screen */
- Term_save();
-
- /* Get object base type */
- k_idx = wiz_create_itemtype();
-
- /* Restore the screen */
- Term_load();
-
- /* Not Icky */
- character_icky = FALSE;
-
-
- /* Return if failed */
- if (!k_idx) return;
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Create the item */
- object_prep(q_ptr, k_idx);
-
- /* Apply magic (no messages, no artifacts) */
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
-
- /* Drop the object from heaven */
- drop_near(q_ptr, -1, p_ptr->py, p_ptr->px);
-
- /* All done */
- msg_print("Allocated.");
-}
-
-/*
- * As above, but takes the k_idx as a parameter instead of using menus.
- */
-static void wiz_create_item_2(void)
-{
- object_type forge;
- object_type *q_ptr;
- int a_idx;
- cptr p = "Number of the object :";
- char out_val[80] = "";
-
- if (!get_string(p, out_val, 4)) return;
- a_idx = atoi(out_val);
-
- /* Return if failed or out-of-bounds */
- if ((a_idx <= 0) || (a_idx >= max_k_idx)) return;
-
- /* Get local object */
- q_ptr = &forge;
-
- /* Create the item */
- object_prep(q_ptr, a_idx);
-
- /* Apply magic (no messages, no artifacts) */
- apply_magic(q_ptr, dun_level, FALSE, FALSE, FALSE);
-
- /* Drop the object from heaven */
- drop_near(q_ptr, -1, p_ptr->py, p_ptr->px);
-
- /* All done */
- msg_print("Allocated.");
-}
-
-
-/*
- * Cure everything instantly
- */
-void do_cmd_wiz_cure_all(void)
-{
- object_type *o_ptr;
-
- /* Remove curses */
- (void)remove_all_curse();
-
- /* Restore stats */
- (void)res_stat(A_STR, TRUE);
- (void)res_stat(A_INT, TRUE);
- (void)res_stat(A_WIS, TRUE);
- (void)res_stat(A_CON, TRUE);
- (void)res_stat(A_DEX, TRUE);
- (void)res_stat(A_CHR, TRUE);
-
- /* Restore the level */
- (void)restore_level();
-
- /* Heal the player */
- p_ptr->chp = p_ptr->mhp;
- p_ptr->chp_frac = 0;
-
- /* Cure insanity of player */
- p_ptr->csane = p_ptr->msane;
- p_ptr->csane_frac = 0;
-
- /* Heal the player monster */
- /* Get the carried monster */
- o_ptr = &p_ptr->inventory[INVEN_CARRY];
- if (o_ptr->k_idx)
- {
- o_ptr->pval2 = o_ptr->pval3;
- }
-
- /* Restore mana */
- p_ptr->csp = p_ptr->msp;
- p_ptr->csp_frac = 0;
-
- /* Cure stuff */
- (void)set_blind(0);
- (void)set_confused(0);
- (void)set_poisoned(0);
- (void)set_afraid(0);
- (void)set_paralyzed(0);
- (void)set_image(0);
- (void)set_stun(0);
- (void)set_cut(0);
- (void)set_slow(0);
- p_ptr->black_breath = FALSE;
-
- /* No longer hungry */
- (void)set_food(PY_FOOD_MAX - 1);
-
- /* Redraw everything */
- do_cmd_redraw();
-}
-
-
-/*
- * Go to any level
- */
-static void do_cmd_wiz_jump(void)
-{
- /* Ask for level */
- if (command_arg <= 0)
- {
- char ppp[80];
-
- char tmp_val[160];
-
- /* Prompt */
- msg_format("dungeon_type : %d", dungeon_type);
- sprintf(ppp, "Jump to level (0-%d): ", d_info[dungeon_type].maxdepth);
-
- /* Default */
- sprintf(tmp_val, "%d", dun_level);
-
- /* Ask for a level */
- if (!get_string(ppp, tmp_val, 10)) return;
-
- /* Extract request */
- command_arg = atoi(tmp_val);
- }
-
- /* Paranoia */
- if (command_arg < 0) command_arg = 0;
-
- /* Paranoia */
- if (command_arg > d_info[dungeon_type].maxdepth) command_arg = d_info[dungeon_type].maxdepth;
-
- /* Accept request */
- msg_format("You jump to dungeon level %d.", command_arg);
-
- autosave_checkpoint();
-
- /* Change level */
- dun_level = command_arg;
-
- p_ptr->inside_arena = 0;
- leaving_quest = p_ptr->inside_quest;
-
- p_ptr->inside_quest = 0;
-
- /* Leaving */
- p_ptr->leaving = TRUE;
-}
-
-
-/*
- * Become aware of a lot of objects
- */
-static void do_cmd_wiz_learn(void)
-{
- int i;
-
- object_type forge;
- object_type *q_ptr;
-
- /* Scan every object */
- for (i = 1; i < max_k_idx; i++)
- {
- object_kind *k_ptr = &k_info[i];
-
- /* Induce awareness */
- if (k_ptr->level <= command_arg)
- {
- /* Get local object */
- q_ptr = &forge;
-
- /* Prepare object */
- object_prep(q_ptr, i);
-
- /* Awareness */
- object_aware(q_ptr);
- }
- }
-}
-
-
-/*
- * Summon some creatures
- */
-static void do_cmd_wiz_summon(int num)
-{
- int i;
-
- for (i = 0; i < num; i++)
- {
- (void)summon_specific(p_ptr->py, p_ptr->px, dun_level, 0);
- }
-}
-
-
-/*
- * Summon a creature of the specified type
- *
- * XXX XXX XXX This function is rather dangerous
- */
-static void do_cmd_wiz_named(int r_idx, bool_ slp)
-{
- int i, x, y;
-
- /* Paranoia */
- /* if (!r_idx) return; */
-
- /* Prevent illegal monsters */
- if (r_idx >= max_r_idx) return;
-
- /* Try 10 times */
- for (i = 0; i < 10; i++)
- {
- int d = 1;
-
- /* Pick a location */
- scatter(&y, &x, p_ptr->py, p_ptr->px, d);
-
- /* Require empty grids */
- if (!cave_empty_bold(y, x)) continue;
-
- /* Place it (allow groups) */
- m_allow_special[r_idx] = TRUE;
- if (place_monster_aux(y, x, r_idx, slp, TRUE, MSTATUS_ENEMY)) break;
- m_allow_special[r_idx] = FALSE;
- }
-}
-
-
-/*
- * Summon a creature of the specified type
- *
- * XXX XXX XXX This function is rather dangerous
- */
-void do_cmd_wiz_named_friendly(int r_idx, bool_ slp)
-{
- int i, x, y;
-
- /* Paranoia */
- /* if (!r_idx) return; */
-
- /* Prevent illegal monsters */
- if (r_idx >= max_r_idx) return;
-
- /* Try 10 times */
- m_allow_special[r_idx] = TRUE;
- for (i = 0; i < 10; i++)
- {
- int d = 1;
-
- /* Pick a location */
- scatter(&y, &x, p_ptr->py, p_ptr->px, d);
-
- /* Require empty grids */
- if (!cave_empty_bold(y, x)) continue;
-
- /* Place it (allow groups) */
- if (place_monster_aux(y, x, r_idx, slp, TRUE, MSTATUS_PET)) break;
- }
- m_allow_special[r_idx] = FALSE;
-}
-
-
-
-/*
- * Hack -- Delete all nearby monsters
- */
-static void do_cmd_wiz_zap(void)
-{
- int i;
-
- /* Genocide everyone nearby */
- for (i = 1; i < m_max; i++)
- {
- monster_type *m_ptr = &m_list[i];
-
- /* Paranoia -- Skip dead monsters */
- if (!m_ptr->r_idx) continue;
-
- /* Delete nearby monsters */
- if (m_ptr->cdis <= MAX_SIGHT) delete_monster_idx(i);
- }
-}
-
-
-extern void do_cmd_wiz_body(s16b bidx)
- /* Might create problems with equipment slots. For safety,
- be nude when calling this function */
-{
- p_ptr->body_monster = bidx;
- p_ptr->disembodied = FALSE;
- p_ptr->chp = maxroll( (&r_info[bidx])->hdice, (&r_info[bidx])->hside);
- do_cmd_redraw();
-}
-
-
-/*
- * External function
- */
-extern void do_cmd_spoilers(void);
-
-
-
-/*
- * Hack -- declare external function
- */
-extern void do_cmd_debug(void);
-
-
-
-/*
- * Ask for and parse a "debug command"
- * The "command_arg" may have been set.
- */
-void do_cmd_debug(void)
-{
- int x, y;
- char cmd;
-
-
- /* Get a "debug command" */
- get_com("Debug Command: ", &cmd);
-
- /* Analyze the command */
- switch (cmd)
- {
- /* Nothing */
- case ESCAPE:
- case ' ':
- case '\n':
- case '\r':
- break;
-
-
- /* Hack -- Generate Spoilers */
- case '"':
- do_cmd_spoilers();
- break;
-
- case 'A':
- status_main();
- break;
-
- /* Hack -- Help */
- case '?':
- do_cmd_help();
- break;
-
-
- /* Cure all maladies */
- case 'a':
- do_cmd_wiz_cure_all();
- break;
-
- /* Teleport to target */
- case 'b':
- do_cmd_wiz_bamf();
- break;
-
- case 'B':
- do_cmd_wiz_body(command_arg);
- break;
-
- /* Create any object */
- case '-':
- wiz_create_item_2();
- break;
-
- /* Create any object */
- case 'c':
- wiz_create_item();
- break;
-
- /* Create a named artifact */
- case 'C':
- wiz_create_named_art();
- break;
-
- /* Detect everything */
- case 'd':
- detect_all(DEFAULT_RADIUS);
- break;
-
- /* Change of Dungeon type */
- case 'D':
- if ((command_arg >= 0) && (command_arg < max_d_idx))
- {
- dungeon_type = command_arg;
- dun_level = d_info[dungeon_type].mindepth;
- msg_format("You go into %s", d_text + d_info[dungeon_type].text);
-
- /* Leaving */
- p_ptr->leaving = TRUE;
- }
- break;
-
- /* Edit character */
- case 'e':
- do_cmd_wiz_change();
- break;
-
- /* Change grid's mana */
- case 'E':
- cave[p_ptr->py][p_ptr->px].mana = command_arg;
- break;
-
- /* View item info */
- case 'f':
- identify_fully();
- break;
-
- /* Good Objects */
- case 'g':
- if (command_arg <= 0) command_arg = 1;
- acquirement(p_ptr->py, p_ptr->px, command_arg, FALSE, TRUE);
- break;
-
- /* Hitpoint rerating */
- case 'h':
- do_cmd_rerate(); break;
-
-#ifdef MONSTER_HORDES
- case 'H':
- do_cmd_summon_horde(); break;
-#endif /* MONSTER_HORDES */
-
- /* Identify */
- case 'i':
- (void)ident_spell();
- break;
-
- /* Go up or down in the dungeon */
- case 'j':
- do_cmd_wiz_jump();
- break;
-
- /* Self-Knowledge */
- case 'k':
- self_knowledge(NULL);
- break;
-
- /* Learn about objects */
- case 'l':
- do_cmd_wiz_learn();
- break;
-
- /* Magic Mapping */
- case 'm':
- map_area();
- break;
-
- /* corruption */
- case 'M':
- (void) gain_random_corruption(command_arg);
- break;
-
- /* Specific reward */
- case 'r':
- (void) gain_level_reward(command_arg);
- break;
-
- /* Create a trap */
- case 'R':
- wiz_place_trap(p_ptr->py, p_ptr->px, command_arg);
- break;
-
- /* Summon _friendly_ named monster */
- case 'N':
- do_cmd_wiz_named_friendly(command_arg, TRUE);
- break;
-
- /* Summon Named Monster */
- case 'n':
- do_cmd_wiz_named(command_arg, TRUE);
- break;
-
- /* Object playing routines */
- case 'o':
- do_cmd_wiz_play();
- break;
-
- /* Phase Door */
- case 'p':
- teleport_player(10);
- break;
-
- /* get a Quest */
- case 'q':
- {
- /* if (quest[command_arg].status == QUEST_STATUS_UNTAKEN)*/
- if ((command_arg >= 1) && (command_arg < MAX_Q_IDX_INIT) && (command_arg != QUEST_RANDOM))
- {
- quest[command_arg].status = QUEST_STATUS_TAKEN;
- *(quest[command_arg].plot) = command_arg;
- if (quest[command_arg].type == HOOK_TYPE_C) quest[command_arg].init(command_arg);
- break;
- }
- break;
- }
-
- /* Make every dungeon square "known" to test streamers -KMW- */
- case 'u':
- {
- for (y = 0; y < cur_hgt; y++)
- {
- for (x = 0; x < cur_wid; x++)
- {
- cave[y][x].info |= (CAVE_GLOW | CAVE_MARK);
- }
- }
- wiz_lite();
- break;
- }
-
- case 'U':
- {
- p_ptr->necro_extra |= CLASS_UNDEAD;
- do_cmd_wiz_named(5, TRUE);
-
- p_ptr->necro_extra2 = 1;
-
- /* Display the hitpoints */
- p_ptr->update |= (PU_HP);
- p_ptr->redraw |= (PR_HP);
-
- /* Window stuff */
- p_ptr->window |= (PW_PLAYER);
- break;
- }
-
- /* Summon Random Monster(s) */
- case 's':
- if (command_arg <= 0) command_arg = 1;
- do_cmd_wiz_summon(command_arg);
- break;
-
- /* Change the feature of the map */
- case 'S':
- cave[p_ptr->py][p_ptr->px].special = command_arg;
- break;
-
- /* Teleport */
- case 't':
- teleport_player_bypass = TRUE;
- teleport_player(100);
- teleport_player_bypass = FALSE;
- break;
-
- /* Teleport to a town */
- case 'T':
- if ((command_arg >= 1) && (command_arg <= max_real_towns))
- teleport_player_town(command_arg);
- break;
-
- /* Very Good Objects */
- case 'v':
- if (command_arg <= 0) command_arg = 1;
- acquirement(p_ptr->py, p_ptr->px, command_arg, TRUE, TRUE);
- break;
-
- /* Wizard Light the Level */
- case 'w':
- wiz_lite();
- break;
-
- /* Make a wish */
- case 'W':
- make_wish();
- break;
-
- /* Increase Experience */
- case 'x':
- if (command_arg)
- {
- gain_exp(command_arg);
- }
- else
- {
- gain_exp(p_ptr->exp + 1);
- }
- break;
-
- /* Zap Monsters (Genocide) */
- case 'z':
- do_cmd_wiz_zap();
- break;
-
- /* Hack -- whatever I desire */
- case '_':
- do_cmd_wiz_hack_ben(command_arg);
- break;
-
- /* Mimic shape changing */
- case '*':
- p_ptr->tim_mimic = 100;
- p_ptr->mimic_form = command_arg;
- /* Redraw title */
- p_ptr->redraw |= (PR_TITLE);
- /* Recalculate bonuses */
- p_ptr->update |= (PU_BONUS);
- break;
-
- /* Gain a fate */
- case '+':
- {
- int i;
- gain_fate(command_arg);
- for (i = 0; i < MAX_FATES; i++)
- fates[i].know = TRUE;
- break;
- }
-
- /* Change the feature of the map */
- case 'F':
- msg_format("Trap: %d", cave[p_ptr->py][p_ptr->px].t_idx);
- msg_format("Old feature: %d", cave[p_ptr->py][p_ptr->px].feat);
- msg_format("Special: %d", cave[p_ptr->py][p_ptr->px].special);
- cave_set_feat(p_ptr->py, p_ptr->px, command_arg);
- break;
-
- case '=':
- wiz_align_monster(command_arg);
- break;
-
- case '@':
- wiz_inc_monster_level(command_arg);
- break;
-
- case '/':
- summon_specific(p_ptr->py, p_ptr->px, max_dlv[dungeon_type], command_arg);
- break;
-
- case '>':
- do_cmd_lua_script();
- break;
-
- /* Not a Wizard Command */
- default:
- if (!process_hooks(HOOK_DEBUG_COMMAND, "(d)", cmd))
- msg_print("That is not a valid debug command.");
- break;
- }
-}