ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/TODO
(Generate patch)

Comparing deliantra/server/TODO (file contents):
Revision 1.4 by root, Mon Sep 11 01:16:19 2006 UTC vs.
Revision 1.71 by root, Wed Jul 4 07:09:06 2007 UTC

1requirements need to be dcoumented: json-sykc, safe:hole, gperf, glib, std::tr1 (::unoredred_map) 1Here are listed some todos which should be looked into sometimes.
2 2
3Various bits, in no particular order. This is far from a complete list - 307:20:32 -cfbot:#cf- [Incen] that's odd. a pile of dust called "potion"
4however it keeps growing as various problems are discovered that 407:21:05 -cfbot:#cf- [Incen] it was dust of piercing vision
5don't have an easy fix. Some of the things are put here just so my mailbox 507:21:20 -cfbot:#cf- [Lina] seems to happen when picked up and unidentified
6doesn't overflow. 607:21:37 <schmorp> unidentified they are called potions?
707:21:48 -cfbot:#cf- [Incen] ayup
807:22:06 -cfbot:#cf- [Lina] dusts/potions/figurines/balms
7 9
8------------------------------------------------------------------------------ 10* is_animated is sometimes written twice when saving, because it must be off when
9Known Bugs: 11 no animation is set. this does not work, of course, because later the flag is written again.
12 should probably be fixed on load, not on save.
10 13
11These are things which don't work as expected, but are difficult enough to 14* IMPORTANT: item_power should be a body slot like other such qualities,
12fix that they get put here: 15 so they can be sensibly tested against exclusion. Right now, one can
16 equip more than item power allows because it is not checked everywhere
17 (and should not have to be checked, either).
13 18
14Make lighting not go through walls. Maybe move it to the 'set_wall' 19* new players lack statistics
15function - hard to do so that it is still somewhat efficient yet the same
16light source does not illuminate the same space multiple times.
17 20
18If a shop is placed in a random map (special map), the objects below the 21* 21:37:28 -cfbot:#cf- [Drakna] yeah see meditation heals but it eats up food. but if yoiu have no food you can still
19shop wall stick around - normally not much a problem, unless it is placed
20in a glory hole (treasure level), in which case coins are now beneath the wall.
21 22
22Slaying is sloppy in that it uses strstr. This, an item that has 'slaying 23* IMPORTANT: client structures (ns) seem to never get released ever.
23giant' (like holyword of mostrai) will kill ants. strstr matching was most
24likely added to support comma seperated slaying lists (slaying demon,undead).
25However, the code should really insist on exact matching, and if necessary
26break apart the comma seperated list. Probably best to make something like a
27'does_slay()' function which can be used all over the place (consistent
28behaviour is a good thing). If performance for this becomes an issue, making
29a slaying a set of pointers could be done (char **slaying), and it gets filled
30in at load time, and at save time, gets filled in the opposite direction.
31However, from a simple basis, a check in does_slay() can be done to see if
32slaying does contain a comma, and if not, just do simple strcmp, and only if
33it does does extra work need to be done. MSW 2003-03-28
34 24
25* IMPORTANT: never-defined archetypes should be flagged as such and a suitable
26 check fucntion should be designed - the same for empty treasurelists
27 and similar stuff.
35 28
36------------------------------------------------------------------------------ 29* IMPORTANT: reloading archetypes should create copies of used archetypes, letting
37Future feature requests 30 existing objects refer to the old archteypoes (for purposes of saving).
31 UPDATE: this is done, but an upgrade of in-memory objects is highly
32 advisable, as well as testing wether reloading actually works :)
38 33
39- Change code so that if a player kills another player, he gets no 34* there is no "fire 0" to start firing on yourself as opposed to fire 5 etc. which starts
40 exp. Perhaps also log number of times a player has killed another player 35 firing into a specific direction. fire 0 only fires once (this is a bug, but most clients
41 so problematic player killers can be more easily tracked. This should 36 move firing on yourself on non-shift-kp_5 because servers do not support the shifted
42 be pretty simple, but is mostly here because I want to re-write the 37 semantics).
43 kill_player for the new skill code, and that should clean things up
44 up a bit to make this code easier to put in.
45 38
46- Allow possibility of one players magic not harming another player (should 39* /morok_dun/mines1 n world_120_109 does not exist, but the other mine promises a quest
47 probably be a flag/settings value) - given that most spells are large 40 there. be inventive.
48 area of effect spells, this may make cooperative adventuring easier.
49 However, this could be a little odd - if my friend it immune to my fireball,
50 shouldn't I be immune to my fireball also? But if that is allowed, you
51 now have the case people could cast fireballs on themselves and hit a
52 whole bunch of surrounding monsters. Perhaps allow this no damage
53 attribute based on different spells, eg, it could be argued that for bolt
54 spells you'd aim it so that it doesn't hit your friend, but that same
55 claim can't be made for fireballs. Or maybe add something like the
56 ability of spells to not take effect to some range, eg, 'cast lightning
57 bolt range 6' or the like, in which case it goes 6 spaces before the
58 lightning actually starts.
59 41
60- Refine blocking of spaces - instead of 'blocks all or nothing', ability 42* victim {cnt:55798339,uuid:<1.149eb6a43>,name:"ice",flags:[0,8,103],type:23}(on /whalingoutpost/misc/frostcavern1@49+16) already dead in hit_player()
61 to block walking but not flying, block swimming (for future expansion 43 sanctuary etc. hits lava-"ice" and kills it in the process. other stuff seems to not work as expected with sanctuary
62 of oceans). Also, add different LOS blocking for differing conditions - 44 hitting items it shouldn't.
63 if flying, jungles shouldn't block line of sight, but they still should
64 if your walking. Also, add seperate blocking (pass) for monsters and
65 players, eg, block_monster and block_player. What should probably be done
66 is make this a bitmask or the like with multiple possiblities. If the
67 object doesn't have another bitmask set, object can't pass through. For
68 compatiblity reasons, no_pass should set all the new no_pass_.. bits.
69 Note that these bits should also be extended for movement of more than
70 just the player, eg, spells, diseases, etc. Thus, you could have something
71 like a 'no spell propogation' space - players could still cast spells on
72 themselves, but range spells don't go anywhare.
73 45
74- Ability for stores to set different prices for goods (eg, remote store 46* can users in theory steal the gems out of their snitchangel pet monsters?
75 charges more for the services it provides). 47 => the nodrop mechanism used for that should also disallow stealing.
76 48
77- dm command 'Follow' which lets him see what a player is doing, where he 49* bowmode should offer different capabilities given on level of user
78 is going, etc. 50 (Leonov).
79 51
80- Further control on what players can do on maps/spaces. For example, 52* player_sold 1 still gets added to maps at some point, but server cnanot read it.
81 prohibit players from shouting, attacking others, issuing tell, 53 resolve the situation by either implementing it fully or removing it fully.
82 etc.
83 54
84- Change inscription - instead of looking at range field of the player, 55* climbing, meditating, levitating skills etc. should give you experience per use
85 have the spell to be inscribed part of the inscription command, eg
86 'inscribe scroll of identify'.
87 56
88- If player tries to login with same name/password as a character currently 57* rewrite banish in perl (low priority)
89 active, drop the old connection and associate the player with the new
90 connection. Useful if connection is dropped but server hasn't detected
91 it yet.
92 58
93- Generalize the code better - split between 'rules' and 'engine'. The engine 59* nekosan snatches the fish, which stays in the playr inventory.
94 would be the aspect of loading/saving objects, dealing with maps, and 60 remove should automaticlaly send esrv_del_item, and nobody else should,
95 basic object support (exits, levers, etc - things useful for any working 61 for inv items. same for ipo.
96 system). The 'rules' would be the more general genre of the game -
97 a science fiction game would have a different set of rules than the
98 fantasy game. And even the same genre may have a different ruleset
99 (ie, adding new skills). This is sort of like the current server/common
100 split, but goes a bit more than that - the engine would be able to compile
101 into an executable with the addition of some basic stub functions,
102 but playing as such would really just amount to a ghost moving accross
103 a world which time is pretty much stopped (as monsters would be in the
104 rules side, and not engine).
105- Changing the stat generation system - instead of roll based, give some
106 number of points. This makes it easier for players to choose what they
107 want to play - otherwise, I think some clients will be written that will
108 do this for the players in any case.
109- Change draw_info so that server tells client what type of message it is
110 instead of the color. Client can then decide what color to draw it
111 or other special handling.
112- Change code so that objects 'spill over' to other spaces if too many
113 get piled in one space.
114- More/better maps. Add more quest maps or maps to take advantage of
115 newer features (ie, church maps for each god, maps for alchemy quests
116 or with rare ingredients, etc)
117- Add some identifier for unique objects so that if the player that has
118 a unique objects quits the game, the object goes back into circulation.
119- Add flag to make price of objects not affected by charisma or other
120 abilities. This should act like gems do right now (pay 1.03, receive
121 0.97). In this way, gems don't have to be hardcoded, and other items
122 could be similarly set. Nuggets should be added to this list - its possible
123 to make small amounts of money alchemy silver and then selling the nuggets.
124- Add/change door handling - make them more real life - they stick around,
125 can be opened, closed, different keys for different doors, etc. This
126 sort of mimics the gate behaviour, except keys may need to open them, etc.
127 62
128- Add armor quality, with armor being damaged as it is used. Add repair 63* output-count and output-sync defaults *might* cause delay by one message
129 shops to go with this. Uncertain if people really like this idea or not 64 for new users.
130 Further notes from mailing list:
131 Item has current quality rating - different items have different max
132 ratings - magic would increase its rating. ITem operates normally
133 when it has 50%+ of its quality. At less than 50%, item loses
134 functionality in a limited fashion (eg, multiply quality percentage
135 by two to determine effective abilities in terms of percentage.)
136 Item max qualities should be in the same range for most all items, so
137 that powerful items given to low level characters get dinged up just
138 as fast as their normal items.
139 Diminished effects would be handled in fix player.
140 Cost to repair based on how damage item is (100 = half cost,
141 0 = full cost). Items can be repaired on pro-rated basis. Repair
142 anvils would need to get added.
143 Items are damaged based on how much damage player takes - more
144 damaging attacks have higher chance to do item damage. Amount of
145 damage done to items might depend somewhat on damage done to player.
146 Acid attacks would be changed to use this same code - they just
147 always damage items at a much higher rate. Different ideas is that
148 chance of item damage is fixed, but amount done is based on damage
149 sustained. Other idea is that chance of damage is based on
150 real damage (percent, square root, other adjustments, perhaps
151 ignoring low values), but damage is somewhat constant.
152 Should probably be tunables in settings to determine amount of damage
153 done to item, and how often item is damaged.
154 65
155- Change players draining exp from others. Currently, there are problems 66* arrest => jail, but the jailed player can suicide and will wake up
156 in that it not adjusted based on levels, so there are various abuses 67 in his normal savebed, not the jailbed.
157 draining from low level characters. Also, generally it is not possibled
158 to drain exp from monsters. Possible ideas:
159 - Change draining from other players to be a ratio of levels (ie, a level
160 10 character draining from level 5 only gets half the exp.
161 - Ability to drain exp from monsters (might make drain weapons more
162 useful). Maybe have monster lose some portion of the exp he would
163 award when drained, and try to adjust level/other stats downward as
164 it looses exp?
165- Fix map loading/saving so it can do it over several ticks for smoother
166 performance (maybe thread it?)
167- Add adjustments to objects that adjusts chance of skill success.
168 Eg, objects the player use may adjust the characters effective level in
169 using a skill. Likewise, objects/monsters could have resistances to
170 certain skills (eg, skill_resist values).
171 68
172- Delete oldest swapped map in case the TMPDIR disk fills up while 69* 2007-02-03 03:49:06.010 loading /opt/crossfire/share/crossfire/maps//navar_city/city1houses (43970)
173 swapping out a map. To do this, detection of error on save would need 70 2007-02-03 03:49:06.011 Discarding object without arch: texas
174 to be done (presently, the fputs are done without return value checks.) 71 2007-02-03 03:54:36.926 loading /opt/crossfire/share/crossfire/maps//navar_city/misc/city1mermaid (15753)
175 72 2007-02-03 03:54:36.926 Discarding object without arch: event_say
176- Seperate weapon speed and real speed for players - one is used for attacking
177 only, and the other for movement only. Right now, a characters real speed
178 could become the weapon speed when they attack something.
179 Make speed more variable for some actions (limit how much can be picked up
180 at once, certain skills should take longer than others.)
181- Make monster pick up more intelligent - only pick up items if they may be of
182 some use (perhaps base this on int - stupid monsters might pick up everything)
183- Add different dragon scales, in which different types of armor could be made
184 from.
185- Add random terrain type square. Idea being you might make something a
186 random tree, and when the map is loaded, it chooses a tree random. This
187 would allow some variation in maps each time with possibly keeping the bulk
188 of it the same (Depending how extensively the random trees are used.
189- Allow transportation objects (ie, horses, carts, dragon, griffins, boats,
190 etc.) Flying objects should probably ignore line of sight for most
191 objects (you are above the forest or mountains, but then fog should still
192 affect things). To do this, a terrain type value probably needs to be added,
193 and this acts a bitmask. Thus, transports compare bitmasks to see if
194 travel through that is allowed.
195 73
196- Change identification handling. Possible idea is to have different levels 74* IMPORTANT:
197 of identification, with low level only showing basic information, and high 75 entering instantiated random maps whose meta file is missing freezes the player.
198 level showing full detail. Skill identification should basically use this,
199 with the skill level determining actual level. Depending on level of
200 identification, different information may be revealed (value, face,
201 name, etc).
202- Allow monsters to be randomly generated on a map without generators (ie,
203 orcs show up in forests or whatever.) Uses this as an option to use instead
204 of the existing random encounter code.
205- Have monsters potentially attack others if they are damaged by a friend.
206 It looks like the code should already allow this, but I think the problem is
207 that monster reevaluate their objectives too often, and which time they
208 switch back to attacking the player.
209- Allow treasure lists to be specified as part of the objects message
210- Perhaps print out a message shortly before a spell effect is about to end.
211- Rewrite all variables, using own typedefs of type:
212 [us]int8, [us]int16, [us]int32 : Variables that should be at least that
213 size (is there actually anything that needs to be precisely some size?)
214 These typedefs can be set depending on system type.
215- If communication remains the same (keyword matches),
216 highlite the keywords or in some way make them more noticable so players
217 can know to use them. This is no worse than many commercial games which
218 give you just a few choices to choose from to continue a conversation.
219- Statues turning into golems when activated (like doors).
220- Figurine (when a figurine pet dies, it becomes a figurine, and can be reused)
221 76
222- Ability to aim at targets not in the front row. This should apply for 77* random speed should result in randomised initial animation face.
223 most range attacks (thus, in a group of orcs, the ones not immediately
224 around the player could still use missile weapons.)
225 78
226- Better sound support - instead of having hardcoded events for sounds (eg, 79* example of why a player was kept alive long after having logged out.
227 button push, door open, etc), sounds should be tied to objects, with some 80 those are probably in a player inventory.
228 number of sound events (eg, object active, object destroyed, object moved, 81 2007-01-23 14:32:17.413 player-scheduler refcnt nulla 2,1 9,9
229 objected attacked, repeat forever, random, etc). Information about how far 82 2007-01-23 14:31:40.821 owner: {cnt:1291946,uuid:<1,bd23b6aa>,name:"trident",flags:[17,24,111],type:15}(on (null)@1+1)
230 they can be heard (in spaces) should also be contained. When a sound is 83 2007-01-23 14:31:40.822 owner: {cnt:741779,uuid:<1,bd1b5193>,name:"throwing dagger",flags:[17,24,98],type:15}(on (null)@1+1)
231 played, then do a simple check to see nearby players, and if one is within 84 2007-01-23 14:31:40.824 owner: {cnt:1403336,uuid:<1,bd2569c8>,name:"throwing hammer",flags:[17,24,111],type:15}(on (null)@1+1)
232 potential range, then check for intervening objects (walls). Walls would 85 2007-01-23 14:31:40.824 owner: {cnt:1291941,uuid:<1,bd23b6a5>,name:"throwing star",flags:[17,111],type:15}(on (null)@1+1)
233 have some dampening effect, counting for more spaces (something behind a 86 2007-01-23 14:31:40.825 owner: {cnt:1294661,uuid:<1,bd23c145>,name:"axe",flags:[17,111],type:15}(on (null)@1+1)
234 wall may sound 5 spaces further away.) 87 2007-01-23 14:31:40.828 owner: {cnt:1323712,uuid:<1,bd2432c0>,name:"spear",flags:[17,24,111],type:15}(on (null)@1+1)
235 Exactly how to store the sound information would need to be investigated - 88 2007-01-23 14:31:40.828 owner: {cnt:742413,uuid:<1,bd1b540d>,name:"spear",flags:[17,24,74],type:15}(on (null)@1+1)
236 the cheapest in terms of memory would be something like how animations are 89 2007-01-23 14:31:40.828 owner: {cnt:1420216,uuid:<1,bd25abb8>,name:"throwing dagger",flags:[17,24,111],type:15}(on (null)@1+1)
237 done - have a global array of the sound information. However, sound
238 information would be tied pretty closely to object types (eg, if the sound
239 info said its used for both apply and destroy, then if some other object
240 used that same info, it'd also get that apply and destroy behaviour). This
241 is probably good enough - one could make individual sound information
242 sequences for the individual parts if those were needed.
243 90
244- Make the elevation of terrain adjust line of sight. If on the tallest 91* 2007-01-15 03:17:33.547 victim (arch door_look_1, name ice) already dead in hit_player()
245 mountain, you would be able to see over neighboring mountains and not 92 => use debug_desc
246 get your view blocked. 93 => find out whats causing it
247 94
248- Change attacktype handling. Currently, attacktypes are just bitmasks, 95* training center (kobold etc.) does not stop working after 30-40min
249 so if a weapon does 'dam 30' it does 30 dam for all attacktypes it has 96 but goes on for 2 hours _at least_.
250 set.
251 The idea is to make an array of dam values for the attacktype, so
252 you could have a weapon like 'phys 12, fire 6'. This then gets adjusted by
253 appropriate resistances the creature has.
254 For attacktypes that are effects (slow, paralyze, etc) dam should be the
255 potency of the effect (number of ticks player is effected).
256 If an item has multiple dam values set, then it would do damage from all
257 the attacktypes (eg, a phys 10 fire 3 is something like a flameblade
258 which does mostly physical and a little fire).
259 97
260- Improve material code: 98* /mlab/cwdccastleofmarquis3, goto and then charm => very very high cpu usage.
261 1) Make material file more readable. Mostly, make it one entry per 99 original crossfire: 100% cpu usage => freeze
262 line (no comma seperated lists), with values 0 by default, so only 100 after mapspace::update fix: 40%
263 values that are different need to be entered. Maybe make materials 101 after map protocol optimisation: 15%
264 archtypes, and then use treasurelist type setup below?
265 2) Remove random material selection from the material file and put it
266 elsewhere - basically, more fined grained material control (silver daggers,
267 but not silver axes for example). Perhaps the idea of material
268 type treasurelists?
269 3) Remove material bitmask. Instead, have a pointer to the actual materialtype
270 struct, and determine basis on that (eg, this could burn up, etc). If
271 necessary, add some appropiates field to the material struct that
272 denote those abilities.
273 4) Suffix to be used for alternative image names and animation sequence
274 for objects (eg, dagger.111.gold for example)
275 5) Some way to denote that even though 'materialname' is set, that the loader
276 should still do appropriate adjustements for the material. Thus, if a
277 person sets the material in the editor, the server will adjust the values
278 appropriately.
279 6) Allow for multiple materials in same object. Trickier to do this.
280 7) More hints for materials. Eg, is it a notable material that should be
281 included in the object name, or mundane? Likewise, is it a type of material
282 that can be reconstituted (metals) or not (wood, stone, etc)
283 102
284Improve exit/teleporter code. With tiled maps, it is now desirable to move 103* 2007-01-14 21:15:58.605 Fiery, Wist's fervent pupil was hit by counterspell with counterspell attack.
285 monsters between those maps, so exits should be able to move monsters. Add 104 this is simply counterwall hitting monsters. but why does it happen?
286 bitmask/flag to exit to denote what it moves - players, monsters, or
287 objects.
288 105
289Add exp rewarder type object. It's basic properties: 106* 2007-01-15 01:02:00.183 Query_cost: item {cnt:1636781,uuid:<1,a1f0f9ad>,name:"boulder",flags:[17],type:0}(on ?random/d8250dbd970319bd5f35fb4f2b9b46a9@44+34) hasn't got a valid type
290 1) amount of exp to reward the player (stats.exp) 107 fix once and for all please. a) type 0 is valid b) maybe the boulder should have another type.
291 2) Skill to award the exp to (skill field)
292 3) Flag to denote we should teach the player this skill if they don't
293 have it (can_use_skill flag?) In this way, rewarders could grant
294 skills to the player.
295 4) Different ways to be activated (walk on/fly on, as well as it being
296 activated from something that 'pushes' it (aka, magic mouth, button,
297 etc)). In the case of another object activating it, the player
298 would still need to be on the space the object is on.
299 5) Use the 'slaying' field to denote that if the player has a force in
300 his inventory by the same name, he doesn't get the reward, and if
301 they don't have such a force, we add one to the player (so you can't
302 get the same reward repeatedly). Use something like 'value' or
303 other field to denote how many ticks the force lasts for. If value
304 is zero, then force never expires
305 6) Use nrof to denote how many times the reward works. Eg, if nrof
306 is 1, then once a player uses it, no one else can get that reward
307 until the map resets.
308 108
309Secondary features: 109* animated weapons should come back to the player when he dies/disconnects?
110 2007-01-14 18:50:07 info: winvirus chats: Could you make it so if you have an
111 animated weapon out and you disconnect, that it'd simply a) fall to the
112 ground or b) return to your inv? Rather than disappearing into the void of
113 nothingness.
310 114
311These are more features (low priority at that) to be added. Some of these 115* mapinfo command should be handled asynchronously (cause it blocks the server)
312may be related to items above, or they may be things that just would not
313add a lot to the game (IMO).
314 116
315- Flag so that there is a random chance that an object will or will not appear 117* 16:09 <@schmorp> eigetlich soltle world-overlay nahc world moven
316 on a map (this is perhaps better handled by treasurelists. Unfortunately, 118 16:09 <@schmorp> ende des themas
317 treasurelists can not be set in the maps). 119 16:09 <@schmorp> und eigentlich soltlen dort alle leeren maps gelöscht werden
318- Ability to have pixmaps set in maps or otherwise be able to load images 120 16:09 <@schmorp> so daß nur maps existieren, die overwirtes enthalten
319 without having to rebuild the default images. 121 16:09 <@schmorp> erinnert mich dran
320 122
123* map converter
124 elmex: because of the faces and all the other nice things - i guess
125 [HUH?? please specify or remove]
126
127* implement no-drop-on-destroy flag (done)
128 for example to remove the specialcases for books that are destroyed
129 and contain spells (should be done)
130
131* look at these logs:
132 2006-09-16 01:38:16 Got unknown value in map header: race human
133 2006-09-16 01:37:33 invalid type defined in shopitems in string cloak:5;spellbook:35;ring:15;book:28;scroll:25;wand:28;armour improver:2;weapon improver:2;rod:32;potion:10;horn:35;amulet:17;power_crystal:25;gem:0;lamp:-10;*:-90;
134 2006-09-16 01:37:17 Map darkness for poison on /quests/peterm/FireTemple/Fire2 is too high (6)
135 2007-01-15 02:46:23.746 winvirus has two money entries of (silvercoin)
136 2007-01-15 02:46:23.746 winvirus has two money entries of (goldcoin)
137 2007-01-15 02:46:23.746 winvirus has two money entries of (platinacoin)
138 2007-01-15 02:46:23.745 winvirus has two money entries of (royalty)
139
140* make sure custom keys get saved in same order as they are being loaded.
141
142* wishlist: implement buildable "safe floors" for apartments. or make all apartments safe and
143 implement buildable non-safe floors.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines