Minds part2 - Carn loses her mind.
The way datum/mind stuff works has been changed a lot. I really can't explain everything. If you have any questions it'd just be easier if you leave a comment or ask me in coderbus.
Generally, minds now represent IC characters rather than following a client around constantly. Minds can change owners, mobs, (names WIP).
Technical babble:
The var/current and var/original variables of the mind datum must always be of type mob/living (or null). Please do not mind.transfer_to(ghost_mob). If you want to ghost somebody use ghostize()! It will do all the technical stuff for you.
mob/dead/observer/var/corpse was removed. mob/dead/observer/var/mind is now used as a reference to the last mind the player had (so respawning code has something to reference), but also because mind.current is a far more useful way of tracking a corpse. If somebody triggers a mind.transfer_to() call on your corpse, your mind will be tranfered to another mob/living or something...that will then be considered your corpse. This could allow for more interesting mind_transfers. For instance, the "raise corpse" rune ghostizes any player in the corpse to be raised and selectes a random dead player to take possesion of their character! The person possesing them will have all of their memories, objectives, etc. The poor guy who was originally the owner cannot re-enter body if there is another player in his body...but if that player is ghosted he can once again return. Exorcisms anybody?
Changes to cloning and hydroponics. I will likely have to rework these later as they're hacky as hell right now.
A lot of stuff is now handled by Login/Logout rather than in hundreds of different places. One such example, mind datums get their variables updated at Login and Logout.
Fixed a few minor bugs. I'll update the issues manually in a bit because I literally cannot think atm.
TL;DR guide:
-If you want to make somebody a ghost use ghostize(). Or you will need to find a doctor to stitch your bits back on. :)
-You don't have to worry about making minds. Simply doing key="carnwennan" or whatever will either: A) make a new mind and initialise it if there isn't one or B) take possession of the mind currently attached to the mob.
-It's safe to transfer a mind even if a key isn't in-body (e.g. they are ghosted/admin-observing etc!) Minds have an active variable which tracks whether they are currently synced with a key. This is to avoid dragging ghosts back into their bodies when say, a wizard mind_transfers them.
-Transferring a mind whilst var/active=1 will cause the following: mob.key = mind.key. So no need to do that separately (in fact you'll lag things if you do, so don't)
-If you do want to initialize a mind manually, say if you don't have a client to login to the mob yet, simply do new_mob.mind_initialize(). Simple! When someody is logged into that mob they will take ownership of the mind and it will sync up.
NOTE: a lot is probably broken since this is a pretty massive change. Please let me know asap (with actual info! Shouting at me, "IT BORKED HALP", doesn't help)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4342 316c924e-a436-60f5-8080-3fe189b3f50e
This part focuses on:
-structuring the way silicon mobs initialise upon login (there was some hideous copypasta in Login() and New() which used spawn() to change the order of the calls so it was all jumbled up. I think I've got it sorted now.
-Borgs var/real_name was not initialising as "Cyborg". Meaning the name checks were kind of borked.
-Ghosts are now deleted at logout if they no longer have a key. This will stop unneeded ghosts being left lying around. It will not delete ghosts with keys assigned (so people can't respawn or anything). Removed all the del(ghost_ref) stuff I could find. Generally movign the key from a ghost should be the last thing you do as the ghost will be deleted by Logout. However I've put it in a spawn() to hopefully avoid coders accisentally using it in a way which causes runtimes.
-Fixed clone-plants spawning dud potato-people left, right and centre. They'll now dump seeds if it fails for whatever reason.
-Cultist and Rev status are removed at mob/living/silicon/Login() rather than having to be called on a special-case basis everywhere. This may not be necessary when this stuff is finished.
-Removed a bunch of :
-Commented mob/living/Login() with the rest of the antag-indicator code from cloning.dm and hydroponics.dm for any coders whom feel brave/suicidal to fix the related issues
Next on the agenda, replacing mob/var/original_name with datum/mind/var/name to fix the ticker runtimes
Then, fixing mind/proc/transfer_to(mob) once and for all. (There are issues with duplicate minds, role updates, inconsistent initialisation etc etc *yawn*
There's probably a few obscure bugs in there somewhere. Might want to hold off on the updates for a bit. Coderbus will likely spot them all by the end of the week.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4322 316c924e-a436-60f5-8080-3fe189b3f50e
-Added in the proper list stuff for changeling stasis
-Added a verb to the debug list (Game Admin+) to check the mob lists instead of requiring the item (Works the same way)
Fixes Issue 708
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4240 316c924e-a436-60f5-8080-3fe189b3f50e
-Almost every instance of 'for(mob in world)' has been killed. Because GODDAMN was it being run a bunch. Instead, a series of global lists have been made, and they are all handled auto-magically through New()'s, Del()'s, Login()'s, death()'s, etc...
Lists are as follows:
-mob_list : Contains all atom/mobs by ref
-player_list : Like mob_list, but only contains mobs with clients attached
-admin_list : Like player_list, but holds all mobs with clients attached and admin status
-living_mob_list : Contains all mobs that ARE alive, regardless of client status
-dead_mob_list : Contains all mobs that are dead, which comes down to corpses and ghosts
-cable_list : A list containing every obj/structure/cable in existence
Note: There is an object (/obj/item/debuglist) that you can use to check the contents of each of the lists except for cables (Since getting a message saying "a cable," x9001 isn't very helpful)
These lists have been tested as much as I could on my own, and have been mostly implemented. There are still places where they could be used, but for now it's important that the core is working. If this all checks out I would really like to implement it into the MC as well, simply so it doesn't check call Life() on every mob by checking for all the ones in world every damn tick.
Just testing locally I was able to notice improvements with certain aspects, like admin verbs being MUCH more responsive (They checked for every mob in the world every time they were clicked), many sources of needless lag were cut out (Like Adminwho and Who checking every single mob when clicked), and due to the cable_list powernet rebuilding is MUCH more efficient, because instead of checking for every cable in the world every time a powernet was broken (read: A cable was deleted), it runs though the pre-made list, and even with a singulo tearing all the way across the station, the powernet load was VERY small compared to pretty much everything else.
If you want to know how any of this works, check global_lists.dm, there I have it rigorously commented, and it should provide an understanding of what's going on.
Mob related in worlds before this commit: 1262
After: 4
I'm helping
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4179 316c924e-a436-60f5-8080-3fe189b3f50e
-Redid icons to be more optimized at compile by setting icon = 'icons/folder/icon.dmi' instead of just icon = 'icon.dmi', meaning that Dream Maker doesn't have to search through every single file for every single .dmi. This shouldn't lead to any errors because of how I went about it, plus the fact that Dream Maker would have freaked out if I screwed something up. Also moved around 2 icons that weren't sorted well.
r4146 compile time: 1 minute, 40 seconds
r4147 compile time: 45 seconds
[VGTG]
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4147 316c924e-a436-60f5-8080-3fe189b3f50e
Added a cooldown to the containment field shocking players
- If a containment field was set up in a small room, it was possible to crash the server by jumping into the field with no way to escape it. This was likely due to the hundreds of spark effects being generated every second, on top of all the other calls it had to make.
Used the existing parent proc to check for proximity, canmove and death on:
- Atmos pumps
- Atmos mixers
- Canisters. (This should finish off issue 397.)
- Crew monitering computer (This one probably didn't need it but it shouldn't change the way it works.)
Added admin checks to:
- datum/mind
- tensioner
If either of these fail an admin check an admin log will be entered into the server logs and a message will be displayed to admins.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3818 316c924e-a436-60f5-8080-3fe189b3f50e
Adds greater changeling code, but doesn't change the genome count yet on it.
Renames registered to registered_name on IDs because bs12 had it and it seemed like a good idea to do last night. For some reason.
Adds an afterattack to mobs that can be used. (In fairness, lots of shit in attack_hand should be in there instead, like stungloves and stuff, to minimize duplicated code)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3537 316c924e-a436-60f5-8080-3fe189b3f50e
Comments out the wish granter after a demonstration by Kor. Still, it could maybe be made into its own game mode, perhaps somewhat related to Ruby mode.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3439 316c924e-a436-60f5-8080-3fe189b3f50e
Adds a listing of the tension required for each mode to have a chance to fire at the bottom of the tensioner controls
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3408 316c924e-a436-60f5-8080-3fe189b3f50e
Changes changling unstun time to 45 from 25
Fix for the datumvars file which had spaces instead of tabs
Adds the starts of a rather robust erping system! In time, we can make SS13 as realistic an ERP simulator as it is an atmos one.
Adds metadata support for clients, mostly to hold ERPing notes. This is included in the savefile.
Adds code support for a parrot in! Just needs a sprite
Bugfix to the 'resist' button, unless I don't understand how it works. I don't see how it could have ever worked before.
Preferences are now attached to a mob
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3386 316c924e-a436-60f5-8080-3fe189b3f50e
Adds another emagged version to the holodeck that has spess carp.
Fixes mobs going temporally bald after leaving the holodeck.
Disables BSA due to abuse.
Windows can only be damaged by weapons that do brute or burn
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3345 316c924e-a436-60f5-8080-3fe189b3f50e
Adds a holodeck to fitness!
Tensioner now respects antagonist preferences (Mmph. More antagonist for me.)
More flailing attempts to fix the tensioner assigning braindead people. (How?)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3341 316c924e-a436-60f5-8080-3fe189b3f50e
Inspecting yourself for organ damage now randomly shows damaged organs if you have halloss
Mining shuttle now shunts people where it wants to be
Shuttles now crush people if they fail to move out of where they want to be with the initial shunt.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3337 316c924e-a436-60f5-8080-3fe189b3f50e
If anyone else wants to add in more things that raise/lower tension, like tracking number of ghosts/amount of damage/whatever, go ahead.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3316 316c924e-a436-60f5-8080-3fe189b3f50e
Readds the ablative vest's reflect chance at a considerably lower percentage
Fixes a bug where ghosts couldn't examine human bodies.
Fixes a bug where tensioner-spawned deathsquads would be braindead.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3314 316c924e-a436-60f5-8080-3fe189b3f50e
Fixes the tensioner occasionally attempting to turn cyborgs into malf AIs.
Adds checks to space ninja during its objective creation.
Fixes that fucking message when you're carrying the disk in outer space
Nuke disk now respawns in all rounds.
Adds the abiity to turn off the tensioner for the entire round.
Pinpointers now show the remaining time until a nuke goes off if it's been armed when examined
Nuclear bombs now have a minimum detonation time of one minute.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3312 316c924e-a436-60f5-8080-3fe189b3f50e
fixes a bug where extra round types that drew on ghosts could prompt the tensioner to fire again right away.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3281 316c924e-a436-60f5-8080-3fe189b3f50e
Adds deathsquad, ninja, and aliens to actually working tensioner options.
Fixes deathsquad radios
Disables the requirement on the deathsquad shuttle for the sent_stike_team var to have been set
Fixes the syndicate shuttle position on the map being a little too short. (It's never been used, has it?)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3276 316c924e-a436-60f5-8080-3fe189b3f50e
Tratior borgs who hack themselves cannot be blown by their AI.
The AI can now open doors with shift+click, bolt them with ctrl+click, and shock them with alt+click
Adds a new wire to doors that controls the time delay before they close. If pulsed, they close like a sliding glass door. If cut, they do not close by themselves.
Borgs who have died, ghosts, and are then blown up will now have their ghosts properly transfered to their dropped MMIs.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3269 316c924e-a436-60f5-8080-3fe189b3f50e
Adding a reporting function, available in the debug menu, which tracks some crude statistics for the current round and attempts to estimate the round's current level of stuff happening (or lack thereof) for more consistent and focused badminnery.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2329 316c924e-a436-60f5-8080-3fe189b3f50e