Merge branch 'master' into development

# Conflicts:
#	html/changelogs/.all_changelog.yml
#	maps/aurora/aurora-4_mainlevel.dmm
#	maps/aurora/aurora-7_roof.dmm
This commit is contained in:
skull132
2018-10-07 01:33:20 +03:00
50 changed files with 6490 additions and 6249 deletions
+3
View File
@@ -266,6 +266,9 @@
qdel(src)
/mob/living/bot/secbot/ed209/RangedAttack(var/atom/A)
if(!(target in view(7, src)))
walk_to(src, target, 6, move_to_delay)
return
if(last_shot + shot_delay > world.time)
src << "You are not ready to fire yet!"
return
+1
View File
@@ -80,6 +80,7 @@
/mob/living/bot/secbot/turn_off()
..()
walk_to(src, src, 0, move_to_delay)
target = null
frustration = 0
mode = SECBOT_IDLE
+30 -39
View File
@@ -8,8 +8,8 @@
#define NYMPH_ABSORB_NUTRITION 650
#define NYMPH_ABSORB_DEAD_FACTOR 0.3
#define REGROW_FOOD_REQ 100
#define REGROW_ENERGY_REQ 40
#define REGROW_FOOD_REQ 150
#define REGROW_ENERGY_REQ 60
#define LANGUAGE_POINTS_TO_LEARN 3 //The number of samples of a language required to learn it
@@ -118,12 +118,9 @@ var/list/diona_banned_languages = list(
//Most medicines don't work on diona, but physical treatment for external wounds helps a little,
//and some alternative things that are toxic to other life, such as radium and mutagen, will benefit diona
/mob/living/carbon/proc/diona_handle_regeneration(var/datum/dionastats/DS)
if ((DS.stored_energy < 1 && !total_radiation)) //we need energy or radiation to heal
if ((DS.stored_energy < 1 && !total_radiation)) //we need energy or total_radiation to heal
return FALSE
var/radiation = max(total_radiation, 0)
var/value //A little variable we'll reuse to optimise
var/CL //Cached loss, to save on repeatedly recalculating it
var/HF = DS.healing_factor //I don't know if fetching a variable from an object repeatedly is slow, but this seems safe
@@ -134,10 +131,10 @@ var/list/diona_banned_languages = list(
if (getHalLoss() > 0)
CL = getHalLoss()
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF)
adjustHalLoss(value*-3,1) //Halloss heals more quickly
radiation -= value
total_radiation -= value
CL = getHalLoss()
value = min(CL, DS.stored_energy, 1*HF)
@@ -151,10 +148,10 @@ var/list/diona_banned_languages = list(
CL = getBruteLoss()
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF)
adjustBruteLoss(value*-1)
radiation -= value
total_radiation -= value
CL = getBruteLoss() //After adjusting it, recalculate for the lighthealing
value = min(CL, DS.stored_energy, 1*HF)
@@ -163,10 +160,10 @@ var/list/diona_banned_languages = list(
CL = getFireLoss()
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF)
adjustFireLoss(value*-1)
radiation -= value
total_radiation -= value
CL = getFireLoss()
value = min(CL, DS.stored_energy, 1*HF)
@@ -175,10 +172,10 @@ var/list/diona_banned_languages = list(
CL = stunned
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF)
stunned -= value
radiation -= value
total_radiation -= value
CL = stunned
value = min(CL, DS.stored_energy, 1*HF)
@@ -188,10 +185,10 @@ var/list/diona_banned_languages = list(
CL = weakened
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF)
weakened -= value
radiation -= value
total_radiation -= value
CL = weakened
value = min(CL, DS.stored_energy, 1*HF)
@@ -202,10 +199,10 @@ var/list/diona_banned_languages = list(
if (life_tick % LIFETICK_INTERVAL_LESS == 0)
CL = getToxLoss()
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF*LIFETICK_INTERVAL_LESS)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF*LIFETICK_INTERVAL_LESS)
adjustToxLoss(value*-1)
radiation -= value
total_radiation -= value
CL = getToxLoss()
value = min(CL, DS.stored_energy, 1*HF*LIFETICK_INTERVAL_LESS)
@@ -215,10 +212,10 @@ var/list/diona_banned_languages = list(
CL = getCloneLoss()
if (CL > 0)
if (radiation > 0)
value = min(CL, radiation, 2*HF*LIFETICK_INTERVAL_LESS)
if (total_radiation > 0)
value = min(CL, total_radiation, 2*HF*LIFETICK_INTERVAL_LESS)
adjustCloneLoss(value/-2.5) //Genetic damage, should diona ever suffer it, heals much more slowly.
radiation -= value //Most likely the only time they'll cloneloss is escaping from being partially devoured
total_radiation -= value //Most likely the only time they'll cloneloss is escaping from being partially devoured
CL = getCloneLoss()
value = min(CL, DS.stored_energy, 1*HF*LIFETICK_INTERVAL_LESS)
@@ -229,21 +226,15 @@ var/list/diona_banned_languages = list(
updatehealth()
return FALSE
// A little inter-proc communication.
// We need the continued radiation count for the sake of actually working.
return max(radiation, 0)
// Continuation of the Diona regen proc, but for human specific actions.
/mob/living/carbon/human/diona_handle_regeneration(var/datum/dionastats/DS)
. = ..()
..()
// We cancel with regening organ, as it's meant to stop all other regenerative
// processes. Just pray to shit the timers don't implode.
if (!. || DS.regening_organ)
if ((!total_radiation && !DS.healing_factor && !DS.stored_energy) || DS.regening_organ)
return FALSE
var/radiation = .
//Next up, healing any damage to internal organs.
//Diona really only have one critical organ, the light receptor node in the head.
//If badly damaged, the light receptor reduces the effectiveness of incoming light
@@ -253,10 +244,10 @@ var/list/diona_banned_languages = list(
for (var/obj/item/organ/O in bad_internal_organs)
var/CL = O.damage
var/value
if (radiation > 0)
value = min(CL, radiation, 2 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
if(total_radiation > 0)
value = min(CL, total_radiation, 2 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
O.damage += value/-1.5
radiation -= value
total_radiation -= value
CL = getCloneLoss()
value = min(CL, DS.stored_energy, 1 * DS.healing_factor * LIFETICK_INTERVAL_LESS)
@@ -426,7 +417,7 @@ var/list/diona_banned_languages = list(
var/HP = 1 //HP = health-percentage
if (DS.LMS == 4)
if (HP < 0.6)
to_chat(src, "<span class='danger'>The darkness burns. Your nymphs decay and wilt You are in mortal danger!</span>")
to_chat(src, "<span class='danger'>The darkness burns. Your nymphs decay and wilt. You are in mortal danger!</span>")
DS.LMS = 5
else if (DS.LMS == 5)
@@ -7,22 +7,35 @@
var/skipears = 0
var/skipeyes = 0
var/skipface = 0
var/skipbody = 0
//exosuits and helmets obscure our view and stuff.
if(wear_suit)
skipbody |= wear_suit.body_parts_covered
skipgloves = wear_suit.flags_inv & HIDEGLOVES
skipsuitstorage = wear_suit.flags_inv & HIDESUITSTORAGE
skipjumpsuit = wear_suit.flags_inv & HIDEJUMPSUIT
skipshoes = wear_suit.flags_inv & HIDESHOES
if(head)
skipbody |= head.body_parts_covered
skipbody &= ~HEAD // head covering incorrectly hides 'face' damage
skipbody |= (skipbody & FACE) ? HEAD : 0 // if you hide face damage, however, then go ahead and hide head damage, since that's where face damage is
skipmask = head.flags_inv & HIDEMASK
skipeyes = head.flags_inv & HIDEEYES
skipears = head.flags_inv & HIDEEARS
skipface = head.flags_inv & HIDEFACE
if(wear_mask)
skipbody |= wear_mask.body_parts_covered
skipbody |= (wear_mask.body_parts_covered & FACE) ? HEAD : 0 // same as above
skipface |= wear_mask.flags_inv & HIDEFACE
if(w_uniform)
skipbody |= w_uniform.body_parts_covered
if(gloves)
skipbody |= gloves.body_parts_covered
var/list/msg = list("<span class='info'>*---------*\nThis is ")
@@ -261,9 +274,11 @@
wound_flavor_text["[organ_descriptor]"] = "<span class='warning'><b>[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.</b></span>\n"
else
continue
for(var/obj/item/organ/external/temp in organs)
if(temp)
if(skipbody & temp.body_part)
continue
if(temp.status & ORGAN_ROBOT)
if(!(temp.brute_dam + temp.burn_dam))
//wound_flavor_text["[temp.name]"] = "<span class='warning'>[T.He] [T.has] a robot [temp.name]!</span>\n"
@@ -44,8 +44,8 @@
else if(E.status & ORGAN_BROKEN)
tally += 1.5
if(shock_stage >= 10) tally += 3
if (!(species && (species.flags & NO_PAIN)))
if(shock_stage >= 10) tally += 3
if(aiming && aiming.aiming_at) tally += 5 // Iron sights make you slower, it's a well-known fact.
@@ -274,7 +274,7 @@
examine_color = "#bc4b00"
blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. This unit cannot perform EVA"
blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. This unit cannot perform EVA without a suit."
has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest/industrial/xion),
@@ -94,6 +94,10 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/proc/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
if(!affecting)
return
user.visible_message("<span class='warning'>[user] [pick(attack_verb)] [target] in the [affecting.name]!</span>")
playsound(user.loc, attack_sound, 25, 1, -1)
@@ -131,6 +135,10 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
if(!affecting)
return
var/organ = affecting.name
attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
@@ -203,6 +211,10 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
if(!affecting)
return
var/organ = affecting.name
attack_damage = Clamp(attack_damage, 1, 5)
@@ -246,7 +258,12 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/stomp/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
if(!affecting)
return
var/organ = affecting.name
var/obj/item/clothing/shoes = user.shoes
attack_damage = Clamp(attack_damage, 1, 5)
@@ -281,6 +281,9 @@
/mob/living/carbon/slime/proc/handle_AI() // the master AI process
if(Victim && Victim.stat & DEAD)
Victim = null
if(stat == DEAD || client || Victim) return // If we're dead or have a client, we don't need AI, if we're feeding, we continue feeding
AIproc = 1
+1 -1
View File
@@ -27,7 +27,7 @@ calculate text size per text.
for(var/datum/reagent/R in reagent_list)
if(!R.taste_mult)
continue
if(R.id == "nutriment") //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
if(R.id == "nutriment" || R.id == "synnutriment") //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
var/list/taste_data = R.get_data()
for(var/taste in taste_data)
if(taste in tastes)
@@ -749,7 +749,6 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gripper/chemistry(src)
src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
src.modules += new /obj/item/device/reagent_scanner/adv(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/storage/bag/plants(src)
src.modules += new /obj/item/weapon/pen/robopen(src)
src.emag = new /obj/item/weapon/hand_tele(src)