on some unknown version of Sun OS, with some unknown compiler version,
on a Sun 3/80, umoria core dumps while restoring a savefile if compiled
with -O2, works if compiled with -O1

mac version does not clear screen properly when running a second
character, try looking for variables which should be cleared but aren't,
especially the race display, and object pointers

typing escape to the wizard mode change character prompts does not
clear the message line

can actually get the 'internal error in identify scroll' message, user had
two(one?) unidentified identify scrolls, and one known identify scroll,
read the known one, identified the unknown ones, got the combining message,
and then got the internal error message

need to clear the heavy_weapon state everytime a new weapon is wielded,
so that you don't get 'can wield' message when going from heavy to light,
but you do get a 'can't' wield' message when going from heavy to heavy

for Atari ST, find and fix rest of the &/| long constant problems, esp. see
moria1.c

on one SYS V system, curses.h includes termio.h which gets included twice,
confusing the compiler

mac sources don't have their name in them

Mac version should use GetKeys() instead of KeyMapLM, the current code
is not 32 bit clean

why is errno ifdefed out for MSDOS in externs.h, I can't remember why
I did this, note the def of errno in files.c for MSDOS

clock in misc1.c needs to be changed, Mac (TC?) defines this

a few routines still equate '\0' with ESCAPE, such as get_com(),
fix them to ignore NULL characters?,  also get_com() should echo "escape"
to the screen, to make it clear in case the prompt doesn't get erased

in movement_rate(), instead of using mod, use (randint(2 - speed) == 1)
to make monster movement a little more uncertain

in get_com(), get_dir(), etc, put -escape- on the msg line if escape
key pressed, useful if message doesn't get deleted, but doesn't this
always happen?, apparently not on the Atari ST MWC port

light_dam() should call inven_damage(set_lightning_destroy), like
fire_dam/cold_dam/acid_dam do, should perhaps only discharge them
not destroy them?

teleport_to() can fail in very rare situations, add check to make sure
destination in inside cave boundary

teleport traps don't light up right?, probably need a move_light(),
check_view() or similar call in hit_trap() before the player actually
teleports away

rubble can be generated underneath a monster, which should not happen

why call sigsetmask(0)?
delete signals() and nosignals() as unnecessary?

killing a shell -1 results in the game disappearing without leaving
a save file, what happened?

fix alloc_monster() so that dragons are always created sleeping?
note, do not make this change to summon_monster()

print multiple messages on the same line if they will fit, instead of always
printing each separately

make it possible for monster generation to fail, for example, have pushm()
return -1, only place_monster and place_win_monster() need check for this
in dungeon(), call compact_monster() if there are, say, less than 10 free
monster slots, this will greatly reduce problems with calling compact_monster()
during creatures()

the stores will buy any mushroom/mold?, this is not good

display the maximum weight in inventory when show weights set,
perhaps add weight limit and carried weight to character display?

paladin has one of the lowest starting save values, shouldn't it be
higher?

when use wall building wand, wall next to you is not lit, perhaps need a
move_light call?

earthquake should act just like wall building, as far as what happens to
monsters trapped in walls, remove movement_rate() call from spells.c,
and make it a static function in creature.c

when thief steals an object, say what was stolen in message

the save.c code that says "file exists, overwrite?", can this ever be
executed?, if so, does it do the right thing?,  and also, what happens on
EOF? will it go into an infinite loop on EOF?

add 1990 to copyright statements just to be safe?

occasionally get "error in print" messages, usually immediately after
climbing stairs, or changing panels, I am completely baffled by these reports
change error print statements to aborts...that'll get their attention!

what exactly does the damned flag mean, should it be on for all except known2
items, or should it be on when an item is known to be cursed?

add ptodam to damage before calling critical_hits
- adjust ptodam by max_swings/real_swings,this eliminates much of the advantage
of light weapons, since they no longer get more effect from to_dam bonuses
- compute damage bonus as (base damage + 2) * (ptodam / 9) - 2, so that
dagger bonuses are halfed, and two handed sword bonuses are doubled
- adjust the damage bonuses when generated by above formula, so that
daggers range from +1 to +5, and two handed swords from +1 to +20
- increase cost of zweihander to 1500, to make it more than flamberge
- modify C command to print to dam bonuses modified by weapon, should
  print both the unmodified bonus, and the modified bonus
- should take about 10 slay dragon arrows to kill AMHD, check this after
  ptodam code is changed, may need to increase damages from +3?

when rogues list Beginners Majik spell book, spells are listed 'a'-'e',
when cast from the spell book, spells are listed 'b'-'f', the spell casting
list should also go from 'a'-'e', but this looks hard to fix

allow SPACE to exit from inventory commands

while selling in shops, only show items store will buy

when haggling, have <RET> default to the last incremental haggling amount

no monster, except Balrog, can resist mass polymorph, should I make it more
like polymorph?
mass polymorph is much higher level than polymorph, and is useful for
dire emergencies, either don't give monsters a saving throw, or make is
something like level/(3*MAX_MONS_LEVEL/2) which will make it possible but not
certain that the staff will work on AMHD's

should 'print rock types while looking' and 'highlight seams' be to
different options?

should mac port have a separate io.c file?

if you curse a special magic item (HA, RF, etc), it retains its very high
value, its cost should be reset to the value in object_list[index]

if you curse a special cursed object (noise, irritation), it will lose its
special cursed ability (two wrongs make a right?!?), this should not happen,
instead of clearing ALL flag bits, should only clear the 'good' ones

if you game gets a hangup signal while suspended(), it disappears without
leaving a core dump or panic/hangup savefile?  where did it go?

fire_ball/fire_bolt do not display right, problem with buffering of stdout?

invisible monsters, and 'headless' monsters should not glare when recovering
from a bash

gelatinous cubes are a bonanza for explorers, cause they can be cloned and
killed for 4 treasure each, they do not eat each other anymore like they
used to,
update: wand of clone monsters is less powerful now (fewer charges when
recharged) and cloning is more dangerous now (monsters wake up when cloned)

need to print message while creating screen_map? seems to take a while on
atari st port

add option to rest command so that it will stop when have max mana and max hp
back.  Perhaps enter by typing a '*'. Better to just use R<CR> to mean
rest until fully restored.

version.inf file should not contain version number/copyright, these should
be printed from the variable values

the mac Makefiles (3) and NamedCat files need to be binhexed since they
have some 8-bit characters

the intro screen for the MSDOS port needs updated, should it really give
Don's address?

in misc1.c, the pusht code requires search of entire cave structure,
this needs to be written more efficiently, perhaps put x,y into inven_type for
every object located somewhere in the cave?

eliminate all #if 0 in the code

Mac version should be able to find config file in same directory as the
program, 4.87 doesn't

eliminate undef.c

**************************
Changes that can wait...

shouldn't be able to genocide invalid letters; escape out of genocide
should restore, as with recharge/identify?

a command to allow writing the monster memory to a file

get sources for nethack/omega, look for any really good ideas, also check
to see how the implement Mac compatibility, portability, protection,
and other general concepts

treasure.c has an arrow and a bolt out of order (arrow in the rings, and
bolt in the amulets)

secret doors are always granite, would be nice to have secrets doors
hidden in other types of rock, would make them less obvious when
hightlight seams is on, also current scheme gives an advantage while searching
since walls displayed as % obviously are not secret doors

MAX_SIGHT is 20, but rooms can be larger than twenty across, that gives
strange situation where moving one step away from a monster in a large room
can cause it to disappear, either increase MAX_SIGHT to be size of largest
possible room size, or else use different MAX_SIGHT values in rooms/corridors/
town level?

instead of printing 'it can hit to attack and hit to attack' print
'it can hit to attack twice' in monster descriptions?

can cheat by buying/selling a single object 20 times, and then have
auto-haggle mode kick it, solution: set a bit in each individual object when
it is first bought/sold so that it can only count once, will this work?

change haggling so that number of good bargains needed depends on price of
object, for example, 10+(price/50), so that only 10 bargains needed for objects
that cost less than 50gp, but 30 needed for objects that cost 1000gp
if go immediately to final offer, then don't count it as a good or bad bargain
items less than 10gp should perhaps always go to final offer?

horrible hack: variable hack_monptr prevents problems when compact_monster()
is called from creatures(), the m_list/creatures() code needs to be rewritten
so this is not a problem, also, note that there is a problem when the current
monster is killed, as the code may try to move it after it is dead

improve map command (see nethack), define an array of special characters,
one for each type of composite wall, say, and then let end users specify
the necessary graphic characters, allow for multiple character graphic
sequences

combat in a room should have a chance of waking up sleeping monsters, except
that it would not be fair, since monsters can send breath weapons through
other monsters, but the player can only attack the nearest monsters

(high level?) monsters should slowly regenerate hit points, esp since the
doc states that the Balrog does
note, if leave level and come back, the Balrog is regenerated (sic) with
full hit points
every 128 turns, let monsters regenerate 1/64 of their total hit points?

should be a chance of weapons breaking when try to dig with them?
NO, it is too easy to dig with weapon by accident, shouldn't dull them unless
there is some way to sharpen them which there currently isn't

can get small groups of rooms which are connected to each other, but not
to the rest of the rooms on the level, perhaps check for cycles in
tunnel/room graph before trying to build tunnels?

can not use counted commands while bashing a door, because of the
paralyzation that sometimes occurs always stops a counted command

does noneedtobargain() kick in too late??

allow character building, by allocation of a limited number of stat points,
instead of random rerolling??

add another aux inventory slot, so that there is one for picks, and one for
bows

decrease mithril values, increase gem values, more expensive items in the
shops, should be greater difference between prices of low level objects
and high level objects, more gold/silver/copper on lower levels, selling
high enchanted objects should not be so profitable
(good idea here, favorite suggestion for fixing the money problem)

add slay dragon and regenerate to HA (yuck)

in object_offset(), give 70/71 and 75/76 different codes, shift by 5 (32)
everywhere instead of 6 (64), reduce size of object_ident[] from
7*64 to 9*32, objects 71 must all have 2 added to subval so that they
start at 96, objects 76 must all have 1 added to subval

all variables (including bss) should be initialized before they are used,
see the mac sources

most case statements should use table or if/else instead, table are much
faster, both gice much smaller code

if have one unidentified object, and sell it to a store, and it gets
identified, and you happen to have some similar store items, you will get
a 'combining' message, even though no combining is really taking place

many of the constants in constant.h should really be enums instead, this
would make the game more maintainable

some fields of treasure_type are const and could be deleted

missile weapons should be made more useful, make them stackable after
identified if they are identical, increase the benefit of using proper
bow/arrow combo, increase +todam, +tohit more than now, perhaps give
an advantage here to fighters/paladins/rangers/rogues somehow, don't
decrease ptohit so much in inven_throw() (currently reduced by distance)

should recall info be set in breath() for other monsters?

finish monster compiler, write defs for all monsters

should be able to increase digging plusses for weapons??

should be able to increase ring plusses?? this would seriously unbalance
the game if allowed

in the store bargain code, separate the sell good bargains from the purchase
good bargains?  this is important for owners with very high inflate values
as it is easy to reach sell final value, but very difficult to reach purchase
final value, change from 20 to 10 if do this

change move to take a char-number i.e. '0' instead of a number, i.e. 0

put all prt_ functions into a separate file, put all movement functions
in a separate file

define constants for all possible tchars, number-directions, attack-types,
last_line = 23, scroll flags, potion flags, etc

would be nice if 10-23 were all wielded objects, i.e. move spike 13 
and light 15 outside this range

use scroll bars on the Mac version for showing the rest of the level,
L/W, might be confusing since this won't scroll the whole window, only
the dungeon view
have multiple windows, one for inventory, one resizable/scrollable for
dungeon view, etc...

should eliminate need for 70/71 scrolls and 75/76 potions

replace hex flag fields in treasure with constants

should not get message "something rolls under feet" when step on a loose rock
/* Hid Obj*/ trap?, also should not get this message when cast create food

must strongly discourage rerolling (exit program and restart), as this
will pollute the log, and therefore upset the protection mechanism

%%%%%%%%%%%%%
ideas from Bron Campbell Nelson bron%bronze.wpd.sgi.com@sgi.sgi.com

potion of boldness should have duration, i.e. should be safe from fear for
a little while after quaffing boldness potion (also heroism/super-heroism)

warriors too hard, give them more hitpoints?, lower base-to-hit of other
classes?, fix warrior so can withstand one AMHD poison breath attack?

boots of speed are too hard to find, 1/7000 is ring of speed, 1/14000+ is
boots of speed

items needed for win: see invisible, free action, resist fire, speed, if
add black market, don't make it too easy to get these items

black market suggestions:
staff of teleportation 20000, staff of speed 100000, mushroom of restoring
20000, and perhaps some powerful archery items

heavy armor is useless, does not protect against spells/breate, and reduces
from to-hit, reduce penalty for characters with high STR?

new shop: enchantorium, where enchantments can be purchased for a high
price, price proportional to how many enchants already there (i.e. enchanting
a +9 item costs a fabulous amount, but enchanting a +0 item costs a little more
than one enchant armor/weapon scroll), allow enchant to any value, i.e.
AC/digging for HA/DF, digging for picks/shovels/etc, etc...

less reasonble suggestions follow...

too many weapon types, the variety is useless

have armor protect by subtracting ac/10 (sic) instead of reducing by %

speed is too important, need smaller time quanta

race/class adjustments should be more meaningful, give races/classes max
stat values which are not 18/100

warriors should automatically recognize ego weapons

%%%%%%%%%%%%%%%%%%%%%%%%%

reincarnate, and lose 1/2 exp?

give enchant scrolls (or perhaps just *enchant*) a small probability
of creating ego weapons
give enchant scrolls a small probability of destroying ego enchantments
if they fail to increase pluses

make the number of hits per round probabilistic, i.e. instead of getting
1/2/3/4 hits per round, gives weapons 2.4 hits per round etc, to smoothen
the curve

dagger too powerful, only apply bonus to hit/dam on first strike?, or mult
bonuses by max # strikes/actual number of strikes, so that heavier weapons
get more bonus to damage than light weapons?

need someway to set the options before entry, either environment variables,
or else by reading from a file, this is not too important though since this
info also gets read from savefiles, dead or alive

when recall the 'p's and are not on town level, ignore the townspeople
perhaps add option to order monsters differently?
give list of all monsters of that type, and then recall all if type 0,
else only recall the one indicated by the number typed in
change ident_char() in help.c

have all top level action functions (aim, move, throw, inven_command, etc.)
return true if took a turn, otherwise false

add command to show number of turns played, time spent playing, date character
started, perhaps even a calendar to give game date '1037 in the Third Age'

wizard restore should not set the 'noscore' variable?

enter_store in store2.c calls draw_cave when exiting the store, it should
save the current screen contents away in memory and then restore from that
saved screen

if type control-C while resting, sometimes the counter is not cleared, happens
often when count less than 10, to fix, should move all I/O code out of signal
handler, it should just set a flag and return

should examine_book(), scrolls(), and spells/prayers work when hallucinating?

change player attributes to counters, things like sustain_stat, etc.
this would greatly simplify calc_bonuses()

should not be able to stun creates which do not move, and creatures
which have no brains

los code used to determine if monsters are visible but not for objects,
this leads to strange situations, when room lights up, one can see all objects
in the room, but must enter the room before can see then monsters

have the monster generator make a table of undead monster indexes, to simplify
summon_undead()

give exp when learn a spell, instead of when it is used successfully the
first time

add some unique levels to make it more interesting, mazes, etc.

add a metric option

add diagonal corridors???

add a storage rental shop, so players can save objects until they need them,
but must pay for the priviledge, and have to go back to level 0 to
retrieve the objects

create a safe haven for the player, where hp regen faster, poison/disease
cure faster, and player must be in to win

add a bank for saving/borrowing money (I don't like this), would rather
make money less plentiful, perhaps make magic items less profitable to
sell?

possible AD&D enhancements
mages can't wear armor and cast at the same time, stealth decreases
when wearing armor (for thieves), priests can't use edged weapons, spell
casting takes time (more than one turn for high level spells?), ranger
attack bonuses, paladin's laying on hands and wealth limits

Orcs should always appear in groups?

possible balancing enhancements
characters have max stat of 18/50+ initial race/class mod, for example,
human mage has max str of 18/50 - 5 = 18.
increase warrior HP so that a warrior can withstand one breath of any type
frlom any dragon
dex is very important, so everybody should have a chance of getting high
dex values

add option to find code so that it can optionally stop before lighting
	up or entering a room
add otpion to find code so that will enter corridor intersections

Change key-dispatch table in dungeon.c back to ORIGINAL mode.

put shell_out code in OS dependent files, unix.c/msdos.c/etc.

save all levels, problems with the sheer size of doing this, 10K * 50 levels
is 500K total

change stats to straight 1-40 range

replace sets.c with an array ~110*16 with a flag for each type of damage
	faster and smaller than current scheme

add option to loc_symbol so that it can optionally print char to screen,
	most loc_symbol calls feed directly to print()

the look code uses a different algorithm from the los code, is recursive,
	hard to understand, has 3 gotos, I would prefer code more like los
	using the shading ideas of jnh

lose_dex is never called, well, we'd better fix that!

black mold, and shimmering mold have 00000080 CMOVE flag set which has no
	effect

boots of great mass can be identified by checking the weight display,
should eliminate them and replace with some other type of cursed boots
suggestion: boots of two left feet, (- to dexterity)

add another field to monster_type, treasurep, cloned/multiplyed monsters
	should not have treasure, but if they pick up an object, then
	again let them carry treasure

change randnor from table lookup to 8d99, save 512 bytes for table

PC code ifdefs out the register declarations, is this still necessary?

remove ASCII dependencies
	many places assume that a-z are consecutive, i.e. 'a'+25 = 'z'
	the hallucination code assumes ascii - randint(95)+31 (misc1.c)

eliminate sscanf calls in ms_misc.c and wizard.c

allow numbers instead of letters in menus, i.e. spell lists, inventory/equip
	lists

don't use num-lock for tunneling in PC version, this is a locking key

characters accumulate too much cash, perhaps do this:
	change OBJ_TOWN_LEVEL from 7 to 17, and change place_gold() in misc2.c
	293c293,294
	<   i = ((randint(dun_level+2)+2)/2.0) - 1;
	---
	> /* NF: Change randint multiplier from (r(d+2)+2)/2 to (r(d+2)+4)/3 */
	>   i = ((randint(dun_level+2)+4)/3.0) - 1;
the fixes above (decrease mithril values ...) are preferable

show time elapsed playing, date character started, and number of turns
elapsed

have option to put inventory/equipment list on one screen

set a timer, and if the game has been idle for 15 minutes, gracefully
save and exit?

new monster suggestions by berman-andrew@yale, because there are no
medium difficult mosnters before level 40...
{"Electric Golem", 0x00020002, 0x00080004, 0x1080, 100, 380,
  12, 85, 0, 'g', "70d8", "8 1 1d24|8 1 1d24", 35}
{"Queen Harpy",    0x37120012, 0x00008208, 0x2036, 100, 1200,
  20, 80, 2, 'h', "46d8", "1 3 2d6|1 3 2d6|1 2 2d12|3 7 0d0", 35}


add wizard command that would create new MORIA_HOU file, since there already
	is a default def for it, otherwise, make days array bss

for HA weapons, p1 is used for both str increase, and sustain stat

rewrite my own sprintf routine that just takes strings %s and integers %d
and nothing else, may be faster/smaller than the library version, or perhaps
have a routine which cats 3 strings together, or 2 strings and an int

some armor have negative to-hit values, should this be part of the name?
   mention this in the Moria.doc file

age characters before killing them of Ripe-Old-Age

these commands which take a dir should not work when confused,
   bash, closeobject, jamdoor, openobject

monsters need a 'not carry large object' flag in CMOVE, have all chests (type
2), polearms (type 22) and staffs (type 55) be large objects, these should
be rerolled if they occur when only small objects allowed, chests should have
this bit set, also small creatures should have it set: kobolds, mummified
kobolds, greedy little gnomes, scruffy-looking hobbits.

trap names are vague,
   have two names for each trap, a simple search discloses current vague name,
   setting it off, or a find/identify trap gives the long name

allow option of making aux files either hard coded paths, or paths relative
to the executables directory, could then make the aux files relative, put
exe file in same directory as aux files, and start up program with shell
script that cds to aux file direcotry, this makes it easy to keep multiply
moria versions around

add scorefile editing functions, perhaps just have an ascii score file?
allow 4.87 scorefiles to be converted into 5.x scorefiles

allow rerolling after choose race/class

still too slow on i/o, perhaps rewrite to avoid refresh() calls?
	perhaps use only motion optimization stuff?

should we call m_name if spell only applies to visible creatures?

when moving on objects, say what character moved onto (like rogue)

for throw command, ask for direction first (like rogue)

add user name to scoreboard?

also add points and experience to scoreboard

should be able to enchant to-hit to-dam of gauntlets of slaying?
   likewise, enchant toac of HA swords, etc.
either should allow enchant of HA sword toac, or else disenchanter bats
  should not be allowed to reduce it

fix save files to include obj desc, then only need one random number
	generator which can use table program

replace magic numbers with constants

name objects if use did not identify them

when creature steals and then dies, the stolen item should appear

should not be able to use a two-handed weapon (two-handed sword, pole arm,
	bow, crossbow, flail, etc.) at same time as wearing a shield

Very Hard things to add:
can't cast in any direction,

Long term stuff, enhancement suggestions:
give player something to do with money, i.e. 1Million gp for a HA +10 +10 sword
'flavor' the levels, dragons on one level, undead on another, etc.
what's been discovered list
commands not close enough to rogue style
fixed item lettering in inventory, in-line/cmd-line options?
scoreboard have all scores, not top twenty
command line option to print out times open
Y destroy command, allow destroy from equipment list
let o, c, D commands automatically pick direction when they can
give rogue's a chance to steal, e.g. let monsters carry items that they
  pick up, if rogue fails, then monster gets a free hit, otherwise monster
  stays asleep, with a small chance of monster waking up
give magic users a chance at pre identifying scrolls
could use a help system, like VMS version
have multiple character parties, note that almost everything character
	dependent is stored in the py structure already


could reduce the size of the types.h file (and other source files too) if
	eliminate reduce type specifiers, i.e. int32u cmove;\n int32u spells;
	could be int32u cmove,\n        spells;

add color, i.e. red dragons show up as a red 'D', etc

when look at monsters, give monster state in addition to monster name, i.e.
"You see a sleeping ancient red dragon."

add code to the get_dir() function so that one can optionally specific a
	hex instead of a direction, i.e. if you enter '.', then program goes
	into a cursor positioning mode, allowing you to move the cursor to
	the spot you want to specify

don't like the player_exp values, the increase is not very even, especially
in the upper levels

cloak of protection is misleading, it has no special features

need documentation on what each spell/prayer/staff/etc does, this is needed
	for priestly spells in particular, since these are non obvious
	also needed for special objects, such as crown of magi

eating elvish waybread for curing can cause a character to become bloated and
	start moving slower, either decrease food value of ew to 5000, or
	increase player food limit to 17500, or combination of both, or perhaps
	change the you are full message, maybe have another message at 7500?,
	or maybe make elvish waybread immune to the slowing effect

monsters should be more intelligent, should know about corridors so that they
don't get stuck in dead ends, or continually retrace their movement

RNG for Moria should have a table shuffle, see Knuth

don't update store inventories across save, unless the save file is at least,
say, an hour old

when monster appears, print its name, may need some work to work reasonably
	with detect spells

Features:
hero/superhero do not subtract hit points when effect wears off
WOR scroll can save you with minus hit points!!
detect monster does not detect invisible monsters (normally)
can hit monsters in walls, but can not cast at them
can not enchant something with negative numbers (i.e. cursed items)
how does armor protect against breath/gas? it doesn't!!!

missing amulets: strength, constitution, intelligence, dexterity
missing rings: gain wisdom, gain charisma
	note that missing rings/amulets are disjoint
missing detect monster potion (feature!)
missing blank scrolls (feature!)
missing staff genocide (feature!)
missing staff mass_genocide (feature!)

D&D Inconsistencies, most of these should not be fixed since that would
	unbalance the game:
priests should not need light for prayers
magic missile should do 1d4+1 per level
detect invisible should last 5 rounds, instead of 1
stinking cloud should be renamed cloudkill
fireball does 1d6 per level, should destroy all paper/wood and melt metal
lightning does 1d6 per level
hold monster 1 round per level of caster
phase door by touching a wall, and end up on other side of the wall
light spells should be mobile
heroism should not work when over level 11, superheroism should not work when
	over level 14
rings can not be used cummulatively, rings or prot have no effect if
	wearing armor
Flame Tongue, +3 versus cold creatures and avian, +4 vs undead
Holy Avenger, +50% on all saving throws

