I'm currently working on moving all of the vars in mob_defines.dm and some procs in mob.dm into more fitting places. For example, ghosts and simple animals can not be cloned, so they do not need a cloneloss var. Cloneloss would be better fitting to /mob/living or even /mob/living/carbon.
By moving these defines into proper children of /mob we lower the amount of resources that must be set aside every time a mob is created and we lower the amount of data that gets transfered between mobs when we combine, transfer or transform them. In theory, this should help free up some resources and combat lag.
Due to how integrated some of these defines are in the rest of the code, I'm going to be committing this cleanup in small batches. Doing it this way instead of one massive commit means that bugs will be easier to locate and identify. It is also less likely to overwhelm players with bugs, and if it still does, it will make it easier for us to revert only the section that is causing problems. Smaller commits also means merging with existing code will be less of a nightmare and has less potential for merging mistakes.
One of my goals in this cleanup is to add a description to every single variable in mob defines. While some of them are self explanatory, there are some there that are used in horribly obscure ways on top of having no comment to describe their use.
-----------------------
Mob defines moved to living:
- last_special*
- bruteloss
- oxyloss
- toxloss
- fireloss
- cloneloss
- brainloss
- halloss
- hallucination
- hallucinations(list)
*Note: I believe this variable is not needed, but the code it is used in (the resist verb) is cluttered and messy. That chunk of code probably use a re-write. I'll put it on my TODO list and if I survive mob_defines I'll try to get around to it but if anyone wants to do it for me, that would certainly help!
-----------------------
Mob procs moved to living:
- getBruteLoss()
- adjustBruteLoss()
- getOxyLoss()
- adjustOxyLoss()
- setOxyLoss()
- getToxLoss()
- adjustToxLoss()
- setToxLoss()
- getFireLoss()
- adjustFireLoss()
- getCloneLoss()
- adjustCloneLoss()
- setCloneLoss()
- getHalLoss()
- adjustHalLoss()
- setHalLoss()
- getBrainLoss()
- adjustBrainLoss()
- setBrainLoss
Mob procs moved to carbon:
getDNA()
setDNA()
-----------------------
Mob verbs moved to carbon:
- Sleep
- Lay down / Get up
-----------------------
The : operator...
The thing that has been killing me through this whole cleanup is people using or copy/pasting the : operator everywhere.
*** Please use obj.var_or_procname. Do not use obj:var_or_procname ***
Using obj:procname will not throw a compiler error if obj does not have that specific var or proc. This means that the coder making changes will NOT be informed of an error which will result in a proc failing, potentially being completely unusable and definatly causing a runtime error.
With that said, I fully anticipate that most bugs (if any) caused by this mob define cleanup to be the result of : operators.
I've been replacing many : operators in favour of the . operator as I've been going, most noteably I went out of my way to remove almost every : operator from the 4000+ line Chemistry-Regents.dm
Exceptions:
- Water: Turf and Atmos related vars. I'm not familiar with the members and methods in those class' hierarchy.
- Silicate: because it's commented out and I honestly dont see it returning.
- Thermite: Turf and Atmos related vars.
- Corn Oil: Turf and Atmos related vars.
Final note: While this may be the source of some mob-related bugs, there are two other revisions that have been committed between now and the last time either of the the two tgstation servers have been updated. These revisions both touch mob-related files. I'm not blaming these other revisions for anything, especially since one of them is mine anyway, I'm just listing them here for refrence to help quickly identify any problems.
- My human/life() changes in r3925
- Carn's life() standardizations in r3933
Stuff unrelated to mob defines:
- Fixed borgs and such being able to go into DNA modifiers.
- Changelog updated and I added Sieve to the list of coders.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3934 316c924e-a436-60f5-8080-3fe189b3f50e
Replaced every l_hand = and r_hand = and all that if(hand) crap to use standardised procs. This means we can use procs like Dropped() reliably as they will always be called when things are dropped.
Thorough documentation to come. But generally, if you want a mob's icons to update after deleting something in the inventory...use drop_from_inventory(the_thing_you_wanna_drop) just before deleting it. If you wanna put something in a mob's hands use put_in_hands() (or one of the variants). It'll try putting it in active hand first, then inactive, then the floor. They handle layers, overlays, screenlocs calling various procs such as dropped() etc for you. Easy
mob.equipped() is now mob.get_active_hand() because there was another totally unrelated proc named equipped() and stuff was confusing.
Weakening was made instantaneous.
Minor optimisations for human/handle_regular_status_updates(). I'll port these changes over to the other mobs next. Basically it should stop it constantly incrementing every status effect even after death.
umm... bunch of overlays related fixes... I think that's everything. :/
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3900 316c924e-a436-60f5-8080-3fe189b3f50e
- No longer able to be cultists because their objectives completely contradicts robotic laws. Fixes issue 510.
- No longer able to be revolutionaries.
- - There was existing code for this already, but it should function properly now.
- - It now takes into account admin's borging players.
pAI's can no longer see revolutionaries or cultists.
- pAI's get a brand new mind instead of wiping their previous antag status.
- This way it prevents players exploiting the cult/rev hud icons and it does not affect the end-round scores and statistics.
Piano's 'repeat' has a limit of 10.
- This will stop byond from thinking playsong() is an infinite loop and crashing the server.
- Added a check so that players can not bypass the limit without stopping the song first.
- 10 is just an arbitrary number I chose, feel free to change it but keep it within reason... and byond's limits.
Fixed a bunch of 'emergancy' misspellings.
- Commit log worthy material right here.
Fixed a bunch of 'emergancy' misspellings.
- Commit log worthy material right here.
Changelog updated.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3878 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
update_clothing() has been broken up into it's key parts. A full explanation can be found in code/modules/mob/living/carbon/human/update_icons.dm
the tl;dr of it is that overlay updates are no longer called by the gameticker. Instead they are called by procs such as u_equip db_cick etc. This means faster updates (although admittedly, more of them can be called per tick). This however is offset by the fact that specific overlays can be updated now, vastly improving its efficiency. This will especially help when there are large numbers of dead mobs.
Fixed the throw code for TKgrab so it can be toggled.
Cloaking for aliens/humans/ninjas was changed. It's very crude at the moment and for that I apologise. But it works and is very efficient.It also stops cloaked individuals becomming invincible due to people being unable to hit them (even when they know exactly where they are)
Fixed a bunch of bugs with damage-overlays. They were updating FAR FAR to frequently. They were also horribly inefficient. They should now be virtually seamless when updating and only use cached icons, so they aren't affected by lag as badly. This may help with explosions lag a little.
There's still a tonne of stuff I need to refine with this. I'll be refining it down into some helper procs to reduce on code duplication and such
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3811 316c924e-a436-60f5-8080-3fe189b3f50e
they are banned. Another perk of using IsBanned and not client/New() is that we
now disconnect potential clients before they are given a client object and start
downloading any resources...which is like a 30Mb saving per failed login (after
each server update).
Tidied up the Login and Logout procs for mobs. Moved the sandbox buildmode stuff
to mob/living/login.dm so you shouldn't have to log-out and back in to enable
build mode.
Removed the logged_in variable for mobs as it was the most pointless thing ever.
Made the multikeying checks a separate proc. People are checked the second they
get a new_player mob. Its notices are also less spammy.
Changed AllowUpload from the default. It now restricts uploads of over 1Mb to
prevent admins uploading massive .Oggs and lagging the server to hell whilst it
sends the ogg to 40+ players. Feel free to change the limit.
Moved some of the core client procs into one folder; they should really be
together and not in /modules/mob/mob.dm and various other places. I will be
giving the client stuff a belated spring-clean over the next few commits, just
got to iron out some of the kinks.
Revision: r3694
Author: elly1...@rocketmail.com
traitor expansion, so I'll try to be brief:
- I added in the foundations for traitor factions. See factions.dm for all the
different faction datums. They don't do anything yet.
- I completely ported mob/var/mutations from a bitfield to a generic list.
Mutation enumerated-identifiers are added into this list. For instance, TK = 1,
COLD_RESISTANCE = 2, XRAY = 3, etc... The purpose of this was because bitwise
operations could not actually be used after a certain size (because BYOND is
stuck in the 16bit era).
- I've added in completely-functional nano-augmentations. Check under
implantnanoaug.dm for a list of implants and implaners. As mentioned previously,
they are completely functional but may be slightly OP. Among these nanoaugs are
Super Strength, Psionic Radar, Electric Hands, Energy Blade/Sword Synthesizer,
Rebreather, Dermal Armor, Combat Reflexes, and Regenerative Nanorobots. I won't
go into detail as to what they do, but hopefully they should be self-
explanitory. If not, check out their descriptions in the file previously
mentioned.
- Added in a future traitor item, the Mind Batterer. Along with it a new .ogg
file.
- New telecomms bus mainframe sprite, thanks to WJohnston.
- New holdable shield, sprites courtesy of Muncher (i had to mangle the side
sprites because of a technical little issue. I'll change it back to the original
soon). It can be retracted and expanded. Probably only going to be given to
traitors.
- A couple of minor bugfixes here and there, along with some code tidying.
Hope this isn't too large a commit. I intended it to be MUCH larger, but I've
decided to split up my Traitor Factions expansion into smaller commits.
Revision: r3692
Author: vageyenaman
Anti-spam delay raised to 7 ticks. A little over half a second.
Admins can no longer be banned except by deadminning them or banning through the host's pager.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3722 316c924e-a436-60f5-8080-3fe189b3f50e
Tidied up the Login and Logout procs for mobs. Moved the sandbox buildmode stuff to mob/living/login.dm so you shouldn't have to log-out and back in to enable build mode.
Removed the logged_in variable for mobs as it was the most pointless thing ever.
Made the multikeying checks a separate proc. People are checked the second they get a new_player mob. Its notices are also less spammy.
Changed AllowUpload from the default. It now restricts uploads of over 1Mb to prevent admins uploading massive .Oggs and lagging the server to hell whilst it sends the ogg to 40+ players. Feel free to change the limit.
Moved some of the core client procs into one folder; they should really be together and not in /modules/mob/mob.dm and various other places. I will be giving the client stuff a belated spring-clean over the next few commits, just got to iron out some of the kinks.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3694 316c924e-a436-60f5-8080-3fe189b3f50e
- I added in the foundations for traitor factions. See factions.dm for all the different faction datums. They don't do anything yet.
- I completely ported mob/var/mutations from a bitfield to a generic list. Mutation enumerated-identifiers are added into this list. For instance, TK = 1, COLD_RESISTANCE = 2, XRAY = 3, etc... The purpose of this was because bitwise operations could not actually be used after a certain size (because BYOND is stuck in the 16bit era).
- I've added in completely-functional nano-augmentations. Check under implantnanoaug.dm for a list of implants and implaners. As mentioned previously, they are completely functional but may be slightly OP. Among these nanoaugs are Super Strength, Psionic Radar, Electric Hands, Energy Blade/Sword Synthesizer, Rebreather, Dermal Armor, Combat Reflexes, and Regenerative Nanorobots. I won't go into detail as to what they do, but hopefully they should be self-explanitory. If not, check out their descriptions in the file previously mentioned.
- Added in a future traitor item, the Mind Batterer. Along with it a new .ogg file.
- New telecomms bus mainframe sprite, thanks to WJohnston.
- New holdable shield, sprites courtesy of Muncher (i had to mangle the side sprites because of a technical little issue. I'll change it back to the original soon). It can be retracted and expanded. Probably only going to be given to traitors.
- A couple of minor bugfixes here and there, along with some code tidying.
Hope this isn't too large a commit. I intended it to be MUCH larger, but I've decided to split up my Traitor Factions expansion into smaller commits.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3692 316c924e-a436-60f5-8080-3fe189b3f50e
I've tried to set it as high as possible without it being uncomfortable. But if text-links seem unresponsive just lower TOPIC_SPAM_DELAY. It's currently set to half a second. That means that a client can only click one link every half-second rather than upwards of 10 a second. So about a 80% reduction.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3682 316c924e-a436-60f5-8080-3fe189b3f50e
- Hopefully this will cut down on the server spamming/crashing escapades
happening on other servers. (This wont stop that from happening, this just makes
it less severe)
- Some of the sanitizes were probably unnecessary, but better safe then sorry.
Added MAX_NAME_LEN constant which is initialized to 26.
- Please use MAX_NAME_LEN instead of typing in 26 when cutting inputs short.
26's are annoying when they have to be changed and you have to hunt through over
a hundred files and tens of thousands of lines of code to find them all.
Moved uplink_kits.dm to code/game/objects/storage
Moved uplinks.dm to code/game/objects
- The stuff inside uplinks.dm could really be chopped up and split into separate
dm files but this will do for now.
*********************************************************
**********************Important**************************
*********************************************************
When you create code that asks the user for an input consider whether or not it
gets shown to the user through html or the like.
If it does please sanatize() or strip_html() it. Also use copytext() to cutoff
spam by using MAX_NAME_LEN and MAX_MESSAGE_LEN as the cutoff var.
Revision: r3652
Author: johnsonmt88
- Hopefully this will cut down on the server spamming/crashing escapades happening on other servers. (This wont stop that from happening, this just makes it less severe)
- Some of the sanitizes were probably unnecessary, but better safe then sorry.
Added MAX_NAME_LEN constant which is initialized to 26.
- Please use MAX_NAME_LEN instead of typing in 26 when cutting inputs short. 26's are annoying when they have to be changed and you have to hunt through over a hundred files and tens of thousands of lines of code to find them all.
Moved uplink_kits.dm to code/game/objects/storage
Moved uplinks.dm to code/game/objects
- The stuff inside uplinks.dm could really be chopped up and split into separate dm files but this will do for now.
*********************************************************
**********************Important**************************
*********************************************************
When you create code that asks the user for an input consider whether or not it gets shown to the user through html or the like.
If it does please sanatize() or strip_html() it. Also use copytext() to cutoff spam by using MAX_NAME_LEN and MAX_MESSAGE_LEN as the cutoff var.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3652 316c924e-a436-60f5-8080-3fe189b3f50e
Reverted dismemberment
- This is the majority of the files
Reverted the gun change
- You wont shoot yourself putting your gun away
- You don't have to fire off all of your shots before hitting someone with your gun
Reverted Tarajans
- As requested
Hotfix for the Holodeck.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3574 316c924e-a436-60f5-8080-3fe189b3f50e
There's like 1001 things to fix so some of this is somewhat crude for now.
new helper proc located in procs/helpers.dm
reject_bad_text(var/text)
just feed any text in and it will either return the original text or null (if it
contains odd characters such as \ / < > or characters reserved by BYOND. It also
rejects if there are no non-whitespace characters)
Revision: r3571
Author: elly1...@rocketmail.com
"Unknown" it uses the disfigured variable of a human's head organ to dictate the
human's name variable.
This means real_name is now somewhat back to being a reliable source of the
mob's actual name. It should eliminate a lot of the "cloning as unknown" bugs.
It also means I could simplify that god-awful name updating stuff into a nice
and simple helper proc.
Some original_name stuff was added here and there, mainly during cloning. A lot
of the "getting random ghost names" should be fixed now. Still loads to do
though, particularly with transforms and such. >_>
Fixed a runtime with Tajarans trying to use a variable that doesn't exist for
PDAs. Removed that variable from IDs as it's only used by furries.
Revision: r3546
Author: elly1...@rocketmail.com
There's like 1001 things to fix so some of this is somewhat crude for now.
new helper proc located in procs/helpers.dm
reject_bad_text(var/text)
just feed any text in and it will either return the original text or null (if it contains odd characters such as \ / < > or characters reserved by BYOND. It also rejects if there are no non-whitespace characters)
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3571 316c924e-a436-60f5-8080-3fe189b3f50e
Adds BS12 dismemberment. Not all features of it are implemented yet, but it
should be equal to our previous system.
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)
Revision: r3537
Author: VivianFoxfoot
Screenshot: http://www.kamletos.si/options%20panel.PNG
- Made some changes to admin verbs:
- Rejuvenate verb removed from mobs, is now in the options panel above (heal).
- Drop everything verb moved into view variables, added a confirmation message.
- Mute verb removed from mobs, use the options panel.
- Warn verb removed from mobs, use the options panel.
- Grant full access moved to debug verbs.
- Rejuvanate as a verb also still exists in debug verbs.
These changes were made to make right clicking a mob not show a million unneeded
verbs. They were moved based on the statistics gathered via feedback logging:
http://www.kamletos.si/tgdb/latest_stats.html#adminverbs
Please post any additional feedback on the admin forum.
Renaming mobs by clicking the big name at the top of the view-variables screen
now updates real_name too.
Additionally, if the mob is human, the first ID and PDA found in the mob's
contents which is associated with the original name, will have their details
updated.
Nomore having to edit like, 6 variables everytime somebody names themself
"dicks", "sanic" or "captain" ... etc.
Revision: r3532, r3533
Author: baloh.matevz, elly1...@rocketmail.com