Bugs, Bugs Everywhere. (#1351)

Fixes #1333 and Fixes #1331
IPCs, and indeed anyone with robotic organs or plant organs, can be rejuv'd properly.
IPCs now have their damage shown on VV, more or less.
IPCs have their brutemod set to 0.8, since prosthetic limbs already have brute mods of their own, and so Industrial IPCs could have a brute mod of 0.5 instead of 0.3
Probably some other stuff. It's all in the diff.
This commit is contained in:
LordFowl
2016-12-31 04:17:02 +02:00
committed by skull132
parent d8a421ae0a
commit 7ccdf4e815
18 changed files with 115 additions and 54 deletions
@@ -29,16 +29,16 @@
)
/obj/item/clothing/head/helmet/space/rig/terminator
species_restricted = list("Hunter-Killer")
species_restricted = list("Machine")
/obj/item/clothing/suit/space/rig/terminator
species_restricted = list("Hunter-Killer")
species_restricted = list("Machine")
/obj/item/clothing/shoes/magboots/rig/terminator
species_restricted = list("Hunter-Killer")
species_restricted = list("Machine")
/obj/item/clothing/gloves/rig/terminator
species_restricted = list("Hunter-Killer")
species_restricted = list("Machine")
/obj/item/weapon/rig/terminator/equipped
initial_modules = list(
@@ -70,7 +70,7 @@
/mob/living/carbon/human/getBruteLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_ROBOT)
if((O.status & ORGAN_ROBOT) && !O.vital)
continue //robot limbs don't count towards shock and crit
amount += O.brute_dam
return amount
@@ -78,7 +78,7 @@
/mob/living/carbon/human/getFireLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
if(O.status & ORGAN_ROBOT)
if((O.status & ORGAN_ROBOT) && !O.vital)
continue //robot limbs don't count towards shock and crit
amount += O.burn_dam
return amount
@@ -267,12 +267,14 @@
src << "<span class='warning'>You cannot do that in your current state.</span>"
return
for(var/mob/M in range(7, src))
for(var/mob/living/M in range(7, src))
M << 'sound/effects/EMPulse.ogg'
for(var/obj/item/weapon/material/shard/shrapnel/flechette/F in M.contents)
playsound(F, 'sound/items/countdown.ogg', 125, 1)
spawn(20)
explosion(F.loc, -1, -1, 2)
M.apply_damage(20,BRUTE)
M.apply_damage(15,BURN)
qdel(F)
for(var/obj/item/weapon/material/shard/shrapnel/flechette/F in range(7, src))
@@ -287,6 +289,10 @@
set name = "State Laws"
set desc = "State your laws aloud."
if(stat)
src << "<span class='warning'>You cannot do that in your current state.</span>"
return
if(last_special > world.time)
return
last_special = world.time + 20
@@ -380,7 +386,7 @@
sleep(10)
playsound(src, 'sound/items/countdown.ogg', 125, 1)
sleep(20)
explosion(src, -1, -1, 5)
explosion(src, -1, 1, 5)
src.gib()
/mob/living/carbon/human/proc/hivenet()
@@ -117,3 +117,4 @@
/mob/living/carbon/human/terminator
mob_size = 30
offset_light = 1
@@ -63,6 +63,7 @@
var/radiation_mod = 1 // Radiation modifier
var/flash_mod = 1 // Stun from blindness modifier.
var/vision_flags = SEE_SELF // Same flags as glasses.
var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
// Death vars.
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
@@ -68,8 +68,8 @@
short_name = "ind"
name_plural = "Industrials"
brute_mod = 0.3
burn_mod = 1.2
brute_mod = 0.5
burn_mod = 1.3
slowdown = 4
blurb = "Tough units made for engineering and security with simple exteriors, roughly resembling humans. No job restrictions. Heavy emphasis on \
@@ -98,9 +98,9 @@
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial)
)
heat_level_1 = 800
heat_level_2 = 1300
heat_level_3 = 2500
heat_level_1 = 600
heat_level_2 = 1200
heat_level_3 = 2400
heat_discomfort_level = 800
@@ -145,10 +145,11 @@
eyes = "eyes_terminator"
has_floating_eyes = 1
brute_mod = 0.2
burn_mod = 0.4
brute_mod = 0.3
burn_mod = 0.5
flash_mod = 0
siemens_coefficient = 0
breakcuffs = list(MALE,FEMALE,NEUTER)
show_ssd = "laying inert, its activation glyph dark."
death_sound = 'sound/effects/bang.ogg'
@@ -179,7 +180,7 @@
has_organ = list(
"brain" = /obj/item/organ/mmi_holder/posibrain/terminator,
"shielded cell" = /obj/item/organ/cell/terminator,
"optics" = /obj/item/organ/optical_sensor,
"optics" = /obj/item/organ/optical_sensor/terminator,
"data core" = /obj/item/organ/data
)
@@ -223,13 +224,9 @@
playsound(H.loc, 'sound/machines/buzz-two.ogg', 100, 0)
return 0
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
/datum/species/machine/terminator/handle_death(var/mob/living/carbon/human/H)
..()
spawn(10)
playsound(H.loc, 'sound/items/countdown.ogg', 125, 1)
spawn(20)
explosion(H, -1, -1, 5)
H.gib()
/datum/species/machine/sanitize_name(var/new_name)
return sanitizeName(new_name, allow_numbers = 1)
playsound(H.loc, 'sound/items/countdown.ogg', 125, 1)
spawn(15)
explosion(H.loc, -1, 1, 5)
H.gib()
@@ -48,6 +48,7 @@
sprint_cost_factor = 1.45
exhaust_threshold = 65
rarity_value = 3
breakcuffs = list(MALE)
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
Uuosa-Eso system, which roughly translates to 'burning mother'.<br/><br/>Coming from a harsh, radioactive \
@@ -352,7 +353,7 @@
radiation_mod = 0 // not affected by radiation
// #TODO-MERGE: Check for balance and self-repair. If self-repair is a thing, RIP balance.
brute_mod = 0.5
brute_mod = 0.8
burn_mod = 1.0
show_ssd = "flashing a 'system offline' glyph on their monitor"
death_message = "gives one shrill beep before falling lifeless."
@@ -375,7 +376,7 @@
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON | NO_MINOR_CUT
appearance_flags = HAS_SKIN_COLOR
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#1F181F"
@@ -49,6 +49,7 @@
brute_mod = 0.2 //note to self: remove is_synthetic checks for brmod and burnmod
burn_mod = 0.8 //2x was a bit too much. we'll see how this goes.
toxins_mod = 1 //they're not used to all our weird human bacteria.
breakcuffs = list(MALE,FEMALE,NEUTER)
speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
speech_chance = 100
+3 -2
View File
@@ -107,7 +107,7 @@
if(HULK in mutations)
return 1
if (get_species() == "Unathi" && gender == "male")
if(src.gender in src.species.breakcuffs)
return 1
return 0
@@ -127,7 +127,8 @@
"<span class='warning'>You successfully break your [handcuffed.name].</span>"
)
say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" ))
if((get_species() == "Unathi") || (HULK in mutations))
say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" ))
qdel(handcuffed)
handcuffed = null
+4 -3
View File
@@ -25,6 +25,7 @@ var/list/organ_cache = list()
germ_level = 0
var/datum/dna/dna
var/datum/species/species
var/emp_coeff = 1 //coefficient for damages taken by EMP, if the organ is robotic.
/obj/item/organ/Destroy()
if(!owner)
@@ -265,13 +266,13 @@ var/list/organ_cache = list()
return
switch (severity)
if (1.0)
take_damage(20)
take_damage(rand(7,20) * emp_coeff)
return
if (2.0)
take_damage(7)
take_damage(rand(3,7) * emp_coeff)
return
if(3.0)
take_damage(3)
take_damage(rand(3) * emp_coeff)
/obj/item/organ/proc/removed(var/mob/living/user)
+13 -4
View File
@@ -57,6 +57,7 @@
var/can_grasp //It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
var/can_stand
var/body_hair
var/painted = 0
/obj/item/organ/external/Destroy()
if(parent && parent.children)
@@ -343,10 +344,14 @@ This function completely restores a damaged organ to perfect condition.
*/
/obj/item/organ/external/rejuvenate()
damage_state = "00"
if(status & 128) //Robotic organs stay robotic. Fix because right click rejuvinate makes IPC's organs organic.
status = 128
else
status = 0
src.status &= ~ORGAN_BROKEN
src.status &= ~ORGAN_BLEEDING
src.status &= ~ORGAN_SPLINTED
src.status &= ~ORGAN_CUT_AWAY
src.status &= ~ORGAN_DESTROYED
src.status &= ~ORGAN_DEAD
src.status &= ~ORGAN_MUTATED
src.status &= ~ORGAN_SPLINTED
perma_injury = 0
brute_dam = 0
burn_dam = 0
@@ -932,10 +937,14 @@ Note that amputating the affected organ does in fact remove the infection from t
if(company)
model = company
var/datum/robolimb/R = all_robolimbs[company]
if(species && !(species.name in R.species_can_use))
R = basic_robolimb
if(R)
force_icon = R.icon
name = "[R.company] [initial(name)]"
desc = "[R.desc]"
if(R.paintable)
painted = 1
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
cannot_break = 1
+3
View File
@@ -95,6 +95,9 @@ var/global/list/limb_icon_cache = list()
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
if(painted)
if(s_col && s_col.len >= 3)
mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD)
else
if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
+3 -1
View File
@@ -16,6 +16,7 @@ var/global/datum/robolimb/basic_robolimb
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
var/list/species_can_use = list("Human","Skrell","Tajara","Zhan-Khaza","M'sai","Unathi","Vaurca Worker","Vaurca Warrior","Baseline Frame")
var/paintable = 0 //tired of istype exceptions. bullshirt to find, and by god do i know it after this project.
/datum/robolimb/bishop
company = "Bishop Cybernetics"
@@ -40,8 +41,9 @@ var/global/datum/robolimb/basic_robolimb
/datum/robolimb/ipc
company = "Hephaestus Integrated Limb"
desc = "This limb is simple and functional; no effort has been made to make it look human."
icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
icon = 'icons/mob/human_races/r_machine.dmi'
unavailable_at_chargen = 1
paintable = 1
/datum/robolimb/industrial
company = "Hephaestus Industrial Limb"
+50 -12
View File
@@ -176,6 +176,7 @@
organ_tag = "brain"
parent_organ = "chest"
vital = 1
emp_coeff = 0.1
/obj/item/organ/data
name = "data core"
@@ -184,6 +185,7 @@
icon = 'icons/obj/cloning.dmi'
icon_state = "harddisk"
vital = 0
emp_coeff = 0.1
/obj/item/organ/data/New()
robotize()
@@ -197,9 +199,10 @@
organ_tag = "shielded cell"
parent_organ = "chest"
vital = 1
emp_coeff = 0.1
/obj/item/organ/cell/New()
mechassist()
robotize()
..()
/obj/item/organ/external/head/terminator
@@ -209,70 +212,105 @@
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
encased = null
emp_coeff = 0.5
/obj/item/organ/optical_sensorterminator
name = "optical sensor"
organ_tag = "optics"
parent_organ = "head"
icon = 'icons/obj/robot_component.dmi'
icon_state = "camera"
dead_icon = "camera_broken"
emp_coeff = 0.5
/obj/item/organ/optical_sensor/terminator/New()
robotize()
..()
/obj/item/organ/external/head/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/chest/terminator
dislocated = -1
encased = null
emp_coeff = 0.5
/obj/item/organ/external/chest/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/groin/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/groin/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/arm/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/arm/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/arm/right/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/arm/right/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/leg/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/leg/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/leg/right/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/leg/right/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/foot/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/foot/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/foot/right/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/foot/right/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/hand/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/hand/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/hand/right/terminator
dislocated = -1
emp_coeff = 0.5
/obj/item/organ/external/hand/right/terminator/New()
mechassist("Hephaestus Vulcanite Limb")
robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/head/industrial
@@ -340,7 +340,7 @@
"<span class='danger'>You hear a low pulsing roar!</span>"
)
is_charging = 1
sleep(90)
sleep(60)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
@@ -430,7 +430,7 @@
"<span class='danger'>You hear a low pulsing roar!</span>"
)
is_charging = 1
sleep(90)
sleep(60)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
@@ -338,7 +338,7 @@
fire_delay = 20
accuracy = -4
accuracy = -1
//wielding information
fire_delay_wielded = 5
@@ -387,11 +387,11 @@
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
recoil = 3
accuracy = -2
fire_delay = 10
recoil_wielded = 0
fire_delay_wielded = 6
accuracy_wielded = 0
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB