::::::: 1990 :::::::: ------------ 1/1 creatures.c: in mon_cast_spell(), must update_mon() to light monsters before they cast a spell ------------- 1/2 moria1.c: inven_command(), could not wear item which replaced equip item if inven full, only fail if inven_check_num fails for torches misc2.c: change spacing for stats on change_character page, was printing in last column for max stat moria2.c: tunnel(), if no shovel/pick, divide total tabil chance by two monsters.c: change eye-sight and sleep values for consistency, as noted by djgrabin help.c: change the monster recall so that it lists high level monsters first creature.c: when monster bashes down a door, call disturb() to halt resting io.c: fix msg_print() so that -more- is always printed on screen, fix put_buffer() so that does not fail if col argument greater than 79/80 misc1.c: change chance for ego weapons/missiles to 3*special/2 instead of just special, needed because treasure distribution change has made ego weapons not as common as before --------- 1/11 monsters.c: let nether wraith phase, set Black/Red/Multi ancient dragons to a sleep value of 700 creature.c: increase r_attacks if either notice true or r_attacks is nonzero (i.e. it has been noticed before) moria2.c: move_char(), when step back after setting off a falling rock trap, check to see if have stepped back onto another trap moria1.c: inven_command(), when restart it after taking off an item, don't print the 'have to drop something' message because that is confusing misc2.c: modify_stat(), could overflow 118 when increasing stats, add extra case to enforce max of 118 --------- 1/12 all: apply william setzer's objdes() diffs, 500K patch file, change version number to 5.0.10 and distribute desc.c, misc2.c, store1.c: remove several obsolete uses of index(), insert_num() no longer used anywhere constant.h, desc.c: change ID_TRIED,ID_KNOWN1 to OD_TRIED,OD_KNOWN1 desc.c: eliminate titles[], rename title_space[] to titles[] all: fixed lint errors all: make sure that all objdes() strings are bigvtype desc.c: fix printing of bows/arrows/picks, needed new p1_use define, and rearrange code in objdes() switch statement treasur1.c, treasur2.c: remove -100 tohit from books, was being printed, and is silly anyways constant.h, externs.h, save.c, treasur2.c: change object_ident[] from MAX_OBJECTS to OBJECT_IDENT_SIZE = 7*64, see object_offset() in desc.c to see why this is necessary ---------- 1/13 externs.h, misc2.c, store1.c: deleted obsolete references to treasure_type desc.c: always print toac field if known2 and non-negative config.h, io.c, misc1.c: eliminated BUGGY_CURSES define, caused too much trouble, just assume that can never print in last column of screen constant.h, desc.c, misc1.c, moria2.c, spells.c, treasur1.c, types.h: created special_names table to hold all possible name2 strings, name2 changed to an int8u which holds index to special_names table externs.h, main.c, treasure1.c: sort_objects() function deleted, sorting now done by init_t_level using O(n) bin sort, into sorted_objects[] array files.c, misc2.c: object_list[] references that assumed it was sorted now indirect through sorted_objects[] array main.c, variable.c: player_init indexes now point into object_list instead of inventory_init ------- 1/14 constant.h, externs.h, main.c, store1.c, treasur1.c, treasur2.c, variable.c: deleted inventory_init array, stores objects now in object_list, MAX_OBJECT adjusted, MAX_DUNGEON_OBJ defined, store_choice[] fixed all: put all objects in object_list, trap_list, door_list, store_door, gold_list, up_stair, down_stair, rubble, much, blank_treasure, scare_monster are not separate variables anymore all: invcopy now takes an object_list index as second parameter, name field deleted from inven_type and fields rearranged ----------- 1/15 store1.c: search_list() deleted, use i_ptr->index instead to get raw item cost save.c: obsolete treasure_type references deleted, save files work again creature.c, magic.c, misc2.c, prayer.c, save.c, wands.c: fixed long/short problems with shift, mostly change (1 << i) to (1L << i) all: add new register declaration, check indentation, fix 32/16bit int problems constant.h: change version number to 5.0.11 ------------- 1/17 spells.c: aggravate was not initiallized in aggravate_monster() monsters.c: novice rogue now evil like other rogues misc2.c: 2 "... learn ... new spells ..." messages changed to print prayers instead for priests moria2.c: drop_throw(), "The %s hits %s" changed to "The %s hits the %s." many: fixed problems with setting of free_turn_flag ----------- 1/19 misc2.c: fix inven_carry(), to stack store/dungeon items properly desc.c: objdes(), set p1_use = IGNORED for food and potions, changed is_a_vowel(tmp_val[1]) to [2] moria2.c: "exceed weight limit?" message now prints item name also desc.c, spells.c, staffs.c, wands.c: empty wands are not incribed empty if known2, empty removed when wands are recharged desc.c: put spaces between inscribed words dungeon.c: always inscribe majik when character notices this, not just for inventory items as that helps priests more than fighters store1.c: sell_price(), succeed only if both item->cost and item_value() are positive creature.c: don't increase a number of attacks when monster repelled in make_attack(), i.e. no damage done so shouldn't learn about damage moria1.c: regenhp and regenmana, could get chp/cmana equal to max and _frac non-zero, change c > max test to c >= max test constant.h, dungeon.c, misc2.c: hp and mana were printed while in store/inv, fix calc_hitpoints() and calc_mana() to set flags instead of printing, in dungeon.c, checks flags and print values ---------- 1/20 store2.c: redisplay store prices if charisma changes during the inven_command calls (actually just redraw everything) moria2.c: monster_death(), dump must be set to 0 is number is 0 constant.h, moria2.c, recall.c, spells.c: recall printing of treasure changed, instead of setting CM_ bits, store largest number of treasure ever generated in those 5 CM_TREASURE bits, changed monster_death() to set the bits the new way, changed uses of monster_death() to replace old treasure bits with new ones, the vague print out treasure amounts replace with printout of precise number of treasures generated externs.h, moria2.c: monster_death() changed to int32 monster_death() moria1.c: new_spot() contained line of code "i = randint(10)" that did not belong there, was formerly testing code desc.c: objdes(), force zero charges to always print, also, always print digging plusses even if zero main.c: items that initialize players inventory are marked store_bought(), this is needed so that dagger/armor bonuses will be shown for them desc.c: objdes(), fixed printing of doors, known1() clear the tried flag, magic_init() don't let scroll names end with a blank misc2.c: gain_spells(), call calc_mana() if py.misc.mana == 0, this is for characters who did not know any spells before the 'G' command, can't gain spells if blind/no light/confused moria1.c: infinite loop entered with 'id' and screen_change, also, 'n' to the continuing with inventory prompt did not work, must clear doing_inven before returning from inven_command() in these cases desc.c: identify(), don't merge items in equip list, only merge items that are single stackable misc2.c: inven_carry(), inven_check_num(), fix item stacking, items can only stack if they are both identified or both unknown (store items are always identified) constant.h: change version number to 5.0.12 and distribute ------------ 1/21 desc.c: objdes() bug, change p1_use = IGNORED to p1_use == IGNORED moria2.c: move_char(), moving into a wall is no longer a free turn misc2.c: gain_spells(), priests no longer need book before can learn spells from it, mages still need the books, calc_spells() delete unused var spells[], remove limit of 23 from number of new spells dungeon.c: made scribe_object() a free turn again recall.c: only print monster speed if at least one movement flag known unix.c: missing */ after Gakk!! -CJS-. desc.c: stacking did not work right, fixed known1_p() to return OD_KNOWN1 instead of TRUE for store items, so that known1_p() == known1_p() will work consistently monsters.c: creeping coins hit instead of bite, and touch instead of breath variable.c: fixed problems with temple/alchemist store inventories desc.c, store1.c: fixed food prices, only check unknown if subval puts it among the molds/mushrooms ------------- 1/24 misc2.c, types.h: change inscrip back to char *, fix inscribe() to malloc space for string, and then copy inscription into the malloced space, save.c: fixed (compatibly) to write/read new inscriptions desc.c: free malloced inscription space in invcopy death.c, misc1.c: delete max tcptr code constant.h, desc.c, misc1.c: define new const ID_SHOW_TOHIT, in magic_treasure set this bit for every weapon,digging tool,missile,bow, in objdes() print out tohit/todam if this bit set and object identified, this makes it easy to tell ident weapons from unident weapons main.c: char_inven_init() must set ID_SHOW_TOHIT flag for initial weapon death.c, constant.h, misc1.c: change MAX_TALLOC from 225 to 150, delete temporary code which printed out max tcptr values misc2.c: allow inscriptions of up to 24 characters constant.h: change version number to 5.0.13 and distribute -------------- 1/26 wizard.c: wizard_create(), initialize the name2 and inscrip fields to 0, init the ident field to known2 and storebought constant.h: changed MAX_TITLES from 60 to 45 desc.c: magic_init(), wrote to a char *tmp; modified to write to a vtype string recall.c: change printing of treasure again, only print 'sometimes' is 60% is only bit set, otherwise always print 'often' if only one object, for two objects, print 'often' only if 60% and 90% are only bits set scrolls.c: recharge scrolls not used up when read, fixed setting of used_up spells.c: res = TRUE; moved out of if-stmt so only needed once treasure.c: change wiz obj name from "& wizard object" to "{wizard object}" ---------- 1/29 moria2.c: tunnel(), give player attack on creature if it is in the way misc2.c: gain_spell(), remove limit of 22 on learning spells, fix print_spells so that it will only show the first 22 spells constant.h, desc.c, misc1.c: change ID_SHOW_TOHIT to ID_SHOW_HITDAM, set this bit for gauntlet/rings of slaying, and irritation/enveloping cloaks, fix objdes() so that it only prints both tohit/todam if this bit is set otherwise, only prints one number, if either of tohit/todam nonzero desc.c, treasure.c: remove "the entrance to the " from store doors and put in objdes() in desc.c misc2.c: put_misc2(), add "Exp to Adv." to character display constant.h, desc.c, misc1.c: added defines for ID_NOSHOW_P1 and ID_SHOW_P1 to improve printing of object names, objdes() always prints p1 if ID_SHOW_P1 set, and never prints it if NOSHOW set, these override the default p1_use setting, NOSHOW added to sustain stat rings, SHOW added to clumsy/weak gloves, boots of speed/stealth/slowness, helms of int/wis/infra/might/lordliness/magi/beauty/seeing/ stupid/dull/weak/ugly, cloaks of stealth creature.c: increase effect of aggravate_monster attack from range of 5 to 20 spells.c: dispel_creature(), prt_exp() was only called when visible creatures died, now always called when creature dies misc1.c: added messages to compact_objects() and compact_monsters() so that can tell if they are ever called store1.c: rings/amulets which are not known2 now have base value from object list instead of real value moria2.c, staffs.c, wands.c: cast level to int, so that calculations will be done with signed arithmetic, in openobject() change chance of opening a chest, instead of -2*level use -level, this help eliminate chests which are impossible to open --------- 1/30 recall.c: print ' at normal speed' for monsters with mspeed = 1 --------- 2/10 spells.c: turn_undead, speed_monsters, sleep_monsters2, and dispel_creature modified so that they only affect creatures in los of player externs.h, misc2.c, variable.c: new array spell_order[], holds order in which spells are learned, in calc_spell() spells are now remembered in the order that they were learned, and forgotten in the reverse order learned, in gain_spell() must modify spell_order when spell learned main.c: spell_order initialized in inven_char_init to all 99s save.c: save/restore spell_order, for patch_level <= 13 savefiles create a reasonable spell_order on the fly misc2.c: was erasing wrong line in gain_spells, change `j+2' to `j+1' all: change file names to be 8.3 characters long constant.h: change version number to 5.0.14 and release ---------- 2/10 dungeon.c: change rogue-like wiz help key from ^? to \ all: merged in Mac sources, all initialized variables are now in variable.c, rearranged directory structure ---------- 2/11 all: merged in VMS sources changed to 5.0.15 and distribute --------- 2/13 moria2.c: carry(), printed 'worth of emeralds..' removed '.' from string desc.c: crowns did not print out AC because it is zero, add special case to objdes() so that tval == 33 (crowns) always have AC printed out, change (+5 charges) to (5 charges) ----------- 2/14 moria2.c: inven_throw() created second copy of pointer to malloced inscription, it now creates new inscription for new object moria1.c: inven_command(), wear option copied malloced inscription, create new inscription for new object misc2.c: inven_destroy(), free inscription of just deleted object, clear inscrip pointer of last objects previous location, so that it will not be freed, inven_drop(), create new inscription for new item, inven_carry() create new inscription for new item, scribe_object() free space for old insription since it is deleted config.h, externs.h, misc2.c, moria1.c: rename remove() to takeoff() to avoid naming conflict with library routines externs.h, misc2.c, store1.c: deleted join_names(), no longer doing anything useful, and was wrongly creating duplicate pointers to malloc blocks moria2.c: make moving into walls a free turn again, but player can not attack invisible creatures in walls by moving into wall (hence preventing him from using 6 free turns to search for invis creature), must tunnel into wall instead, which always takes a turn dungeon.c, externs.h, moria2.c: pass direction to tunnel() instead of point digging to, eliminates a lot of duplicate code, tunnel() now checks confusion, and tries to tunnel in random direction if confused treasure.c: clone monster wands changed from level 2 to level 15, makes them recharge less, max 6 new charges instead of max 18 new charges files/version.hlp: add Dan Bernstein's name to credits magic.c, variable.c, wands.c: change stinking cloud from 16 to 12 damage as it was too close to lightning bolt at 18, reduce mana for mage/ranger from 4/6 to 3/5 moria1.c: show_inven() and show_equip(), don't print first two spaces when col is zero, since will blank the whole screen anyways moria2.c: py_attack(), only cleared confuse_monster flag if monster survived attack, now always clear this flag and try to confuse monster -------------- 2/16 all: add in diffs to get MSDOS version working again, add files from binary PC-Moria distribution types.h: for PC, use 'unsigned char var : 1' to reduce sizeof cave_type from 5 to 4 desc.c, misc1.c, misc2.c, moria1.c, moria2.c, save.c, wizard.c, types.h: change inven_type inscrip field from pointer to an 13 char array, mallocing storage for inscriptions does not work, results in dangling pointers when inven_types are copied save.c: add 'time' to savefiles, use this to calculate age of savefile instead of using stat, much more portable, and prevents cheating, if time is newer than current time, set age to 0, when save file check to see if current time greater than start time, if not, then save start time plus one day in save file mac.c: delete getfileage since no longer used recall.c: change knowdamage(), add damage parameter so that higher damage attacks take longer to learn than lower damage attacks monsters.c: jellies and molds no longer have treasure save.c: two places have (*str != NULL), changed to (*str != '\0') save.c: remove support for pre 5.0.13 versions, rd_item() no longer needs patch_level monsters.c: move crystal ooze from level 31 to level 40, to make raising crystal oozes for treasure much more dangerous --------------- 2/19 all: added defines for tvals, and substituted every where in program ---------- 2/21 ms_misc.c, io.c: remove all uses of mvprintw() for ibmpc port, since PC curses also pulls in the fp library if mvprintw is used dungeon.c: in the recover from blindness code, the disturb() call must be before the creatures(FALSE) call getch.c, io.c, Makefile: more fixes for the VMS port of umoria, new getch.c file, and new copy of (4.87) io.c file ---------- 2/22 all: check again for numbers that should be constants constant.h: change version number to 5.0.17 externs.h, main.c, moria2.c, signals.c, treasure.c: compile with gcc -Wall and fix all reported errors --------- 2/26 prayer.c: change (!class[].spell == PRIEST) to (class[].spell != PRIEST) store2.c: for good bargaining, use final_ask not min_buy in sell_haggle() dungeon.c: change "Sorry.." to "Sorry." misc1.c: for gloves/gauntlets, p1 and ID_SHOW_P1 set in wrong place creature.c: make_attack(), creature could be visible at start of attack but invisible at end due to a teleport, set notice/visible appropriately before monster attacks, and don't use m_ptr->ml afterwards monsters.c: creeping coins always carry gold now, 1d2 for copper, 1d2+60 for silver, and 1d2+90 for gold treasure.c, wizard.c: change name of wizard items to empty string, and inscribe them with "wizard item" desc.c: problem with rubble/stone-to-mud, change rubble case from like stairs to be like doors moria1.c: show_equip(), change non-weight limit from 57 to 60, change weight limit from 49 to 52 chars, for show_inven(), change limits from 66/74 to 68/76 characters creature.c, magic.c, prayer.c, spells.c, wands.c: fix get_flags(), fire_ball(), fire_bolt() and breath() to use defined constants for attack types moria1.c: show_inven(), show_equip(), make sure that col never less than zero all: merged in Atari ST diffs from Stephen A. Jacobs --------------- 2/27 creature.c: fixed bug with doors, always open/light door instead of only opening/lighting them when in los of player moria2.c: when bash open door, only break it 50% of the time to be consistent with code in creature.c all: delete some obsolete files, annotate a few others, put README files in the subdirectories to explain what is present save.c: fix old savefile compatibility code to work with new version numbers constants.h: change version number to 5.1.0 and publicly announce ---------- 2/28 recall.c: creature is worth... sprintf() call used %ld instead of %d moria2.c: look_ray(), every place GRADF multiplied by y, cast it to long to prevent overflow of 16 bit ints ms_misc.c: were still two refs to 'byteint', changed to 'int8u' MLINK.LNK: updated for umoria5.0, add undef and recall, change treasur[12] to treasure create.c: delete sleep(1) call in character rerolling code death.c: put "#ifndef L_SET" around the #define L_SET io.c: ifdef out suspend code, for USG systems with BSDisms that have SIGTSTP defined but don't actually implement it io.c: change name of variable 'border' to 'screen_border' to avoid naming conflict on SGI/SYS V machine INSTALL: moved from doc subdirectory to root directory, and brought up to date ---------------- 3/1 misc2.c: two places where (1L << j) occurred, and j could be 99 (unknown spell from spell_order[]), this is an undefined operation, fixed source to not shift if j == 99 ------------------- 3/3 misc1.c: set_options(), typing '-' on line 0 gave error, change i=max to i=max-1 store1.c: item_value(), calculating digging tool values wrong, subtract off objects initial p1 plusses before multiplying p1 by 100 dungeon.c: for paralysed/resting, move cursor to player before refresh call creature.c: disenchanter bat attacks could put tohit/todam/toac below zero, fixed so that they can not go below zero moria1.c: if have MAX_SHORT hp/mana, then could get overflow in regenhp/mana routines, added checks for overflow dungeon.c, io.c: save on EOF code did not work, in inkey(), remove casts to char in eof test, remove call to feof(), in dungeon(), add !eof_flag to innermost while loop to ensure it exits on error save.c: in sv_write(), clear death flag if eof_flag or panic_save set, so player can restart game to see tombstone main.c: set death flag if hit points are negative, can happen if a HANGUP savefile or panic savefile is restored save.c: if get_char(), don't overwrite died_from string if player is dead main.c: if specify -r or -o, force rogue_like to appropriate value after read the savefile, since get_char() will modify rogue_like_commands moria1.c: search(), "have found a trap.." fixed, removed extra period monsters.c: added CD_NO_SLEEP flag to jellies, oozes, elementals and the gelatinous cube dungeon.c: fix "which level" wizard prompt, limited to level 99 max ----------- 3/4 all: merged in more Mac diffs, Mac version should compile now wizard.c: stealth max 87 should be 18 in printed string desc.c: identify(), if cursed incscribe with ID_DAMD, unsample(), do not clear the ID_DAMD flag, since an unsampled item is still cursed config: change version number to 5.1.1 and release ------------ 3/5 monsters.c: added CD_NO_SLEEP flag to creeping coins recall.c: recharge(), change chance of failure from randint((num+40)/10)=1 to randint((num+40-i_ptr->p1-i_ptr->level)/10)=1 to make it harder to recharge high level and highlly charged wands recall.c: change j from int to int32u, since it is used with flag fields, change two %d uses of it to %ld desc.c: objdes(), don't print ID_TRIED value for store bought items moria2.c: a slow dart trap now has no effect if have free action io.c: must ifdef out the tbuf.c_cc code, since this causes the program to fail for some reason --------------- 3/13 signals.c: add void to USG signal_hander definition externs, ms_misc.c: move fopen declaration from externs.h to ms_misc.c, and make static, and make FILE * not struct _iobuf ms_ansi.c: include stdio.h generate.c: change #if DEBUG to #ifdef DEBUG config.h, generate.c, types.h: added ifdefs for IBMPC_TURBO_C --------- 3/16 moria1.c: inven_command() "Wear" prompt changed to "Wear/Wield" monsters.c: earth elementals/spirits can now move through walls spells.c: wall_build(), for earth elementals, increase their hit points files.c: helpfile(), can ESC out now spells.c: cloning a monster will wake it up now dungeon.c: allow two-char control character sequences to be used with repeated commands (deleted else from "else if (command == '^')") roglcmds.hlp: document how to avoid problem with repeated dig left command, i.e. '13^H' doesn't work, type ^ then H, or type SPACE then ^H --------- 3/19 unix.c: initialize num_chars to zero in check_input(), in case FIONREAD absent ---------- 3/21 all: fix most SYS_V lint errors ----------- 3/23 dungeon.c, io.c: calling inkey() when check_input true is wrong since it traps ^R and does other stuff, instead call new function raw_inkey(), which only calls getch io.c: flush(), occasionally caused loss of output, instead of using fancy ioctls, drain input by using check_input/raw_inkey --------- 3/25 dungeon.c, io.c, unix.c, atarist.c: AIX can't check to see if input is pending, but can do non-blocking read, so check_input changed so that it consumes input when called constant.h: change version number to 5.1.2 and distribute -------- 3/26 save.c: when resurrect, clear poisoned flag and food flag to prevent character from immediately dying again main.c, misc2.c, unix.c, save.c: fix some BSD lint errors moria1.c: remove unnecessary flush() call from take_hit() creatures.c, misc1.c, externs.h, variable.c: fixed problem with calls to compact_monster() within creatures() by adding a horrible hack, new variable hack_monptr defined to hold current creature() monptr ---------- 3/27 variable.c: add infra 3/2 for elf/half-elf, were both previously 0, increase gnome infra from 3 to 4 config.h, death.c, dungeon.c, externs.h, main.c, misc2.c, signals.c: modify wizard mode code, no longer need password or correct UID to enter, prints disclaimer then asks for confirmation atarist.c, death.c, misc2.c, ms_misc.c, save.c, signals.c: eliminate all getuid() etc. code, only place these are still used is in main.c and unix.c all: merge wizard/god mode, god mode nolonger exists io.c, unix.c: problems with flush() on EOF, don't call check_input if EOF, also, check_input returns zero if got an error on the read, also inkey() clears msg_flag on EOF to prevent infinite loops exit_game/ msg_print/inkey/exit_game/etc... moria2.c: monster_death(), increase tries from 10 to 20 so that treasure will be created more often constant.h: increase MAX_MALLOC from 101 to 125 to reduce compacting monsters messages, increase MAX_TALLOC from 150 to 175 because it is possible to get compacting objects message during level generation constant.h: BTH_HIT deleted, no longer used ----------- 3/28 moria2.c: facts(), multiply damage for missile by 2/3/4 instead of adding when use proper weapons, makes missiles much more useful save.c: write store info and time into save file even if dead, so that can be restored on a resurrection constant.h: change version to 5.1.3 -------- 3/30 constant.h, externs.h, files.c, misc2.c, moria1.c, moria2.c, staffs.c, wands.c, variable.c: modify how misc abilities vary with level, new variable class_level_adj, which holds the new adjustment values, bth, bthb, device, disarm and save affected externs.h, misc2.c, moria2.c: critical_hits() has fourth paramter, that indicates whether to use CLA_BTH or CLA_BTHB class level adj moria2.c: penalty for attacking invisible creatures modified, was minus lev * BTH_LEV_ADJ-1, now minus lev * BTH_LEV_ADJ/2, hence warriors have less penalty than mages/priests creature.c, externs.h, misc2.c, moria2.c: test_hit has a fifth paramter, that indicates whether to use CLA_BTH or CLA_BTHB (or even CLA_SAVE) io.c: add abort() calls to move_cursor_relative(), print(), and put_buffer() to help find bugs in the code save.c: eliminate support for versions 5.0.11 to 5.0.13 misc2.c: get_spell(), only say 'unknown spell' if it is actually an alphabetic character typed treasure.c: delete one ring of adornment and one amulet of adornment, add arrows at level 15, and bolts at level 25 --------- 3/31 store1.c: change missile cost to 5*pluses instead of 10*pluses, since missiles appear in groups of 20 or so, this is comparable to normal weapons which are 100*pluses distribute 5.1.3 sources ---------- 4/3 externs.h: ifdef out definition of errno for MSDOS io.c: moved process.h include for MSDOS from middle of file to start io.c: in print(), put_buffer(), and move_cursor_relative(), clear msg_flag before printing error message, prevents problems with '-more-' prompt recall.c: roff_recall(), don't set normal movement bit near beginning, also delete code that prints 'never moves' if all move bits clear spells.c: teleport monster will wake it up scrolls.c: reading a second word of recall scroll does not reset timer spells.c: wall building now heals Xorns in addition to earth elementals spells.c: drain life damage increased from 50 to 75, to match other 50th level wand damages constant.h, creature.c, moria2.c, variable.c: defined new class level adj CLA_MISC_HIT and replace all test_hit uses of CLA_SAVE with this, document that this is identical to save, and assumes all values same treasure.c: two potions named poison, change first to weakness (lose str) ---------- 4/4 save.c: add some __GNUC__ ifdefs so that the UNIX style code will be used, not the code for the broken atari st MWC libraries ---------- 4/6 unix.c: two include files, sys/time.h and sys/resource.h are actually BSD specific, put #ifndef USG around them ---------- 4/9 desc.c: remove all uses of "%+d", because AtariST/MWC and convex and probably others do not support it spells.c: replace_spot(), clear lr flag, so that after destruction scroll, destroyed areas will not be lit by a light scroll in a room creature.c: let monsters eat other monsters of equal exp, helps prevent using oozes as treasure factories moria2.c: mon_take_hit(), if kill Balrog, always update recall info even if Balrog invisible, since will always know it was the Balrog (winner!) recall.c: sleep values too hard to learn, change test from r_wake > sleep to (r_wake*r_wake)>sleep -------- 4/13 creature.c, moria2.c: mon_take_hit() was called within creatures() when monsters were trapped inside a wall, bracket call in creature.c with code to set hack_monptr, and add code to mon_take_hit() to check it creature.c: add code at end of creatures() loop to fix2_delete_monster() in case monster died during movement (maybe it was in a wall?) externs.h: add DGUX to USG ifdef for the 'extern int sprintf()' declaration io.c: added code to save/restore local mode word of tty driver, i.e. TIOCLSET and TIOCLGET ioctl calls save.c: for atarist && __GNUC__, call fopen with "rb" and "wb" for binary mode io.c, unix.c: for atarist && __GNUC__, don't include externs.h: define sprintf as int (), if defined(atarist) ------------ 4/14 externs.h, unix.c: three new functions tilde(), topen(), and tfopen() which perform ~ expansion for file names, in externs.h, define open to topen and fopen to tfopen for unix machines config.h, dungeon.c, main.c, save.c, unix.c: add support for ANDREW distributed file system, SECURE define in config.h, disallows inferior shells, also instead of giving up setuid priviledges at start, calls ANDREW library functions bePlayer(), beGame(), and Authenticate() unix.c: add ifdefs to use select() when compiling for xenix ------------- 4/15 creature.c, externs.h, files.c, io.c, main.c, misc1.c, moria2.c, recall.c, save.c, treasure.c: more Atari ST MWC fixes, eliminate fdopen(), make loc_symbol() return unsigned char, all (var & long_const) constructs assign long const to temp var first, ------------ 4/16 Makefile: fixed problems with 'make install' ----------- 4/19 atarist.c: add #include at start, and #endif at end misc2.c: tohit_adj() toac_adj() todis_adj() todam_adj() all used cur_stat instead of use_stat like they should have ---------- 4/20 moria2.c: mon_take_hit code of 4/13 wrong, use monptr instead of i at end misc2.c: remembering code wrong, add (i < 32) to stop it at end of spell list moria1.c: when inven full and take off object, check for object under player before allowing/asking her to drop object save.c: for atarist MWC port, ifdef out all of the open() calls, and only leave the fopen() stuff in misc1.c: compact_monsters(), don't set delete_any if fix1_delete_monster() is called, because it does not decrement mfptr, call abort() if cur_dis goes below zero (i.e. can't delete any monsters) all: run lint on 4.3BSD and SYS V constant.h: change version number to 5.1.4 and distribute ----------- 4/27 dungeon.c: add prt_map() at top after creatures(FALSE) call for ATARIST_MWC, fixes display problems for some reason ---------- 5/1 moria1.c: inven_command(), clear msg line is ESC typed at "Drop all?" prompt ---------- 5/3 all: eliminated upd_log(), and plog variable doc/*: update all documentation, except moria.ms ---------- 5/4 all: visit every subdirectory, create README or ERRORS files as needed, make everything as up to do as possible, split files greater than 60K so that they can be posted to comp.sources.games easily all: deleted all tmp.* files externs.h, moria1.c, moria2.c, et al: moved functions out of moria1.c and moria2.c to reduce their size to less than 60K, many functions not moved were made static dungeon.c, externs.h, main.c, misc2.c, save.c, variable.c: new variable to_be_wizard, allows resurrect without entering wizard mode, resurrect sets noscore = 0x1, wizard mode sets noscore = 0x2, prt_winner prints "Is/Was wizard" or "Resurrect" is noscore set ----------- 5/5 misc1.c: moved see invisible from slay animal to slay undead weapons doc/moria.ms: updated documentation to reflect changes from 4.873 to 5.1, added section which explains crowns, added some sections from Chris J Stuart's BRUCE Moria's documentation --------- 5/7 monsters.c: ogre mage is now evil files.c: added extern int error for MSDOS moria.ms: proof read it again misc1.c: reduce plus to dam for slay dragon arrows from +10 to +3, no longer need such high damages because ptodam is multiplied now when used with right weapon Makefile: test and fix 'make install' ibmpc/ms_ansi.c: change two escape characters to \033 mac/moria.r: change many control characters to \xxx, update version info strings to 5.1.5 constant.h: change the version number to 5.1.5 and distribute --------- 5/9 constant.h, mac/moria.r: change the version number to 5.2.0 save.c: fix support code for 5.0 savefiles, because of minor version number change, update compatibility code for 5.1 and 5.2 savefiles save.c: save/restore value of died_from string ------- 5/10 scrnmgr.r, scrntest.r: these files had control characters also, changed '...' to \311 resource.hqx: recompiled the mac resource files macscore.c, mac.c: changed control characters '...' to \311 all: distribute version 5.2.0 ----------- 5/14 death.c, externs.h, io.c, ms_misc.c: Turbo C changes, void sleep() instead of unsigned sleep(), don't call reset_term() before exiting, ifdef out definition of sleep() in ms_misc.c, declare signal handler as void not int generate.c, types.h: change IBMPC_TURBO_C defines to the proper TURBOC define io.c: shell_out(), MSDOS code parameter to inkey() call deleted externs.h: count_msg_print() changed from (int) to (char *) io.c: get_check(), add code to use 'y' if LINT_ARGS defined, pause_exit() add code to use 'delay' for MSDOS machines ms_misc.c: clear_screen(0,0) changed to clear_screen() main.c: set stack size for TURBOC by declaring the _stksize variable misc2.c: player_saves(), split expression up because MPW C couldn't handle it save.c: include time.h for for the Mac, delete var 'i' in save_char (unused), get_char() add code for MAC to return FALSE if savefile doesn't exist mac.c: add call to initsavedefaults() in main() mac/ERRORS: document problem with mac Makefile -------- 5/15 externs.h: remove decl of py_bash(), which is in moria2.c and static --------- 5/17 dungeon.c: move search_off() call after check_view(), as panel_* variables must be valid before search_off() is called -------- 5/18 all: 7 files did not end with newlines, 5 hqx files, and origcmds.hlp, misc/README also did not end with a newline -------- 5/21 constant.h, version.hlp, moria.r: change version number to 5.2.1 ScrnMgr.doc: split all lines greater than 80 characters, to make the file more portable --------- 5/22 death.c: in mac sources, there was a 'true' instead of a 'TRUE' ms_misc.c: Turbo C sscanf() incorrectly reads a newline from a blank line, add check for newline to code that reads configuration file spells.c: door_creation(), called popt() before calling delete_object() which could then invalidate the value returned by popt, moved popt() call after the delete_object() call ----------- 5/25 creature.c: fix the invincible/invisible monster bug, multiply_monster() was creating children on top of the parent, thus killing the parent for carnivorous monsters death.c, externs.h, generate.c, io.c, main.c, ms_misc.c, signals.c, types.h: change all TURBOC defines to __TURBOC__ util/printit: new version of the printit program by Carl Hommel, fixed up to be somewhat more portable and to use only moria defined constants -------- 5/27 player.c, tables.c, variable.c: Turbo C can not accept any file with more than 64K global variables, so variable.c split into three parts, also updated all makefiles to refer to all three files mac files: all three mac Makefiles modified to delete obsolete references to CInterface.o and CRuntime.o, scrnmgr Makefile modified to automatically combine the two ScrnMgr.c parts, README updated to document a problem with the Makefile not appending resources and text files sometimes ---------- 5/31 all: released umoria 5.2.1 ibmpc/ms_misc.c: corrected warn() function to use va_list, the old function was not strictly correct ---------- 6/4 misc2.c: prt_stat_block() must also call prt_study() misc2.c: random_object() could create objects outside of map boudaries, added an in_bounds() call to fix ------------- 6/6 main.c: changed 'if (p = getenv(...))' to 'if ((p = getenv(...)) != NULL)' to avoid compiler warnings moria1.c: rest_on(), add check to make sure rest_num fits in short ibmpc/umoria.prj: new file, a project file for Turbo C 2.0 ------------- 6/9 io.c: HP-UX does not have VEOL2, added #ifdef VEOL2 around its use dungeon.c: clear message line after change_character(), since as ESCAPE exit does not moria1.c: for 'x' and 'w' commands, clear heavy_weapon flag before calling check_strength, so that always get heavy message when wielding heavy weapon, and never get light message when wielding light weapon scrolls.c: identify scroll can move arbitrarily far after ident_spell(), replace simple 'moved one down' check with loop to search until found main.c: fixed starup code so that don't get 'savefile doesn't exist' message anymore when starting a new game all: apply fix to all uses of long constant with & | << operators to avoid a Mark Williams C bug on the Atari ST externs.h, files.c: removed MSDOS declaration of errno from files.c, and remove ifndef MSDOS from errno decl in externs.h misc1.c: changed name of variable 'clock' to 'clock_var' to avoid problem with a mac compiler (not sure which one) io.c: every io.c file, remove '\0' as alias for ESCAPE from get_com() and get_comdir() (MAC only function) moria1.c: light_dam() calls inven_damage(set_lightning_destroy, 3) which gives it a small chance of destroying objects in player's pack, this makes it just like the other *_dam() functions spells.c: teleport_to(), add call to in_bound() to make sure player will be teleported to somewhere inside the dungeon ------------- 6/10 config.h: add note about using GCC on an Atari ST main.c, save.c, undef.c: eliminated the unused _new_log() function death.c, dungeon.c, externs.h, save.c, undef.c, variable.c: eliminated the mostly unused log_index variable, the few uses of it were replaced with references to character_saved externs.h, files.c, io.c, undef.c: init_scorefile() implemented, same as in umoria 4.87 main.c, undef.c: eliminate unused function init_files() constant.h, moria.r, version.hlp: change version number to 5.2.2 ----------- 6/11 ibmpc/ms_misc.c: added space to GRAPHICS scanf, to try to eliminate problem with Turco C death.c, externs.h, files.c, save.c, variable.c: extensive changes to implement the scorefile, total_points(), highscores(), display_ scores(), set_fileptr(), rd_highscore(), and wr_highscore() defined scorefile holds 1000 entries max, has one sex/race/class entry per non-zero uid, has live characters also unix/Makefile: fix the treatment of score file, don't copy over old one, just use touch to create one if it doesn't exist undef.c: finally eliminated ---------- 6/13 all: lint under 4.3 BSD and AIX 2.2.1 (SYS V) scores: readd scores file, since it makes micro distributions much easier death.c: modify savefile for single user machine, so that it tries to prevent a single character from appearing multiple times in the savefile, checks for identical names, and killed by = (saved) player.c: eliminated the unused dsp_race[] array death.c: added code to implement flock() for systems which don't have it, based on code written by CJS for BRUCE Moria ---------- 6/17 all: fixes for VMS, define USG for VMS, merge in fixes from Todd Pierzina ---------- 6/23 scrolls.c: for curse weapon, call py_bonuses(-1) before clear flags so that attributes will be turned off moria1.c: calc_bonuses(), handle AC just like everything else, previously did not add in AC bonus if armor was cursed creature.c, moria2.c: doors weren't being broken when bashed, change "randint(2) - 1" to "1 - randint(2)" ----------- 7/14 all: merge in some changes indiciated by warnings/prototypes generated by MSC 5.x recall.c: compute monster kill exp in long, to avoid overflow of int all: added AMIGA support amiga/: new directory to hold support files for the amiga main.c: variable result was not initialized to false ------------- 7/15 all: merge in more VMS patches death.c, dungeon.c: fixed display_scores() and 'V' command problems creature.c, dungeon.c, misc2.c, moria1.c: new feature '*' rest until reach max mana and hp, print error message for illegal rest count all: removed improper define of NULL, new define CNIL for (char *)0, used instead of NULL where appropriate, eliminate strange include orders that the previous NULL define required io.c: ifdefed out the include for termio.h, as this caused it to be included twice on some systems (curses.h includes it also) causing problems macrsrc.h: changed MAX_RESTART from 37 to 36 --------- 7/21 ms_misc.c: fixed reading of empty lines from config file for Turbo C -------- 7/22 io.c: fix Amiga code for flush() types.h: reduce size of cave_type structure for Amiga/Aztec C 5.0 death.c: fix display_scores(), so that it only shows entries belonging to current player when show_player is true --------- 8/29 misc2.c: deleted some redundant code in gain_spells() where it calculates which spells a player can learn spells.c: recharge(), could call randint() with 0 or negative numbers, check for these cases before calling randint() --------- 9/8 moria1.c: inven_command(), when drop/remove object and inven/equip are both empty, set inven weight to zero, just to be safe dungeon.c: jamdoor(), when jam a door, decrement inven_weight by weight of one spike moria1.c: inven_command(), make spikes wieldable objects, fight with them like missile weapons, i.e. they disappear after use desc.c: objdes(), add damage multiplier of bows to their name externs.h, io.c, misc1.c, save.c variable.c: new option sound_beep_flag, so that players can turn off bad character beep if desired desc.c, misc2.c: modify known1_p() to return TRUE for objects which never have a color, modify objdes() to work with the new convention, modify inven_carry() so that objects are added to the inventory sorted by subval if they are known1_p() ---------- 9/9 misc1.c: add_food(), fix so that does not use f_ptr->slow to set f_ptr->food value, this makes it much less likely to overflow the food level misc2.c: inven_carry(), yesterday's insert in order fix does not work for items which can be unknown1p, only insert items ordered by subval if they are always known1p, i.e. object_offset() returns -1 externs.h, misc1.c, misc2.c, save.c variable.c: new option display rest/repeat counts, since these counts make resting at 1200 baud or less unbearably slow, people need to be able to turn them off store2.c: get_haggle(), let RET default to the last inc/dec amount when haggling misc1.c: compact_monsters(), return FALSE if could not delete any monsters instead of aborting, popm() return -1 if could not allocate monster (i.e. compact_monsters() failed), place_win_monster() abort if popm() fails which should never happen, place_monster() externs.h: place_monster() now int type not void, creature.c, misc1.c, spells.c: fix users of place_monster() to check result, and fail if place_monster() failed, really only necessary for the calls in creature.c, these fixes fix the monster list overflow bug dungeon.c, externs.h, misc1.c: change compact_monsters() from static to extern, call it from within main loop in dungeon.c if there are less than 10 spaces left in the monster list, compact_monsters() is much more likely to be successful when called here than when called from creatures() ----------- 9/11 signals.c: delete extra definition of error_sig for ATARIST_MWC atari_st/README: update with GCC and Turbo C info files.c: fix typo, filname1 -> filename1 --------------- 9/18 mac.c, ScrnMgr1.c: replace uses of KeyMapLM with GetKeys() call ------------- 9/19 misc1.c: m_bonus(), could overflow on 16 bit machines when level >= 263 when calculating stand_dev death.c, externs.h, save.c: store the encryption byte for each savefile record immediately before it in the scorefile, makes the scorefile more robust in the face of a system crash, rd_highscore(), wr_highscore() no longer pass the encryption byte death.c: added version numbers to the savefile death.c, externs.h, save.c, variable.c: add max_score to savefile, which is the maximum score the character has reached so far, total_points() modified to use the larger of the computed score, and the value of max_score, this prevents a "(saved)" message on the score file for a dead character, which died having fewer points than when it was last saved ----------- 9/26 death.c, externs.h, main.c, save.c, types.h, variable.c: new global variable birth_date, set to time when character created, saved in save files and scorefile, when loading character check to see if the a character in the scorefile has the same race/sex/class/uid/birth_date and its died_from is not "(saved)", in which case this character will not be scored misc2.c: print "Duplicate" on screen for such duplicate characters all: update all documentation, README, and other misc descriptive files all: add fixes for Atari ST/Turbo C 2.0 all: lint on Sun3/uVAX/MIPS/RT_PC recall.c: when printing out depth of monster, print Balrog as 50 not 100 ----------- 10/3 all: fix all problems reported by maniscan/cshar, except for control-L characters on a line by themselves ----------- 10/7 creature.c: mon_move(), cast m_ptr->fy-1 to int, so that negative values will correctly compare to it, in the wall building code spoilers: new file, lists spell damages misc2.c: prt_experience(), always check whether exp is greater than max_exp, previously did not when player was at level 40 creature.c: mon_move(), set the recall CM_ATTACK_ONLY bit when a monster should have moved but did not, instead of the old method of setting it when a non-moving monster attacked store2.c: get_haggle(), fix bugs in the automatic increment code, also, when reach final offer, set the automatic increment to the required diff, so that player need only hit return to bid the final amount moria2.c: tunnel(), before checking for tunneling into a invisible monster, check to make sure player is tunneling somewhere which has an effect, otherwise, player can use this to 'detect' invisible monsters in open spaces by trying to tunnel there moria1.c: calc_bonuses(), base AC should always be visible, as long as the item is not cursed ------- 10/8 spells.c: td_destroy2(), should not destroy chests, not disarms and unlocks them instead misc2.c: put_misc3(), clear_from(14) not 13, was clearing the gold value files.c: file_character(), add the "Max Exp" and "Exp to Adv" fields to the info written to a file, to match the on screen display files.c: file_character(), set fd to -1, not NULL, code was closing stdin (== 0 == NULL) when could not open file death.c: exit_game(), clear character_saved before calling highscores(), prevents inkey() from recursively calling exit_game() when eof on stdin has been detected all: released 5.2.2 sources ----------- 10/23 death.c: highscores(), must do fseek() after reaching EOF before changing read/write mode, previously only did this for VMS, now do this for all systems ----------- 10/26 config.h, death.c, io.c: fix VMS errors, declare 'string' in death.c duplicate_character(), fix typos in other files dungeon.c: for VMS, after calling kbhit(), must consume one character vms/Makefile: fixed, mostly change constants.h to constant.h ------------ 10/30 death.c, externs.h, files.c, save.c: define STDIO_LOADED after including stdio.h, then use it to control declarations in externs.h constant.h, death.c: define SCOREFILE_SIZE as 1000, and use it in death.c moria2.c: cast_spell(), when don't have enough mana, use 'gods may think you presumptuous' message instead of 'summon your limited strength' ----------- 11/4 ibmpc/moria.cnf: add ^M, since otherwise MSDOS moria can't read file properly io.c: include stdio.h explicitly, and define STDIO_LOADED, so savefile can be closed when shelling out store2.c: get_haggle(), clear increment when invalid increment entered store2.c, variables.c: last_store_inc contradictory declarations, changed both to int16 externs, misc2.c, sets.c, spells.c: set_*_destroy changed to take inven_type pointer instead of tval, modified so that (Rx) items won't be destroyed by attacks of type x death.c: for single user systems, use birth_date instead of name when looking for matching characters in savefile death.c: MSDOS setmode() needs file descriptor, not FILE pointer files/*: removed all TABS, since some systems do not handle them properly, specifically, Turbo C on the Atari ST and IBM-PC misc1.c: rings of searching cost was 100*p1, amulet of searching cost 20*p1, change both to 50*p1 mac/macio.c, ibmpc/tcio.c: modify beep() so that it uses the new option flag desc.c: changed the (*2) string for bows to (x2) spells.c: slow monster and confuse monster modified to wake up monster if the attacks fails spells.c: wall_to_mud() and dispel_creature(), print messages even if monster not visible since the effects are visible/audible moria2.c: for fire/acid/gas traps, print the trap message first, and then damage an item treasure.c: change name of lose memories potion to lose experience, so it won't be confused with monster memories spells.c: trap_creation(), don't create a trap under the player, to prevent strange occurances such as ending up under a falling rock moria2.c: tunnel(), when wielding heavy weapon, make tunneling more difficult ----------- 11/6 vms/getch.c: New code for kb_hit(), which was tested and works under VMS 5.2 the old code did not work for VMS 5.2 ----------- 11/9 misc1.c: compact_monsters(), distance test was backwards!, now delete monsters farther away first, allow a final pass with distance of 0, never delete the Balrog during compaction ---------- 11/21 doc/history: rewrote history file to bring it up-to-date misc2.c: gain_spells(), don't need to be able to read spell books if learning priestly spells, don't fail if blind or no light death.c: fix #ifdef typo around include ----------- 12/1 store2.c: when good bargainer, change string to "final offer", and allow return to accept final offer player.c: change rogue start inv from Soft Armor to Cloak, so that it is the same as the other non-Warrior classes dungeon.c: decrement command count after do_command() instead of before, so that all counted commands will work right, this fixes 3^P --------- 12/5 death.c: display_scores(), fix VMS bug, truncate uid to a short before comparing against the uid in the score file record, also move the uid computation outside the loop to speedup the procedure io.c: put_buffer (), for Atari ST, was printing the untruncated out_str instead of tmp_str --------- 12/14 atari_st/curscomp/curses.[ch], death.c, files.c, io.c, signals.c: add Atari ST TC fixes for the new (in 5.2.2) code