Renaming Make Sound to Object Say.
Switching deaf_message in audible_message proc to last argument.
Replacing some "for(mob in hearers)+show_message" with audible_message()
RESULTS:
sorting 10 random lists of length 3 to 303 in increments of 3
(Meh, I forgot to refresh this one, there were only 338 trials rather than 1010, can't be bothered to recode the test)
Profile results (total time)
Proc Name Self CPU Total CPU Real Time Calls
------------------------------------------------- --------- --------- --------- ---------
/proc/sortList 0.672 16.141 16.243 171226 <--TG's current mergesort(recursive, hence the higher number of calls)
/proc/sortTim 0.008 3.278 3.274 338 <--TimSort
/proc/sortMerge 0.011 2.839 2.855 338 <--new mergesort
/proc/sortInsert 0.010 2.124 2.103 338 <--binary insertion
Sorting 10 presorted lists with 3 inversions (3 elements shuffled up), Lists of length 3 to 303 (increments of 3)
Profile results (total time)
Proc Name Self CPU Total CPU Real Time Calls
------------------------------------------------- --------- --------- --------- ---------
/proc/sortList 1.290 23.056 23.254 308050 <--rather cataclysmic
/proc/sortMerge 0.015 4.077 4.068 1010 <--
/proc/sortInsert 2.639 3.472 3.464 1010 <--
/proc/sortTim 0.014 1.567 1.576 1010 <--TimSort is faaar more effective in these cases,
Timsort can exploit runs effectively
sorting 10 presorted lists which have been reversed
Profile results (total time)
Proc Name Self CPU Total CPU Real Time Calls
------------------------------------------------- --------- --------- --------- ---------
/proc/sortList 1.234 23.193 23.295 308050
/proc/sortMerge 0.023 4.681 4.686 1010
/proc/sortInsert 2.875 3.750 3.765 1010
/proc/sortTim 0.020 3.294 3.284 1010 //This can be lower by using a different comparison method
*Corrected: /proc/sortTim 0.017 0.665 0.663 1010 //Using a non-strictly ascending comparison
sorting 10 presorted lists
Profile results (total time)
Proc Name Self CPU Total CPU Real Time Calls
------------------------------------------------- --------- --------- --------- ---------
/proc/sortList 1.199 21.391 21.517 308050
/proc/sortMerge 0.018 3.724 3.729 1010
/proc/sortInsert 2.497 3.302 3.309 1010
/proc/sortTim 0.024 0.586 0.584 1010
Summary, all the new procs are faster than the old ones. TimSort is ever so slightly slower than Insertion and Merging on random lists. But on lists with natural runs (partially sorted data) it is far faster than all others.
The old merge sort was removed and replaced with timSort. Other algorithms are provided as alternatives.
All algorithms use a central datum, so accept many of the same parameters. For instance, setting associative=1 will make them sort associative lists by their associated values, rather than keys.
They also accept a cmp argument. This allows sorting of lists of datums, text, numbers or whatever. The pre-existing helpers in lists.dm were rewritten as examples.
Cyborg and AI canUseTopic() procs will now include a BE_CLOSE variable, just in the case of having to be near the atom.
Added a BE_CLOSE and NO_DEXTERY define, they are both 1.
Third argument for canUseTopic(), dextery check, if a monkey or alien or whatever can perform the action.
Lube will now make you spin while you're slipping.
Water will make you slip on the spot and won't move you forward.
Fixed the bug of wrong mob directions when buckling them while they are lying down.
Conflicts:
code/modules/mob/living/carbon/monkey/monkey.dm - I don't know why it thought there was a conflict. Opening it in tortoisemerge showed no conflicts and automatically cleared the status. I reset to the repo's version just to be safe, then re-added my freakin 2 line function which has caused 2-3 "conflicts" so far.
Ranged weapons and laser eyes have a cooldown of 0.4.
Grilles, windows, windoors, walls and blobs have a cooldown of 0.8.
Hitting mobs will also have a cooldown of 0.8.
Removes the unused USEDELAY flag.
The garbage controller no longer bothers nulling out every variable on destroyed objects.
An object can opt to not be collected by returning true from Destroy(). Useful for pools or other edge cases.
Fixed boxes not being collected, along with a couple other things.
Turfs will not be monitored for collection.
generate_ion_law() is no longer a /datum proc, and I am an admin in the repo. Deal with it.
1 cultist
Requires 4 plasteel to convert to a shell
Boring coder stuff: Wrote a proc called mob/proc/sac_act - pretty simple thing that gets called in the sacrifice rune instead of it being a huge unwieldy wall of text full of conditionals
Exciting future of the game stuff: This will allow me to enable all mobs to be sacrificed.
¬TO-DO: Move current sacrifice code into relevent sac_act procs for humans, monkeys, aliums
¬TO-DO: Write sac_acts for the other mob types
-¬DONE: Corgis
--¬TO-DO: Make corgi sacrifice !!FUN!!
Hopefully nothing went wrong but you never know.
Conflicts:
code/FEA/FEA_fire.dm
code/controllers/supply_shuttle.dm
code/game/gamemodes/changeling/changeling_powers.dm
code/game/machinery/autolathe.dm
code/game/machinery/drying_rack.dm
code/modules/hydroponics/hydroponics.dm
code/modules/projectiles/projectile/magic.dm
code/modules/reagents/Chemistry-Recipes.dm
code/modules/reagents/reagent_dispenser.dm
- Functionality should be unchanged
- Admins can varedit chemical costs of individual abilities.
- Allows coders to implement sting upgrades more easily.
Works pretty well. If it can't GC something, it'll just del() it and be done.
Speed is amazing, holy shit.
New procs you should be aware of:
qdel(atom/movable) - sets up an object for garbage collection. Call this rather than del(atom/movable).
atom/movable/Destroy() - called right before the object is GC'd, so it still has a loc. Also called if the object is del()'d.
new controller - garbage.dm has all the details on this. Basically it nulls all references on GC'd objects and force del() them if necessary.
Generally speaking, objects should use Destroy() for behavior prior to deletion rather than Del(). You should also always call the parent so the object gets the right gc_destroyed var set.
ISSUES:
Tries to GC mobs atm. This actually works for new players, not so much for humans/monkies/simple_animals/anything. I'm guessing it needs to clear out their mind and HUD and maybe other things.
Gibbing is really bugged. It works, but the overlays just sit there for awhile and ugh. I'm very tempted just to del() mob/living and mob/camera and call it a day.
qdel() equipment doesn't unequip the item.
Pipes don't generally GC correctly. Debugging suggests they get referenced in many pipenets and that isn't cleared properly. However some do work fine. Need assistance here.
Bots don't GC, probably in the radio controller.
Lots of other shit doesn't GC but it's hard to find them because of the pipe spam.
I think I'm calling Destroy() twice by accident.