added new lamp and torch system.
*** empty log message ***
mapscript changes
connected => shstr, beginning of mapscript
*** empty log message ***
*** empty log message ***
further optimisations
smell, remove gcfclient support, material fixes, cfpod parse fixes, refactoring
thats => that's some more typo fixes in maps (i => I, missing commas, bad casing, etc.)
*** empty log message ***
implement primitive noise hack
*** empty log message ***
is_in_map_or_inv => is_inserted.
refactored drop code a bit, and hopefully fixed some bugs with it.
remove destroy argument by defaulting it to true (big semantic change\!)
introduce drop_and_destroy and use it
spell effective level system reworked
*** empty log message ***
*** empty log message ***
*** empty log message ***
introduce and use object::has_dialogue ()
removed elevation and inserted proper caching of spell/grace/eat values
many bugfixes
*** empty log message ***
*** empty log message ***
fix the dummy-teleport-objects c callers
rewrite objetc_create_clone to deep_clone and fix randfom map generator bug
kv rewrite
do not use the copy constructor and assignment opertaor of object anymore
*** empty log message ***
*** empty log message ***
- optimise visible_to - visible_to now only sends floor items when they might be visible - optimised remove for the map case - remove now clsoes containers that get removed from the floor - work around possible client bug by forcign an item flag update for cointainers - avoid superfluous floorbox resets
see Changes
- fix weight/pickup bugs, visible_to - do more automatic nrof/weight updates - kill funcpoint.h
refactor decrease_ob* into ->decrease method.
weight system rewrite, also simplified and streamlined most related functions
minor refactoring
use head, total_weight
- implement archetype gc - implement "proper" refcounting for arches - serialise resource file loads - implement memory poisoning - minor cleanups
reloadable archetypes, maybe
better logging, remove cruft
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
fixaltar
update copyrights and other minor stuff to deliantra
- implement archetype->instance as replacement for arch_to_object (better name?) - fix arrows merging with stuff on floor - fix level_for_item to read more clearfly, do not use drand48 and fix the random level generation when !level set. - splay arrow container in find_arrow (but searching containers is still borked?) - improve create_missile spell.
- clean up message system, combine all boxes into one. - suppress too long messages (we need a more robust solution to this problem). - get rid of INS_MAP_LOAD, leading to slightly cleaner/faster code and certainly one special case less. - insert objects manually at load time, this is both faster and also more correct, as loading a map is never supposed to trigger anything (and also for symmetry to the save code).
- rewrite/cleanup ob_blocked a little. its more efficient now, probably has less bugs and more bugs. - get rid of now unused P_NO_PASS.
- implement tag keyword but do not use it yet - skip_block now skips known types of sub-blocks - print the decoded filename if possible
- implemented ref/deref "framework" that allows one to create semipersistent references and dereference them later (works only for players right now). - (partially) expose freezer and thawer to perl. - thawers now do next() automatically after instantiating. - allow the thawer to record delayed dereference requests to be resolved, well, later (should be a different class actually but lets stay realistic). - use thawers when loading maps and players and resolve delayed derefs after loading them before activating them. - serialise io for no good reason.
cleanup, new unused clear flag
- create a new class, mapxy, which abstracts a mapspace position. - rewrite move_arrow to take advantage of this new experiemntal class. I don't understand move_arrow, but the code without doubt became clearer and simpler. this opens the way of rewriting the rather clumsy get_map_flags etc. API into something more efficient below mapxy.
actually do save objects with owener now and save and restore the owner if the owner is a player
first, untested, try at spicing up the message system
first, untested, try at spicing up the message system
documentation
be more generic
*** empty log message ***
- support more than the gcfclient-20-something sounds (dire hack) in sound.conf.res - implement "sound" face for archetypes/objects. - play sound face in signs either on map (triggered) or on the player reading it.
very very preliminary, non-working sound framework
drop unpaid items on disconnect. far easier than to do it at connect time
- unbundle marker code into force_find/force_add - use completely different (more efficient) speed logic - make those methods available to perl - to avoid numerical errors use an exact fp number for MIN_ACTIVE_SPEED.
- upgrade crossfire trt to the GPL version 3 (hopefully correctly). - add a single file covered by the GNU Affero General Public License (which is not yet released, so I used the current draft, which is legally a bit wavy, but its likely better than nothing as it expresses direct intent by the authors, and we can upgrade as soon as it has been released). * this should ensure availability of source code for the server at least and hopefully also archetypes and maps even when modified versions are not being distributed, in accordance of section 13 of the agplv3.
- pippijn unknowingly inspired the idea of documenting the type of the objetc_vector_index explicitly. - pippijn spotted a typoe, to, go figure!
un-insanify
untemplatise the problematic put
- improve observe - remove more cruft code - archetype loading almost works again, reloading probbaly still borked.
- archetype is now a subclass of object. - store archetypes in an object_vector. - use a different startegy for archetype loading (reloading is MOST CERTAINLY broken).
rename arch->name to arch->archname for preparation of subclassing object
- update copyrights in .h files, where applicable - rename preprocess to genkeywords
more cleanups
- restore after combined mainboard+harddisk crash - cleanup/fixes for 2.1 release - fix invoke to actually do work - refactor invoke shortcuts, gcc cannot inline varargs functions. - optimised invoke to 4-5 insns in the common case. - optimised (For no good reason) the int-to-ascii conversions of dynbuf_text into division-less and branchless code (of which I am pretty proud). - actually move players to their savebed when they did not use one and the map has been reste in the meantime. does not kill (yet) when too long. - enter_map is now handled completely in perl. - goto is now using generation counting to ensure that only the most-recently-issues goto will succeed. - make some heavy use of __builtin_expect to streamline rare callbacks even more. - optimised thawer.
- optimise invoke by using an inline check on a bitset (kind of a simplified bloom filter for all events).
inv_splay => splay
- more rewrite: change_skill now only changes the chosen_skill, nothing else. new flag to suppress skill tool behaviour of readying the skill when applying the tool, for use in find_skill.
breath life into completely broken skill tools
*** empty log message ***
almost works
*** empty log message ***
do not output archetypes with names starting with type_ or class_, a bit of a hack
some more structure optimisations saving lots of code
- add two new slots for shields and combat weapons - make slots into bitfields, they are not too speed-critical and this saves 16 bytes in the object structure. - add accessors to body lcoation names etc. to perl - use those in the body command
beta it slowly into shape
only allow one range weapon to be applied at any one time, some dynbuf fixes
big simplification, still doesn't work, but feels cleaner
This is the first rough cut of the skill use system (use the STABLE tag). Details will likely change, and combat skills do not work very well, but it works quite well. Players no longer have a shoottype or range slots, instead, each player has these members: combat_skill/combat_ob the currently selected skill (and weapon) for direct attacks. ranged_skill/ranged_ob the currently selected ranged skill (and bow/spell/item) golem the currently-controlled golem, if any.
- implement a rudimentary framework for a "msg" command that replaces drawinfo and drawextinfo and allows for simpler usage in simple cases and extensibility for the less complex uses. - moved the character race choosing logic into perl, making use of the new msg command if the client supports it.
- add format utility function. - split dynbuf into dynbuf and dynbuf_text. - use dynbuf_text for examine strings instead of outputting each line seperately. tried to use stringstreams but they add insane overheads (as does std::string, but less so).
having a) monsters as treasures b) multipart monsters as treasures and c) multipart monsters as terasures on tiled maps... hit a big pile of bugs again. this change: - implements a per-map active flag. when items are being inserted they are activated or deactivated according to that flag. this could get rid of most or even all of the explicit activate/deactivate calls. - implement some glue to make instantiating multipart objects easier (this is used inside fix_multipart_objects and might make it possible to put multipart objects at map borders - those were winged before) - do finer-grained locking as to not lead to deadlocks when insert recurses e.g. when loading tiled maps.
- load_resource_file cna now load archetypes, regions and treasures freely intermingled. archetypes and treasures makes a lot of actual sense, too. (this has not been tested, but unlikely not to work :)
- make archetypes reloadable, pretty please - load archetypes twice at server startup, to stress-test this for the time being
rewrote archetype loader to try harder to cleanly replace archetypes
VERY EXPERIMENTAL - change the way archetypes and treasurelists are being loaded: - referring to a nonexisting treasurelist will create an empty one - referring to a nonexisting archetype will create an empty one - archetypes/treasurelists will overwrite any existing object of the same name. - net effect should be to allow reloading of archetypes and treasurelists at runtime at a later stage.
- rewrote smooth face handling, as a side-effect, smoothing seems to work again and smooth faces can be reloaded. - the server now sends the full animation for an object the first time it is seen, this uses slightly more bandwidth initially, but avoids the flickering for objects change their face later.
- MAJOR CHANGE - you now need to use cfutil to install arches. - former bigfaces are broken in the server - bigfaces are no longer supported. at all. - use face numbers instead of pointers * saves lotsa space * saves lotsa indirections * saves lots(?) cpu cycles - completely rewrote face handling - faces can now be added at runtime - reload will add new faces - this does not apply to animations - use a hastable instead of binary search (faster) for faces - face caching is broken - facesets are gone - server always reports MAX_FACES to any client who asks
nano-cleanups
- set map before parsing an object, add_button_link requires this completely bogus idiotic design bug. - document speed hack by elmex :)
- identified random memory corrutpion bug - fixed most likely cause for bug above - rewrote object loader etc. into a simple one-line lookahead parser. - rewrote/cleaned up archetype, treasure, artifact, formula parser. - some optimisations / cleanups
hell on earth, rewrote the container code - it really was a mess before - open/close events should now be very reliable. - make container an object_ptr, just to be on the safe side (the old code is known to crash, the new code should be reliable, but...). - its also smaller, much smaller/clearer in sourcecode size and a bit smaller in text segment size. also disable big worldmap again: is this still causing memleaks?
interim check-in for server upgrade
more materialcode changes in preparation for... oh my god this is material framework is broken
rework material code in preparation for nuking object->materials, also add some useful object methods in preparation of the mapspace limiting
replace amny strcpy by checked assign's
- remove google sparsehash dependency again, its actually slower than gcc's current std::tr1::unordered_hash. - remove hardcoded archtable code - the archetypes table is now no longer limited by an hardcoded constant but can grow dynamically at runtime. - removed some cruft
- implement per-space regions
- weirdify refcounting: objects still keep their natural refcount of zero do not borrow anymore, seems the right thing to do *right now*
- avoid negative event priorities like the plague. they are actually worse because they introduce random memory corruption and endless loops and worse, if worse exists. - aggressively swap out maps when #actives exceeds threshold - sweep and cede after server tick - increase player command handling priorities, just in case. - fix a bug in mortal checking, this was the reason for the enourmous memory leaks in map-world.ext - mark c++-side watchers as non-reentrant
- move util/world.png to server/lib/ (should go to maps/world.png, but I will not fiddle around with that now) - compile worldmap to world.pst and install it. - rename FLAG_NO_SAVE to FLAG_NO_MAP_SAVE - define FABS to fabs, as intended - fix all(?) the FABS(int) calls
- rename Animations => animation - rename New_Face => facetile - add but do not implement some generic loader framework classes
- fix a horrendous bug that might have caused all the map corruption - optimise/modernise some map-insert-related stuff - fix debug_desc - remove crypt configury - minor adjustments/cleanups
minor stuff
*** empty log message ***
implement new flag_no_save to avoid saving
- added $cf::WAIT_FOR_TICK* - tuned map-scheduler and player-scheduler - added $op->inv_recursive - added objects_size/objects($index) and actives_size/actives($index) for access to the object and actives vector. - more robust player loader - removed _perl_data attribute support - SIGINT/TERM/HUP are now safe as they are handled synchronously. - replaced LOOK_OBJ by client_visible - cleanups
- disabled stuff that might cause instabilities at the cost of certain (controlled) additional memory usage. - minor changes to improve the stability,
quick and dirty emergency fix
""
added some copyrights
- new untested set_flag_inv method to change a flag on all inv objects - do ot satop running when switching maps - fixed speed_left assymentry in handle_newcs_player - do not immediately handle running commands when calling handle_command, as it could have deactivated the object.
many minor changes everywhere, random maps crash sometimes but design is in place
different interface design for c++/perl map handling, some random map framework
*** empty log message ***
*** empty log message ***
fixed the problem where objects with speed=0 were on the active object list. extended debug_desc a bit. implemented object::has_active_speed ().
preliminary snapshot check-in, DO NOT USE IN PRODUCTION SYSTEMS See the Changes file for details
misc stuff
- added maptile->insert and object->insert_at methods that might make code using it clearer. - replaced some insert_ob_in_map calls.
replace update_ob_speed by ->set_speed
formatting
- small, but subtle, rewrite of object management - perl will now keep attachable objects alive - objects are now refcounted - refcouts need to be tested explicitly (refcnt_chk) - explicit destroy is required current - explicit destroy asks "nicely" for the object to self destruct, if possible - refcounts will be used during mortal killing - minor bugfixes, optimisations etc. - some former hacks removed.
- implement (mostly untested) array member support for genacc - make some arrays and other members available to perl - redefined meaning of NUM_FLAGS (really meaning number of flags now, as the code assumed anyway). - moved afk flag to client, where it belongs (make sno sense to save it, is also true for wiz &c). - updated extensions to reflect all that (Jewler.pm should be tested w.r.t. resistances)
- rename flags => flag (because its rpedominantly used singular), - remove remaining use of the flags array semantics
remove object_pod/object_keep hacks
- improved login code - removed some cruft code and (finally), the player_pod hack
fixed the building bug that broke walls after building. a hacky method for flags copying was used and is now replaced with the proper one.
- preliminary check in, stuff is rudimentarily working - moved most of the player creation process into a perl coroutine - changed internal design of player management to not reuse and morph the object in funny ways. should be safer and much nicer to handle. - got rid of some annoying hacks, such as clear() (TODO: get rid of player_pod and other stuff now unnecessary?)
- reduce map memory consumption by reserving space for only the 3 existing layers - factorise out some functions into mapspace and object
- minor cleanups - minor optimisations (in_player vs. is_player_inv) - added P_PLAYER map flag - some (dead) concept code
goofing around in vain, trying to find a generalisation for esrv*item
fixed a bug with has_random_items which caused that most (or mostly all?) treasures weren't generated.
ooification
- remove recycle_tmp_maps setting (hardwired to true) - replace object->flags by std::bitset, seems to be way more efficient, for some unexplainable and not looked-into reason. its way cleaner, too...
I goofed.
more slight copyright adjustments
started simplifying network code
oopsie
further cleanups and oofication
added a needed abstraction
- more ooficiation - removed now superfluous remove calls
replace some function- by method-calls
- implement and modernize op->insert and op->remove - simplify find_hth_skill to always use first found - change change_skill to move recently used skills to top of inventory
*** empty log message ***
added uuid accessors for perl.
* remove arch.h * use refcounting for archetypes * cleanup * strat of generic garbage collector
more now invalid tag_t uses replaced by refcounting. reduced codesize quite a bit.
* nuke op->contr when players log out, to avoid dereferencing them later :( * also rename free to destroy * do not create weird messages when people examine pseudo inventory objects
add mapcell flags support and define #0 to be has_dialogue
mapstruct => maptile removed many ytypedefs in favor of structure tags
replace was_destroyed by much simpler and less expensive ->destroyed, which is valid, as objetc pointers are now reliable.
cleanup
presuppose iso c++0x
removed now obsolete generation counter checks - further slimmed down sizeof(objetc) to 616 bytes
aggressively use refcounted pointers for object references - seems to fix all random stomping. also reduced size of object further from originally 656 to 624 bytes
preliminary uuid support
- improve assign to prepend "..." - make more use of assign - implement op->debug_desc() and make some more use of it
- introduce shstr_cmp for mass comparisons to shstr and make use of it - introduce assign utility function to replace strncpy
*** empty log message ***
convert to more stable depth-firts iterator
- temporarily disabled shstr garbage collection - use sint64 instead of uint64 in shop code - implement fully recursive item iterator for object - add some utility functions
implement owner pointer using refcounted refptr templates
indent
optimise sizeof(object), well, shaved of 16 bytes of 656
remaining bugfixes
likely fix another crash bug
fix a few ugly pod-constructs on non-pod objects, and a few newly introduced bugs
genaccess, take two
archt => archetype
generic accessors, take one
major map loading speedups
Changes... - alternative shstr representation, saves code - use glibs splice memory allocator (seems slower) - use simpler memory/lifetime management for objects, no recycling
string scanning (e.g. for patch) is not implemented ATM but should be easy to add with an alternative constructor for object_thawer. Rewrote flex scanner to be simpler, faster and more modularised. Initial speedup: 16% (ah well)
removed ox/oy, and then added shstr stuff to the recipes in alchemy
THIS CODE WILL NOT COMPILE use the STABLE tag instead. - major changes in object lifetime and memory management - replaced manual refcounting by shstr class - removed quest system - many optimisations - major changes
rewrote object serialiser, parser is next
*** empty log message ***
expand initial tabs to spaces
- added ready/unready/can_apply events and their passive versions - removed support for event_*-fields in maps - removed support for current_weapon_script - removed timers - removed say/shout/Tell and related commands
disable old-style plug-ins, implement attach-field for map headers and map attachments
fixes, objects on maps get instantiated properly
first, untested persistent objetc storage for players and objects, not yte for maps
intermediate check-in, per-object events work
many, many cleanups
converted more events, broken per-object events (needs map support), lots of fixes
Made server compile with C++. Removed cfanim plugin and crossedit. C++ here we come.
UPSTREAM_2006-02-22 merge
*** empty log message ***
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.