artrand2.diff merely adds a comment to explain how make_artifact works, and gives a fairly simple probability calculation for it. Pre-requisites: stormy.zip/stormy.diff 0903/artrand.diff birthauto.diff fixes a bug I'd introduced into the autoroller. I had assumed that point_mod was true if spend_points was set. This isn't actually true, as point_mod is always true until a point after that in which I am interested. The only effect of doing this was to force players on systems where USE_AUTOROLLER is not defined to use point-buying, so I changed it. Pre-requisites: diff0811.zip/birth.diff birthclean.diff makes a few functions static and the indices for point_mod_player() hexadecimal, and centralises the stat-checking function. The only effect this has from the player's point of view is that stats can always be reduced to an internal value of 8. Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthday2.diff fixes a bug whereby the date was expected to be in the range 1-365, but was actually in the range 0-364. It's now in the range 0-365 instead. Pre-requisites: diff0811.zip/birth.diff diff1701.zip/birthday.diff diff1701.zip/energy.diff birthextra.diff allows the player to replace the miscellaneous abilities display with a few selected stat effects. Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthclean.diff birthhelp.diff allows the player to change options and access the help function from within point_mod_player(). Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthclean.diff birthextra.diff birthname.diff birthquick.diff birthname.diff allows the player to change the character's name and sex from within point_mod_player(). Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthclean.diff birthextra.diff birthquick.diff removes some of the excess prompts players with spend_points set have and creates options to suppress the "Quick-Start" question at the beginning of character generation and the pause after initialisation (both FALSE by default). The latter may look slightly strange as it displays the screen as it initialises, clears it as it loads the game, then displays it again. To enable birth options to be set at all with Quick-Start turned off, it creates a function which handles these for every choice in birth.c, which means that you can change birth options at every (a-x) style prompt. You may have to start over manually if you change spend_points or autoroll at the wrong point, but this shouldn't be a huge problem. Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthclean.diff birthextra.diff birthsave2.diff includes a name and sex in each stat set, allows multiple stat sets to be saved for a given race/template/maximise combination, allows the player to load stats with the 'L' key, allows the player to select a stat set without having to first select its race and template and fixes a couple of bugs. Pre-requisites: 0811/birth.diff 1701/birthday.diff 1701/xpf.diff 1701/initgold.diff 1701/social.diff 1701/cleanup.diff diff0903.zip/birthsave.diff diff0903.zip/birthskill.diff diff0903.zip/birthrand.diff diff0903.zip/amax.diff birthclean.diff birthextra.diff birthname.diff birthquick.diff birthhelp.diff birthsocial2.diff is an updated routine to calculate the average social class of a race. It handles branching paths correctly, and can no longer hang forever given a recursive path (although it may slightly underestimate their value). Pre-requisites: breaks.diff prevents the space bar from aborting a repeated command. Every other key on the keyboard should be enough for most purposes. Pre-requisites: None changelevel.diff creates a routine that handles various things that occur on change of level. Pre-requisites: diff0811.zip/birth.diff diff0412/curse.diff diff1212.zip/bypass.diff diff1212/curse.diff diff1212.zip/mainchoice.diff diff1212/saves.diff diff1512.zip/recall.diff diff1512.zip/trapdoor.diff diff1701.zip/cleanup.diff diff0903.zip/trapdoordam.diff curse2.diff getitem.diff quietsave.diff quietsave2.diff levelport.diff placemon.diff powers.diff curse2.diff defines curse_turn globally. I'm sure I've done this before... Pre-requisites: diff0412.zip/curse.diff deathevent2.diff fixes a bug whereby objects created with the OBJECT flag were less impressive than intended, makes the initialisatin strict enough about format to allow a check that no rogue characters have been included and combines artefact creation with normal item creation. Pre-requisites: diff0811.zip/objknow.diff diff0811.zip/worthless.diff diff0412.zip/curse.diff diff1212.zip/curse.diff stormy.zip/stormy.diff diff1212.zip/bypass.diff diff1212.zip/autohaggle.diff dif1212.zip/dropspecial.diff diff1212.zip/saves.diff diff1512.zip/pseudoid.diff diff1512.zip/allart.diff diff1512.zip/moncol.diff diff1701.zip/artpower.diff diff1701.zip/spoiler.diff diff0903.zip/deathevent.diff diff0903.zip/plurals.diff diff0903/deatheventtext.diff diff0903.zip/wizmonster.diff curse2.diff dundepth.diff simply replaces all references to dun_level+dun_offset with ones to a macro called dun_depth to make it easier to distinguish between references to your depth and your level in the current dungeon. Looking through it, I do wonder why periodic summoning generates (significantly AFAICT) harder monsters at 3000' in the Tower of Koth than 3000' under Kadath. Pre-requisites: Not known. dundepths.diff is the part of dundepth.diff which actually defines dun_depth. This should run without problem, and you can generate the above by doing something like "for name in `ls *.[ch]`; do awk -f dundepth.awk <$name >$name.new; done" in bash, and then replacing the old versions with the new. Pre-requisites: None enchart.diff causes artefacts to be described as "The foo" rather than "Your foo" when you attempt to enchant them. Pre-requisites: None enchmsg.diff displays a message after a successful enchantment attempt describing the new enchantment. Pre-requisites: 0903/plurals.diff fire.diff gives items with a fiery aura (just the cloak of immolation) the permanent light flag, and reduces the aura's value to compensate. It also does the same for randarts, and fixes the apparent bug whereby the wrong set of flags was being referred to. Pre-requisites: None food.diff causes an amulet of adornment to remove all food requirements in wizard mode. Pre-requisites: None getitem.diff enables objects to be drained, recharged, thrown, destroyed and turned to gold from equipment. The last three are prevented from selecting cursed worn items for obvious reasons. Pre-requisites: None idcol.diff causes unidentified objects to be displayed in TERM_SLATE in shops. As some things are easier to identify by buying them, it's nice to know what needs identification. Pre-requisites: None inscribe.diff makes a note of what something has been enscribed with in the message history. Pre-requisites: None killsymbol.diff causes the "Display current knowledge" options to show the relevant symbol by each monster mentioned. It also causes GUARDIAN monsters to have a ! displayed in their "Known uniques" entry to make it easier to keep track of your progress. To make the latter accurate, I've added the GUARDIAN flag to Father Dagon. Pre-requisites: diff1512.zip/moncol.diff diff0903.zip/plurals.diff knowdeath.diff creates a list of what killed the player's ancestors, sorted by number and monster depth. It doesn't consider deaths to poison, traps, etc., because they don't appear to be stored in the save file. Yet. Pre-requisites: 0903/plurals.diff knowempty.diff causes objects with the empty flag set to stack with objects known to have 0 charges. It still doesn't allow wands of an unknown kind to stack if both are known to be empty, but that shouldn't happen often. Pre-requisites: None level2.diff causes the offset to be considered for both temporary saving and dying. I really must remember to check that these things actually do work in future... Pre-requisites: diff0903.zip/level.diff dundepths.diff levelport.diff makes level teleporting give accurate messages in a tower. Pre-requisites: diff0412/curse.diff diff1212/curse.diff diff1212/saves.diff curse2.diff quietsave.diff maxexp.diff removes the check against PY_MAX_EXP from potions of experience and the equivalent tarot draw effect because their effects have nothing to do with experience. Pre-requisites: None missiledam.diff causes the second character information screen to display the damage modifiers for the current missile weapon with (+0,+0) ammunition rather than the current melee weapon. It also rephrases display_player() as a switch statement and separates the first two cases. Pre-requisites: diff0903.zip/tempfx.diff modification.diff sets CHECK_MODIFICATION_TIME and removes the typo which prevents this from working. Pre-requisites: None moncol2.diff allows monster memory colours to be set in the visuals preferences. To make this work as I wanted it, I made load_all_pref_files() load all of the pref files. I do wonder if not calling reset_visuals() at the beginning of play_game() would do exactly the same thing with less re-loading of pref files, or if it does actually do something useful. Pre-requisites: diff1512.zip/moncol.diff diff0903.zip/features.diff notecurse.diff gives the inscription "poss. cursed" to items which have been tried on and found to be cursed. It uses the "tried" field of object_kind, which may need to be changed if (for instance) objects were allowed to be activated without being identified first, or if cursed wands were introduced. At the moment, however, there is no overlap. Pre-requisites: diff0412.zip/curse.diff diff1212.zip/curse.diff diff1212.zip/saves.diff diff0811.zip/worthless.diff diff1212.zip/saves.diff diff1212.zip/autohaggle.diff diff1512.zip/pseudoid.diff curse2.diff pseudoid3.diff notedepth.diff automatically inscribes items with the depth at which they were generated. Pre-requisites: dun_depths.diff placemon.diff prevents alloc_monster() from calling Rand_num() a horrible number of times if there are few eligible free spaces. This can be a problem if (for instance) you are waiting a long time in the orc tower to check for pseudo-id. It does this as follows: If there is lots of space on the level, monsters are placed randomly as usual. If random placement has trouble finding space (if it fails 1 000 times, in fact), it makes a note of the fact and starts counting spaces from then on. If it is counting spaces, it will count the free spaces on the map. If it finds 128, it will start picking squares at random again, but this time will try 1 000 000 times. If it finds between 1 and 127, it will pick one at random. If it finds none, it will make a note of the distance parameter used, and never try to place monsters unless it can place them closer to you than in that attempt. If you move, the game starts this process from the beginning. If a monster moves or dies, or someone does some digging, it increases the distance if the monster was not within that distance beforehand. Pre-requisites: None polytext.diff gives a slightly different message when you polymorph a shapechanger. Pre-requisites: None powers.diff Includes the fail rate in the "use power" display. Causes show_choices_main to work in it. Pre-requisites: diff0811.zip/birth.diff diff0412/curse.diff diff1212/curse.diff diff1212/saves.diff diff1701.zip/cleanup.diff curse2.diff getitem.diff quietsave.diff placemon.diff pseudoid3.diff: Replaces the functionality of the uninscribe command lost in 1512/pseudoid.diff and strangely not replaced since and fixes a bug with the removal of "uncursed" from item identities. Pre-requisites: diff0412.zip/curse.diff diff1212.zip/curse.diff diff1212.zip/saves.diff diff0811.zip/worthless.diff diff1212.zip/saves.diff diff1212.zip/autohaggle.diff diff1512.zip/pseudoid.diff curse2.diff quarks.diff fixes a few buggy quark_str() calls and replaces some others with a simpler form. Pre-requisites: None (if it doesn't work, it shouldn't matter) quietsave.diff creates an option in the "save" menu which causes the game to not display anything when it auto-saves as I find them distracting. It also changes is_autosave into a parameter and announces saving in do_cmd_save_game() rather than the calling routine because it is only ever set immediately before or after do_cmd_save_game() is called. Pre-requisites: diff0412/curse.diff diff1212/curse.diff diff1212/saves.diff curse2.diff rand.diff causes rand_int() to always use Rand_div when Rand_quick is set in order that it gives entirely consistant results. Previously, you could alter the wilderness layout by toggling rand_unbiased. Pre-requisites: None randpower2.diff enables un-*identified* items to give known details when inspected, and adds a reference to an item having random powers/resistances in the description given. It also adds the flags to some ego types, but these have no effect. Causing ego items to derive their extra abilities from e_info.txt isn't hard, but neither is it trivial. Pre-requisites: diff0811.zip/objknow.diff diff0811.zip/worthless.diff stormy.zip/stormy.diff, diff0412.zip/curse.diff diff1212.zip/curse.diff diff1212.zip/autohaggle.diff diff1212.zip/saves.diff diff1512.zip/pseudoid.diff diff1512.zip/allart.diff diff1701/artpower.diff, diff1701.zip/spoiler.diff, diff0903/randpower.diff diff0903/fullident.diff curse2.diff shopvalue.diff displays how much the shopkeeper in a shop will give you for an arbitrary object with a given value. This price ignores the question of whether the shopkeeper would normally buy such an item, and also any price limit the shop may have. The value used can be changed by changing the r_info.txt entry. Pre-requisites: stormy.zip/stormy.diff stormy2.diff spiritnum.diff allows spirits to be chosen by number, which is constant for each spirit rather than based on list position. This avoids any difficulties due to macros failing because the player has become associated with a new spirit since the macro was written. Pre-requisites: None spiritcase.diff makes "Form" in "Pay %d to form a pact with %s" lower case. Pre-requisites: diff1212.zip/autohaggle.diff diff1701.zip/autohaggle2.diff diff0903.zip/autohaggle3.diff spoilmod2.diff fixes a bug whereby information was made available about items which had never been tried. Pre-requisites: diff0811.zip/objknow.diff diff0811.zip/worthless.diff stormy.zip/stormy.diff, diff0412.zip/curse.diff diff1212.zip/bypass.diff diff1212.zip/curse.diff diff1212.zip/autohaggle.diff diff1212.zip/saves.diff diff1512.zip/pseudoid.diff diff1512.zip/allart.diff diff1701/artpower.diff, diff1701.zip/spoiler.diff, diff0903/randpower.diff diff0903/fullident.diff diff0903.zip/spoilmod.diff curse2.diff spoilmon2.diff: Gives all information which is normally based on kill numbers. Pre-requisites: diff0811.zip/objknow.diff diff0811.zip/worthless.diff stormy.zip/stormy.diff, diff0412.zip/curse.diff diff1212.zip/curse.diff diff1212.zip/autohaggle.diff diff1212.zip/saves.diff diff1512.zip/pseudoid.diff diff1512.zip/allart.diff diff1701/artpower.diff, diff1701.zip/spoiler.diff, diff0903/randpower.diff diff0903/fullident.diff curse2.diff spoilstat2.diff enables the game to give information about the effects of all stat-modifying items (albeit some only approximately), making it a lot more useful. Pre-requisites: diff0811.zip/objknow.diff diff0811.zip/worthless.diff stormy.zip/stormy.diff, diff0412.zip/curse.diff diff1212.zip/bypass.diff diff1212.zip/curse.diff diff1212.zip/autohaggle.diff diff1212.zip/saves.diff diff1512.zip/pseudoid.diff diff1512.zip/allart.diff diff1701/artpower.diff, diff1701.zip/spoiler.diff, diff0903/randpower.diff diff0903/fullident.diff diff0903.zip/spoilstat.diff curse2.diff stacknotes.diff creates an option to have items always stack regardless of inscription. Pre-requisites: None stormy2.diff fixes a bug where I had failed to change the references to Stormbringer in the movement code to refer to its new identity. Pre-requisites: stormy.zip/stormy.diff towerlvl.diff adds the offset to the depth given for tower levels. I'm not entirely sure why these were treated differently in the first place, as it is quite useful. Pre-requisites: None traps.diff causes the different traps which have the same name to have the same mimic field. Pre-requisites: None violet.diff allows monsters to change colour when the look command is being used. Monsters which change colour (and maybe form) naturally do so as they do as the player moves. Most uniques flash violet every other keypress. Monsters which share both colour and symbol with the object beneath them flash red. Monsters in the previous two groups which are violet or red (as appropriate) flash yellow instead. Colour-changing uniques change colour as normal, but only every other turn. "Clear" monsters are not affected by this patch, although CHAR_MULTI ones (i.e. the Stormbringer) are. Normal colour-changers change to make it easier to recognise them when you've only got a single "detect monsters" image to go on. Monsters which share a symbol with the square beneath them change to make clearing out a coin nest a bit less annoying. And uniques change to make it that much less likely that your first warning that something is amiss is when you get the message "Yog-Sothoth, the All-in-One invokes a mana storm.". Pre-requisites: None --------------- The pre-requisites list those patches which are required to use the patch in question in the form archive/filename. All archives are available from http://www.dimetrodon.demon.co.uk/roguelike.html If any failures occur in externs.h or variable.c, the changes should be applied manually. If a line is added, it can be added at any point in these files. If failures occur elsewhere as a result of applying a pre-requisite, this should not affect the patch included in this archive. If they occur as a result of applying a patch in this archive, or if the files which result from applying the listed patches to Cthangband 4.1.0b do not compile, please check that the patches you are using are the same as are available from the site above. If they are, please contact me so that I can make any necessary changes. In many cases, it is possible to get the desired effect without applying the given patches (for instance, patches which build upon diff0903.zip/spoiler.diff require none of the functionality of autohaggle.diff or pseudoid.diff), but the exact details of the necessary workarounds are not given here. Any comments should be sent to Kieron Dunbar at kieron@dimetrodon.demon.co.uk.