Commit Graph

88 Commits

Author SHA1 Message Date
phil235
5f835bfc26 Obj damaging system, acid damage, and fire damage refactor (WIP) (#20793)
Please refer to #20867 and #20870 for a easier view of the changes. Those two PRs show all meaningful changes (hopefully) and doesn't show the files changed with just 3 lines changed.

This PR does three things:

    It makes all children of /obj/ use the same damage system.
    Previously to make your new machine/structure be destroyable you needed to give it a var/health, and its own version of many damage related proc such as bullet_act(), take_damage(), attacked_by(), attack_animal(), attack_hulk(), ex_act(), etc... But now, all /obj/ use the same version of those procs at the /obj/ level in code/game/obj_defense.dm. All these obj share the same necessary vars: obj_integrity (health), max_integrity, integrity_failure (optional, below that health level failure happens), and the armor list var which was previously only for items, as well as the resistance_flags bitfield. When you want your new object to be destroyable, you only have to give it a value for those vars and maybe override one proc if you want a special behavior but that's it. This reorganization removes a lot of copypasta (most bullet_act() version for each obj were nearly identical). Two new elements are added to the armor list var: fire and acid armor values.
    How much damage an obj take depends on the armor value for each damage category. But some objects are INDESTRUCTIBLE and simply never take any damage no matter the type.
    The armor categories are:
    -melee(punches, item attacks, xeno/animal/hulk attacks, blob attacks, thrown weapons)
    -bullet
    -laser
    -energy (used by projectiles like ionrifle, taser, and also by EMPs)
    -bio (unused for this, only here because clothes use them when worn)
    -rad (same)
    -bomb (self-explanatory)
    -fire (for fire damage, not for heat damage though)
    -acid
    For machines and structures, when their health reaches zero the object is not just deleted but gets somewhat forcedeconstructed (the proc used is shared with the actual deconstruction system) which can drops things. To not frustrates players most of these objects drop most of the elements necessary to rebuild them (think window dropping shards). Machines drop a machine frame and all components for example (but the frame can then be itself smashed to pieces).
    For clothes, when they are damaged, they get a "damaged" overlay, which can also be seen when worn, similar to the "bloody" overlay.

    It refactors acid. See #20537.
    Some objects are ACID_PROOF and take no damage from acid, while others take varying amounts
    of damage depending on their acid armor value. Some objects are even UNACIDABLE, no acid effect can even land on them. Acid on objects can be washed off using water.

    It changes some aspect of damage from fires.
    All /obj/ can now take fire damage and be flammable, instead of just items. And instead of having just FLAMMABLE objs that become ON_FIRE as soon as some fire touch them (paper), we now have objects that are non flammable but do take damage from fire and become ashes if their health reaches zero (only for items). The damage taken varies depending on the obj's fire armor value and total health. There's also still obj and items that are FIRE_PROOF (although some might still be melted by lava if they're not LAVA_PROOF).
    When a mob is on fire, its clothes now take fire damage and can turn to ashes. Similarly, when a mob takes melee damages, its clothes gets damaged a bit and can turn to shreds. You can repair clothes with cloth that is produceable by botany's biogenerator.

    It also does many minor things:
        Clicking a structure/machine with an item on help intent never results in an attack (so you don't destroy a structure while trying to figure out which tool to use).
        I moved a lot of objects away from /obj/effect, it should only be used for visual effects, decals and stuff, not for things you can hit and destroy.
        I tweaked a bit how clothes shredding from bombs work.
        I made a machine or structure un/anchorable with the wrench, I don't remember which object...
        Since I changed the meaning of the FIRE_PROOF bitflag to actually mean fire immune, I'm buffing the slime extract that you apply on items to make them fire proof. well now they're really 100% fire proof!
        animals with environment_smash = 1 no longer one-hit destroy tables and stuff, we give them a decent obj_damage value so they can destroy most obj relatively fast depending on the animal.
        Probably a million things I forgot.

If you want to know how the damage system works all you need is the three obj vars "obj_integrity", "max_integrity", "integrity_failure", as well as the armor list var and the resistance_flags bitfield, and read the file obj_defense.dm
2016-10-10 11:14:59 +13:00
Joan Lung
b5b4037e2e More istypes replaced with helpers (#20767)
* shouldn't you be merging these by now

* my oh my do we have a lot of these

* a fellow pedantic shit
2016-10-03 13:40:13 +13:00
phil235
6809603669 Changes obj/effect/blob,spider,swarmer,energy_net,spacevines to be ob/structures instead, since you can hit and destroy them.
Adds a large ash and large molten item decal (for future use)
simplifies decal/cleanable/replace_decal() code a bit.
Changes construction() proc to on_construction() for consistency, same for deconstruction().
Made a deconstruct() proc for machinery and computer (also for future use).
2016-09-27 19:58:27 +02:00
Joan Lung
8015693e14 Being in front of the particle accelerator is now actually dangerous 2016-08-26 15:29:54 -04:00
Shadowlight213
7e09f1bc77 Removes SMES power failure.
changes exception system to use critical_machine variable on machines.
Tcomms machines and the AI have their areas exempted.
If the PA is assembled, engineering is exempted.
2016-08-22 19:24:59 -07:00
coiax
c23c4ab5eb Adds macros for common admin messages (#19070) 2016-07-04 14:04:20 +12:00
Remie Richards
b3b60b187b Manual repair of some edge cases. 2016-06-11 23:11:54 +01:00
Remie Richards
fda2c699fc Automatic conversion via Regex 2016-06-11 18:37:48 +01:00
Joan Lung
6fc1d4fde4 Blobs can no longer eat the supermatter (#17205)
* Blobs can no longer eat the supermatter

* phil'd

* phil'd
2016-04-29 20:29:20 +02:00
phil235
0caa59b21a First commit of this big PR
These are the files with just tiny tweaks. Mostly modify an object's attackby so it does "return ..()" instead of "..()".
If there are other things in this commit, the PR's description will explain them.
2016-04-24 20:26:24 +02:00
CosmicScientist
45ac330702 removes computer sprite change, adds mouse_opacity 2016-04-10 01:52:08 +01:00
Menshin
21e2ce4e25 Cleaning of the Particule Accelerator code 2016-03-06 10:23:37 +01:00
Bjorn Neergaard
b2629a56e2 Make wires use defines, put a wire var on /atom, fix tgui ui_host runtimes 2016-01-22 19:25:33 -06:00
Bjorn Neergaard
87b0857b93 Refactor wire datums
Finish wire port and refactor wire datums to use string keys; widen color
range to support more wires and more colors.
2016-01-22 19:22:09 -06:00
kingofkosmos
e75d24a6c9 Changes checks in altclicks from canusetopic to incapacitated. 2015-11-01 11:24:17 +02:00
phil235
c4c447a8dc Fixes hotspot having two New() procs.
Fixes many machines and a few structure not having a cooldown when attacked with an item.
Fixes not being able to eat or be facehugged when wearing riot helmet with visor up.
Fixes not being able to use child of the tool type for craft recipes requiring tools.
Tablecrafting failure message now tells you what caused the failure (missing tool, missing component)
Fixes fuego plasma burrito recipe.
Fixes being able to grab cups from water cooler with telekinesis, putting the cup directly in your hand.
Fixes golem appearing with their old human name for a split second.
Some changes to make code more OOP (take_damage() proc for barricade, shieldgen, etc)
Some tweaks to light tube building code.
2015-10-08 19:50:01 +02:00
Xhuis
5f99b313cc Radiation changes 2015-09-26 13:33:27 -04:00
Razharas
1105a2b820 Merge pull request #11899 from kingofkosmos/altclickrotatepipe
Alt-click to rotate stuff
2015-09-24 01:59:04 +03:00
kingofkosmos
65c516607f Adds altclick rotation + description to doppler array, transit tubes, windoor assembly, infrared emitter, emitter, particle accelerator, disposal tubes. 2015-09-20 18:54:23 +03:00
duncathan
51c09f16bf makes all Destroy()'s return properly 2015-08-31 00:21:01 -06:00
xxalpha
19947d4fa0 Added qdel(wires) to a bunch of objects Destroy proc.
Return ..()
2015-08-27 11:10:58 +01:00
Firecage
4688c2c969 Fixes proc arguments 2015-07-15 23:52:35 +02:00
Jordie0608
a67de221cc JMP replaced with FLW, fixes and adds a bunch of key_name checks in adminlogging 2015-06-14 23:37:35 +10:00
phil235
f643769ef4 Fixes some runtimes with bluespace artillery, handcuffs on simple animals, lobby music start, stunbaton attack, kitchen bowl update_icon, particle accelerator admin log message, and plasmaman spec_life(). 2015-05-23 22:34:04 +02:00
kingofkosmos
1d14471d00 Ellipses to waiting messages. Warning-spanclasses to failing messages with an exclamation mark. 2015-04-24 20:50:50 +03:00
phil235
081bae6740 Fixes broken ui action button for toggling chef apron's sleeves and owl's wings.
Fixes surviving suicide
Fixes suicide damage overlays.
Fixes ninja regen "clothes warm" spam message. (moving rad armor check outside of apply_effect)
Fixes ninja smoke bomb count.
Fixes dead shaved corgi
Fixes lipozine still being in code.
Fixes flattening boxes requiring them to have their window opened.
Fixes armor softening message from disarm attack.
Fixes player being forced to play spiders without choosing.
2015-04-14 13:54:36 +02:00
Remie Richards
5fc7af7fbf attackby() now has an argument containing the parameters of the click that called it. Items placed on tables now center their icon where the user clicked. this is NOT true for racks, since racks look organised in their sprite.
Items reset their pixel_x and pixel_y values on pickup.
2015-02-19 13:02:43 +00:00
tkdrg
79e8ad4142 The singularity/narsie are no longer machines 2014-12-12 19:42:37 -03:00
Razharas
7758a0afed Ok now explosions shall work properly
Changed severity to target, make items not destroy themselves on
severity lower than 1, all that stuff
2014-12-05 23:21:48 +03:00
Razharas
ff456ebaf4 Unwinded most of shit
Meh
2014-11-19 21:36:45 +03:00
Razharas
b071a0167e Made explosions work in a slightly different way
Yep
2014-11-18 16:22:41 +03:00
phil235
128c9222e5 Adding checks for stun, restrained to many object verbs.
Fixing paper and supply manifest description upon examination.
Fixing being able to adjust jumpsuit while restrained.
Fixing one typo.
2014-11-01 19:18:01 +01:00
MrPerson
d0c97aae72 Merge branch 'master' of https://github.com/tgstation/-tg-station into examinate_the_doctor
Conflicts:
	code/ATMOSPHERICS/components/unary/vent_pump.dm
	code/game/gamemodes/cult/ritual.dm
	code/game/gamemodes/nuclear/pinpointer.dm
	code/game/machinery/spaceheater.dm
	code/game/machinery/status_display.dm
	code/game/objects/effects/decals/crayon.dm
	code/game/objects/items/stacks/stack.dm
	code/game/objects/items/weapons/airlock_painter.dm
	code/game/objects/items/weapons/cigs_lighters.dm
	code/game/objects/items/weapons/storage/secure.dm
	code/game/objects/items/weapons/tanks/tank_types.dm
	code/modules/assembly/assembly.dm
	code/modules/assembly/holder.dm
	code/modules/assembly/mousetrap.dm
	code/modules/mob/living/carbon/alien/special/facehugger.dm
	code/modules/mob/living/carbon/slime/examine.dm
	code/modules/power/cable.dm
	code/modules/reagents/grenade_launcher.dm
	code/modules/reagents/reagent_containers/food/drinks.dm
	code/modules/reagents/reagent_containers/food/snacks.dm
	code/modules/reagents/reagent_containers/glass.dm
	code/modules/recycling/sortingmachinery.dm

Thanks Firecage, this is all your fault
2014-08-20 05:54:20 -07:00
Kelenius
a8b7588c12 Merge branch 'master' of https://github.com/tgstation/-tg-station into Temp
Conflicts:
	code/game/objects/items/weapons/grenades/ghettobomb.dm
	code/game/objects/structures/door_assembly.dm
2014-06-19 02:27:10 +04:00
Kelenius
3908160998 One big update for stacks. 2014-06-10 20:36:08 +04:00
MrPerson
645ca7f8a1 Merge branch 'master' of https://github.com/tgstation/-tg-station into examinate_the_doctor
Conflicts:
	code/_onclick/click.dm
	code/game/atoms.dm
	code/game/objects/items/toys.dm
	code/modules/paperwork/folders.dm
	code/modules/power/cable.dm
2014-06-09 01:50:44 -07:00
ikarrus
40800b79e0 The Loggening: Admin Edition
-Build mode logging. A lot of its functions are highly abusable but not logged
-Gravity Catapults no longer spam asay. They will be kept in the game log.
-Logging for Cyborg handcuffs
-Logging for Stripping/equipping
-Logging for decreasing PA power control. Easier as an admin to tell when I should panic without having to watch them like a hawk.
-Logging for disposaling people
-Some code optimizations along the way as well
2014-06-02 23:13:33 -06:00
MrPerson
9d9a657acf Change examine() from an atom verb to a mob verb
Just in time for the feature freeze, a big change that will introduce bugs! Yay!
Mob verb is called verb/examinate(target), which just calls target.examine(user) and face_atom(target)
For explanation why, see http://www.byond.com/forum/?post=1326139&page=2#comment8198716
Long story short, mob verbs are much faster than object verbs. The goal is to make right-click menus populate faster.

Also changes a bunch of examine() procs to always, ALWAYS call the parent. Except mobs, but you have 1 guess why I'm not touching them. Mostly this affects obj/item/examine().
And also remove a whole shitload of pointless set src in view(2) kind of crap. Also span classes.
2014-05-01 09:56:39 -07:00
Cheridan
4d8160ab14 meteorhit() is kill 2014-04-22 12:16:02 -05:00
Razharas
6cb3ae5183 Revert "Merge pull request #3142 from Alek2ander/master"
This reverts commit 6f9b58abce, reversing
changes made to eda7110a23.

Im so sorry aran, so sorry
2014-03-29 18:02:54 +04:00
Alek2ander
358ecf7e6a Merge branch 'master' of https://github.com/tgstation/-tg-station into tgstation-master
Conflicts:
	code/game/machinery/computer/computer.dm
	code/game/machinery/computer/telecrystalconsoles.dm
2014-03-27 18:31:11 +04:00
Mloc-Hibernia
8af8a43d6f Initial pass to convert LF to CRLF
Signed-off-by: Mloc-Hibernia <colmohici@gmail.com>
2014-03-24 08:53:40 +00:00
Alek2ander
81b1b189de paipairing
Stuff
2014-03-22 22:33:09 +04:00
MrPerson
9eee3e5067 First pass at a qdel() garbage collection system for tgstation
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.
2014-02-23 14:55:12 -08:00
MrPerson
931da9e7ef Many changes
Much diff
2014-02-04 22:49:38 -08:00
Cheridan
ad235cf18f Merge pull request #2563 from Razharas/NewTables
New PR for crafting tables
2014-02-03 08:46:56 -08:00
Aranclanos
68fd365ae8 fixing the Del() of the control panel of the PA 2014-02-02 05:26:05 -03:00
Aranclanos
976e3457b4 added Del() calls for the PA structures/machines 2014-02-02 05:02:09 -03:00
Razharas
ea54257ab6 Ported cable coils to stacks crudely
Yeah
2014-01-22 02:11:19 +04:00
sirbayer
ef7e3258ae Rads finally work. War never changes. 2014-01-08 16:32:35 -08:00