Difference for ./TODO from version 1.23 to 1.24


version 1.23 version 1.24
Line 1
 
Line 1
 Various bits, in no particular order.  This is far from a complete list -  This file is now obsolete.
 however it keeps growing as various problems are discovered that  
 don't have an easy fix.  Some of the things are put here just so my mailbox  
 doesn't overflow.  
   
 ------------------------------------------------------------------------------  Bugs and minor feature requests can be found on the sourceforge tracker:
 Known Bugs:  http://sourceforge.net/tracker/?group_id=13833
   
 These are things which don't work as expected, but are difficult enough to  
 fix that they get put here:  
   
 Make lighting not go through walls.  Maybe move it to the 'set_wall'  
 function - hard to do so that it is still somewhat efficient yet the same  
 light source does not illuminate the same space multiple times.  
   
 If a shop is placed in a random map (special map), the objects below the  
 shop wall stick around - normally not much a problem, unless it is placed  
 in a glory hole (treasure level), in which case coins are now beneath the wall.  
   
 Slaying is sloppy in that it uses strstr.  This, an item that has 'slaying  
 giant' (like holyword of mostrai) will kill ants.  strstr matching was most  
 likely added to support comma seperated slaying lists (slaying demon,undead).  
 However, the code should really insist on exact matching, and if necessary  
 break apart the comma seperated list.  Probably best to make something like a  
 'does_slay()' function which can be used all over the place (consistent  
 behaviour is a good thing).  If performance for this becomes an issue, making  
 a slaying a set of pointers could be done (char **slaying), and it gets filled  
 in at load time, and at save time, gets filled in the opposite direction.  
 However, from a simple basis, a check in does_slay() can be done to see if  
 slaying does contain a comma, and if not, just do simple strcmp, and only if  
 it does does extra work need to be done. MSW 2003-03-28  
   
   
 ------------------------------------------------------------------------------  
 Future feature requests  
   
 - Change code so that if a player kills another player, he gets no  
   exp.  Perhaps also log number of times a player has killed another player  
   so problematic player killers can be more easily tracked.  This should  
   be pretty simple, but is mostly here because I want to re-write the  
   kill_player for the new skill code, and that should clean things up  
   up a bit to make this code easier to put in.  
   
 - Allow possibility of one players magic not harming another player (should  
   probably be a flag/settings value) - given that most spells are large  
   area of effect spells, this may make cooperative adventuring easier.  
   However, this could be a little odd - if my friend it immune to my fireball,  
   shouldn't I be immune to my fireball also?  But if that is allowed, you   
   now have the case people could cast fireballs on themselves and hit a   
   whole bunch of surrounding monsters.  Perhaps allow this no damage   
   attribute based on different spells, eg, it could be argued that for bolt  
   spells you'd aim it so that it doesn't hit your friend, but that same  
   claim can't be made for fireballs.  Or maybe add something like the   
   ability of spells to not take effect to some range, eg, 'cast lightning  
   bolt range 6' or the like, in which case it goes 6 spaces before the  
   lightning actually starts.  
   
 - Refine blocking of spaces - instead of 'blocks all or nothing', ability  
   to block walking but not flying, block swimming (for future expansion  
   of oceans).  Also, add different LOS blocking for differing conditions -  
   if flying, jungles shouldn't block line of sight, but they still should  
   if your walking.  Also, add seperate blocking (pass) for monsters and  
   players, eg, block_monster and block_player.  What should probably be done  
   is make this a bitmask or the like with multiple possiblities.  If the  
   object doesn't have another bitmask set, object can't pass through.  For  
   compatiblity reasons, no_pass should set all the new no_pass_.. bits.  
   Note that these bits should also be extended for movement of more than  
   just the player, eg, spells, diseases, etc.  Thus, you could have something  
   like a 'no spell propogation' space - players could still cast spells on  
   themselves, but range spells don't go anywhare.  
   
 - Ability for stores to set different prices for goods (eg, remote store  
   charges more for the services it provides).  
   
 - dm command 'Follow' which lets him see what a player is doing, where he  
   is going, etc.  
   
 - Further control on what players can do on maps/spaces.  For example,  
   prohibit players from shouting, attacking others, issuing tell,  
   etc.  
   
 - Change inscription - instead of looking at range field of the player,  
   have the spell to be inscribed part of the inscription command, eg  
   'inscribe scroll of identify'.  
   
 - If player tries to login with same name/password as a character currently  
   active, drop the old connection and associate the player with the new   
   connection.  Useful if connection is dropped but server hasn't detected  
   it yet.  
   
 - Generalize the code better - split between 'rules' and 'engine'.  The engine  
   would be the aspect of loading/saving objects, dealing with maps, and  
   basic object support (exits, levers, etc - things useful for any working  
   system). The 'rules' would be the more general genre of the game -  
   a science fiction game would have a different set of rules than the  
   fantasy game.  And even the same genre may have a different ruleset  
   (ie, adding new skills).  This is sort of like the current server/common  
   split, but goes a bit more than that - the engine would be able to compile  
   into an executable with the addition of some basic stub functions,  
   but playing as such would really just amount to a ghost moving accross  
   a world which time is pretty much stopped (as monsters would be in the  
   rules side, and not engine).  
 - Changing the stat generation system - instead of roll based, give some  
   number of points.  This makes it easier for players to choose what they  
   want to play - otherwise, I think some clients will be written that will  
   do this for the players in any case.  
 - Change draw_info so that server tells client what type of message it is  
   instead of the color.  Client can then decide what color to draw it  
   or other special handling.  
 - Change code so that objects 'spill over' to other spaces if too many  
   get piled in one space.  
 - More/better maps.  Add more quest maps or maps to take advantage of  
   newer features (ie, church maps for each god, maps for alchemy quests  
   or with rare ingredients, etc)  
 - Add some identifier for unique objects so that if the player that has  
   a unique objects quits the game, the object goes back into circulation.  
 - Add flag to make price of objects not affected by charisma or other  
   abilities.  This should act like gems do right now (pay 1.03, receive  
   0.97).  In this way, gems don't have to be hardcoded, and other items  
   could be similarly set.  Nuggets should be added to this list - its possible  
   to make small amounts of money alchemy silver and then selling the nuggets.  
 - Add/change door handling - make them more real life - they stick around,  
   can be opened, closed, different keys for different doors, etc.  This  
   sort of mimics the gate behaviour, except keys may need to open them, etc.  
   
 - Add armor quality, with armor being damaged as it is used.  Add repair  
   shops to go with this.  Uncertain if people really like this idea or not  
   Further notes from mailing list:   
   Item has current quality rating -  different items have different max  
   ratings - magic would increase its rating.  ITem operates normally  
   when it has 50%+ of its quality.  At less than 50%, item loses  
   functionality in a limited fashion (eg, multiply quality percentage  
   by two to determine effective abilities in terms of percentage.)  
   Item max qualities should be in the same range for most all items, so  
   that powerful items given to low level characters get dinged up just  
   as fast as their normal items.  
   Diminished effects would be handled in fix player.  
   Cost to repair based on how damage item is (100 = half cost,  
   0 = full cost).  Items can be repaired on pro-rated basis.  Repair  
   anvils would need to get added.  
   Items are damaged based on how much damage player takes - more  
   damaging attacks have higher chance to do item damage.  Amount of  
   damage done to items might depend somewhat on damage done to player.  
   Acid attacks would be changed to use this same code - they just  
   always damage items at a much higher rate.  Different ideas is that  
   chance of item damage is fixed, but amount done is based on damage  
   sustained.  Other idea is that chance of damage is based on  
   real damage (percent, square root, other adjustments, perhaps  
   ignoring low values), but damage is somewhat constant.  
   Should probably be tunables in settings to determine amount of damage  
   done to item, and how often item is damaged.  
   
 - Change players draining exp from others.  Currently, there are problems  
   in that it not adjusted based on levels, so there are various abuses  
   draining from low level characters.  Also, generally it is not possibled  
   to drain exp from monsters.  Possible ideas:  
   - Change draining from other players to be a ratio of levels (ie, a level  
     10 character draining from level 5 only gets half the exp.  
   - Ability to drain exp from monsters (might make drain weapons more  
     useful).  Maybe have monster lose some portion of the exp he would  
     award when drained, and try to adjust level/other stats downward as  
     it looses exp?  
 - Fix map loading/saving so it can do it over several ticks for smoother  
   performance (maybe thread it?)  
 - Add adjustments to objects that adjusts chance of skill success.  
   Eg, objects the player use may adjust the characters effective level in  
   using a skill.  Likewise, objects/monsters could have resistances to  
   certain skills (eg, skill_resist values).  
   
 - Delete oldest swapped map in case the TMPDIR disk fills up while  
   swapping out a map.  To do this, detection of error on save would need  
   to be done (presently, the fputs are done without return value checks.)  
     
 - Seperate weapon speed and real speed for players - one is used for attacking  
   only, and the other for movement only.  Right now, a characters real speed  
   could become the weapon speed when they attack something.  
   Make speed more variable for some actions (limit how much can be picked up  
   at once, certain skills should take longer than others.)  
 - Make monster pick up more intelligent - only pick up items if they may be of  
   some use (perhaps base this on int - stupid monsters might pick up everything)  
 - Add different dragon scales, in which different types of armor could be made  
   from.  
 - Add random terrain type square.  Idea being you might make something a   
   random tree, and when the map is loaded, it chooses a tree random.  This  
   would allow some variation in maps each time with possibly keeping the bulk  
   of it the same (Depending how extensively the random trees are used.  
 - Allow transportation objects (ie, horses, carts, dragon, griffins, boats,  
   etc.)  Flying objects should probably ignore line of sight for most  
   objects (you are above the forest or mountains, but then fog should still  
   affect things).  To do this, a terrain type value probably needs to be added,  
   and this acts a bitmask.  Thus, transports compare bitmasks to see if  
   travel through that is allowed.  
   
 - Change identification handling.  Possible idea is to have different levels  
   of identification, with low level only showing basic information, and high  
   level showing full detail.  Skill identification should basically use this,  
   with the skill level determining actual level.  Depending on level of  
   identification, different information may be revealed (value, face,   
   name, etc).  
 - Allow monsters to be randomly generated on a map without generators (ie,  
   orcs show up in forests or whatever.)  Uses this as an option to use instead  
   of the existing random encounter code.  
 - Have monsters potentially attack others if they are damaged by a friend.  
   It looks like the code should already allow this, but I think the problem is  
   that monster reevaluate their objectives too often, and which time they  
   switch back to attacking the player.  
 - Allow treasure lists to be specified as part of the objects message  
 - Perhaps print out a message shortly before a spell effect is about to end.  
 - Rewrite all variables, using own typedefs of type:  
   [us]int8, [us]int16, [us]int32    : Variables that should be at least that  
  size (is there actually anything that needs to be precisely some size?)  
  These typedefs can be set depending on system type.  
 - If communication remains the same (keyword matches),  
   highlite the keywords or in some way make them more noticable so players  
   can know to use them.  This is no worse than many commercial games which  
   give you just a few choices to choose from to continue a conversation.  
 - Statues turning into golems when activated (like doors).  
 - Figurine (when a figurine pet dies, it becomes a figurine, and can be reused)  
   
 - Ability to aim at targets not in the front row.  This should apply for  
   most range attacks (thus, in a group of orcs, the ones not immediately  
   around the player could still use missile weapons.)  
   
 - Better sound support - instead of having hardcoded events for sounds (eg,  
   button push, door open, etc), sounds should be tied to objects, with some  
   number of sound events (eg, object active, object destroyed, object moved,  
   objected attacked, repeat forever, random, etc).  Information about how far  
   they can be heard (in spaces) should also be contained.  When a sound is  
   played, then do a simple check to see nearby players, and if one is within  
   potential range, then check for intervening objects (walls).  Walls would  
   have some dampening effect, counting for more spaces (something behind a  
   wall may sound 5 spaces further away.)  
   Exactly how to store the sound information would need to be investigated -  
   the cheapest in terms of memory would be something like how animations are  
   done - have a global array of the sound information.  However, sound  
   information would be tied pretty closely to object types (eg, if the sound  
   info said its used for both apply and destroy, then if some other object  
   used that same info, it'd also get that apply and destroy behaviour).  This  
   is probably good enough - one could make individual sound information  
   sequences for the individual parts if those were needed.  
   
 - Make the elevation of terrain adjust line of sight.  If on the tallest  
   mountain, you would be able to see over neighboring mountains and not   
   get your view blocked.  
   
 - Change attacktype handling.  Currently, attacktypes are just bitmasks,  
   so if a weapon does 'dam 30' it does 30 dam for all attacktypes it has  
   set.  
   The idea is to make an array of dam values for the attacktype, so  
   you could have a weapon like 'phys 12, fire 6'.  This then gets adjusted by   
   appropriate resistances the creature has.  
   For attacktypes that are effects (slow, paralyze, etc) dam should be the  
   potency of the effect (number of ticks player is effected).  
   If an item has multiple dam values set, then it would do damage from all  
   the attacktypes (eg, a phys 10 fire 3 is something like a flameblade  
   which does mostly physical and a little fire).  
   
 - Improve material code:  
   1) Make material file more readable.  Mostly, make it one entry per  
      line (no comma seperated lists), with values 0 by default, so only  
      values that are different need to be entered.  Maybe make materials  
      archtypes, and then use treasurelist type setup below?  
   2) Remove random material selection from the material file and put it  
      elsewhere - basically, more fined grained material control (silver daggers,  
      but not silver axes for example).  Perhaps the idea of material  
      type treasurelists?  
   3) Remove material bitmask.  Instead, have a pointer to the actual materialtype  
      struct, and determine basis on that (eg, this could burn up, etc).  If  
      necessary, add some appropiates field to the material struct that  
      denote those abilities.  
   4) Suffix to be used for alternative image names and animation sequence  
      for objects (eg, dagger.111.gold for example)  
   5) Some way to denote that even though 'materialname' is set, that the loader  
      should still do appropriate adjustements for the material.  Thus, if a  
      person sets the material in the editor, the server will adjust the values  
      appropriately.  
   6) Allow for multiple materials in same object.  Trickier to do this.  
   7) More hints for materials.  Eg, is it a notable material that should be  
      included in the object name, or mundane?  Likewise, is it a type of material   
      that can be reconstituted (metals) or not (wood, stone, etc)  
   
 Improve exit/teleporter code.  With tiled maps, it is now desirable to move  
    monsters between those maps, so exits should be able to move monsters.  Add  
    bitmask/flag to exit to denote what it moves - players, monsters, or  
    objects.  
   
 Add exp rewarder type object.  It's basic properties:  
     1) amount of exp to reward the player (stats.exp)  
     2) Skill to award the exp to (skill field)  
     3) Flag to denote we should teach the player this skill if they don't  
  have it (can_use_skill flag?)  In this way, rewarders could grant  
  skills to the player.  
     4) Different ways to be activated (walk on/fly on, as well as it being  
  activated from something that 'pushes' it (aka, magic mouth, button,  
  etc)).  In the case of another object activating it, the player  
  would still need to be on the space the object is on.  
     5) Use the 'slaying' field to denote that if the player has a force in  
  his inventory by the same name, he doesn't get the reward, and if  
  they don't have such a force, we add one to the player (so you can't  
  get the same reward repeatedly).  Use something like 'value' or  
         other field to denote how many ticks the force lasts for.  If value  
     is zero, then force never expires  
     6) Use nrof to denote how many times the reward works.  Eg, if nrof  
         is 1, then once a player uses it, no one else can get that reward  
     until the map resets.  
   
 Secondary features:  
   
 These are more features (low priority at that) to be added.  Some of these  
 may be related to items above, or they may be things that just would not  
 add a lot to the game (IMO).  
   
 - Flag so that there is a random chance that an object will or will not appear  
   on a map (this is perhaps better handled by treasurelists.  Unfortunately,  
   treasurelists can not be set in the maps).  
 - Ability to have pixmaps set in maps or otherwise be able to load images  
   without having to rebuild the default images.  
   
   More major features can be found the metalforge WIKI:
   http://wiki.metalforge.net/doku.php/dev_todo_new


Legend:
line(s) removed in v.1.23 
line(s) changed
 line(s) added in v.1.24

File made using version 1.98 of cvs2html by leaf at 2011-07-21 16:53