-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
-Changed the way light fixtures are constructed. You do not need a light to finish it and instead it will just create an empty light fixture, when you perform the final step.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4177 316c924e-a436-60f5-8080-3fe189b3f50e
- This is a very hackish way to do it.. I don't like it, but it'll work for now. apc's could do with some recoding.
Someone seemed to mix up some indentations in cult rune examines. Fixes Issue 680.
- Cultists examining a rune will be able to read the words.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4167 316c924e-a436-60f5-8080-3fe189b3f50e
-Made a 'default' save slot (D), and whenever you connect it automatically selects the default slot to load from, but manually selecting a different slot will allow you to play on that one before it returns to default.
-Added the ability to name your save slots with the '*'. Names can be up to 16 characters and contain letters, numbers, and basic symbols
-The preview icon on the preference screen now takes into account any job you have set on high, and dresses up the icon accordingly. If assistant is set to 'yes', or AI/Cyborg are on high it will put the icon in a grey suit (So you can still customize).
Solves Issue 667 as well
I tested a good bit with other people's saves, so I'm pretty confident it won't bork savefiles. And before anyone asks, the icon blending didn't make any noticeable lag, since icon procs are client-side.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4159 316c924e-a436-60f5-8080-3fe189b3f50e
- Replaced all the .pulling = object instances with start_pulling() and stop_pulling(). Use these from now on.
- Ian and Runtime will now no longer move when being pulled
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4155 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 light flickering
-Ghosts can now make lights flicker a little bit with a minute cooldown. (People voted for it http://www.kamletos.si/tgdb/ingamepolls.php)
-PDAs are sorted correctly on the Message Monitor
-Added some light flickering to the following events: High levels of radiation, Grey Tide virus.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4143 316c924e-a436-60f5-8080-3fe189b3f50e
-Fixed a bug where if an Alien manages to pickup an item that they shouldn't and put it in their pocket then it won't be stuck remain stuck, being unable to pickup the item you placed in your pocket. It will now instead just drop it if it detects the item in your contents.
-APC will auto-turn on equipment if there is enough power for a certain duration. I want to tweak this some more until I get the perfect balance.
-Updated the changelog
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4141 316c924e-a436-60f5-8080-3fe189b3f50e
-Increased the amount of lights you get from adding glass to the Light Replacer.
-Emagging the light replacer is one way.
-You can add lights to the light replacer to add uses.
-You can unload the trash bag by clicking on it.
-Vodka now heals toxin damage.
-Made light tubes the same price as light bulbs.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4114 316c924e-a436-60f5-8080-3fe189b3f50e
ABOUT THE DEVICE
This is a device supposedly to be used by Janitors and Janitor Cyborgs which will
allow them to easily replace lights. This was mostly designed for Janitor Cyborgs since
they don't have hands or a way to replace lightbulbs.
HOW IT WORKS
You attack a light fixture with it, if the light fixture is broken it will replace the
light fixture with a working light; the broken light is then placed on the floor for the
user to then pickup with a trash bag. If it's empty then it will just place a light in the fixture.
HOW TO REFILL THE DEVICE
It will need to be manually refilled with glass.
If it's part of a robot module, it will charge when the Robot is inside a Recharge Station.
EMAGGED FEATURES
NOTICE: The Cyborg cannot use the emagged Light Replacer and the light's explosion was nerfed. It cannot create holes in the station anymore.
I'm not sure everyone will react the emag's features so please say what your opinions are of it.
When emagged it will rig every light it replaces, which will explode when the light is on.
This is VERY noticable, even the device's name changes when you emag it so if anyone
examines you when you're holding it in your hand, you will be discovered.
It will also be very obvious who is setting all these lights off, since only Janitor Borgs and Janitors have easy
access to them, and only one of them can emag their device.
The explosion cannot insta-kill anyone with 30% or more health.
-Changed the broken bottle item icon to "broken_beer"
-Made the flavour text, for hitting yourself on the haad with a bottle, better.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4108 316c924e-a436-60f5-8080-3fe189b3f50e
-Fixed an unlisted issue involving RD consoles. Now you can use a screwdriver to change the access protocols on the board itself, to be either a core console or robotics one
-Fixed Issue 546, the part of the AIize() that cleared the music was a part of human code, but at round-start it is 'new_player' that is AIized. Moved that part to mob/AIize()
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4014 316c924e-a436-60f5-8080-3fe189b3f50e
Simple animals can now smash lights.
Simple animals use their attack value vs grilles now, I'm not sure why they didn't before. This means juggernauts should smash them quickly, and artificers much more slowly.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3964 316c924e-a436-60f5-8080-3fe189b3f50e
Created a quick variable to let projectiles automatically illuminate.
Implemented some of Ausops' sprites.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3944 316c924e-a436-60f5-8080-3fe189b3f50e
Set the solar control computers to 'off' by default since you have to set them off then back on again to get them working properly anyway.
Fixed a typo in glass/attackby() causing lit-glass tiles to not be created. Fixes issue 593
Moved certain procs in human/life.dm() into an if(stat != DEAD). This means that certain procs will update only if the mob is alive.
Affected procs:
- handle_virus_updates()
- handle_changeling()
- handle_mutations_and_radiation()
- handle_chemicals_in_body()
- handle_disabilities()
- handle_random_events()
- update_canmove()
- - If dead, it forces mob.canmove to 0, meaning you don't get to be the walking dead.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3925 316c924e-a436-60f5-8080-3fe189b3f50e
Added some WIP master controller alternatives. Located in code/WorkInProgress/carn They should stop the MC doubling up and smooth the lagspikes over a little bit (depending on how they are set up). They need a bit of work still, but are functional. Just untick code/game/master_controller.dm and tick the version you want to try out.
Committing Giacom's pai remote-signaller code.
Minor map fix for Travis (extra grille NE corner of atmos)
Added a debug tool that prints powernets into a text-based map.
Fixed a runtime that occurred everytime somebody cut a laid cable. It was updating the power networks twice each time >_>
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3920 316c924e-a436-60f5-8080-3fe189b3f50e
Added a null check to cleanbots and new player preferences.
Did a bit of blob and antimatter work.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3919 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
unfortunately they currently cannot be created either. Not present anywhere on
the map yet.
- Fixed a bug with masks, which did not follow the equipment rules of the
SLOT_MASK flag.
- Fixed a problem where monkeys could not equip a backpack.
Revision: r3774
Author: baloh.matevz
TG: - Added the heavy cable sprites, sprited by Thunder11.
Revision: r3775
Author: baloh.matevz
coils. Takes 15 lengths to make, applied the same way as handcuffs, they have
the same effects as handcuffs, but only take 30s to remove if you resist. They
can also be removed by using wirecutters on a handcuffed mob.
- Added 4 new cable colors. Pink (ported from Bay12), orange, cyan and white.
- Engineer tool belts can now also spawn with orange wire, in addition to yellow
and red.
- Tool closets and electrical toolboxes can now spawn with cables in any of the
8 colors.
- Added cablecuff.ogg from bay12, played when you apply cable cuffs on someone
- Added this stuff to the changelog
So yeah, some stuff is credited to bay12, tho some of it was nearly enough
completely recoded.
Screenshots:
http://www.kamletos.si/wire%20colors.pnghttp://www.kamletos.si/cuff%20restraints.png
Revision: r3770
Author: baloh.matevz
created every single time 'say :X' is used
- You can no longer whisper when stung by a changeling or had another thing make
your 'silent' var get set.
- Added a single empty toolbelt to robotics, added a wrench and screwdriver to
toxins.
- Power cells now always spawn full. The double use of the 'charge' variable was
not good, as when creating the map it had a value of 0 - 100 to represent the
percentage of the cell's power, while it was used as a numeric representation of
the amper-hours that were still left in the cell. The problem this caused was
that cells created mid-round (cells which spawned in closets or were spawned by
admins) always started empty. They all start fully charged now. Additional
obj/item/weapon/cell/X/empty types were added if we want empty cells.
Revision: r3763
Author: baloh.matevz
power_change() now defaults to using the machines power_channel
Moved the remaining machinery power defines into the proper files
Added code for a basic Antimatter Engine.
It is currently made up of a control unit and several shield objects.
The shield objects must have a patch through other shield objects or be directly touching the control unit. If they are unable to find one they will be del’d.
The control unit needs to be given an antimatter containment jar for fuel before it will properly startup.
A core is created when a shield object detects it has shields/control unit surrounding it.
You can safely inject double the number of cores worth of fuel.
Getting blown up, getting hit by the blob, getting hit with high force items, getting shot, being fed too much fuel will all end up lowering the stability of the reactor parts and once the stability gets to 0 it will either break or, if currently processing some fuel, explode.
I’ve tested the parts several times and nothing seemed to go wrong, the sprites suck but that is to be expected.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3881 316c924e-a436-60f5-8080-3fe189b3f50e