mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 13:38:41 +01:00
Removes Clone Damage (#80109)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Does what it says on the tin. We don't have any "special" sources of clone damage left in the game, most of them are rather trivial so I bunched them together into this PR. Notable things removed: - Clonexadone, because its entire thing was centered around clone damage - Decloner gun, it's also centered around cloning damage, I couldn't think of a replacement mechanic and nobody uses it anyways - Everything else already dealt clone damage as a side (rainbow knife deals a random damage type for example), so these sources were removed <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Consider the four sources of normal damage that you can get: Brute, Burn, Toxins and Oxygen. These four horsemen of the apocalypse are very well put together and it's no surprise that they are in the game, as you can fit any way of damaging a mob into them. Getting beaten to death by a security officer? Brute damage. Running around on fire? Burn damage. Poisoned or irradiated? Toxin damage. Suffocating in space? Brute, burn and oxygen damage. Technically there's also stamina damage but that's its own ballpark and it also makes sense why we have a damage number for it. Picture this now: We have this cool mechanic called "clone pods" where you can magically revive dead people with absolute ease. We don't want it to be for free though, it comes at a cost. This cost is clone damage, and it serves to restrain people from abusing cloning. Fast forward time a bit and cloning is now removed from the game. What stays with us is a damage number that is intrinsically tied to the context of a removed feature. It was a good idea that we had it for that feature at the time, but now it just sits there. It's the odd one out from all the other damage types. You can easily explain why your blade dealt brute damage, but how are you going to fit clone damage into any context without also becoming extremely specific? My point is: **clone damage is conceptually a flawed mechanic because it is too specific**. That is the major issue why no one uses it, and why that makes it unworthy of being a damage stat. Don't take my word for it though, because a while ago we only had a handful of sources for this damage type in the game. And in most of the rounds where you saw this damage, it came from only one department. It's not worthwhile to keep it around as a damage number. People also didn't know what to do with this damage type, so we currently have two ways of healing clone damage: Cryotubes as a roundstart way of healing clone damage and Rezadone, which instantly sets your clone damage to 0 on the first tick. As a medical doctor, when was the last time you saw someone come in with clone damage and thought to yourself, "Oh, this person has clone damage, I cannot wait to heal them!" ? Now we have replacements for these clone damage sources. Slimes? Slime status effect that deals brute instead of clone. Cosmic heretics? Random organ damage, because their mechanics are already pretty fleshed out. Decloning virus? The virus operated as a "ticking timebomb" which used cloning damage as the timer, so it has been reworked to not use clone damage. What remains after all this is now a basically unused damage type. Every specific situation that used clone damage is now relying on another damage type. Now it's time to put clone damage to rest once and for all. Sure, you can technically add some form of cellular degradation in the future, but it shouldn't be a damage number. The idea of your cells being degraded is a cool concept, don't get me wrong, but make it a status effect or maybe even a wound for that matter. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 del: Removed clone damage. del: Removed the decloner gun. del: Removed clonexadone. /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. -->
This commit is contained in:
@@ -2,19 +2,26 @@ Any time you make a change to the schema files, remember to increment the databa
|
||||
|
||||
Make sure to also update `DB_MAJOR_VERSION` and `DB_MINOR_VERSION`, which can be found in `code/__DEFINES/subsystem.dm`.
|
||||
|
||||
The latest database version is 5.25; The query to update the schema revision table is:
|
||||
The latest database version is 5.26; The query to update the schema revision table is:
|
||||
|
||||
```sql
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 25);
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 26);
|
||||
```
|
||||
or
|
||||
|
||||
```sql
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 25);
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 26);
|
||||
```
|
||||
|
||||
In any query remember to add a prefix to the table names if you use one.
|
||||
|
||||
-----------------------------------------------------
|
||||
Version 5.26, 03 December 2023, by distributivgesetz
|
||||
Set the default value of cloneloss to 0, as it's obsolete and it won't be set by blackbox anymore.
|
||||
```sql
|
||||
ALTER TABLE `death` MODIFY COLUMN `cloneloss` SMALLINT(5) UNSIGNED DEFAULT '0';
|
||||
```
|
||||
|
||||
-----------------------------------------------------
|
||||
Version 5.25, 27 September 2023, by Jimmyl
|
||||
Removes the text_adventures table because it is no longer used
|
||||
|
||||
@@ -172,7 +172,7 @@ CREATE TABLE `death` (
|
||||
`fireloss` smallint(5) unsigned NOT NULL,
|
||||
`oxyloss` smallint(5) unsigned NOT NULL,
|
||||
`toxloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned DEFAULT '0',
|
||||
`staminaloss` smallint(5) unsigned NOT NULL,
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
|
||||
@@ -172,7 +172,7 @@ CREATE TABLE `SS13_death` (
|
||||
`fireloss` smallint(5) unsigned NOT NULL,
|
||||
`oxyloss` smallint(5) unsigned NOT NULL,
|
||||
`toxloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned DEFAULT '0',
|
||||
`staminaloss` smallint(5) unsigned NOT NULL,
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
#define TOX "toxin"
|
||||
/// Suffocation.
|
||||
#define OXY "oxygen"
|
||||
/// Cellular degredation. Rare and difficult to treat.
|
||||
#define CLONE "clone"
|
||||
/// Exhaustion and nonlethal damage.
|
||||
#define STAMINA "stamina"
|
||||
/// Brain damage. Should probably be decomissioned and replaced with proper organ damage.
|
||||
@@ -56,12 +54,11 @@
|
||||
#define BRUTELOSS (1<<0)
|
||||
#define FIRELOSS (1<<1)
|
||||
#define TOXLOSS (1<<2)
|
||||
#define CLONELOSS (1<<3)
|
||||
#define OXYLOSS (1<<4)
|
||||
#define STAMINALOSS (1<<5)
|
||||
#define SHAME (1<<6)
|
||||
#define MANUAL_SUICIDE (1<<7) //suicide_act will do the actual killing.
|
||||
#define MANUAL_SUICIDE_NONLETHAL (1<<8) //when the suicide is conditionally lethal
|
||||
#define OXYLOSS (1<<3)
|
||||
#define STAMINALOSS (1<<4)
|
||||
#define SHAME (1<<5)
|
||||
#define MANUAL_SUICIDE (1<<6) //suicide_act will do the actual killing.
|
||||
#define MANUAL_SUICIDE_NONLETHAL (1<<7) //when the suicide is conditionally lethal
|
||||
|
||||
#define EFFECT_STUN "stun"
|
||||
#define EFFECT_KNOCKDOWN "knockdown"
|
||||
|
||||
@@ -69,8 +69,6 @@
|
||||
#define COMSIG_LIVING_ADJUST_OXY_DAMAGE "living_adjust_oxy_damage"
|
||||
/// Send when toxloss is modified (type, amount, forced)
|
||||
#define COMSIG_LIVING_ADJUST_TOX_DAMAGE "living_adjust_tox_damage"
|
||||
/// Send when cloneloss is modified (type, amount, forced)
|
||||
#define COMSIG_LIVING_ADJUST_CLONE_DAMAGE "living_adjust_clone_damage"
|
||||
/// Send when staminaloss is modified (type, amount, forced)
|
||||
#define COMSIG_LIVING_ADJUST_STAMINA_DAMAGE "living_adjust_stamina_damage"
|
||||
|
||||
@@ -78,7 +76,6 @@
|
||||
#define COMSIG_LIVING_ADJUST_STANDARD_DAMAGE_TYPES list(\
|
||||
COMSIG_LIVING_ADJUST_BRUTE_DAMAGE,\
|
||||
COMSIG_LIVING_ADJUST_BURN_DAMAGE,\
|
||||
COMSIG_LIVING_ADJUST_CLONE_DAMAGE,\
|
||||
COMSIG_LIVING_ADJUST_OXY_DAMAGE,\
|
||||
COMSIG_LIVING_ADJUST_TOX_DAMAGE,\
|
||||
)
|
||||
|
||||
+15
-18
@@ -486,7 +486,6 @@
|
||||
|
||||
#define DEFAULT_BRUTE_EXAMINE_TEXT "bruising"
|
||||
#define DEFAULT_BURN_EXAMINE_TEXT "burns"
|
||||
#define DEFAULT_CLONE_EXAMINE_TEXT "cellular damage"
|
||||
|
||||
#define ROBOTIC_BRUTE_EXAMINE_TEXT "denting"
|
||||
#define ROBOTIC_BURN_EXAMINE_TEXT "charring"
|
||||
@@ -900,39 +899,37 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
|
||||
#define HEAL_TOX (1<<3)
|
||||
/// Heals all oxyloss.
|
||||
#define HEAL_OXY (1<<4)
|
||||
/// Heals all cellular damage.
|
||||
#define HEAL_CLONE (1<<5)
|
||||
/// Heals all stamina damage.
|
||||
#define HEAL_STAM (1<<6)
|
||||
#define HEAL_STAM (1<<5)
|
||||
/// Restore all limbs to their initial state.
|
||||
#define HEAL_LIMBS (1<<7)
|
||||
#define HEAL_LIMBS (1<<6)
|
||||
/// Heals all organs from failing.
|
||||
#define HEAL_ORGANS (1<<8)
|
||||
#define HEAL_ORGANS (1<<7)
|
||||
/// A "super" heal organs, this refreshes all organs entirely, deleting old and replacing them with new.
|
||||
#define HEAL_REFRESH_ORGANS (1<<9)
|
||||
#define HEAL_REFRESH_ORGANS (1<<8)
|
||||
/// Removes all wounds.
|
||||
#define HEAL_WOUNDS (1<<10)
|
||||
#define HEAL_WOUNDS (1<<9)
|
||||
/// Removes all brain traumas, not including permanent ones.
|
||||
#define HEAL_TRAUMAS (1<<11)
|
||||
#define HEAL_TRAUMAS (1<<10)
|
||||
/// Removes all reagents present.
|
||||
#define HEAL_ALL_REAGENTS (1<<12)
|
||||
#define HEAL_ALL_REAGENTS (1<<11)
|
||||
/// Removes all non-positive diseases.
|
||||
#define HEAL_NEGATIVE_DISEASES (1<<13)
|
||||
#define HEAL_NEGATIVE_DISEASES (1<<12)
|
||||
/// Restores body temperature back to nominal.
|
||||
#define HEAL_TEMP (1<<14)
|
||||
#define HEAL_TEMP (1<<13)
|
||||
/// Restores blood levels to normal.
|
||||
#define HEAL_BLOOD (1<<15)
|
||||
#define HEAL_BLOOD (1<<14)
|
||||
/// Removes all non-positive mutations (neutral included).
|
||||
#define HEAL_NEGATIVE_MUTATIONS (1<<16)
|
||||
#define HEAL_NEGATIVE_MUTATIONS (1<<15)
|
||||
/// Removes status effects with this flag set that also have remove_on_fullheal = TRUE.
|
||||
#define HEAL_STATUS (1<<17)
|
||||
#define HEAL_STATUS (1<<16)
|
||||
/// Same as above, removes all CC related status effects with this flag set that also have remove_on_fullheal = TRUE.
|
||||
#define HEAL_CC_STATUS (1<<18)
|
||||
#define HEAL_CC_STATUS (1<<17)
|
||||
/// Deletes any restraints on the mob (handcuffs / legcuffs)
|
||||
#define HEAL_RESTRAINTS (1<<19)
|
||||
#define HEAL_RESTRAINTS (1<<18)
|
||||
|
||||
/// Combination flag to only heal the main damage types.
|
||||
#define HEAL_DAMAGE (HEAL_BRUTE|HEAL_BURN|HEAL_TOX|HEAL_OXY|HEAL_CLONE|HEAL_STAM)
|
||||
#define HEAL_DAMAGE (HEAL_BRUTE|HEAL_BURN|HEAL_TOX|HEAL_OXY|HEAL_STAM)
|
||||
/// Combination flag to only heal things messed up things about the mob's body itself.
|
||||
#define HEAL_BODY (HEAL_LIMBS|HEAL_ORGANS|HEAL_REFRESH_ORGANS|HEAL_WOUNDS|HEAL_TRAUMAS|HEAL_BLOOD|HEAL_TEMP)
|
||||
/// Combination flag to heal negative things affecting the mob.
|
||||
|
||||
+17
-19
@@ -151,42 +151,40 @@
|
||||
#define REACTION_TAG_TOXIN (1<<2)
|
||||
/// This reagent does oxy effects (BOTH damaging and healing)
|
||||
#define REACTION_TAG_OXY (1<<3)
|
||||
/// This reagent does clone effects (BOTH damaging and healing)
|
||||
#define REACTION_TAG_CLONE (1<<4)
|
||||
/// This reagent primarily heals, or it's supposed to be used for healing (in the case of c2 - they are healing)
|
||||
#define REACTION_TAG_HEALING (1<<5)
|
||||
#define REACTION_TAG_HEALING (1<<4)
|
||||
/// This reagent primarily damages
|
||||
#define REACTION_TAG_DAMAGING (1<<6)
|
||||
#define REACTION_TAG_DAMAGING (1<<5)
|
||||
/// This reagent explodes as a part of it's intended effect (i.e. not overheated/impure)
|
||||
#define REACTION_TAG_EXPLOSIVE (1<<7)
|
||||
#define REACTION_TAG_EXPLOSIVE (1<<6)
|
||||
/// This reagent does things that are unique and special
|
||||
#define REACTION_TAG_OTHER (1<<8)
|
||||
#define REACTION_TAG_OTHER (1<<7)
|
||||
/// This reagent's reaction is dangerous to create (i.e. explodes if you fail it)
|
||||
#define REACTION_TAG_DANGEROUS (1<<9)
|
||||
#define REACTION_TAG_DANGEROUS (1<<8)
|
||||
/// This reagent's reaction is easy
|
||||
#define REACTION_TAG_EASY (1<<10)
|
||||
#define REACTION_TAG_EASY (1<<9)
|
||||
/// This reagent's reaction is difficult/involved
|
||||
#define REACTION_TAG_MODERATE (1<<11)
|
||||
#define REACTION_TAG_MODERATE (1<<10)
|
||||
/// This reagent's reaction is hard
|
||||
#define REACTION_TAG_HARD (1<<12)
|
||||
#define REACTION_TAG_HARD (1<<11)
|
||||
/// This reagent affects organs
|
||||
#define REACTION_TAG_ORGAN (1<<13)
|
||||
#define REACTION_TAG_ORGAN (1<<12)
|
||||
/// This reaction creates a drink reagent
|
||||
#define REACTION_TAG_DRINK (1<<14)
|
||||
#define REACTION_TAG_DRINK (1<<13)
|
||||
/// This reaction has something to do with food
|
||||
#define REACTION_TAG_FOOD (1<<15)
|
||||
#define REACTION_TAG_FOOD (1<<14)
|
||||
/// This reaction is a slime reaction
|
||||
#define REACTION_TAG_SLIME (1<<16)
|
||||
#define REACTION_TAG_SLIME (1<<15)
|
||||
/// This reaction is a drug reaction
|
||||
#define REACTION_TAG_DRUG (1<<17)
|
||||
#define REACTION_TAG_DRUG (1<<16)
|
||||
/// This reaction is a unique reaction
|
||||
#define REACTION_TAG_UNIQUE (1<<18)
|
||||
#define REACTION_TAG_UNIQUE (1<<17)
|
||||
/// This reaction is produces a product that affects reactions
|
||||
#define REACTION_TAG_CHEMICAL (1<<19)
|
||||
#define REACTION_TAG_CHEMICAL (1<<18)
|
||||
/// This reaction is produces a product that affects plants
|
||||
#define REACTION_TAG_PLANT (1<<20)
|
||||
#define REACTION_TAG_PLANT (1<<19)
|
||||
/// This reaction is produces a product that affects plants
|
||||
#define REACTION_TAG_COMPETITIVE (1<<21)
|
||||
#define REACTION_TAG_COMPETITIVE (1<<20)
|
||||
|
||||
//flags used by holder.dm to locate an reagent
|
||||
///Direct type
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
*
|
||||
* make sure you add an update to the schema_version stable in the db changelog
|
||||
*/
|
||||
#define DB_MINOR_VERSION 25
|
||||
#define DB_MINOR_VERSION 26
|
||||
|
||||
|
||||
//! ## Timing subsystem
|
||||
|
||||
@@ -174,8 +174,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_NO_DNA_SCRAMBLE "no_dna_scramble"
|
||||
/// Carbons with this trait can eat blood to regenerate their own blood volume, instead of injecting it
|
||||
#define TRAIT_DRINKS_BLOOD "drinks_blood"
|
||||
/// Mob is immune to clone (cellular) damage
|
||||
#define TRAIT_NOCLONELOSS "no_cloneloss"
|
||||
/// Mob is immune to toxin damage
|
||||
#define TRAIT_TOXIMMUNE "toxin_immune"
|
||||
/// Mob is immune to oxygen damage, does not need to breathe
|
||||
|
||||
@@ -304,7 +304,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
|
||||
"TRAIT_NOBLOOD" = TRAIT_NOBLOOD,
|
||||
"TRAIT_NOBREATH" = TRAIT_NOBREATH,
|
||||
"TRAIT_NOCLONELOSS" = TRAIT_NOCLONELOSS,
|
||||
"TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE,
|
||||
"TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY,
|
||||
"TRAIT_NODEATH" = TRAIT_NODEATH,
|
||||
|
||||
@@ -140,7 +140,6 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
|
||||
"TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY,
|
||||
"TRAIT_NOBLOOD" = TRAIT_NOBLOOD,
|
||||
"TRAIT_NOBREATH" = TRAIT_NOBREATH,
|
||||
"TRAIT_NOCLONELOSS" = TRAIT_NOCLONELOSS,
|
||||
"TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE,
|
||||
"TRAIT_NOCRITOVERLAY" = TRAIT_NOCRITOVERLAY,
|
||||
"TRAIT_NODEATH" = TRAIT_NODEATH,
|
||||
|
||||
@@ -329,15 +329,15 @@ Versioning
|
||||
first_death["role"] = null
|
||||
first_death["role"] = L.mind.assigned_role.title
|
||||
first_death["area"] = "[AREACOORD(L)]"
|
||||
first_death["damage"] = "<font color='#FF5555'>[L.getBruteLoss()]</font>/<font color='orange'>[L.getFireLoss()]</font>/<font color='lightgreen'>[L.getToxLoss()]</font>/<font color='lightblue'>[L.getOxyLoss()]</font>/<font color='pink'>[L.getCloneLoss()]</font>"
|
||||
first_death["damage"] = "<font color='#FF5555'>[L.getBruteLoss()]</font>/<font color='orange'>[L.getFireLoss()]</font>/<font color='lightgreen'>[L.getToxLoss()]</font>/<font color='lightblue'>[L.getOxyLoss()]</font>"
|
||||
first_death["last_words"] = L.last_words
|
||||
|
||||
if(!SSdbcore.Connect())
|
||||
return
|
||||
|
||||
var/datum/db_query/query_report_death = SSdbcore.NewQuery({"
|
||||
INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, cloneloss, staminaloss, last_words, suicide)
|
||||
VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, INET_ATON(:internet_address), :port, :round_id, :time, :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :clone, :stamina, :last_words, :suicide)
|
||||
INSERT INTO [format_table_name("death")] (pod, x_coord, y_coord, z_coord, mapname, server_ip, server_port, round_id, tod, job, special, name, byondkey, laname, lakey, bruteloss, fireloss, brainloss, oxyloss, toxloss, staminaloss, last_words, suicide)
|
||||
VALUES (:pod, :x_coord, :y_coord, :z_coord, :map, INET_ATON(:internet_address), :port, :round_id, :time, :job, :special, :name, :key, :laname, :lakey, :brute, :fire, :brain, :oxy, :tox, :stamina, :last_words, :suicide)
|
||||
"}, list(
|
||||
"name" = L.real_name,
|
||||
"key" = L.ckey,
|
||||
@@ -351,7 +351,6 @@ Versioning
|
||||
"brain" = L.get_organ_loss(ORGAN_SLOT_BRAIN) || BRAIN_DAMAGE_DEATH, //get_organ_loss returns null without a brain but a value is required for this column
|
||||
"oxy" = L.getOxyLoss(),
|
||||
"tox" = L.getToxLoss(),
|
||||
"clone" = L.getCloneLoss(),
|
||||
"stamina" = L.getStaminaLoss(),
|
||||
"x_coord" = L.x,
|
||||
"y_coord" = L.y,
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
defence(owner_mob)
|
||||
|
||||
/datum/action/cooldown/mob_cooldown/defensive_mode/proc/offence(mob/living/basic/owner_mob)
|
||||
owner_mob.damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
owner_mob.damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
owner_mob.icon_state = initial(owner_mob.icon_state)
|
||||
owner_mob.icon_living = initial(owner_mob.icon_living)
|
||||
owner_mob.icon_dead = initial(owner_mob.icon_dead)
|
||||
@@ -41,7 +41,7 @@
|
||||
defense_active = FALSE
|
||||
|
||||
/datum/action/cooldown/mob_cooldown/defensive_mode/proc/defence(mob/living/basic/owner_mob)
|
||||
owner_mob.damage_coeff = list(BRUTE = 0.4, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
owner_mob.damage_coeff = list(BRUTE = 0.4, BURN = 0.5, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
owner_mob.icon_dead = "[owner_mob.icon_state]_d_dead"
|
||||
owner_mob.icon_state = "[owner_mob.icon_state]_d"
|
||||
owner_mob.icon_living = "[owner_mob.icon_living]_d"
|
||||
|
||||
@@ -26,9 +26,6 @@
|
||||
/// Stamina damage to heal over a second
|
||||
var/stamina_heal = 0
|
||||
|
||||
/// Amount of cloning damage to heal over a second
|
||||
var/clone_heal = 0
|
||||
|
||||
/// Amount of blood to heal over a second
|
||||
var/blood_heal = 0
|
||||
|
||||
@@ -57,7 +54,6 @@
|
||||
toxin_heal = 0,
|
||||
suffocation_heal = 0,
|
||||
stamina_heal = 0,
|
||||
clone_heal = 0,
|
||||
blood_heal = 0,
|
||||
organ_healing = null,
|
||||
simple_heal = 0,
|
||||
@@ -76,7 +72,6 @@
|
||||
src.toxin_heal = toxin_heal
|
||||
src.suffocation_heal = suffocation_heal
|
||||
src.stamina_heal = stamina_heal
|
||||
src.clone_heal = clone_heal
|
||||
src.blood_heal = blood_heal
|
||||
src.organ_healing = organ_healing
|
||||
src.simple_heal = simple_heal
|
||||
@@ -126,7 +121,6 @@
|
||||
|
||||
candidate.adjustOxyLoss(-suffocation_heal * seconds_per_tick, updating_health = FALSE)
|
||||
candidate.adjustStaminaLoss(-stamina_heal * seconds_per_tick, updating_stamina = FALSE)
|
||||
candidate.adjustCloneLoss(-clone_heal * seconds_per_tick, updating_health = FALSE)
|
||||
|
||||
for (var/organ in organ_healing)
|
||||
candidate.adjustOrganLoss(organ, -organ_healing[organ] * seconds_per_tick)
|
||||
|
||||
@@ -87,10 +87,6 @@
|
||||
name = "particle acceleration rifle part kit (lethal)"
|
||||
desc = "The coup de grace of guncrafting. This suitcase contains the highly experimental rig for a particle acceleration rifle. Requires an energy gun, a stabilized flux anomaly and a stabilized gravity anomaly."
|
||||
|
||||
/obj/item/weaponcrafting/gunkit/decloner
|
||||
name = "decloner part kit (lethal)"
|
||||
desc = "An uttery baffling array of gun parts and technology that somehow turns a laser gun into a decloner. Haircut not included."
|
||||
|
||||
/obj/item/weaponcrafting/gunkit/ebow
|
||||
name = "energy crossbow part kit (less lethal)"
|
||||
desc = "Highly illegal weapons refurbishment kit that allows you to turn the standard proto-kinetic accelerator into a near-duplicate energy crossbow. Almost like the real thing!"
|
||||
|
||||
@@ -140,22 +140,6 @@
|
||||
..()
|
||||
blacklist += subtypesof(/obj/item/gun/energy/laser)
|
||||
|
||||
/datum/crafting_recipe/decloner
|
||||
name = "Biological Demolecularisor"
|
||||
result = /obj/item/gun/energy/decloner
|
||||
reqs = list(
|
||||
/obj/item/gun/energy/laser = 1,
|
||||
/obj/item/weaponcrafting/gunkit/decloner = 1,
|
||||
/datum/reagent/baldium = 30,
|
||||
/datum/reagent/toxin/mutagen = 4,
|
||||
)
|
||||
time = 10 SECONDS
|
||||
category = CAT_WEAPON_RANGED
|
||||
|
||||
/datum/crafting_recipe/decloner/New()
|
||||
..()
|
||||
blacklist += subtypesof(/obj/item/gun/energy/laser)
|
||||
|
||||
/datum/crafting_recipe/teslacannon
|
||||
name = "Tesla Cannon"
|
||||
result = /obj/item/gun/energy/tesla_cannon
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
/// Stamina damage to damage over a second
|
||||
var/stamina_damage = 0
|
||||
|
||||
/// Amount of cloning damage to damage over a second
|
||||
var/clone_damage = 0
|
||||
|
||||
/// Amount of blood to damage over a second
|
||||
var/blood_damage = 0
|
||||
|
||||
@@ -53,7 +50,6 @@
|
||||
toxin_damage = 0,
|
||||
suffocation_damage = 0,
|
||||
stamina_damage = 0,
|
||||
clone_damage = 0,
|
||||
blood_damage = 0,
|
||||
organ_damage = null,
|
||||
simple_damage = 0,
|
||||
@@ -72,7 +68,6 @@
|
||||
src.toxin_damage = toxin_damage
|
||||
src.suffocation_damage = suffocation_damage
|
||||
src.stamina_damage = stamina_damage
|
||||
src.clone_damage = clone_damage
|
||||
src.blood_damage = blood_damage
|
||||
src.organ_damage = organ_damage
|
||||
src.simple_damage = simple_damage
|
||||
@@ -125,7 +120,6 @@
|
||||
candidate.adjustToxLoss(toxin_damage * seconds_per_tick, updating_health = FALSE)
|
||||
candidate.adjustOxyLoss(suffocation_damage * seconds_per_tick, updating_health = FALSE)
|
||||
candidate.adjustStaminaLoss(stamina_damage * seconds_per_tick, updating_stamina = FALSE)
|
||||
candidate.adjustCloneLoss(clone_damage * seconds_per_tick, updating_health = FALSE)
|
||||
|
||||
for (var/organ in organ_damage)
|
||||
candidate.adjustOrganLoss(organ, organ_damage[organ] * seconds_per_tick)
|
||||
|
||||
@@ -17,8 +17,6 @@
|
||||
/// How long to wait between each rewind
|
||||
var/rewind_interval
|
||||
|
||||
/// The starting value of clone loss at the beginning of the effect
|
||||
var/clone_loss = 0
|
||||
/// The starting value of toxin loss at the beginning of the effect
|
||||
var/tox_loss = 0
|
||||
/// The starting value of oxygen loss at the beginning of the effect
|
||||
@@ -46,7 +44,6 @@
|
||||
|
||||
if(isliving(parent))
|
||||
var/mob/living/L = parent
|
||||
clone_loss = L.getCloneLoss()
|
||||
tox_loss = L.getToxLoss()
|
||||
oxy_loss = L.getOxyLoss()
|
||||
stamina_loss = L.getStaminaLoss()
|
||||
@@ -96,7 +93,6 @@
|
||||
|
||||
/datum/component/dejavu/proc/rewind_living()
|
||||
var/mob/living/master = parent
|
||||
master.setCloneLoss(clone_loss)
|
||||
master.setToxLoss(tox_loss)
|
||||
master.setOxyLoss(oxy_loss)
|
||||
master.setStaminaLoss(stamina_loss)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
heal_when_sinked = TRUE,
|
||||
health_per_second = 1,
|
||||
outline_colour = COLOR_PALE_GREEN,
|
||||
damage_res_sinked = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1))
|
||||
damage_res_sinked = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1))
|
||||
|
||||
if (!isbasicmob(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
@@ -112,7 +112,7 @@
|
||||
if(sinked && heal_when_sinked)
|
||||
stop_regenerating()
|
||||
living_target.icon_state = target_icon_state
|
||||
living_target.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
living_target.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
living_target.density = TRUE
|
||||
sinked = FALSE
|
||||
|
||||
|
||||
@@ -72,8 +72,6 @@
|
||||
host.adjustToxLoss(amount, forced = TRUE)
|
||||
if(OXY)
|
||||
host.adjustOxyLoss(amount, forced = TRUE)
|
||||
if(CLONE)
|
||||
host.adjustCloneLoss(amount, forced = TRUE)
|
||||
|
||||
on_passed_damage?.Invoke(our_mob, host, amount)
|
||||
return COMPONENT_IGNORE_CHANGE
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
COMSIG_CARBON_LIMB_DAMAGED,
|
||||
COMSIG_LIVING_ADJUST_BRUTE_DAMAGE,
|
||||
COMSIG_LIVING_ADJUST_BURN_DAMAGE,
|
||||
COMSIG_LIVING_ADJUST_CLONE_DAMAGE,
|
||||
COMSIG_LIVING_DEATH,
|
||||
COMSIG_LIVING_ADJUST_OXY_DAMAGE,
|
||||
COMSIG_LIVING_ADJUST_STAMINA_DAMAGE,
|
||||
@@ -188,8 +187,6 @@
|
||||
back.adjustToxLoss(amount, forced = forced)
|
||||
if(OXY) // If all segments are suffocating we pile damage backwards until our ass starts dying forwards
|
||||
back.adjustOxyLoss(amount, forced = forced)
|
||||
if(CLONE)
|
||||
back.adjustCloneLoss(amount, forced = forced)
|
||||
return COMPONENT_IGNORE_CHANGE
|
||||
|
||||
/// Special handling for if damage is delegated to a mob's limbs instead of its overall damage
|
||||
|
||||
@@ -616,7 +616,6 @@
|
||||
symptom_delay_min = 1
|
||||
symptom_delay_max = 1
|
||||
passive_message = span_notice("Your skin glows faintly for a moment.")
|
||||
var/cellular_damage = FALSE
|
||||
threshold_descs = list(
|
||||
"Transmission 6" = "Additionally heals cellular damage.",
|
||||
"Resistance 7" = "Increases healing speed.",
|
||||
@@ -628,8 +627,6 @@
|
||||
return
|
||||
if(A.totalResistance() >= 7)
|
||||
power = 2
|
||||
if(A.totalTransmittable() >= 6)
|
||||
cellular_damage = TRUE
|
||||
|
||||
/datum/symptom/heal/radiation/CanHeal(datum/disease/advance/A)
|
||||
return HAS_TRAIT(A.affected_mob, TRAIT_IRRADIATED) ? power : 0
|
||||
@@ -637,12 +634,7 @@
|
||||
/datum/symptom/heal/radiation/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
|
||||
var/heal_amt = actual_power
|
||||
|
||||
var/need_mob_update = FALSE
|
||||
if(cellular_damage)
|
||||
need_mob_update += M.adjustCloneLoss(-heal_amt * 0.5, updating_health = FALSE)
|
||||
|
||||
need_mob_update += M.adjustToxLoss(-(2 * heal_amt), updating_health = FALSE)
|
||||
if(need_mob_update)
|
||||
if(M.adjustToxLoss(-(2 * heal_amt), updating_health = FALSE))
|
||||
M.updatehealth()
|
||||
|
||||
var/list/parts = M.get_damaged_bodyparts(1,1, BODYTYPE_ORGANIC)
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
need_mob_update += owner.adjustFireLoss(-grace_heal * seconds_between_ticks, updating_health = FALSE, forced = TRUE)
|
||||
need_mob_update += owner.adjustToxLoss(-grace_heal * seconds_between_ticks, forced = TRUE)
|
||||
need_mob_update += owner.adjustOxyLoss(-(grace_heal * 2) * seconds_between_ticks, updating_health = FALSE, forced = TRUE)
|
||||
need_mob_update += owner.adjustCloneLoss(-grace_heal * seconds_between_ticks, updating_health = FALSE, forced = TRUE)
|
||||
if(need_mob_update)
|
||||
owner.updatehealth()
|
||||
|
||||
@@ -92,7 +91,6 @@
|
||||
human_owner.physiology.burn_mod *= 0.1
|
||||
human_owner.physiology.tox_mod *= 0.1
|
||||
human_owner.physiology.oxy_mod *= 0.1
|
||||
human_owner.physiology.clone_mod *= 0.1
|
||||
human_owner.physiology.stamina_mod *= 0.1
|
||||
owner.add_stun_absorption(source = id, priority = 4)
|
||||
owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, 1, use_reverb = FALSE)
|
||||
@@ -105,7 +103,6 @@
|
||||
human_owner.physiology.burn_mod *= 10
|
||||
human_owner.physiology.tox_mod *= 10
|
||||
human_owner.physiology.oxy_mod *= 10
|
||||
human_owner.physiology.clone_mod *= 10
|
||||
human_owner.physiology.stamina_mod *= 10
|
||||
REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, BLOODDRUNK_TRAIT)
|
||||
owner.remove_stun_absorption(id)
|
||||
@@ -262,7 +259,6 @@
|
||||
toxin_heal = 1.4, \
|
||||
suffocation_heal = 1.4, \
|
||||
stamina_heal = 1.4, \
|
||||
clone_heal = 0.4, \
|
||||
simple_heal = 1.4, \
|
||||
organ_healing = organ_healing, \
|
||||
healing_color = "#375637", \
|
||||
@@ -333,7 +329,6 @@
|
||||
need_mob_update += itemUser.adjustOxyLoss(-0.6 * seconds_between_ticks, updating_health = FALSE, forced = TRUE)
|
||||
need_mob_update += itemUser.adjustStaminaLoss(-0.6 * seconds_between_ticks, updating_stamina = FALSE, forced = TRUE)
|
||||
need_mob_update += itemUser.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.6 * seconds_between_ticks)
|
||||
need_mob_update += itemUser.adjustCloneLoss(-0.2 * seconds_between_ticks, updating_health = FALSE, forced = TRUE) //Because apparently clone damage is the bastion of all health
|
||||
if(need_mob_update)
|
||||
itemUser.updatehealth()
|
||||
|
||||
@@ -555,7 +550,6 @@
|
||||
owner_physiology.burn_mod *= 0.5
|
||||
owner_physiology.tox_mod *= 0.5
|
||||
owner_physiology.oxy_mod *= 0.5
|
||||
owner_physiology.clone_mod *= 0.5
|
||||
owner_physiology.stamina_mod *= 0.5
|
||||
owner.add_filter("mad_glow", 2, list("type" = "outline", "color" = "#eed811c9", "size" = 2))
|
||||
owner.AddElement(/datum/element/forced_gravity, 0)
|
||||
@@ -573,7 +567,6 @@
|
||||
owner_physiology.burn_mod *= 2
|
||||
owner_physiology.tox_mod *= 2
|
||||
owner_physiology.oxy_mod *= 2
|
||||
owner_physiology.clone_mod *= 2
|
||||
owner_physiology.stamina_mod *= 2
|
||||
owner.remove_filter("mad_glow")
|
||||
owner.RemoveElement(/datum/element/forced_gravity, 0)
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
need_mob_update += rewarded.adjustFireLoss(-25, updating_health = FALSE)
|
||||
need_mob_update += rewarded.adjustToxLoss(-25, updating_health = FALSE)
|
||||
need_mob_update += rewarded.adjustOxyLoss(-25, updating_health = FALSE)
|
||||
need_mob_update += rewarded.adjustCloneLoss(-25, updating_health = FALSE)
|
||||
if(need_mob_update)
|
||||
rewarded.updatehealth()
|
||||
|
||||
|
||||
@@ -256,7 +256,6 @@
|
||||
blood_status = "Patient blood levels are currently reading [blood_percent]%. Patient has [ blood_type] type blood. [blood_warning]"
|
||||
|
||||
var/trauma_status = "Patient is free of unique brain trauma."
|
||||
var/clone_loss = patient.getCloneLoss()
|
||||
var/brain_loss = patient.get_organ_loss(ORGAN_SLOT_BRAIN)
|
||||
var/brain_status = "Brain patterns normal."
|
||||
if(LAZYLEN(patient.get_traumas()))
|
||||
@@ -306,13 +305,13 @@
|
||||
if (patient.has_status_effect(/datum/status_effect/hallucination))
|
||||
hallucination_status = "Subject appears to be hallucinating. Suggested treatments: bedrest, mannitol or psicodine."
|
||||
|
||||
if(patient.stat == DEAD || HAS_TRAIT(patient, TRAIT_FAKEDEATH) || ((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 200)) //Patient status checks.
|
||||
if(patient.stat == DEAD || HAS_TRAIT(patient, TRAIT_FAKEDEATH) || ((brute_loss+fire_loss+tox_loss+oxy_loss) >= 200)) //Patient status checks.
|
||||
patient_status = "Dead."
|
||||
if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 80)
|
||||
if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 80)
|
||||
patient_status = "Gravely Injured"
|
||||
else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 40)
|
||||
else if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 40)
|
||||
patient_status = "Injured"
|
||||
else if((brute_loss+fire_loss+tox_loss+oxy_loss+clone_loss) >= 20)
|
||||
else if((brute_loss+fire_loss+tox_loss+oxy_loss) >= 20)
|
||||
patient_status = "Lightly Injured"
|
||||
if(pandemonium || user.has_status_effect(/datum/status_effect/hallucination))
|
||||
patient_status = pick(
|
||||
@@ -346,7 +345,6 @@
|
||||
data["burn_health"] = round(fire_loss+(chaos_modifier * (rand(1,30))),0.001) //then a random number is added, which is multiplied by chaos modifier.
|
||||
data["toxin_health"] = round(tox_loss+(chaos_modifier * (rand(1,30))),0.001) //That allows for a weaker version of the affect to be applied while hallucinating as opposed to emagged.
|
||||
data["suffocation_health"] = round(oxy_loss+(chaos_modifier * (rand(1,30))),0.001) //It's not the cleanest but it does make for a colorful window.
|
||||
data["clone_health"] = round(clone_loss+(chaos_modifier * (rand(1,30))),0.001)
|
||||
data["brain_health"] = brain_status
|
||||
data["brain_damage"] = brain_loss+(chaos_modifier * (rand(1,30)))
|
||||
data["patient_status"] = patient_status
|
||||
|
||||
@@ -225,7 +225,6 @@
|
||||
data["occupant"]["oxyLoss"] = mob_occupant.getOxyLoss()
|
||||
data["occupant"]["toxLoss"] = mob_occupant.getToxLoss()
|
||||
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
|
||||
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
|
||||
data["occupant"]["brainLoss"] = mob_occupant.get_organ_loss(ORGAN_SLOT_BRAIN)
|
||||
data["occupant"]["reagents"] = list()
|
||||
if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len)
|
||||
|
||||
@@ -50,7 +50,6 @@
|
||||
|
||||
autopsy_information += "Toxin damage: [CEILING(scanned.getToxLoss(), 1)]"
|
||||
autopsy_information += "Oxygen damage: [CEILING(scanned.getOxyLoss(), 1)]"
|
||||
autopsy_information += "Cloning damage: [CEILING(scanned.getCloneLoss(), 1)]"
|
||||
|
||||
autopsy_information += "<center>Bodypart Data</center><br>"
|
||||
for(var/obj/item/bodypart/bodyparts as anything in scanned.bodyparts)
|
||||
|
||||
@@ -169,11 +169,6 @@
|
||||
render_list += "<span class='alert ml-1'>Fatigue level: [target.getStaminaLoss()]%.</span>\n"
|
||||
else
|
||||
render_list += "<span class='alert ml-1'>Subject appears to be suffering from fatigue.</span>\n"
|
||||
if (target.getCloneLoss())
|
||||
if(advanced)
|
||||
render_list += "<span class='alert ml-1'>Cellular damage level: [target.getCloneLoss()].</span>\n"
|
||||
else
|
||||
render_list += "<span class='alert ml-1'>Subject appears to have [target.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>\n"
|
||||
if (!target.get_organ_slot(ORGAN_SLOT_BRAIN)) // kept exclusively for soul purposes
|
||||
render_list += "<span class='alert ml-1'>Subject lacks a brain.</span>\n"
|
||||
|
||||
|
||||
@@ -234,7 +234,6 @@
|
||||
new /obj/item/storage/toolbox/syndicate(src) // 1 tc
|
||||
new /obj/item/pen/edagger(src) // 2 tc
|
||||
new /obj/item/gun/energy/wormhole_projector/core_inserted(src) // 5 tc easily
|
||||
new /obj/item/gun/energy/decloner/unrestricted(src) // 5 tc at least also
|
||||
|
||||
if(KIT_BEES)
|
||||
new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation)
|
||||
|
||||
@@ -47,8 +47,7 @@
|
||||
<font color='#ff3333'>[X.getBruteLoss()]</font> \
|
||||
<font color='#ff9933'>[X.getFireLoss()]</font> \
|
||||
<font color='#00cc66'>[X.getToxLoss()]</font> \
|
||||
<font color='#00cccc'>[X.getOxyLoss()]</font>\
|
||||
[X.getCloneLoss() ? " <font color='#1c3ac4'>[X.getCloneLoss()]</font>" : ""])"
|
||||
<font color='#00cccc'>[X.getOxyLoss()]</font>"
|
||||
|
||||
/// Display all of the tagged datums
|
||||
/datum/admins/proc/display_tags()
|
||||
|
||||
@@ -852,7 +852,7 @@
|
||||
status = "<font color='red'><b>Dead</b></font>"
|
||||
health_description = "Status: [status]"
|
||||
health_description += "<br>Brute: [lifer.getBruteLoss()] - Burn: [lifer.getFireLoss()] - Toxin: [lifer.getToxLoss()] - Suffocation: [lifer.getOxyLoss()]"
|
||||
health_description += "<br>Clone: [lifer.getCloneLoss()] - Brain: [lifer.get_organ_loss(ORGAN_SLOT_BRAIN)] - Stamina: [lifer.getStaminaLoss()]"
|
||||
health_description += "<br>Brain: [lifer.get_organ_loss(ORGAN_SLOT_BRAIN)] - Stamina: [lifer.getStaminaLoss()]"
|
||||
else
|
||||
health_description = "This mob type has no health to speak of."
|
||||
|
||||
|
||||
@@ -99,9 +99,6 @@
|
||||
if("brain")
|
||||
L.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount)
|
||||
newamt = L.get_organ_loss(ORGAN_SLOT_BRAIN)
|
||||
if("clone")
|
||||
L.adjustCloneLoss(amount, forced = TRUE)
|
||||
newamt = L.getCloneLoss()
|
||||
if("stamina")
|
||||
L.adjustStaminaLoss(amount, forced = TRUE)
|
||||
newamt = L.getStaminaLoss()
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
/obj/item/gun/energy/alien
|
||||
name = "alien pistol"
|
||||
desc = "A complicated gun that fires bursts of high-intensity radiation."
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/declone)
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/radiation)
|
||||
pin = /obj/item/firing_pin/abductor
|
||||
icon_state = "alienpistol"
|
||||
inhand_icon_state = "alienpistol"
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
need_mob_update += owner.adjustBruteLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE)
|
||||
need_mob_update += owner.adjustFireLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE)
|
||||
need_mob_update += owner.adjustToxLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE, forced = TRUE)
|
||||
need_mob_update += owner.adjustCloneLoss(-BASE_HEAL * seconds_per_tick, updating_health = FALSE)
|
||||
|
||||
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
owner.blood_volume += BASE_HEAL * seconds_per_tick
|
||||
|
||||
@@ -121,7 +121,6 @@
|
||||
// Chemicals that can be mixed by a single skilled Chemist.
|
||||
var/static/list/possible_reagents = list(\
|
||||
/datum/reagent/medicine/leporazine,\
|
||||
/datum/reagent/medicine/clonexadone,\
|
||||
/datum/reagent/medicine/mine_salve,\
|
||||
/datum/reagent/medicine/c2/convermol,\
|
||||
/datum/reagent/medicine/ephedrine,\
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
required_reagents = list(/datum/reagent/consumable/ethanol/brave_bull = 5, /datum/reagent/consumable/ethanol/syndicatebomb = 5, /datum/reagent/consumable/ethanol/absinthe = 5)
|
||||
mix_message = "The mixture darkens to a healthy crimson."
|
||||
required_temp = 315 //Piping hot!
|
||||
reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_BRUTE | REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY | REACTION_TAG_CLONE
|
||||
reaction_tags = REACTION_TAG_DRINK | REACTION_TAG_EASY | REACTION_TAG_BRUTE | REACTION_TAG_BURN | REACTION_TAG_TOXIN | REACTION_TAG_OXY
|
||||
|
||||
/datum/chemical_reaction/drink/bacchus_blessing
|
||||
results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
var/environment_smash = ENVIRONMENT_SMASH_STRUCTURES
|
||||
|
||||
/// 1 for full damage, 0 for none, -1 for 1:1 heal from that source.
|
||||
var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
|
||||
///Verbs used for speaking e.g. "Says" or "Chitters". This can be elementized
|
||||
var/list/speak_emote = list()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
icon_dead = "blobbernaut_dead"
|
||||
health = BLOBMOB_BLOBBERNAUT_HEALTH
|
||||
maxHealth = BLOBMOB_BLOBBERNAUT_HEALTH
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
melee_damage_lower = BLOBMOB_BLOBBERNAUT_DMG_SOLO_LOWER
|
||||
melee_damage_upper = BLOBMOB_BLOBBERNAUT_DMG_SOLO_UPPER
|
||||
melee_attack_cooldown = CLICK_CD_MELEE
|
||||
|
||||
@@ -16,7 +16,7 @@ GLOBAL_LIST_INIT(command_strings, list(
|
||||
icon = 'icons/mob/silicon/aibots.dmi'
|
||||
icon_state = "medibot0"
|
||||
base_icon_state = "medibot"
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST)
|
||||
maximum_survivable_temperature = INFINITY
|
||||
|
||||
@@ -370,7 +370,7 @@
|
||||
speed = 1
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 2, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
attack_verb_continuous = "slams"
|
||||
attack_verb_simple = "slam"
|
||||
loot = list(
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
unsuitable_atmos_damage = 0
|
||||
minimum_survivable_temperature = 0
|
||||
maximum_survivable_temperature = INFINITY
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
pressure_resistance = 100
|
||||
speed = 0
|
||||
unique_name = TRUE
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
initial_language_holder = /datum/language_holder/drone
|
||||
mob_size = MOB_SIZE_SMALL
|
||||
has_unlimited_silicon_privilege = TRUE
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
hud_possible = list(DIAG_STAT_HUD, DIAG_HUD, ANTAG_HUD)
|
||||
unique_name = TRUE
|
||||
faction = list(FACTION_NEUTRAL,FACTION_SILICON,FACTION_TURRET)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
melee_attack_cooldown = CLICK_CD_MELEE
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 18
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.5, TOX = 1.5, CLONE = 0, STAMINA = 0, OXY = 1.5)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.5, TOX = 1.5, STAMINA = 0, OXY = 1.5)
|
||||
obj_damage = 20
|
||||
attack_verb_continuous = "pummels"
|
||||
attack_verb_simple = "pummel"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
speed = 0
|
||||
maxHealth = INFINITY // The spirit itself is invincible and passes damage to its host
|
||||
health = INFINITY
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
unsuitable_atmos_damage = 0
|
||||
unsuitable_cold_damage = 0
|
||||
unsuitable_heat_damage = 0
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_SLASH
|
||||
sharpness = SHARP_POINTY
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
playstyle_string = span_holoparasite("As an <b>assassin</b> type you do medium damage and have no damage resistance, but can enter stealth, massively increasing the damage of your next attack and causing it to ignore armor. Stealth is broken when you attack or take damage.")
|
||||
creator_name = "Assassin"
|
||||
creator_desc = "Does medium damage and takes full damage, but can enter stealth, causing its next attack to do massive damage and ignore armor. However, it becomes briefly unable to recall after attacking from stealth."
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
speed = -0.5
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
playstyle_string = span_holoparasite("As a <b>charger</b> type you do medium damage, have light damage resistance, move very fast, can be ridden, and can charge at a location, damaging any target hit and forcing them to drop any items they are holding.")
|
||||
creator_name = "Charger"
|
||||
creator_desc = "Moves very fast, does medium damage on attack, can be ridden and can charge at targets, damaging the first target hit and forcing them to drop any items they are holding."
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
guardian_type = GUARDIAN_DEXTROUS
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
playstyle_string = span_holoparasite("As a <b>dextrous</b> type you can hold items, store an item within yourself, and have medium damage resistance, but do low damage on attacks. Recalling and leashing will force you to drop unstored items!")
|
||||
creator_name = "Dextrous"
|
||||
creator_desc = "Does low damage on attack, but is capable of holding items and storing a single item within it. It will drop items held in its hands when it recalls, but it will retain the stored item."
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
guardian_type = GUARDIAN_EXPLOSIVE
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6)
|
||||
damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, STAMINA = 0, OXY = 0.6)
|
||||
range = 13
|
||||
playstyle_string = span_holoparasite("As an <b>explosive</b> type, you have moderate close combat abilities and are capable of converting nearby items and objects into disguised bombs via right-click.")
|
||||
creator_name = "Explosive"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
guardian_type = GUARDIAN_GASEOUS
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 0)
|
||||
range = 7
|
||||
playstyle_string = span_holoparasite("As a <b>gaseous</b> type, you have only light damage resistance, but you can expel gas in an area. In addition, your punches cause sparks, and you make your summoner inflammable.")
|
||||
creator_name = "Gaseous"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
guardian_type = GUARDIAN_GRAVITOKINETIC
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, CLONE = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
damage_coeff = list(BRUTE = 0.75, BURN = 0.75, TOX = 0.75, STAMINA = 0, OXY = 0.75)
|
||||
playstyle_string = span_holoparasite("As a <b>gravitokinetic</b> type, you can right-click to make the gravity on the ground stronger, and punching applies this effect to a target.")
|
||||
creator_name = "Gravitokinetic"
|
||||
creator_desc = "Attacks will apply crushing gravity to the target. Can target the ground as well to slow targets advancing on you, but you are not immune to your own such effects."
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
attack_verb_simple = "shock"
|
||||
melee_damage_type = BURN
|
||||
attack_sound = 'sound/machines/defib_zap.ogg'
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
range = 7
|
||||
playstyle_string = span_holoparasite("As a <b>lightning</b> type, you will apply lightning chains to targets on attack and have a lightning chain to your summoner. Lightning chains will shock anyone near them.")
|
||||
creator_name = "Lightning"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
range = 5 // You want this to be low so you can drag them around
|
||||
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, CLONE = 0.4, STAMINA = 0, OXY = 0.4)
|
||||
damage_coeff = list(BRUTE = 0.4, BURN = 0.4, TOX = 0.4, STAMINA = 0, OXY = 0.4)
|
||||
playstyle_string = span_holoparasite("As a <b>protector</b> type you cause your summoner to leash to you instead of you leashing to them and have two modes; Combat Mode, where you do and take medium damage, and Protection Mode, where you do and take almost no damage, but move slightly slower.")
|
||||
creator_name = "Protector"
|
||||
creator_desc = "Causes you to teleport to it when out of range, unlike other parasites. Has two modes; Combat, where it does and takes medium damage, and Protection, where it does and takes almost no damage but moves slightly slower."
|
||||
@@ -71,7 +71,7 @@
|
||||
/// Overlay for our protection shield.
|
||||
var/mutable_appearance/shield_overlay
|
||||
/// Damage coefficients when shielded
|
||||
var/list/shielded_damage = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, CLONE = 0.05, STAMINA = 0, OXY = 0.05)
|
||||
var/list/shielded_damage = list(BRUTE = 0.05, BURN = 0.05, TOX = 0.05, STAMINA = 0, OXY = 0.05)
|
||||
|
||||
/datum/status_effect/protector_shield/on_apply()
|
||||
if (isguardian(owner))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
friendly_verb_simple = "quietly assess"
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9)
|
||||
damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, STAMINA = 0, OXY = 0.9)
|
||||
range = 13
|
||||
playstyle_string = span_holoparasite("As a <b>ranged</b> type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed. You can also deploy surveillance snares to monitor enemy movement. Finally, you can switch to scout mode, in which you can't attack, but can move without limit.")
|
||||
creator_name = "Ranged"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/// Plain, but durable and strong. Can destroy walls.
|
||||
/mob/living/basic/guardian/standard
|
||||
guardian_type = GUARDIAN_STANDARD
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5)
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, STAMINA = 0, OXY = 0.5)
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
melee_attack_cooldown = 0.6 SECONDS
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/mob/living/basic/guardian/support
|
||||
guardian_type = GUARDIAN_SUPPORT
|
||||
speed = 0
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, STAMINA = 0, OXY = 0.7)
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
playstyle_string = span_holoparasite("As a <b>support</b> type, you may right-click to heal targets. In addition, alt-clicking on an adjacent object or mob will warp them to your bluespace beacon after a short delay.")
|
||||
|
||||
@@ -55,14 +55,6 @@
|
||||
else if(damage_coeff[TOX])
|
||||
. = adjust_health(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/basic/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype)
|
||||
if(!can_adjust_clone_loss(amount, forced, required_biotype))
|
||||
return 0
|
||||
if(forced)
|
||||
. = adjust_health(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[CLONE])
|
||||
. = adjust_health(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/basic/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype)
|
||||
if(!can_adjust_stamina_loss(amount, forced, required_biotype))
|
||||
return 0
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
mob_biotypes = NONE
|
||||
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
speed = 0
|
||||
melee_attack_cooldown = CLICK_CD_MELEE
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
obj_damage = 0
|
||||
attack_verb_continuous = "bites"
|
||||
attack_verb_simple = "bite"
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.25, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.25, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
faction = list(FACTION_HERETIC)
|
||||
mob_size = MOB_SIZE_TINY
|
||||
speak_emote = list("screams")
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
melee_attack_cooldown = 0.6 SECONDS
|
||||
speak_emote = list("growls")
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
death_sound = 'sound/magic/cosmic_expansion.ogg'
|
||||
|
||||
slowed_by_drag = FALSE
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_living = "basilisk"
|
||||
icon_dead = "basilisk_dead"
|
||||
speak_emote = list("chimes")
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
speed = 20
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
gender = NEUTER
|
||||
damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 3, BURN = 3, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/breadslice/plain = 3, \
|
||||
/obj/item/food/meat/slab = 2)
|
||||
response_harm_continuous = "takes a bite out of"
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
speed = 2
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //trying to simulate actually having armor
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0, STAMINA = 0, OXY = 0) //trying to simulate actually having armor
|
||||
obj_damage = 50
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 30
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
response_help_simple = "pet"
|
||||
response_disarm_continuous = "gently pushes aside"
|
||||
response_disarm_simple = "gently push aside"
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
basic_mob_flags = FLAMMABLE_MOB
|
||||
status_flags = NONE
|
||||
speed = -0.1
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
attack_verb_simple = "punch"
|
||||
attack_sound = 'sound/weapons/punch1.ogg'
|
||||
melee_attack_cooldown = 1.2 SECONDS
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
speak_emote = list("announces")
|
||||
|
||||
unsuitable_atmos_damage = 0
|
||||
@@ -31,7 +31,7 @@
|
||||
greyscale_config = /datum/greyscale_config/garden_gnome
|
||||
ai_controller = /datum/ai_controller/basic_controller/garden_gnome
|
||||
/// The damage resistence when sinked into the ground
|
||||
var/resistance_when_sinked = list(BRUTE = 0.5, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
var/resistance_when_sinked = list(BRUTE = 0.5, BURN = 0.5, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
/// Realistically weighted list of usual gnome hat colours
|
||||
var/static/list/gnome_hat_colours = list(
|
||||
COLOR_GNOME_RED_ONE = 9,
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
verb_exclaim = "zaps"
|
||||
verb_yell = "bangs"
|
||||
initial_language_holder = /datum/language_holder/lightbringer
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
light_range = 4
|
||||
faction = list(FACTION_NEUTRAL)
|
||||
unsuitable_atmos_damage = 0
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
response_harm_continuous = "punches through"
|
||||
response_harm_simple = "punch through"
|
||||
unsuitable_atmos_damage = 0
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway.
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0) //I don't know how you'd apply those, but revenants no-sell them anyway.
|
||||
habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minimum_survivable_temperature = 0
|
||||
maximum_survivable_temperature = INFINITY
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
unsuitable_cold_damage = 0
|
||||
unsuitable_heat_damage = 0
|
||||
unsuitable_atmos_damage = 0
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0.5, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0.5, OXY = 1)
|
||||
combat_mode = TRUE
|
||||
speed = 0
|
||||
movement_type = FLYING
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
icon_dead = "tank_dead"
|
||||
maxHealth = 500
|
||||
health = 500
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
obj_damage = 15
|
||||
@@ -349,7 +349,7 @@
|
||||
melee_damage_lower = 35
|
||||
melee_damage_upper = 40
|
||||
obj_damage = 100
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
speed = 6
|
||||
player_speed_modifier = -5.5 // Doesn't seem that slow but it gets a debuff off web
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
@@ -561,7 +561,7 @@
|
||||
web_speed = 0.4
|
||||
maxHealth = 80
|
||||
health = 80
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
unsuitable_cold_damage = 1
|
||||
unsuitable_heat_damage = 1
|
||||
menu_description = "Stronger assassin spider variant with an unmatched speed, high amount of health and very deadly poison, but deals very low amount of damage. It also has ability to ventcrawl."
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
response_disarm_simple = "gently push aside"
|
||||
initial_language_holder = /datum/language_holder/spider
|
||||
melee_attack_cooldown = CLICK_CD_MELEE
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, CLONE = 1, STAMINA = 1, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1.25, TOX = 1, STAMINA = 1, OXY = 1)
|
||||
basic_mob_flags = FLAMMABLE_MOB
|
||||
status_flags = NONE
|
||||
unsuitable_cold_damage = 4
|
||||
|
||||
+1
-1
@@ -163,7 +163,7 @@
|
||||
icon_dead = "young_tank_dead"
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0.5, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, STAMINA = 0.5, OXY = 1)
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 15
|
||||
speed = 1
|
||||
|
||||
@@ -66,7 +66,6 @@
|
||||
owner.adjustBruteLoss(-heal_amt * delta_time_capped)
|
||||
owner.adjustFireLoss(-heal_amt * delta_time_capped)
|
||||
owner.adjustOxyLoss(-heal_amt * delta_time_capped)
|
||||
owner.adjustCloneLoss(-heal_amt * delta_time_capped)
|
||||
else
|
||||
owner.adjustPlasma(0.1 * plasma_rate * delta_time)
|
||||
|
||||
|
||||
@@ -516,7 +516,7 @@
|
||||
var/obj/item/bodypart/BP = X
|
||||
total_brute += (BP.brute_dam * BP.body_damage_coeff)
|
||||
total_burn += (BP.burn_dam * BP.body_damage_coeff)
|
||||
set_health(round(maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute, DAMAGE_PRECISION))
|
||||
set_health(round(maxHealth - getOxyLoss() - getToxLoss() - total_burn - total_brute, DAMAGE_PRECISION))
|
||||
update_stat()
|
||||
update_stamina()
|
||||
if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD*2) && stat == DEAD )
|
||||
|
||||
@@ -72,8 +72,6 @@
|
||||
final_mod *= physiology.tox_mod
|
||||
if(OXY)
|
||||
final_mod *= physiology.oxy_mod
|
||||
if(CLONE)
|
||||
final_mod *= physiology.clone_mod
|
||||
if(STAMINA)
|
||||
final_mod *= physiology.stamina_mod
|
||||
if(BRAIN)
|
||||
|
||||
@@ -82,15 +82,6 @@
|
||||
else
|
||||
msg += "<B>[t_He] [t_has] severe burns!</B>\n"
|
||||
|
||||
temp = getCloneLoss()
|
||||
if(temp)
|
||||
if(temp < 25)
|
||||
msg += "[t_He] [t_is] slightly deformed.\n"
|
||||
else if (temp < 50)
|
||||
msg += "[t_He] [t_is] <b>moderately</b> deformed!\n"
|
||||
else
|
||||
msg += "<b>[t_He] [t_is] severely deformed!</b>\n"
|
||||
|
||||
if(HAS_TRAIT(src, TRAIT_DUMB))
|
||||
msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n"
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
|
||||
|
||||
if(SSticker.HasRoundStarted())
|
||||
SSblackbox.ReportDeath(src)
|
||||
log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()], CLONE: [src.getCloneLoss()])", LOG_ATTACK)
|
||||
log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()]", LOG_ATTACK)
|
||||
if(key) // Prevents log spamming of keyless mob deaths (like xenobio monkeys)
|
||||
investigate_log("has died at [loc_name(src)].<br>\
|
||||
BRUTE: [src.getBruteLoss()] BURN: [src.getFireLoss()] TOX: [src.getToxLoss()] OXY: [src.getOxyLoss()] CLONE: [src.getCloneLoss()] STAM: [src.getStaminaLoss()]<br>\
|
||||
BRUTE: [src.getBruteLoss()] BURN: [src.getFireLoss()] TOX: [src.getToxLoss()] OXY: [src.getOxyLoss()] STAM: [src.getStaminaLoss()]<br>\
|
||||
<b>Brain damage</b>: [src.get_organ_loss(ORGAN_SLOT_BRAIN) || "0"]<br>\
|
||||
<b>Blood volume</b>: [src.blood_volume]cl ([round((src.blood_volume / BLOOD_VOLUME_NORMAL) * 100, 0.1)]%)<br>\
|
||||
<b>Reagents</b>:<br>[reagents_readout()]", INVESTIGATE_DEATHS)
|
||||
|
||||
@@ -203,16 +203,6 @@
|
||||
else
|
||||
msg += "<B>[t_He] [t_has] severe [damage_desc[BURN]]!</B>\n"
|
||||
|
||||
temp = getCloneLoss()
|
||||
if(temp)
|
||||
if(temp < 25)
|
||||
msg += "[t_He] [t_has] minor [damage_desc[CLONE]].\n"
|
||||
else if(temp < 50)
|
||||
msg += "[t_He] [t_has] <b>moderate</b> [damage_desc[CLONE]]!\n"
|
||||
else
|
||||
msg += "<b>[t_He] [t_has] severe [damage_desc[CLONE]]!</b>\n"
|
||||
|
||||
|
||||
if(has_status_effect(/datum/status_effect/fire_handler/fire_stacks))
|
||||
msg += "[t_He] [t_is] covered in something flammable.\n"
|
||||
if(has_status_effect(/datum/status_effect/fire_handler/wet_stacks))
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return if_no_face //Likewise for hats
|
||||
var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD)
|
||||
if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible
|
||||
if( !O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || !real_name || HAS_TRAIT(src, TRAIT_INVISIBLE_MAN)) //disfigured. use id-name if possible
|
||||
return if_no_face
|
||||
return real_name
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
var/tox_mod = 1
|
||||
/// Multiplier to oxygen damage received
|
||||
var/oxy_mod = 1
|
||||
/// Multiplier to clone damage received
|
||||
var/clone_mod = 1
|
||||
/// Multiplier to stamina damage received
|
||||
var/stamina_mod = 1
|
||||
/// Multiplier to brain damage received
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
TRAIT_LIVERLESS_METABOLISM,
|
||||
TRAIT_NOBLOOD,
|
||||
TRAIT_NOBREATH,
|
||||
TRAIT_NOCLONELOSS,
|
||||
TRAIT_NOCRITDAMAGE,
|
||||
TRAIT_NOFIRE,
|
||||
TRAIT_NOHUNGER,
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
TRAIT_LIMBATTACHMENT,
|
||||
TRAIT_NOBLOOD,
|
||||
TRAIT_NOBREATH,
|
||||
TRAIT_NOCLONELOSS,
|
||||
TRAIT_NO_DNA_COPY,
|
||||
TRAIT_NO_UNDERWEAR,
|
||||
TRAIT_PIERCEIMMUNE,
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
need_mob_update += vampire.heal_overall_damage(brute = 2 * seconds_per_tick, burn = 2 * seconds_per_tick, updating_health = FALSE, required_bodytype = BODYTYPE_ORGANIC)
|
||||
need_mob_update += vampire.adjustToxLoss(-2 * seconds_per_tick, updating_health = FALSE,)
|
||||
need_mob_update += vampire.adjustOxyLoss(-2 * seconds_per_tick, updating_health = FALSE,)
|
||||
need_mob_update += vampire.adjustCloneLoss(-2 * seconds_per_tick, updating_health = FALSE,)
|
||||
if(need_mob_update)
|
||||
vampire.updatehealth()
|
||||
return
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
TRAIT_LIMBATTACHMENT,
|
||||
TRAIT_LIVERLESS_METABOLISM,
|
||||
TRAIT_NOBREATH,
|
||||
TRAIT_NOCLONELOSS,
|
||||
TRAIT_NODEATH,
|
||||
TRAIT_NOHUNGER,
|
||||
TRAIT_NO_DNA_COPY,
|
||||
@@ -108,7 +107,6 @@
|
||||
TRAIT_LIMBATTACHMENT,
|
||||
TRAIT_LIVERLESS_METABOLISM,
|
||||
TRAIT_NOBREATH,
|
||||
TRAIT_NOCLONELOSS,
|
||||
TRAIT_NODEATH,
|
||||
TRAIT_NOHUNGER,
|
||||
TRAIT_NO_DNA_COPY,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* Arguuments:
|
||||
* * damage - Amount of damage
|
||||
* * damagetype - What type of damage to do. one of [BRUTE], [BURN], [TOX], [OXY], [CLONE], [STAMINA], [BRAIN].
|
||||
* * damagetype - What type of damage to do. one of [BRUTE], [BURN], [TOX], [OXY], [STAMINA], [BRAIN].
|
||||
* * def_zone - What body zone is being hit. Or a reference to what bodypart is being hit.
|
||||
* * blocked - Percent modifier to damage. 100 = 100% less damage dealt, 50% = 50% less damage dealt.
|
||||
* * forced - "Force" exactly the damage dealt. This means it skips damage modifier from blocked.
|
||||
@@ -84,8 +84,6 @@
|
||||
damage_dealt = adjustToxLoss(damage_amount, forced = forced)
|
||||
if(OXY)
|
||||
damage_dealt = adjustOxyLoss(damage_amount, forced = forced)
|
||||
if(CLONE)
|
||||
damage_dealt = adjustCloneLoss(damage_amount, forced = forced)
|
||||
if(STAMINA)
|
||||
damage_dealt = adjustStaminaLoss(damage_amount, forced = forced)
|
||||
if(BRAIN)
|
||||
@@ -132,8 +130,6 @@
|
||||
return adjustToxLoss(heal_amount)
|
||||
if(OXY)
|
||||
return adjustOxyLoss(heal_amount)
|
||||
if(CLONE)
|
||||
return adjustCloneLoss(heal_amount)
|
||||
if(STAMINA)
|
||||
return adjustStaminaLoss(heal_amount)
|
||||
|
||||
@@ -152,14 +148,12 @@
|
||||
return getToxLoss()
|
||||
if(OXY)
|
||||
return getOxyLoss()
|
||||
if(CLONE)
|
||||
return getCloneLoss()
|
||||
if(STAMINA)
|
||||
return getStaminaLoss()
|
||||
|
||||
/// return the total damage of all types which update your health
|
||||
/mob/living/proc/get_total_damage(precision = DAMAGE_PRECISION)
|
||||
return round(getBruteLoss() + getFireLoss() + getToxLoss() + getOxyLoss() + getCloneLoss(), precision)
|
||||
return round(getBruteLoss() + getFireLoss() + getToxLoss() + getOxyLoss(), precision)
|
||||
|
||||
/// Applies multiple damages at once via [apply_damage][/mob/living/proc/apply_damage]
|
||||
/mob/living/proc/apply_damages(
|
||||
@@ -167,7 +161,6 @@
|
||||
burn = 0,
|
||||
tox = 0,
|
||||
oxy = 0,
|
||||
clone = 0,
|
||||
def_zone = null,
|
||||
blocked = 0,
|
||||
stamina = 0,
|
||||
@@ -182,8 +175,6 @@
|
||||
total_damage += apply_damage(tox, TOX, def_zone, blocked)
|
||||
if(oxy)
|
||||
total_damage += apply_damage(oxy, OXY, def_zone, blocked)
|
||||
if(clone)
|
||||
total_damage += apply_damage(clone, CLONE, def_zone, blocked)
|
||||
if(stamina)
|
||||
total_damage += apply_damage(stamina, STAMINA, def_zone, blocked)
|
||||
if(brain)
|
||||
@@ -421,40 +412,6 @@
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/proc/getCloneLoss()
|
||||
return cloneloss
|
||||
|
||||
/mob/living/proc/can_adjust_clone_loss(amount, forced, required_biotype = ALL)
|
||||
if(!forced && (!(mob_biotypes & required_biotype) || status_flags & GODMODE || HAS_TRAIT(src, TRAIT_NOCLONELOSS)))
|
||||
return FALSE
|
||||
if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_CLONE_DAMAGE, CLONE, amount, forced) & COMPONENT_IGNORE_CHANGE)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL)
|
||||
if(!can_adjust_clone_loss(amount, forced, required_biotype))
|
||||
return 0
|
||||
. = cloneloss
|
||||
cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2)
|
||||
. -= cloneloss
|
||||
if(. == 0) // no change, no need to update
|
||||
return 0
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/proc/setCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL)
|
||||
if(!forced && ( (status_flags & GODMODE) || HAS_TRAIT(src, TRAIT_NOCLONELOSS)) )
|
||||
return FALSE
|
||||
if(!forced && !(mob_biotypes & required_biotype))
|
||||
return FALSE
|
||||
. = cloneloss
|
||||
cloneloss = amount
|
||||
. -= cloneloss
|
||||
if(!.) // no change, no need to update
|
||||
return FALSE
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
|
||||
/mob/living/proc/adjustOrganLoss(slot, amount, maximum, required_organ_flag)
|
||||
return
|
||||
|
||||
|
||||
@@ -772,7 +772,7 @@
|
||||
/mob/living/proc/updatehealth()
|
||||
if(status_flags & GODMODE)
|
||||
return
|
||||
set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss())
|
||||
set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss())
|
||||
update_stat()
|
||||
med_hud_set_health()
|
||||
med_hud_set_status()
|
||||
@@ -920,8 +920,6 @@
|
||||
setToxLoss(0, updating_health = FALSE, forced = TRUE)
|
||||
if(heal_flags & HEAL_OXY)
|
||||
setOxyLoss(0, updating_health = FALSE, forced = TRUE)
|
||||
if(heal_flags & HEAL_CLONE)
|
||||
setCloneLoss(0, updating_health = FALSE, forced = TRUE)
|
||||
if(heal_flags & HEAL_BRUTE)
|
||||
setBruteLoss(0, updating_health = FALSE, forced = TRUE)
|
||||
if(heal_flags & HEAL_BURN)
|
||||
@@ -1921,7 +1919,6 @@ GLOBAL_LIST_EMPTY(fire_appearances)
|
||||
FIRE:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=fire' id='fire'>[getFireLoss()]</a>
|
||||
TOXIN:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=toxin' id='toxin'>[getToxLoss()]</a>
|
||||
OXY:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=oxygen' id='oxygen'>[getOxyLoss()]</a>
|
||||
CLONE:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=clone' id='clone'>[getCloneLoss()]</a>
|
||||
BRAIN:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=brain' id='brain'>[get_organ_loss(ORGAN_SLOT_BRAIN)]</a>
|
||||
STAMINA:<font size='1'><a href='?_src_=vars;[HrefToken()];mobToDamage=[refid];adjustDamage=stamina' id='stamina'>[getStaminaLoss()]</a>
|
||||
</font>
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
var/toxloss = 0
|
||||
///Burn damage caused by being way too hot, too cold or burnt.
|
||||
var/fireloss = 0
|
||||
///Damage caused by being cloned or ejected from the cloner early. slimes also deal cloneloss damage to victims
|
||||
var/cloneloss = 0
|
||||
|
||||
/// The movement intent of the mob (run/wal)
|
||||
var/move_intent = MOVE_INTENT_RUN
|
||||
|
||||
@@ -7,12 +7,6 @@
|
||||
/mob/living/silicon/setToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype)
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype) //immune to clone damage
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/setCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype)
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype) //immune to stamina damage.
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
icon_state = "synd_medical"
|
||||
playstyle_string = "<span class='big bold'>You are a Syndicate medical cyborg!</span><br>\
|
||||
<b>You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \
|
||||
Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \
|
||||
Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including brain damage. It also produces morphine for offense. \
|
||||
Your defibrillator paddles can revive operatives through their suits, or can be used on harm intent to shock enemies! \
|
||||
Your energy saw functions as a circular saw, but can be activated to deal more damage, and your operative pinpointer will find and locate fellow nuclear operatives. \
|
||||
<i>Help the operatives secure the disk at all costs!</i></b>"
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
mob_biotypes = MOB_ROBOTIC
|
||||
stop_automated_movement = TRUE
|
||||
wander = FALSE
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_PATH_HUD = HUD_LIST_LIST)
|
||||
maxbodytemp = INFINITY
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "\improper Honkbot"
|
||||
desc = "A little robot. It looks happy with its bike horn."
|
||||
icon_state = "honkbot"
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
combat_mode = FALSE
|
||||
|
||||
maints_access_required = list(ACCESS_ROBOTICS, ACCESS_THEATRE)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
speed = 3
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
combat_mode = TRUE //No swapping
|
||||
buckle_lying = 0
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
anchored = FALSE
|
||||
health = 25
|
||||
maxHealth = 25
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
damage_coeff = list(BRUTE = 0.5, BURN = 0.7, TOX = 0, STAMINA = 0, OXY = 0)
|
||||
pass_flags = PASSMOB | PASSFLAPS
|
||||
combat_mode = TRUE
|
||||
|
||||
|
||||
@@ -56,14 +56,6 @@
|
||||
else if(damage_coeff[TOX])
|
||||
. = adjustHealth(amount * damage_coeff[TOX] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/simple_animal/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype)
|
||||
if(!can_adjust_clone_loss(amount, forced, required_biotype))
|
||||
return 0
|
||||
if(forced)
|
||||
. = adjustHealth(amount * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
else if(damage_coeff[CLONE])
|
||||
. = adjustHealth(amount * damage_coeff[CLONE] * CONFIG_GET(number/damage_multiplier), updating_health, forced)
|
||||
|
||||
/mob/living/simple_animal/adjustStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype)
|
||||
if(!can_adjust_stamina_loss(amount, forced, required_biotype))
|
||||
return 0
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
ranged_ignores_vision = TRUE
|
||||
stat_attack = DEAD
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = INFINITY
|
||||
vision_range = 5
|
||||
|
||||
@@ -308,7 +308,7 @@
|
||||
melee_damage_upper = 30
|
||||
melee_damage_lower = 30
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
loot = list()
|
||||
crusher_loot = list()
|
||||
butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30)
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
name = "Gelatinous Cube"
|
||||
desc = "A cubic ooze native to Sholus VII.\nSince the advent of space travel this species has established itself in the waste treatment facilities of several space colonies.\nIt is often considered to be the third most infamous invasive species due to its highly aggressive and predatory nature."
|
||||
speed = 1
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.6, TOX = 0.5, CLONE = 1.5, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.6, TOX = 0.5, STAMINA = 0, OXY = 1)
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
armour_penetration = 15
|
||||
@@ -253,14 +253,14 @@
|
||||
UnregisterSignal(vored_mob, COMSIG_QDELETING)
|
||||
vored_mob = null
|
||||
|
||||
///Gain health for the consumption and dump some clone loss on the target.
|
||||
///Gain health for the consumption and dump some brute loss on the target.
|
||||
/datum/action/consume/process()
|
||||
var/mob/living/simple_animal/hostile/ooze/gelatinous/ooze = owner
|
||||
vored_mob.adjustBruteLoss(5)
|
||||
ooze.heal_ordered_damage((ooze.maxHealth * 0.03), list(BRUTE, BURN, OXY)) ///Heal 6% of these specific damage types each process
|
||||
ooze.adjust_ooze_nutrition(3)
|
||||
|
||||
///Dump em at 200 cloneloss.
|
||||
///Dump em at 200 bruteloss.
|
||||
if(vored_mob.getBruteLoss() >= 200)
|
||||
stop_consuming()
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
speed = 1
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.8, TOX = 0.5, CLONE = 1.5, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.8, TOX = 0.5, STAMINA = 0, OXY = 1)
|
||||
melee_damage_lower = 12
|
||||
melee_damage_upper = 12
|
||||
obj_damage = 15
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
health = 250
|
||||
maxHealth = 250
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 1, CLONE = 2, STAMINA = 0, OXY = 1)
|
||||
damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
obj_damage = 40
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
///Damage type of a simple mob's melee attack, should it do damage.
|
||||
var/melee_damage_type = BRUTE
|
||||
/// 1 for full damage , 0 for none , -1 for 1:1 heal from that source.
|
||||
var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
var/list/damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
|
||||
///Attacking verb in present continuous tense.
|
||||
var/attack_verb_continuous = "attacks"
|
||||
///Attacking verb in present simple tense.
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
projectile_type = /obj/projectile/ion/weak
|
||||
e_cost = LASER_SHOTS(4, STANDARD_CELL_CHARGE * 1.2)
|
||||
|
||||
/obj/item/ammo_casing/energy/declone
|
||||
projectile_type = /obj/projectile/energy/declone
|
||||
/obj/item/ammo_casing/energy/radiation
|
||||
projectile_type = /obj/projectile/energy/radiation
|
||||
select_name = "declone"
|
||||
fire_sound = 'sound/weapons/pulse3.ogg'
|
||||
|
||||
/obj/item/ammo_casing/energy/declone/weak
|
||||
projectile_type = /obj/projectile/energy/declone/weak
|
||||
/obj/item/ammo_casing/energy/radiation/weak
|
||||
projectile_type = /obj/projectile/energy/radiation/weak
|
||||
|
||||
/obj/item/ammo_casing/energy/flora
|
||||
fire_sound = 'sound/effects/stealthoff.ogg'
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
// Only actual lasguns can be converted
|
||||
if(type != /obj/item/gun/energy/laser)
|
||||
return
|
||||
var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/xraylaser, /datum/crafting_recipe/hellgun, /datum/crafting_recipe/ioncarbine, /datum/crafting_recipe/decloner)
|
||||
var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/xraylaser, /datum/crafting_recipe/hellgun, /datum/crafting_recipe/ioncarbine)
|
||||
|
||||
AddComponent(
|
||||
/datum/component/slapcrafting,\
|
||||
|
||||
@@ -33,23 +33,6 @@
|
||||
// We use the same overlay as the parent, so we can just let the component inherit the correct offsets here
|
||||
AddComponent(/datum/component/seclite_attachable, overlay_x = 18, overlay_y = 11)
|
||||
|
||||
/obj/item/gun/energy/decloner
|
||||
name = "biological demolecularisor"
|
||||
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
|
||||
icon_state = "decloner"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/declone)
|
||||
ammo_x_offset = 1
|
||||
|
||||
/obj/item/gun/energy/decloner/update_overlays()
|
||||
. = ..()
|
||||
var/obj/item/ammo_casing/energy/shot = ammo_type[select]
|
||||
if(!QDELETED(cell) && (cell.charge > shot.e_cost))
|
||||
. += "decloner_spin"
|
||||
|
||||
/obj/item/gun/energy/decloner/unrestricted
|
||||
pin = /obj/item/firing_pin
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/declone/weak)
|
||||
|
||||
/obj/item/gun/energy/floragun
|
||||
name = "floral somatoray"
|
||||
desc = "A tool that discharges controlled radiation which induces mutation in plant cells."
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user