# File: t_info.txt # Defines the field types. # === Understanding t_info.txt === # N: serial number : field name # G: symbol : color # W: priority : type : counter initial value # I: flag | flag | flag # D: Data[8] # 'N' indicates the beginning of an entry. The serial number must # increase for each new item. It also is used to store the name of # the field. # 'G' is for graphics - symbol and color. There are 16 colors, as # follows: # D - Dark Gray w - White s - Gray o - Orange # r - Red g - Green b - Blue u - Brown # d - Black W - Light Gray v - Violet y - Yellow # R - Light Red G - Light Green B - Light Blue U - Light Brown # 'W' describes extra information about the field. Priority decides # which field is visually "on top". Type is a number which describes # whether the field is a trap, door, building, magic wall etc. # Counter initial value is used for timed effects / effects with counters. # 'I' is a set 'info' flags describing the type of field. These are mostly # used for "quick" recall of information. (Most other things probably can # be stored in the data[] array if required.) # 'D' 8 bytes of data for the field. How this is used depends on the # functions called in the 'F' section below. ##### Something special ##### # Nothing N:0:Nothing G:@:w W:0:0:0 D:0:0:0:0:0:0:0:0 # Invisible Wall N:1:blank G:.:w W:0:4:0 I:FEAT | NO_LOOK | NO_ENTER | NO_MAGIC | NO_OBJECT D:0:0:0:0:0:0:0:0 L:INTERT:action = ACT_TUNNEL L:INTER:if power > 40 + randint0(1600) then L:INTER: msgf("You have finished the tunnel.") L:INTER: deleteme() L:INTER:else L:INTER: msgf("You tunnel into it.") L:INTER:end L:TARGET:wall_gf() # Glyph of Warding N:2:glyph of warding G:;:y W:100:6:0 I:FEAT | VIS | NO_OBJECT | TRANS | NO_MPLACE D:0:0:0:0:0:0:0:0 L:MENTT:local race L:MENTT:race = monst_race(r_idx) L:MENTT:do_turn = TRUE L:MENTT:if (do_move == TRUE) then L:MENTT: if (bAnd(race.flags[0], RF0_NEVER_BLOW) ~= 0) and L:MENTT: (randint1(BREAK_GLYPH) < race.level) then L:MENTT: if visible == TRUE then L:MENTT: msgf("The rune of protection is broken!") L:MENTT: end L:MENTT: deleteme() L:MENTT: else L:MENTT: do_move = FALSE L:MENTT: end L:MENTT:end # Explosive Rune N:3:explosive Rune G:*:R W:100:6:0 I:FEAT | VIS | NO_OBJECT | TRANS | NO_MPLACE D:0:0:0:0:0:0:0:0 L:MENTT:local race L:MENTT:race = monst_race(r_idx) L:MENTT:do_turn = TRUE L:MENTT:if (do_move == TRUE) then L:MENTT: if (bAnd(race.flags[0], RF0_NEVER_BLOW) ~= 0) and L:MENTT: (randint1(BREAK_MINOR_GLYPH) < race.level) then L:MENTT: if (field.fx == player.px) and (field.fy == player.py) then L:MENTT: msgf("The rune explodes!") L:MENTT: fire_ball(GF_MANA, 0, 2 * ((player.lev / 2) + damroll(7, 7)), 2) L:MENTT: else L:MENTT: msgf("An explosive rune was disarmed.") L:MENTT: end L:MENTT: deleteme() L:MENTT: else L:MENTT: do_move = FALSE L:MENTT: end L:MENTT:end # Corpse N:4:corpse G:~:v W:50:7:1000 I:TEMP | VIS | IGNORE D:0:0:0:0:0:0:0:0 L:INIT:corpse_init(r_idx) L:LOAD:local race L:LOAD:race = monst_race(field.data[1] * 256 + field.data[2]) L:LOAD:set_corpse_size(field, corpse_type(race.d_char)) L:SPEC:local race L:SPEC:race = field.data[1] * 256 + field.data[2] L:SPEC:summon_cloned_creature(field.fx, field.fy, race, pet) L:SPEC:deleteme() L:LOOK:corpse_look() L:EXIT:corpse_decay() # Skeleton N:5:skeleton G:~:w W:50:7:1000 I:TEMP | VIS | IGNORE D:0:0:0:0:0:0:0:0 L:INIT:corpse_init(r_idx) L:LOAD:local race L:LOAD:race = monst_race(field.data[1] * 256 + field.data[2]) L:LOAD:set_corpse_size(field, corpse_type(race.d_char)) L:SPEC:local race L:SPEC:race = field.data[1] * 256 + field.data[2] L:SPEC:summon_cloned_creature(field.fx, field.fy, race, pet) L:SPEC:deleteme() L:LOOK:corpse_look() L:EXIT:corpse_decay() # Trapdoor N:6:trap door G:^:w W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(6) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (bAnd(player.flags[2], TR2_FEATHER) ~= 0) then L:PENTER: msgf("You fly over a trap door.") L:PENTER:else L:PENTER: msgf("You have fallen through a trap door!") L:PENTER: sound(SOUND_FALL) L:PENTER: take_hit(damroll(4, 8), "a trap door") L:PENTER: move_dun_level(1) L:PENTER:end # Pit N:7:pit G:^:s W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (bAnd(player.flags[2], TR2_FEATHER) ~= 0) then L:PENTER: msgf("You fly over a pit trap.") L:PENTER:else L:PENTER: msgf("You have fallen into a pit!") L:PENTER: take_hit(damroll(3, 8), "a pit trap") L:PENTER:end # Spiked Pit N:8:spiked pit G:^:s W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:local dam L:PENTER:hit_trap(field) L:PENTER:if (bAnd(player.flags[2], TR2_FEATHER) ~= 0) then L:PENTER: msgf("You fly over a spiked pit.") L:PENTER:else L:PENTER: msgf("You fall into a spiked pit!") L:PENTER: dam = damroll(4, 8) L:PENTER: if (randint0(100) < 50) then L:PENTER: msgf("You are impaled!") L:PENTER: dam = dam * 2 L:PENTER: inc_cut(randint1(dam)) L:PENTER: end L:PENTER: take_hit(dam, "a spiked pit trap") L:PENTER:end # Poison Pit N:9:spiked pit G:^:s W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:local dam L:PENTER:hit_trap(field) L:PENTER:if (bAnd(player.flags[2], TR2_FEATHER) ~= 0) then L:PENTER: msgf("You fly over a spiked pit.") L:PENTER:else L:PENTER: msgf("You fall into a spiked pit!") L:PENTER: dam = damroll(6, 8) L:PENTER: if (randint0(100) < 50) then L:PENTER: msgf("You are impaled on poisonous spikes!") L:PENTER: dam = dam * 2 L:PENTER: inc_cut(randint1(dam)) L:PENTER: if res_pois_lvl() <= 3 then L:PENTER: msgf("The poison does not affect you!") L:PENTER: else L:PENTER: dam = dam * 2 L:PENTER: pois_dam(10, "poison", randint1(dam)) L:PENTER: end L:PENTER: end L:PENTER: take_hit(dam, "a spiked pit trap") L:PENTER:end # evil rune N:10:evil rune G:^:G W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:50:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("There is a flash of shimmering light!") L:PENTER: evil_trap() L:PENTER: deleteme() L:PENTER:end # strange rune N:11:strange rune G:^:o W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:50:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("You hit a teleport trap!") L:PENTER: teleport_player(100) L:PENTER:end # discolored spot N:12:discolored spot G:^:u W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INIT:field.data[3] = randint0(5) L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(8) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (field.data[3] == 0) then L:PENTER: msgf("You are enveloped in flames!") L:PENTER: fire_dam(damroll(4, 6), "a fire trap") L:PENTER:elseif (field.data[3] == 1) then L:PENTER: msgf("You are splashed with acid!") L:PENTER: acid_dam(damroll(4, 6), "an acid trap") L:PENTER:elseif (field.data[3] == 2) then L:PENTER: msgf("A pungent green gas surrounds you!") L:PENTER: pois_dam(10, "poison", rand_range(10, 30)) L:PENTER:elseif (field.data[3] == 3) then L:PENTER: msgf("You are splashed with freezing liquid!") L:PENTER: cold_dam(damroll(4, 6), "a cold trap") L:PENTER:else L:PENTER: msgf("You are hit by a spark!") L:PENTER: elec_dam(damroll(4, 6), "an electric trap") L:PENTER:end # discolored spot N:13:discolored spot G:^:u W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INIT:field.data[3] = randint0(5) L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (field.data[3] == 0) then L:PENTER: msgf("You are enveloped in a ball of flames!") L:PENTER: fire_ball(GF_FIRE, 0, 350, 4) L:PENTER: fire_dam(150, "a fire trap") L:PENTER:elseif (field.data[3] == 1) then L:PENTER: msgf("You are soaked with acid!") L:PENTER: fire_ball(GF_ACID, 0, 350, 4) L:PENTER: acid_dam(150, "an acid trap") L:PENTER:elseif (field.data[3] == 2) then L:PENTER: msgf("A pungent grey gas surrounds you!") L:PENTER: fire_ball(GF_POIS, 0, 350, 4) L:PENTER: pois_dam(10, "poison", rand_range(100, 150)) L:PENTER:elseif (field.data[3] == 3) then L:PENTER: msgf("You are soaked with freezing liquid!") L:PENTER: fire_ball(GF_ICE, 0, 350, 4) L:PENTER: cold_dam(150, "a cold trap") L:PENTER:elseif (field.data[3] == 4) then L:PENTER: msgf("You are hit by lightning!") L:PENTER: fire_ball(GF_ELEC, 0, 350, 4) L:PENTER: elec_dam(150, "a lightning trap") L:PENTER:end # gas trap N:14:gas trap G:^:g W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INIT:field.data[3] = randint0(5) L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (field.data[3] == 0) then L:PENTER: msgf("A blue gas surrounds you!") L:PENTER: inc_slow(rand_range(20, 40)) L:PENTER:elseif (field.data[3] == 1) then L:PENTER: msgf("A black gas surrounds you!") L:PENTER: if (not player_res(TR1_RES_BLIND)) then L:PENTER: inc_blind(rand_range(25, 75)) L:PENTER: end L:PENTER:elseif (field.data[3] == 2) then L:PENTER: msgf("A gas of scintillating colors surrounds you!") L:PENTER: if (not player_res(TR1_RES_CONF)) then L:PENTER: inc_confused(rand_range(10, 30)) L:PENTER: end L:PENTER:elseif (field.data[3] == 3) then L:PENTER: msgf("A strange white mist surrounds you!") L:PENTER: if (not player_res(TR1_FREE_ACT)) then L:PENTER: msgf("You fall asleep.") L:PENTER: if (ironman_nightmare == TRUE) then L:PENTER: msgf("A horrible vision enters your mind.") L:PENTER: have_nightmare() L:PENTER: end L:PENTER: inc_paralyzed(rand_range(5, 15)) L:PENTER: end L:PENTER:elseif (field.data[3] == 4) then L:PENTER: msgf("A gas of scintillating colors surrounds you!") L:PENTER: if (not player_res(TR1_RES_CHAOS)) then L:PENTER: inc_image(rand_range(10, 30)) L:PENTER: end L:PENTER:end # compact rune N:15:compact rune G:^:D W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:50:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("There is a bright flash of light!") L:PENTER: project(0, 1, player.px, player.py, 0, GF_MAKE_TRAP, L:PENTER: bOr(PROJECT_HIDE, bOr(PROJECT_JUMP, PROJECT_GRID))) L:PENTER: deleteme() L:PENTER:end # dart trap N:16:dart trap G:^:r W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INIT:field.data[3] = randint0(3) L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (field.data[3] == 0) then L:PENTER: if (check_trap_hit(125) == TRUE) then L:PENTER: msgf("A small dart hits you!") L:PENTER: take_hit(randint1(4), "a dart trap") L:PENTER: do_dec_stat(A_STR) L:PENTER: else L:PENTER: msgf("A small dart barely misses you.") L:PENTER: end L:PENTER:elseif (field.data[3] == 1) then L:PENTER: if (check_trap_hit(125) == TRUE) then L:PENTER: msgf("A small dart hits you!") L:PENTER: take_hit(randint1(4), "a dart trap") L:PENTER: do_dec_stat(A_DEX) L:PENTER: else L:PENTER: msgf("A small dart barely misses you.") L:PENTER: end L:PENTER:elseif (field.data[3] == 2) then L:PENTER: if (check_trap_hit(125) == TRUE) then L:PENTER: msgf("A small dart hits you!") L:PENTER: take_hit(randint1(4), "a dart trap") L:PENTER: do_dec_stat(A_CON) L:PENTER: else L:PENTER: msgf("A small dart barely misses you.") L:PENTER: end L:PENTER:end # dart trap N:17:dart trap G:^:r W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INIT:field.data[3] = randint0(6) L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(20) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (check_trap_hit(125) == TRUE) then L:PENTER: msgf("A small dart hits you!") L:PENTER: take_hit(randint1(4), "a dart trap") L:PENTER: dec_stat(field.data[3], 30, TRUE) L:PENTER:else L:PENTER: msgf("A small dart barely misses you.") L:PENTER:end # twisted rune N:18:twisted rune G:^:U W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(40) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Your head throbs!") L:PENTER: lose_exp(player.exp / 5) L:PENTER:end # geometric rune N:19:geometric rune G:^:v W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:100:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: if (not player_res(TR1_RES_DISEN)) then L:PENTER: msgf("There is a bright flash of light!") L:PENTER: apply_disenchant() L:PENTER: else L:PENTER: msgf("You feel the air throb.") L:PENTER: end L:PENTER:end # glowing rune N:20:glowing rune G:^:y W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:100:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("You fumble with your pack!") L:PENTER: drop_random_item() L:PENTER:end # jagged rune N:21:jagged rune G:^:b W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:75:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(15) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: gain_mutation(0) L:PENTER:end # fractured rune N:22:fractured rune G:^:b W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(15) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: lose_mutation() L:PENTER:end # faded rune N:23:faded rune G:^:D W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(2) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Darkness surrounds you!") L:PENTER: drain_lite() L:PENTER:end # flashing rune N:24:flashing rune G:^:R W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:25:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(2) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("You suddenly feel very, very hungry!") L:PENTER: drain_food() L:PENTER:end # weird rune N:25:weird rune G:^:B W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:75:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(10) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Your purse becomes weightless!") L:PENTER: player.au = player.au / 2 L:PENTER: player.redraw = bOr(player.redraw, PR_GOLD) L:PENTER: player.window = bOr(player.window, PW_PLAYER) L:PENTER:end # shimmering rune N:26:shimmering rune G:^:b W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("A shrill note sounds!") L:PENTER: speed_monsters() L:PENTER: deleteme() L:PENTER:end # smelly rune N:27:smelly rune G:^:b W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("You smell something musty.") L:PENTER: raise_dead(player.px, player.py, FALSE) L:PENTER:end # intricate rune N:28:intricate rune G:^:v W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:100:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Static fills the air.") L:PENTER: drain_magic() L:PENTER:end # bright rune N:29:bright rune G:^:W W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:125:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Shouts fill the air!") L:PENTER: aggravate_monsters(0) L:PENTER:end # blurry rune N:30:blurry rune G:^:b W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:50:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:hit_trap(field) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("Zap!") L:PENTER: summon_specific(0, player.px, player.py, player.depth, L:PENTER: 0, TRUE, FALSE, FALSE) L:PENTER: deleteme() L:PENTER:end # spiral rune N:31:spiral rune G:^:W W:100:1:0 I:FEAT | TRANS | NO_OBJECT | NO_LOOK D:0:75:0:0:0:0:0:0 L:INTERT:action = ACT_DISARM L:INTER:trap_disarm(5) L:TARGET:trap_gf() L:PENTER:disturb(FALSE) L:PENTER:if (player_save(player.depth) ~= TRUE) then L:PENTER: msgf("You are not sure what just happened!") L:PENTER: lose_all_info() L:PENTER:else L:PENTER: hit_trap(field) L:PENTER:end # Locked door N:32:locked door G:+:U W:100:2:0 I:NO_LOOK | MERGE | NO_MPLACE D:0:0:0:0:0:0:0:0 L:INIT:counter_init(32000) L:INTERT:action = ACT_OPEN L:INTER:power = power - field.counter L:INTER:-- Always have a small chance of success L:INTER:if (power < 2) then power = 2 end L:INTER: L:INTER:if (randint0(100) < power) then L:INTER: msgf("The door is unlocked.") L:INTER: -- Open the door L:INTER: cave_set_feat(field.fx, field.fy, FEAT_OPEN) L:INTER: deleteme() L:INTER:else L:INTER: msgf("You failed to unlock the door.") L:INTER: -- We know the door is locked L:INTER: field.info = bOr(field.info, FIELD_INFO_NFT_LOOK) L:INTER: field.info = bAnd(field.info, bNot(FIELD_INFO_NO_LOOK)) L:INTER:end L:TARGET:door_gf() L:MENTT:local race L:MENTT:race = monst_race(r_idx) L:MENTT:if do_move == TRUE then L:MENTT: do_move = FALSE L:MENTT: do_turn = TRUE L:MENTT: if (bAnd(race.flags[1], RF1_OPEN_DOOR) ~= 0) L:MENTT: and (allow_open == TRUE) L:MENTT: and monster_can_open(race, field.counter) == TRUE then L:MENTT: did_open_door = TRUE L:MENTT: deleteme() L:MENTT: end L:MENTT:end # Jammed door N:33:stuck door G:+:U W:100:2:0 I:NO_LOOK | MERGE | NO_MPLACE D:15:1:0:0:0:0:0:0 L:INIT:counter_init(32000) L:INTERT:action = ACT_OPEN L:INTER:if (randint0(power / 10 + adj_str_wgt[player.stat[A_STR].ind] / 2) > field.counter) then L:INTER: msgf("The door crashes open!") L:INTER: if (randint0(100) < 50) then L:INTER: -- Break down the door L:INTER: cave_set_feat(field.fx, field.fy, FEAT_BROKEN) L:INTER: else L:INTER: -- Open the door L:INTER: cave_set_feat(field.fx, field.fy, FEAT_OPEN) L:INTER: end L:INTER: deleteme() L:INTER:else L:INTER: -- We know the door is jammed L:INTER: field.info = bOr(field.info, FIELD_INFO_NFT_LOOK) L:INTER: field.info = bAnd(field.info, bNot(FIELD_INFO_NO_LOOK)) L:INTER:end L:TARGET:door_gf() L:MENTT:local race L:MENTT:race = monst_race(r_idx) L:MENTT:if do_move == TRUE then L:MENTT: do_turn = TRUE L:MENTT: do_move = FALSE L:MENTT: if (bAnd(race.flags[1], RF1_BASH_DOOR) ~= 0) L:MENTT: and (allow_open == TRUE) L:MENTT: and monster_can_open(race, field.counter) == TRUE then L:MENTT: msgf("You hear a door burst open!") L:MENTT: if (disturb_minor == TRUE) then disturb(FALSE) end L:MENTT: did_bash_door = TRUE L:MENTT: -- Fall through opening L:MENTT: do_move = TRUE L:MENTT: deleteme() L:MENTT: end L:MENTT:end # # Stores use the D: line in the following way. # data[0] is an index into the shopkeeper name array. # If this is equal to STORE_HOME, then the store will be # treated like a home in various ways. # data[1] and data[2] represent the range in levels at which # the items in the store are generated at. # data[3] - data[6] are the object theme of those items. By # using an object theme, as well as the restriction functions # many different types of shop can be made. # data[7] contains the result of logical-and'ing the ST_XXX bitflags # together for that store. # # Note L:STORE1 selects objects not in the store. # L:STORE2 selects objects in the store. # # We now use a consistent, and hopefully intuitive, naming scheme # for the advanced stores: # "Advanced" or "Unusual" means deeper items, normal price. # "Expert" means even deeper items, normal price. # "Deep" or "Expensive" means deeper items, double price. # "Custom" or "Rare" means deeper items, quadruple price. # "Arcane" means items enchanted to "good" status. # "Obscure" means deeper items enchanted to "good" status. # "Unique" means items enchanted to "great" status. # General store N:34:General Store G:1:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:10:0:50:0:50:0 L:SBINIT:place_sb(rand_range(105, 109), rand_range(2, 10)) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_weapon_armour(object) # Armoury N:35:Armoury G:2:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:5:30:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 115), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Weapon Smiths N:36:Weapon Smiths G:3:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:5:20:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 115), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Temple N:37:Temple G:6:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:5:20:33:33:34:0:1 L:SBINIT:place_sb(rand_range(107, 110), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Alchemy Shop N:38:Alchemy Shop G:6:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:5:30:0:0:100:0:0 L:SBINIT:place_sb(rand_range(110, 115), rand_range(10, 15) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Magic Wares N:39:Magic Wares G:6:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:20:40:0:0:100:0:0 L:SBINIT:place_sb(rand_range(110, 113), rand_range(15, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_tval(object, TV_POTION) # Black Market N:40:Black Market G:1:D W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:6:20:50:25:25:25:25:16 L:SBINIT:place_sb(150, rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) # Home N:41:Home G:8:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:7:0:0:100:100:100:100:0 L:SBINIT:place_sb(100, 0) L:PENTER:do_cmd_store(field) # Book Store N:42:Book Store G:5:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:20:40:0:0:100:0:8 L:SBINIT:place_sb(rand_range(105, 110), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_is_book(object) # Weaponmaster N:43:Weaponmaster G:7:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("E) Examine Weapons (".. factor * 3 .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'E') then L:BUILD2: cost = factor * 3 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: if compare_weapons() == TRUE then L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: message_flush() L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Zymurgist N:44:Zymurgist G:7:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("$CThe price of a recharge depends on the item.", L:BUILD1: "", L:BUILD1: "R) Recharge Items", L:BUILD1: "I) Identify Items (".. factor * 5 .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'R') then L:BUILD2: building_recharge(factor) L:BUILD2: done = TRUE L:BUILD2: message_flush() L:BUILD2:elseif (command == 'I') then L:BUILD2: cost = factor * 5 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: identify_pack() L:BUILD2: msgf("Your posessions have been identified.") L:BUILD2: message_flush() L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Magesmith (weapon) N:45:Magesmith (weapons) G:7:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("$CBased on your skill, we can improve up to (+".. L:BUILD1: player.lev / 5 .. ",+" .. 5 * (player.lev / 3) .. "%).", L:BUILD1: "", L:BUILD1: "E) Enchant Weapons (".. factor * 5 .."gp)") L:BUILD2:if (command == 'E') then L:BUILD2: enchant_item(factor * 5, TRUE, TRUE, FALSE, TRUE) L:BUILD2: message_flush() L:BUILD2: done = TRUE L:BUILD2:end # Magesmith (armour) N:46:Magesmith (armor) G:7:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("$CBased on your skill, we can improve up to +" .. player.lev / 5 .. ".", L:BUILD1: "", L:BUILD1: "E) Enchant Armour (".. factor * 5 .."gp)") L:BUILD2:if (command == 'E') then L:BUILD2: enchant_item(factor * 5, FALSE, FALSE, TRUE, FALSE) L:BUILD2: message_flush() L:BUILD2: done = TRUE L:BUILD2:end # Mutatalist N:47:Mutatalist G:9:R W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("E) Expose yourself to raw chaos (".. 50 * factor * (count_mutations() + 1).."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'E') then L:BUILD2: cost = 50 * factor * (count_mutations() + 1) L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: if (lose_mutation(0) == TRUE) then L:BUILD2: msgf("You feel oddly normal.") L:BUILD2: else L:BUILD2: gain_mutation(0) L:BUILD2: end L:BUILD2: player.au = player.au - cost L:BUILD2: message_flush() L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Map Maker N:48:Map Maker G:9:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("E) Examine Map (".. factor * 5 .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'E') then L:BUILD2: cost = factor * 5 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: msgf("You learn of the lay of the lands.") L:BUILD2: map_wilderness(20, player.wilderness_x / 16, player.wilderness_y / 16) L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2: message_flush() L:BUILD2:end # Weapon Smiths N:49:Advanced Weapon Smiths G:3:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:20:50:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Weapon Smiths N:50:Expert Weapon Smiths G:3:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:75:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Weapon Smiths N:51:Deep Weapon Smiths G:3:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:75:127:0:100:0:0:24 L:SBINIT:place_sb(rand_range(125, 150), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Weapon Smiths N:52:Arcane Weapon Smiths G:3:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:42 L:SBINIT:place_sb(rand_range(125, 150), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Weapon Smiths N:53:Unique Weapon Smiths G:3:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(125, 130), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon(object) # Armoury N:54:Advanced Armoury G:2:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:20:50:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Armoury N:55:Expert Armoury G:2:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:75:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Armoury N:56:Deep Armoury G:2:u W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:75:127:0:100:0:0:24 L:SBINIT:place_sb(rand_range(125, 150), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Armoury N:57:Arcane Armoury G:2:u W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:0:100:0:0:42 L:SBINIT:place_sb(rand_range(125, 150), rand_range(5, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Armoury N:58:Unique Armoury G:2:u W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(125, 150), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_armour(object) # Swordsman N:59:Swordsman G:3:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:1:20:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Swordsman N:60:Advanced Swordsman G:3:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:20:50:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Swordsman N:61:Expert Swordsman G:3:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:40:75:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Swordsman N:62:Deep Swordsman G:3:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:75:127:0:100:0:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Swordsman N:63:Arcane Swordsman G:3:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Swordsman N:64:Unique Swordsman G:3:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SWORD) # Shieldsman N:65:Shieldsman G:2:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:1:30:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Shieldsman N:66:Advanced Shieldsman G:2:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:20:50:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Shieldsman N:67:Expert Shieldsman G:2:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:30:75:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Shieldsman N:68:Obscure Shieldsman G:2:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:75:127:0:100:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Shieldsman N:69:Arcane Shieldsman G:2:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:0:100:0:0:26 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Shieldsman N:70:Unique Shieldsman G:2:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SHIELD) # Axeman N:71:Axeman G:3:D W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:1:20:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Axeman N:72:Advanced Axeman G:3:D W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:20:50:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Axeman N:73:Expert Axeman G:3:D W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:75:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Axeman N:74:Deep Axeman G:3:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:75:127:0:100:0:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Axeman N:75:Arcane Axeman G:3:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Axeman N:76:Unique Axeman G:3:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_nonsword(object) # Ammunition N:77:Ammo Supplies G:3:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:1:50:0:100:0:0:8 L:SBINIT:place_sb(rand_range(105, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_ammo(object) # Ammunition N:78:Advanced Ammo Supplies G:3:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_ammo(object) # Ammunition N:79:Deep Ammo Supplies G:3:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_ammo(object) # Fletcher N:80:Fletcher G:3:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:1:50:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_fletcher(object) # Fletcher N:81:Advanced Fletcher G:3:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_fletcher(object) # Fletcher N:82:Arcane Fletcher G:3:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_fletcher(object) # Fletcher N:83:Unique Fletcher G:3:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:20:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_fletcher(object) # Warrior Hall N:84:Warrior Hall G:0:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:1:20:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Warrior Hall N:85:Advanced Warrior Hall G:0:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:20:50:0:100:0:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Warrior Hall N:86:Expert Warrior Hall G:0:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:40:75:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Warrior Hall N:87:Deep Warrior Hall G:0:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:75:127:0:100:0:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Warrior Hall N:88:Arcane Warrior Hall G:0:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:5:95:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Warrior Hall N:89:Unique Warrior Hall G:0:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:2:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_weapon_armour(object) # Clothes Store N:90:Clothes Store G:2:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:1:20:0:100:0:0:8 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_soft_armour(object) # Clothes Store N:91:Expensive Clothes Store G:2:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:50:0:100:0:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_soft_armour(object) # Heavy Armoury N:92:Heavy Armoury G:2:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:1:30:0:100:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Heavy Armoury N:93:Advanced Heavy Armoury G:2:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:20:60:20:80:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Heavy Armoury N:94:Expert Heavy Armoury G:2:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:75:20:80:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Heavy Armoury N:95:Arcane Heavy Armoury G:2:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:75:127:20:80:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Heavy Armoury N:96:Obscure Heavy Armoury G:2:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:20:80:0:0:26 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Heavy Armoury N:97:Unique Heavy Armoury G:2:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:0:100:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(10, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_pure_hard_armour(object) # Milliner N:98:Milliner G:2:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:1:50:50:50:0:0:8 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_helm(object) # Milliner N:99:Advanced Milliner G:2:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:50:100:50:50:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_helm(object) # Milliner N:100:Arcane Milliner G:2:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:50:50:0:0:42 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_helm(object) # Milliner N:101:Unique Milliner G:2:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:20:100:50:50:0:0:62 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_helm(object) # Jeweler N:102:Jeweler G:5:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:1:30:100:0:0:0:8 L:SBINIT:place_sb(rand_range(120, 130), rand_range(20, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_jewel(object) # Jeweler N:103:Copper Jeweler G:5:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:20:50:100:0:0:0:8 L:SBINIT:place_sb(rand_range(120, 130), rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_jewel(object) # Jeweler N:104:Silver Jeweler G:5:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:40:70:100:0:0:0:24 L:SBINIT:place_sb(rand_range(120, 130), rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_jewel(object) # Jeweler N:105:Gold Jeweler G:5:R W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:60:90:100:0:0:0:40 L:SBINIT:place_sb(rand_range(130, 140), rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_jewel(object) # Jeweler N:106:Rare Jeweler G:5:R W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:80:120:100:0:0:0:56 L:SBINIT:place_sb(rand_range(140, 150), rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_jewel(object) # Statue Store N:107:Statue Store G:5:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:1:50:100:0:0:0:8 L:SBINIT:place_sb(rand_range(105, 115), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_STATUE) # Statue Store N:108:Unusual Statue Store G:5:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:50:100:100:0:0:0:8 L:SBINIT:place_sb(rand_range(105, 115), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_STATUE) # Figurine Store N:109:Figurine Store G:5:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:26:26:100:0:0:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_FIGURINE) # Figurine Store N:110:Expensive Figurine Store G:5:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:50:90:100:0:0:0:16 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_FIGURINE) # Potion Store N:111:Potion Store G:5:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:1:30:0:0:100:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_POTION) # Potion Store N:112:Expensive Potion Store G:5:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:20:40:0:0:100:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_POTION) # Potion Store N:113:Deep Potion Store G:5:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:40:70:0:0:100:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_POTION) # Potion Store N:114:Rare Potion Store G:5:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:60:90:0:0:100:0:40 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_POTION) # Potion Store N:115:Custom Potion Store G:5:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:80:120:0:0:100:0:56 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_POTION) # Scroll Store N:116:Scroll Store G:5:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:1:30:0:0:100:0:0 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SCROLL) # Scroll Store N:117:Unusual Scroll Store G:5:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:20:50:0:0:100:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SCROLL) # Scroll Store N:118:Expensive Scroll Store G:5:W W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:40:70:0:0:100:0:24 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SCROLL) # Scroll Store N:119:Deep Scroll Store G:5:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:60:90:0:0:100:0:40 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SCROLL) # Scroll Store N:120:Rare Scroll Store G:5:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:80:120:0:0:100:0:56 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_SCROLL) # Magic Store N:121:Magic Store G:6:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:1:20:0:0:100:0:8 L:SBINIT:place_sb(rand_range(120, 125), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_recharge(object) # Magic Store N:122:Advanced Magic Store G:6:r W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:20:40:0:0:100:0:8 L:SBINIT:place_sb(rand_range(120, 125), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_recharge(object) # Magic Store N:123:Expensive Magic Store G:6:R W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:40:60:0:0:100:0:24 L:SBINIT:place_sb(rand_range(120, 125), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_recharge(object) # Magic Store N:124:Rare Magic Store G:6:R W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:60:90:0:0:100:0:40 L:SBINIT:place_sb(rand_range(120, 125), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_recharge(object) # Magic Store N:125:Custom Magic Store G:6:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:5:80:120:0:0:100:0:56 L:SBINIT:place_sb(rand_range(120, 125), rand_range(10, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_recharge(object) # Book Store N:126:Rare Book Store G:5:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:20:120:0:0:100:0:56 L:SBINIT:place_sb(rand_range(120, 150), rand_range(20, 30) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_is_book(object) # Temple N:127:Large Temple G:6:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:20:50:33:33:34:0:1 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 20) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Temple N:128:High Temple G:6:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:50:75:33:33:34:0:17 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Temple N:129:Hidden Temple G:6:G W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:3:75:100:33:33:34:0:57 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Supplies store N:130:Supplies Store G:1:u W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:9:0:20:40:30:0 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = FALSE L:STORE1:-- This leaves the store with scrolls, tools, ammo, and diggers (by elimination) L:STORE1:if (item_tester_hook_tval(object, TV_POTION) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_weapon_armour(object) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_recharge(object) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_is_book(object) == TRUE) then result = TRUE end # Supplies store N:131:Dungeon Supplies Store G:1:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:20:0:10:40:50:0 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = FALSE L:STORE1:-- This leaves the store with scrolls, tools, ammo, and diggers (by elimination) L:STORE1:if (item_tester_hook_tval(object, TV_POTION) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_weapon_armour(object) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_recharge(object) == TRUE) then result = TRUE end L:STORE1:if (item_tester_hook_is_book(object) == TRUE) then result = TRUE end # Black Market N:132:Large Black Market G:1:s W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:6:40:80:25:25:25:25:32 L:SBINIT:place_sb(150, rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) # Black Market N:133:Hidden Black Market G:1:w W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:6:60:100:25:25:25:25:56 L:SBINIT:place_sb(150, rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) # Alchemy Shop N:134:Advanced Alchemy Shop G:6:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:20:60:0:0:100:0:8 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Alchemy Shop N:135:Rare Alchemy Shop G:6:B W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:4:50:80:0:0:100:0:40 L:SBINIT:place_sb(rand_range(110, 125), rand_range(5, 25) * 10) L:PENTER:do_cmd_store(field) L:STORE1:result = item_tester_hook_recharge(object) # Junk store N:136:Flea Market G:1:g W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:5:30:10:10:50:8 L:SBINIT:place_sb(rand_range(105, 108), rand_range(2, 10) * 10) L:PENTER:do_cmd_store(field) # Food store N:137:Grocer G:0:U W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:0:0:25:0:0:0:100:8 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 10) * 10) L:PENTER:do_cmd_store(field) L:STORE2:result = item_tester_hook_tval(object, TV_FOOD) # Library N:138:Library G:9:b W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:6:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("R) Read about monsters (".. 100 * factor .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'R') then L:BUILD2: cost = 100 * factor L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: if (research_mon() == TRUE) then L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Casino N:139:Casino G:0:o W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:7:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("H) Help", L:BUILD1: "I) In Between", L:BUILD1: "C) Craps", L:BUILD1: "S) Spin the wheel", L:BUILD1: "D) Dice slots") L:BUILD2:if (command == 'H') then L:BUILD2: gamble_help() L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'I') then L:BUILD2: gamble_in_between() L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'C') then L:BUILD2: gamble_craps() L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'S') then L:BUILD2: gamble_spin_wheel() L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'D') then L:BUILD2: gamble_dice_slots() L:BUILD2: done = TRUE L:BUILD2:end # Inn N:140:Inn G:0:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:8:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("E) Eat (".. factor / 20 .."gp)", L:BUILD1: "R) Rest (".. factor / 4 .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'E') then L:BUILD2: cost = factor / 20 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: msgf("The barkeeper gives you some gruel and a beer.") L:BUILD2: set_food(PY_FOOD_MAX - 1) L:BUILD2: message_flush() L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'R') then L:BUILD2: cost = factor / 4 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: if (inn_rest() == TRUE) then L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Restore stats N:141:Healer G:9:y W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:9:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_options("R) Restore Stats (".. 20 * factor .."gp)") L:BUILD2:local cost L:BUILD2:if (command == 'R') then L:BUILD2: cost = 20 * factor L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: if (building_healer() == TRUE) then L:BUILD2: player.au = player.au - cost L:BUILD2: else L:BUILD2: msgf("You are in fine health already.") L:BUILD2: end L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:end # Black Market N:142:Bazaar G:1:D W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:6:5:30:25:25:25:25:16 L:SBINIT:place_sb(rand_range(105, 110), rand_range(5, 15) * 10) L:PENTER:do_cmd_store(field) # Teleport N:143:Magetower G:9:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_magetower(factor, TRUE) L:BUILD2:local cost L:BUILD2:if (command == 'R') then L:BUILD2: cost = factor * 5 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: record_aura() L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'T') then L:BUILD2: building_magetower(factor, FALSE) L:BUILD2: done = TRUE L:BUILD2:end L:BUILD2:message_flush() # Teleport N:144:Large Magetower G:9:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:building_magetower(factor, TRUE) L:BUILD2:local cost L:BUILD2:if (command == 'R') then L:BUILD2: cost = factor * 5 L:BUILD2: if (test_gold(cost) == TRUE) then L:BUILD2: record_aura() L:BUILD2: player.au = player.au - cost L:BUILD2: end L:BUILD2: done = TRUE L:BUILD2:elseif (command == 'T') then L:BUILD2: building_magetower(factor, FALSE) L:BUILD2: done = TRUE L:BUILD2:end L:BUILD2:message_flush() # Quest-giver N:145:Small Castle G:0:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:if (build_has_quest() == TRUE) then L:BUILD1: building_options("R) Request Reward") L:BUILD1:else L:BUILD1: building_options("R) Request Quest") L:BUILD1:end L:BUILD2:if (command == 'R') then L:BUILD2: build_cmd_quest(10) L:BUILD2: done = TRUE L:BUILD2:end # Quest-giver N:146:Large Castle G:0:v W:100:3:0 I:FEAT | VIS | MARK | NFT_LOOK | NO_OBJECT | PERM D:1:0:0:0:0:0:0:0 L:SBINIT:place_sb(rand_range(90, 125), 0) L:PENTER:do_cmd_bldg(field) L:BUILD1:if (build_has_quest() == TRUE) then L:BUILD1: building_options("R) Request Reward") L:BUILD1:else L:BUILD1: building_options("R) Request Quest") L:BUILD1:end L:BUILD2:if (command == 'R') then L:BUILD2: build_cmd_quest(25) L:BUILD2: done = TRUE L:BUILD2:end