Sprites by Ausop, which he posted in his sprite thread.
The gravity generator is very sturdy, as it is almost indestructible, but explosions can break it and it will need repairs.
Changed C4 to stop del()'ing and instead will only use ex_act().
Added an interact_offline variable for machines that will allow you to interact with them even if they are depowered. The gravity generator only uses this at the moment.
Removed the stun that people get when gravity changes.
Shuttles have gravity still.
Added a gravity generator room to the west of Engineering. It is very secure, with a foyer and requiring CE or Captain access. There are instructions on the table for repairing and enabling/disabling the machine.
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.
Explosion game log now has epicenter coords
Powersink placement and explosion notifications
C4 notifications and logs
Logging singulo munchies and death
All SMES interactions now logged, because any of them can mess stuff up
Telesci logs what was teleported
*TABLEPASS was already totally obsolete.
FPRINT was used, but it was on virtually everything anyway.
Removes those flags from every instance where they were used. Also assigned and removed other flags where it made sense.
If it is desired, I can revive the flag as NOFPRINT, which would retain the original functionality, though inverted. That way it would be be used only where it was intentional (holodeck items could use this for example).
All the logging i have found in the code was changed to use the
proc(maybe i missed something)
Killed all runtimes found so far
Proc now handles all the checks, no need to add checks in the body of
object
Adjusts the click code to not use client/Click(). The code is largely unchanged, except that it allows the compiler default behaviour of calling atom/Click(), and then forwards the call to mob/ClickOn(). I had some reports that melee combat mixed with movement was behaving oddly, and I believe it may be due to the use of client/Click; the byond documentation says that redefining client/Click() causes additional overhead, and it isn't strictly necessary.
Alters the way double clicks are handled, in an attempt to better handle clickspam, as often occurs during pitched combat. This may also be responsible for the above, but I don't know.
Inserts proximity (aka flag) checks in all afterattack() procs. The old assumption was that unless an item used the USEDELAY flag, afterattack() was only called when adjacent, but this is no longer true. This led to beakers, soap, crayons, etc, all being usable at all ranges.
Removes the NODELAY flag, which was unused. Removes all existing uses of the USEDELAY flag so that it can be readded to things that need extra delay.
Removes the hand_* procs, previously used by restrained actions. Instead, the mob helper mob/RestrainedClickOn() has abosrbed basically all the functionality they were used for, which is really only monkeys with jungle fever.
Adds a special case of the Adjacency() proc for doors. This fixes#136, airlocks being unreachable due to border fire doors. However, this only takes us back to the unpleasant position where you have to open-hand the door, switch to a crowbar, and pry open the firedoor; it still needs a better fix.
Fixes#646, #579, #863
Completely redoes the click code. Moves all click related code into code/_onclick for reference. Also moves hud datum code and all the screen object code I could find into code/_onclick/hud, as it is related. Item attack(), attackby(), afterattack(), and attack_self() have been moved into item_attack.dm for consistency.
Completely removes dummy objects and adds atom.Adjacent(user). This proc checks for border items and anything marked with throwpass for determining whether or not you can reach a given square. A turf helper, ClickCross(), was added to facilitate this.
Removes the monolithic Atom.Click() proc in favor of an overridable click handler attached to mobs. Click code no longer uses the : path operator as a consequence, and mob/lastDblClick has been moved to Client/next_click. A few end arounds were necessary (screen objects, buildmode, and spells), but this has been handled by repurposing Atom.Click(); if you have special click code, insert it in the object's Click() function and return 1 to prevent normal processing.
This update adds support for attack_ghost(); the previous "new" click handler had support for it but was never finished. I have taken the liberty of letting ghosts click portals, the gateway, and the teleporter to jump to the intended target square, and kept the previous default action of examine()ing every damn thing you click. It is to be suggested that you could do more with this proc when ghost interactions are enabled.
This update also adds support for double clicking. It is currently only used for ghosts and AIs, because the original (first) click still registers normally. For both of these, double clicking a square will jump you to it, and double clicking a mob will follow it. In the case of ghosts, double clicking bots and the singularity will also set you following it; if you double click your own corpse, you will re-enter it; this also works if your body is in a closet, sleeper, DNA scanner, etc. Default mobs ignore double clicks as normal.
-- NOTE --
There are two flags which were previously unused or misused by click code: USEDELAY and NODELAY. Ostensibly, USEDELAY would double the normal 1sec delay, and NODELAY would remove it.
Using either of these flags as intended would significantly affect the timing of the game. In particular, USEDELAY is currently applied to guns and about everything else that acts at range. I am adding USEDELAY as a half-second increase for now, but I have not put a significant amount of thought into it. I considered lowering the normal 1sec delay to .8sec to balance it, but the consequences of that on combat involve more calculations than I care to make.
NODELAY seems to never have been used, and I did not implement it, but I could do so trivially.
Syndicate bombs are now structures rather than items. This means they cannot be hidden in lockers and disposals anymore. They also can no longer be used as grenades by crafty traitors.
They now audibly beep as their timer counts down, which is a visible display that can be seen when examined.
*Added isliving and in_range checks to settings() so you couldn't open the dialog boxes, run across the station, then prime the bomb from there
*Default timer setting has been raised to 60 seconds, minimum timer setting has been raised to 30 seconds
The minibomb is based on grenade code with a blast radius of 1,2,4 and is found in syndieminibomb.dm. This is the same power as the default tank transfer bombs spawned on the syndicate shuttle.
It features new sprites by teh_wolf and existing inhands (the default grenade) and is a tiny item.
As a result of introducing an explosive grenade, grenade priming are now logged.
Its crystal cost has tentatively been set at 3.
---
The Syndicate Bomb is all new code contained in explosives.dm with additional wires code at syndicatebomb.dm. It does not make use of any tank transfer valve or grenade code.
The bomb has a blast radius of 2,5,11. This is the same power as the tank transfer bombs in the syndicate shuttle if they are boosted with oxygen.
It features new sprites by teh_wolf and existing inhands (currently using “electronic”) and is a bulky item.
The bomb is set by touching it in your hand or touching it on the ground if it has been wrenched down, allowing first to set a timer (min 10 seconds) and then giving an option to start the countdown. When the bomb is activated it states so to everyone within sight of it, giving a time to detonation in the process.
The bomb can optionally be wrenched to solid ground to foil would be spacers. When the bomb is set to countdown the bolts lock in, and cannot be removed by wrench alone.
The bomb includes a robust wires system for pulse pounding defusal attempts. Once a bomb starts ticking using the wires is the only way to stop it (it is not immune to del of course, but is unacidable).
The wires are as follows:
*Boom: Will detonate the bomb if cut/pulsed while the bomb is live, but will defuse the bomb on cut when it's not timing. Mending this wire is the only way to make a defused bomb potent again.
*Unbolt: If the bomb has been locked to the floor cutting this will free it. Pulsing will hint at its function
*Delay: Adds time (+10) to the timer when pulsed (it does not matter if the bomb is live or not). No function on cut.
*Proceed: Lowers the time when pulsed. If the timer is above 60 it will set it to 60, if it’s between 60 and 21 it will reduce the timer by 10, if it’s between 20 and 11 it will set the timer to 10. This will detonate the bomb when cut if it's timing. Note that this makes randomly cutting more dangerous than pulsing as there’s twice the number of wires that will explode.
*Activate: This will activate the timer if pulsed when the bomb is not timing, or will stop and defuse the bomb if it's cut while it IS timing. Pulsing it on an active bomb will hint at its function and add a little time (+5).
All syndicate bomb primings are logged.
Its crystal cost has tentatively been set at 5.
---
Misc
The “screwed” traitor uplink kit has had its tank transfer bombs replaced with one of each of these two bombs.
-Turns out there was already a Gaussian PRNG proc already, used by mechs and turrets. I've replaced it with my one as mine has almost half the cost. (currently broken! still waiting for fixes to be pulled!)
-replaced between(min, val, max) with Clamp(val, min, max)
-get_turf(thing) now uses var/list/locs to locate its turf, rather than iterating up through loc of its loc of its loc...etc
-sign(num) moved to maths.dm
-InRange(val, min, max) replaced with IsInRange(val, min, max) (they were identical)
-Removed ismultitool() iswrench() iscoil() iswire() iswelder() iscrowbar() etc
-removed modulus(num) as abs() performs the same task! *roll-eyes*
-removed get_mob_with_client_list() as it is no longer needed (we have var/list/player_list now)
-removed get_turf_or_move() as it simply called get_turf
-removed get_turf_loc() as it was identical to get_turf()
*Additions:*
-The "Declare Ready" link in the lobby will automatically become "Join Game" if the round starts before you declare ready, so you don't have to click it twice
- Fixed a bug with C4 not causing an explosion around a target, which is a mob.
- Fixed not being able to put para/sleepy pens on your ear.
- Added a delete proc for reagents (the container) which will garbage collect it.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5772 316c924e-a436-60f5-8080-3fe189b3f50e
- Gave the c4 a little bit more power.
- Added a new icon for the staff of animation. Created by Teh Wolf.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5698 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
- 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
Changed the armoury layout a bit, Sec got two more riot suits, and lost two empty lockboxes.
Changed the medical room in Sec to an interrogation room! Credit to Smoke Carter for the design.
As a result, Mr Fixit has been powered off and returned to the armoury. Deploying him every round is likely to be a good idea.
Feedback is always welcome, especially from Sec Officers.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2462 316c924e-a436-60f5-8080-3fe189b3f50e
Admin changes:
Admin attack logs now have a timestamps. Basically, before each log entry there is something that displays [hour:minute:second]. I plan on expanding this functionality to all kinds of logs, as well as creating a global attack log, but this will do for now.
Gloves:
You can still electrify any gloves with a power cell, however you have to use wires on non-insulated (yellow) gloves to create a "ghetto-insulation" system. I might make these gloves' stun effects more watered-down than normal insulated gloves, but that will probably be for later on.
Bugfixes:
Fixed some miscellaneous runtime errors, and more importantly, the shotgun. You can dry-pump it by clicking on it, which will eject any used shots or just make that badass "chuck-chick" sound to let everyone know you mean business. Combat shotguns can now shoot twice without the need to pump.
I also possibly fixed the issue with metroids' AI process locking up. Someone's going to have to PM me on the forums to tell me if this worked or not, because I have not been able to reproduce the bug (although I do know where it's happening in the code).
Chemistry:
Alright, so this is where the meat of this update is. In a previous revision (r1905) I mentioned the addition of a new "color" variable. This variable now has a use. When you use a spray cleaner, or a chem sprayer which now is significantly more powerful, the color combination of all the reagents inside the sprayer will be displayed instead of the plain old blue-white color. This will allow for people to easily distinguish reagents and colors, for instance, if you see some chemist running around spraying orange or purple stuff chances are that's acid he's spraying, so you should probably subdue him!
In addition, you will now be able to see beakers (large ones too) fill up visually. The color of the reagents inside the beaker is overlayed on top of the beaker. The colors may be subject to change to make them brighter or more easily identifiable by "category". Currently, most pharmaceuticals have a light pinkish color. Polytrinic acid has a distinct purple color, etc. However, with due time I can picture chemists mixing other, benign-ish reagents with harmful reagents so passerbys think that a chemist is spraying someone with something harmless, but in reality is spraying them with a bunch of PAcid. There are some consequences, for instance, concentrated acid is more powerful than watered-down acid.
Have fun with that.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1922 316c924e-a436-60f5-8080-3fe189b3f50e
Adjusted ninja random event to go with the new mode changes.
Due to inclusion of monkey mode, added back monkey ability to vent crawl. Identical to larva.
Brains can now suicide.
Warden now starts out with a special hat. Welcome to Hat Station 13.
Holograms should no longer be draggable by space wind.
Slight change to pulse rifle so it looks like the older sprite.
Added deathsquad armor to admin equip list.
Added tunnel clown gear to admin equip list.
Fixed minor announcement bug with respawn_character.
PDAs now redirect to Notekeeper when the code is used again with an unlocked uplink.
Added a note for built AIs to adjust camera network. Camera movement doesn't always work right without adjusting the network first.
Ninjas can now hold an extra battery in their hat and suit slots.
C4s now give a message when planted on people and are recorded in the attack log.
Fixed spelling on messaging server.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1735 316c924e-a436-60f5-8080-3fe189b3f50e
Monkeys no longer deathemote when gibbed.
Added a Coder/Host level debug verb that forces the master_controller to run its process() proc. Pressing the button while the master_controller is already process()ing is not advised.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@978 316c924e-a436-60f5-8080-3fe189b3f50e
You can now only plant them on items you are next to
The item has to stay within one tile of you during the entire process
You can no longer plant them on shuttle or unsimulated turfs, as these are apparently not meant to ever be damaged in any way short of a badmin using the Delete verb
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@674 316c924e-a436-60f5-8080-3fe189b3f50e