Merge branch 'master' of https://github.com/tgstation/-tg-station into #verifyvenuz

# Conflicts:
#	icons/obj/guns/projectile.dmi
This commit is contained in:
Incoming
2015-12-26 14:19:58 -05:00
105 changed files with 735 additions and 5817 deletions
+2 -2
View File
@@ -132,9 +132,9 @@
/obj/item/device/assembly/flash/emp_act(severity)
if(!try_use_flash())
if(!try_use_flash() || !loc)
return 0
for(var/mob/living/carbon/M in viewers(3, null))
for(var/mob/living/carbon/M in viewers(3, loc))
flash_carbon(M, null, 10, 0)
burn_out()
..()
+3 -4
View File
@@ -13,9 +13,8 @@
Nanotrasen's operational area and start your new life.<br><br>\
<b>Gateway Operation Basics</b><br>\
All Nanotrasen approved Gateways operate on the same basic principals. They operate off \
area equipment power as you would expect, but they also require a backup wire with at least \
128, 000 Watts of power running through it. Without this supply, it cannot safely function \
and will reject all attempts at operation.<br><br>\
area equipment power as you would expect, and without this supply, it cannot safely function, \
causinng it to reject all attempts at operation.<br><br>\
Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \
searching for an output location. The amount of time this takes is variable, but the Gateway \
interface will give you an estimate accurate to the minute. Power loss will not interrupt the \
@@ -35,4 +34,4 @@
//we don't want the silly text overlay!
/obj/item/weapon/paper/pamphlet/update_icon()
return
return
+5 -2
View File
@@ -68,7 +68,7 @@
var/copiedobjs = list()
for (var/turf/T in refined_src)
for (var/turf/simulated/T in refined_src)
//var/datum/coords/C_src = refined_src[T]
var/coordstring = refined_src[T]
var/turf/B = refined_trg[coordstring]
@@ -83,7 +83,7 @@
var/old_icon_state1 = T.icon_state
var/old_icon1 = T.icon
var/turf/X = new T.type(B)
var/turf/simulated/X = new T.type(B)
X.dir = old_dir1
X.icon = old_icon1
X.icon_state = old_icon_state1
@@ -100,6 +100,9 @@
var/global/list/forbidden_vars = list("type","stat","loc","locs","vars", "parent", "parent_type","verbs","ckey","key","x","y","z","contents", "luminosity")
for(var/V in T.vars - forbidden_vars)
if(V == "air")
X.air.copy_from(T.air)
continue
X.vars[V] = T.vars[V]
toupdate += X
+5 -7
View File
@@ -406,7 +406,11 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
else
log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs")
alert("Upload Complete. Uploaded title will be unavailable for printing for a short period")
if(href_list["orderbyid"])
var/orderid = input("Enter your order:") as num|null
if(orderid)
if(isnum(orderid))
href_list["targetid"] = orderid
if(href_list["targetid"])
var/sqlid = sanitizeSQL(href_list["targetid"])
establish_db_connection()
@@ -433,12 +437,6 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
B.icon_state = "book[rand(1,7)]"
src.visible_message("[src]'s printer hums as it produces a completely bound book. How did it do that?")
break
if(href_list["orderbyid"])
var/orderid = input("Enter your order:") as num|null
if(orderid)
if(isnum(orderid))
var/nhref = "src=\ref[src];targetid=[orderid]"
spawn() src.Topic(nhref, params2list(nhref), src)
src.add_fingerprint(usr)
src.updateUsrDialog()
return
@@ -238,7 +238,7 @@
else
dat += "<tr><td><B>Uniform:</B></td><td><A href='?src=\ref[src];item=[slot_w_uniform]'>[(w_uniform && !(w_uniform.flags&ABSTRACT)) ? w_uniform : "<font color=grey>Empty</font>"]</A></td></tr>"
if(w_uniform == null || (slot_w_uniform in obscured) || (dna && dna.species.nojumpsuit))
if((w_uniform == null && !(dna && dna.species.nojumpsuit)) || (slot_w_uniform in obscured))
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Pockets:</B></font></td></tr>"
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>ID:</B></font></td></tr>"
dat += "<tr><td><font color=grey>&nbsp;&#8627;<B>Belt:</B></font></td></tr>"
@@ -347,7 +347,7 @@
if(istype(AM, /obj/item))
I = AM
throwpower = I.throwforce
if(check_shields(throwpower, "\the [AM.name]", AM, THROWN_PROJECTILE_ATTACK))
if(I.thrownby != src && check_shields(throwpower, "\the [AM.name]", AM, THROWN_PROJECTILE_ATTACK))
hitpush = 0
skipcatch = 1
blocked = 1
@@ -37,6 +37,14 @@
weaponscheck = 0
auto_patrol = 1
/mob/living/simple_animal/bot/secbot/beepsky/explode()
var/turf/Tsec = get_turf(src)
new /obj/item/weapon/stock_parts/cell/potato(Tsec)
var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/S = new(Tsec)
S.list_reagents = list("whiskey" = 15)
S.on_reagent_change()
..()
/mob/living/simple_animal/bot/secbot/pingsky
name = "Officer Pingsky"
desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment."
@@ -20,17 +20,13 @@
ventcrawler = 2
gold_core_spawnable = 2
var/squish_chance = 50
loot = list(/obj/effect/decal/cleanable/deadcockroach)
del_on_death = 1
/mob/living/simple_animal/cockroach/death(gibbed)
if(ticker.cinematic) //If the nuke is going off, then cockroaches are invincible. Keeps the nuke from killing them, cause cockroaches are immune to nukes.
return
if(!ckey || gibbed)// stupid staff of change fucking everything up.
..(1)
new /obj/effect/decal/cleanable/deadcockroach(src.loc)
qdel(src)
return
else
..()
..()
/mob/living/simple_animal/cockroach/Crossed(var/atom/movable/AM)
if(ismob(AM))
@@ -183,7 +183,7 @@
)
if( ! ( item_to_add.type in allowed_types ) )
usr << "<span class='warning'>You set [item_to_add] on [src]'s back, but \he shakes it off!</span>"
usr << "<span class='warning'>You set [item_to_add] on [src]'s back, but it falls off!</span>"
if(!usr.drop_item())
usr << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!</span>"
return
@@ -260,7 +260,7 @@
if(user && !user.drop_item())
user << "<span class='warning'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
return 0
user << "<span class='warning'>You set [item_to_add] on [src]'s head, but \he shakes it off!</span>"
user << "<span class='warning'>You set [item_to_add] on [src]'s head, but it falls off!</span>"
item_to_add.loc = loc
if(prob(25))
step_rand(item_to_add)
@@ -658,6 +658,7 @@
user << "[G.bio_fluff_string]."
G.attacktext = "swarms"
G.speak_emote = list("chitters")
G.mind.name = "[G.real_name]"
/obj/item/weapon/guardiancreator/choose
random = FALSE
@@ -26,6 +26,7 @@
//Spaceborn beings don't get hurt by space
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
del_on_death = 1
/mob/living/simple_animal/hostile/poison/bees/Process_Spacemove(movement_dir = 0)
return 1
@@ -34,12 +35,6 @@
..()
update_bees()
/mob/living/simple_animal/hostile/poison/bees/death(gibbed)
..(1)
ghostize()
qdel(src)
return
/mob/living/simple_animal/hostile/poison/bees/Life()
..()
update_bees()
@@ -47,12 +47,7 @@
icon_living = "holocarp"
maxbodytemp = INFINITY
gold_core_spawnable = 0
/mob/living/simple_animal/hostile/carp/holocarp/death()
..(1)
ghostize()
qdel(src)
return
del_on_death = 1
/mob/living/simple_animal/hostile/carp/megacarp
icon = 'icons/mob/alienqueen.dmi'
@@ -23,9 +23,4 @@
flying = 1
faction = list("spooky")
/mob/living/simple_animal/hostile/carp/eyeball/death()
..(1)
ghostize()
qdel(src)
del_on_death = 1
@@ -250,7 +250,7 @@
C.player_spiders = 1
C.poison_type = poison_type
C.poison_per_bite = poison_per_bite
C.faction = faction
C.faction = faction.Copy()
fed--
busy = 0
stop_automated_movement = 0
@@ -23,6 +23,12 @@
minbodytemp = 0
speak_emote = list("states")
gold_core_spawnable = 1
del_on_death = 1
loot = (/obj/effect/decal/cleanable/robot_debris)
/mob/living/simple_animal/hostile/hivebot/New()
..()
deathmessage = "[src] blows apart!"
/mob/living/simple_animal/hostile/hivebot/range
name = "hivebot"
@@ -44,12 +50,7 @@
ranged = 1
/mob/living/simple_animal/hostile/hivebot/death(gibbed)
..(1)
visible_message("<span class='warning'>[src] blows apart!</span>")
new /obj/effect/decal/cleanable/robot_debris(src.loc)
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
ghostize()
qdel(src)
return
..(1)
@@ -16,6 +16,7 @@
var/life_span = INFINITY //how long until they despawn
var/mob/living/parent_mob
var/multiply_chance = 0 //if we multiply on hit
del_on_death = 1
/mob/living/simple_animal/hostile/illusion/Life()
@@ -33,13 +34,14 @@
melee_damage_upper = damage
multiply_chance = replicate
faction -= "neutral"
transform = initial(transform)
pixel_y = initial(pixel_y)
pixel_x = initial(pixel_x)
/mob/living/simple_animal/hostile/illusion/death()
/mob/living/simple_animal/hostile/illusion/New()
..()
visible_message("<span class='warning'>[src] vanishes in a puff of smoke! It was a fake!</span>")
qdel(src)
deathmessage = "[src] vanishes into thin air! It was a fake!"
/mob/living/simple_animal/hostile/illusion/examine(mob/user)
if(parent_mob)
@@ -71,4 +73,4 @@
/mob/living/simple_animal/hostile/illusion/escape/AttackingTarget()
return
return
@@ -27,12 +27,7 @@
faction = list("mimic")
move_to_delay = 9
gold_core_spawnable = 1
/mob/living/simple_animal/hostile/mimic/death()
..(1)
visible_message("[src] stops moving!")
ghostize()
qdel(src)
del_on_death = 1
// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies.
/mob/living/simple_animal/hostile/mimic/crate
@@ -119,6 +114,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy/Life()
..()
if(!target && !ckey) //Objects eventually revert to normal if no one is around to terrorize
adjustBruteLoss(1)
for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell
death()
@@ -280,4 +277,4 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
minimum_distance = 1
return
icon_state = TrueGun.icon_state
icon_living = TrueGun.icon_state
icon_living = TrueGun.icon_state
@@ -78,6 +78,8 @@
aggro_vision_range = 9
idle_vision_range = 2
turns_per_move = 5
loot = list(/obj/item/weapon/ore/diamond{layer = 4.1},
/obj/item/weapon/ore/diamond{layer = 4.1})
/obj/item/projectile/temp/basilisk
name = "freezing blast"
@@ -105,14 +107,6 @@
if(3)
adjustBruteLoss(110)
/mob/living/simple_animal/hostile/asteroid/basilisk/death(gibbed)
var/counter
for(counter=0, counter<2, counter++)
var/obj/item/weapon/ore/diamond/D = new /obj/item/weapon/ore/diamond(src.loc)
D.layer = 4.1
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/goldgrub
name = "goldgrub"
desc = "A worm that grows fat from eating everything in its sight. Seems to enjoy precious metals and other shiny things, hence the name."
@@ -142,22 +136,22 @@
wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver,
/obj/item/weapon/ore/uranium)
var/list/ore_types_eaten = list()
var/alerted = 0
var/ore_eaten = 1
var/chase_time = 100
/mob/living/simple_animal/hostile/asteroid/goldgrub/New()
..()
ore_types_eaten += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond)
ore_eaten = rand(1,3)
deathmessage = "[src] spits up the contents of its stomach before dying!"
var/i = rand(1,3)
while(i)
loot += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond)
i--
/mob/living/simple_animal/hostile/asteroid/goldgrub/GiveTarget(new_target)
target = new_target
if(target != null)
if(istype(target, /obj/item/weapon/ore))
if(istype(target, /obj/item/weapon/ore) && loot.len < 10)
visible_message("<span class='notice'>The [src.name] looks at [target.name] with hungry eyes.</span>")
else if(isliving(target))
Aggro()
visible_message("<span class='danger'>The [src.name] tries to flee from [target.name]!</span>")
@@ -165,7 +159,6 @@
minimum_distance = 10
Burrow()
/mob/living/simple_animal/hostile/asteroid/goldgrub/AttackingTarget()
if(istype(target, /obj/item/weapon/ore))
EatOre(target)
@@ -174,12 +167,9 @@
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/EatOre(atom/targeted_ore)
for(var/obj/item/weapon/ore/O in targeted_ore.loc)
ore_eaten++
if(!(O.type in ore_types_eaten))
ore_types_eaten += O.type
qdel(O)
if(ore_eaten > 10)//Limit the scope of the reward you can get, or else things might get silly
ore_eaten = 10
if(loot.len < 10)
loot += O.type
qdel(O)
visible_message("<span class='notice'>The ore was swallowed whole!</span>")
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Burrow()//Begin the chase to kill the goldgrub in time
@@ -190,27 +180,10 @@
visible_message("<span class='danger'>The [src.name] buries into the ground, vanishing from sight!</span>")
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goldgrub/proc/Reward()
if(!ore_eaten || ore_types_eaten.len == 0)
return
visible_message("<span class='danger'>[src] spits up the contents of its stomach before dying!</span>")
var/counter
for(var/R in ore_types_eaten)
for(counter=0, counter < ore_eaten, counter++)
new R(src.loc)
ore_types_eaten.Cut()
ore_eaten = 0
/mob/living/simple_animal/hostile/asteroid/goldgrub/bullet_act(obj/item/projectile/P)
visible_message("<span class='danger'>The [P.name] was repelled by [src.name]'s girth!</span>")
return
/mob/living/simple_animal/hostile/asteroid/goldgrub/death(gibbed)
alerted = 0
Reward()
..(gibbed)
/mob/living/simple_animal/hostile/asteroid/goldgrub/adjustBruteLoss(damage)
idle_vision_range = 9
..()
@@ -246,6 +219,7 @@
retreat_distance = 3
minimum_distance = 3
pass_flags = PASSTABLE
loot = list(/obj/item/organ/internal/hivelord_core)
/mob/living/simple_animal/hostile/asteroid/hivelord/OpenFire(the_target)
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood(src.loc)
@@ -258,7 +232,6 @@
OpenFire()
/mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed)
new /obj/item/organ/internal/hivelord_core(src.loc)
mouse_opacity = 1
..(gibbed)
@@ -338,15 +311,13 @@
throw_message = "falls right through the strange body of the"
environment_smash = 0
pass_flags = PASSTABLE
del_on_death = 1
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/New()
..()
spawn(100)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/death()
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goliath
name = "goliath"
desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions."
@@ -379,6 +350,7 @@
anchored = 1 //Stays anchored until death as to be unpullable
mob_size = MOB_SIZE_LARGE
var/pre_attack = 0
loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1})
/mob/living/simple_animal/hostile/asteroid/goliath/Life()
..()
@@ -462,11 +434,6 @@
spawn(50)
qdel(src)
/mob/living/simple_animal/hostile/asteroid/goliath/death(gibbed)
var/obj/item/asteroid/goliath_hide/G = new /obj/item/asteroid/goliath_hide(src.loc)
G.layer = 4.1
..(gibbed)
/obj/item/asteroid/goliath_hide
name = "goliath hide plates"
desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna."
@@ -545,6 +512,7 @@
environment_smash = 0
var/wumbo = 0
var/inflate_cooldown = 0
loot = list(/obj/item/asteroid/fugu_gland{layer = 4.1})
/mob/living/simple_animal/hostile/asteroid/fugu/Life()
if(!wumbo)
@@ -611,8 +579,6 @@
/mob/living/simple_animal/hostile/asteroid/fugu/death(gibbed)
Deflate()
var/obj/item/asteroid/fugu_gland/F = new /obj/item/asteroid/fugu_gland(src.loc)
F.layer = 4.1
..(gibbed)
/obj/item/asteroid/fugu_gland
@@ -640,4 +606,4 @@
A.transform *= 2
A.environment_smash += 2
user << "<span class='info'>You increase the size of [A], giving it a surge of strength!</span>"
qdel(src)
qdel(src)
@@ -58,6 +58,7 @@
cap_dead.color = cap_color
UpdateMushroomCap()
health = maxHealth
deathmessage = "[src] fainted."
..()
/mob/living/simple_animal/hostile/mushroom/adjustBruteLoss(damage)//Possibility to flee from a fight just to make it more visually interesting
@@ -90,8 +91,6 @@
UpdateMushroomCap()
/mob/living/simple_animal/hostile/mushroom/death(gibbed)
if(!gibbed)
visible_message("[src] fainted.")
..(gibbed)
UpdateMushroomCap()
@@ -22,9 +22,9 @@
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
speak_emote = list("yarrs")
var/corpse = /obj/effect/landmark/mobcorpse/pirate
var/weapon1 = /obj/item/weapon/melee/energy/sword/pirate
loot = list(/obj/effect/landmark/mobcorpse/pirate,
/obj/item/weapon/melee/energy/sword/pirate)
del_on_death = 1
faction = list("pirate")
/mob/living/simple_animal/hostile/pirate/ranged
@@ -38,17 +38,5 @@
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/beam
corpse = /obj/effect/landmark/mobcorpse/pirate/ranged
weapon1 = /obj/item/weapon/gun/energy/laser
/mob/living/simple_animal/hostile/pirate/death()
..(1)
visible_message("[src] stops moving.")
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
ghostize()
qdel(src)
return
loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged,
/obj/item/weapon/gun/energy/laser)
@@ -23,8 +23,8 @@
attacktext = "attacks"
attack_sound = 'sound/items/bikehorn.ogg'
environment_smash = 0
var/corpse = /obj/effect/landmark/mobcorpse/clown
del_on_death = 1
loot = list(/obj/effect/landmark/mobcorpse/clown)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 270
@@ -36,10 +36,3 @@
adjustBruteLoss(10)
else if(bodytemperature > maxbodytemp)
adjustBruteLoss(15)
/mob/living/simple_animal/hostile/retaliate/clown/death(gibbed)
..(gibbed)
if(corpse)
new corpse (src.loc)
qdel(src)
return
@@ -19,19 +19,20 @@
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/weapon/kitchen/knife
loot = list(/obj/effect/landmark/mobcorpse/russian,
/obj/item/weapon/kitchen/knife)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
faction = list("russian")
status_flags = CANPUSH
del_on_death = 1
/mob/living/simple_animal/hostile/russian/ranged
icon_state = "russianranged"
icon_living = "russianranged"
corpse = /obj/effect/landmark/mobcorpse/russian/ranged
weapon1 = /obj/item/weapon/gun/projectile/revolver/mateba
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged,
/obj/item/weapon/gun/projectile/revolver/mateba)
ranged = 1
retreat_distance = 5
minimum_distance = 5
@@ -39,18 +40,9 @@
casingtype = /obj/item/ammo_casing/a357
/mob/living/simple_animal/hostile/russian/ranged/New()
if(prob(50) && ispath(weapon1,/obj/item/weapon/gun/projectile/revolver/mateba)) //to preserve varedits
weapon1 = /obj/item/weapon/gun/projectile/shotgun/boltaction
var/obj/item/weapon/gun/projectile/revolver/mateba/M
if(prob(50) && is_type_in_list(M, loot)) //to preserve varedits
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged,
/obj/item/weapon/gun/projectile/shotgun/boltaction)
casingtype = /obj/item/ammo_casing/a762
..()
/mob/living/simple_animal/hostile/russian/death(gibbed)
..(1)
visible_message("[src] stops moving.")
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
ghostize()
qdel(src)
return
@@ -30,20 +30,9 @@
see_invisible = SEE_INVISIBLE_MINIMUM
see_in_dark = 8
layer = MOB_LAYER - 0.1
var/remains = /obj/effect/decal/remains/human
var/loot
var/deathmessage = "The skeleton collaspes into a pile of bones!"
/mob/living/simple_animal/hostile/skeleton/death(gibbed)
..(gibbed)
if(remains)
new remains (src.loc)
if(loot)
new loot (src.loc)
visible_message("<span class='danger'>[deathmessage]</span>")
qdel(src)
return
deathmessage = "The skeleton collaspes into a pile of bones!"
del_on_death = 1
loot = list(/obj/effect/decal/remains/human)
/mob/living/simple_animal/hostile/skeleton/eskimo
name = "undead eskimo"
@@ -58,7 +47,8 @@
melee_damage_lower = 17
melee_damage_upper = 20
deathmessage = "The skeleton collaspes into a pile of bones, its gear falling to the floor!"
loot = list(/obj/item/weapon/twohanded/spear,
loot = list(/obj/effect/decal/remains/human,
/obj/item/weapon/twohanded/spear,
/obj/item/clothing/shoes/winterboots,
/obj/item/clothing/suit/hooded/wintercoat)
@@ -75,14 +65,16 @@
speed = 2
gold_core_spawnable = 0
speak_chance = 1
speak = list("THE GODS WILL IT!","DUES VULT!","REMOVE KABAB!")
speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!")
force_threshold = 10 //trying to simulate actually having armor
melee_damage_lower = 25
melee_damage_upper = 30
deathmessage = "The templar knight collaspes into a pile of bones, its gear clanging as it hits the ground!"
loot = list(/obj/item/clothing/suit/armor/riot/knight/templar,
loot = list(/obj/effect/decal/remains/human,
/obj/item/clothing/suit/armor/riot/knight/templar,
/obj/item/clothing/head/helmet/knight/templar,
/obj/item/weapon/claymore/hog{name = "holy sword"})
/mob/living/simple_animal/hostile/skeleton/templar/bullet_act(obj/item/projectile/Proj)
if(!Proj)
return
@@ -100,4 +92,4 @@
maxHealth = 75
health = 75
color = rgb(114,228,250)
remains = /obj/effect/decal/remains/human{color = rgb(114,228,250)}
loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)})
@@ -222,6 +222,6 @@
faction -= "neutral"
/mob/living/simple_animal/hostile/statue/restrained()
. == ..()
. = ..()
if(can_be_seen(loc))
return 1
return 1
@@ -21,24 +21,12 @@
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = "harm"
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
var/weapon1
var/weapon2
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
faction = list("syndicate")
status_flags = CANPUSH
/mob/living/simple_animal/hostile/syndicate/death(gibbed)
..(gibbed)
if(corpse)
new corpse (src.loc)
if(weapon1)
new weapon1 (src.loc)
if(weapon2)
new weapon2 (src.loc)
qdel(src)
return
del_on_death = 1
///////////////Sword and shield////////////
@@ -47,8 +35,9 @@
melee_damage_upper = 30
icon_state = "syndicatemelee"
icon_living = "syndicatemelee"
weapon1 = /obj/item/weapon/melee/energy/sword/saber/red
weapon2 = /obj/item/weapon/shield/energy
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier,
/obj/item/weapon/melee/energy/sword/saber/red,
/obj/item/weapon/shield/energy)
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
armour_penetration = 28
@@ -72,7 +61,9 @@
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
name = "Syndicate Commando"
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando,
/obj/item/weapon/melee/energy/sword/saber/red,
/obj/item/weapon/shield/energy)
speed = 1
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(movement_dir = 0)
@@ -87,8 +78,9 @@
icon_living = "syndicateranged"
casingtype = /obj/item/ammo_casing/c45nostamina
projectilesound = 'sound/weapons/Gunshot_smg.ogg'
weapon1 = /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier,
/obj/item/weapon/gun/projectile/automatic/c20r/unrestricted,
/obj/item/weapon/shield/energy)
/mob/living/simple_animal/hostile/syndicate/ranged/space
icon_state = "syndicaterangedpsace"
@@ -96,8 +88,10 @@
name = "Syndicate Commando"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando,
/obj/item/weapon/gun/projectile/automatic/c20r/unrestricted,
/obj/item/weapon/shield/energy)
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(movement_dir = 0)
return
@@ -133,9 +127,8 @@
flying = 1
speak_emote = list("states")
gold_core_spawnable = 1
del_on_death = 1
/mob/living/simple_animal/hostile/viscerator/death(gibbed)
..(gibbed)
visible_message("<span class='danger'><b>[src]</b> is smashed into pieces!</span>")
qdel(src)
return
/mob/living/simple_animal/hostile/viscerator/New()
..()
deathmessage = "<b>[src]</b> is smashed into pieces!"
@@ -33,8 +33,9 @@
maxbodytemp = 1200
faction = list("hostile")
var/drop_type = /obj/item/stack/sheet/mineral/wood
loot = list(/obj/item/stack/sheet/mineral/wood)
gold_core_spawnable = 1
del_on_death = 1
/mob/living/simple_animal/hostile/tree/Life()
..()
@@ -57,12 +58,9 @@
C.visible_message("<span class='danger'>\The [src] knocks down \the [C]!</span>", \
"<span class='userdanger'>\The [src] knocks you down!</span>")
/mob/living/simple_animal/hostile/tree/death(gibbed)
..(1)
visible_message("<span class='danger'>[src] is hacked into pieces!</span>")
new drop_type(loc)
ghostize()
qdel(src)
/mob/living/simple_animal/hostile/tree/New()
..()
deathmessage = "[src] is hacked into pieces!"
/mob/living/simple_animal/hostile/tree/festivus
name = "festivus pole"
@@ -71,6 +69,5 @@
icon_living = "festivus_pole"
icon_dead = "festivus_pole"
icon_gib = "festivus_pole"
drop_type = /obj/item/stack/rods
loot = list(/obj/item/stack/rods)
speak_emote = list("polls")
@@ -65,7 +65,7 @@
var/grasp_chance = 20
var/grasp_pull_chance = 85
var/grasp_range = 4
del_on_death = 1
/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action()
if(..())
@@ -107,8 +107,3 @@
if(.)
if(the_target in grasping)
return 0
/mob/living/simple_animal/hostile/venus_human_trap/death()
qdel(src)
@@ -25,6 +25,9 @@
retreat_distance = 3 //out of fireball range
minimum_distance = 3
del_on_death = 1
loot = list(/obj/effect/landmark/mobcorpse/wizard,
/obj/item/weapon/staff)
var/obj/effect/proc_holder/spell/dumbfire/fireball/fireball = null
var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null
@@ -54,13 +57,6 @@
blink.outer_tele_radius = 3
AddSpell(blink)
/mob/living/simple_animal/hostile/wizard/death(gibbed)
..(gibbed)
new /obj/effect/landmark/mobcorpse/wizard(src.loc)
new /obj/item/weapon/staff(src.loc)
qdel(src)
return
/mob/living/simple_animal/hostile/wizard/handle_automated_action()
. = ..()
if(target && next_cast < world.time)
@@ -114,7 +114,7 @@
spawn_text = "emerges from"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
faction = list("zombie")
del_on_death = 1
/mob/living/simple_animal/hostile/spawner/zombie/lesser
name = "lesser corpse pit"
@@ -124,9 +124,9 @@
health = 200
maxHealth = 200
/mob/living/simple_animal/hostile/spawner/zombie/death()
visible_message("<span class='danger'>[src] collapes, stopping the flow of zombies!</span>")
qdel(src)
/mob/living/simple_animal/hostile/spawner/zombie/New()
..()
deathmessage = "[src] collapes, stopping the flow of zombies!"
/obj/item/weapon/shovel/cursed
@@ -157,7 +157,7 @@
AIStatus = AI_OFF
stop_automated_movement = 1
density = 0
/mob/living/simple_animal/hostile/zombie/holder/New()
..()
spawn(rand(800,1200))
@@ -69,6 +69,10 @@
var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions
var/list/loot = list() //list of things spawned at mob's loc when it dies
var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses
var/deathmessage = ""
/mob/living/simple_animal/New()
..()
verbs -= /mob/verb/observe
@@ -390,15 +394,24 @@
return 1
/mob/living/simple_animal/death(gibbed)
health = 0
icon_state = icon_dead
stat = DEAD
density = 0
if(nest)
nest.spawned_mobs -= src
nest = null
if(!gibbed)
if(loot.len)
for(var/i in loot)
new i(loc)
if(deathmessage && !gibbed)
visible_message("<span class='danger'>[deathmessage]</span>")
else if(!del_on_death)
visible_message("<span class='danger'>\the [src] stops moving...</span>")
if(del_on_death)
ghostize()
qdel(src)
else
health = 0
icon_state = icon_dead
stat = DEAD
density = 0
..()
/mob/living/simple_animal/ex_act(severity, target)
+1
View File
@@ -45,6 +45,7 @@
var/power_produced = power / power_loss
add_avail(power_produced*input_power_multiplier)
flick("coilhit", src)
playsound(src.loc, 'sound/magic/LightningShock.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 5, power_produced)
spawn(10)
being_shocked = 0
+20 -14
View File
@@ -16,7 +16,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/structure/disposalpipe)
/obj/singularity/energy_ball
name = "energy eall"
name = "energy ball"
desc = "An energy ball."
icon = 'icons/obj/tesla_engine/energy_ball.dmi'
icon_state = "energy_ball"
@@ -40,15 +40,16 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
if(!is_orbiting)
handle_energy()
var/amount_to_move = 2 + orbiting_balls.len * 2
var/what_does_the_scouter_say_about_the_balls_power_level = (TESLA_DEFAULT_POWER + (TESLA_MINI_POWER * orbiting_balls.len))
move_the_basket_ball(amount_to_move)
pixel_x = 0
pixel_y = 0
tesla_zap(src, 7, TESLA_DEFAULT_POWER)
playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 5)
tesla_zap(src, 7, what_does_the_scouter_say_about_the_balls_power_level)
pixel_x = -32
pixel_y = -32
energy += rand(1,3) // ensure it generates energy without needing to be blasted by the PA too much due to its size, and that a tesla engine will always get bigger over time
else
tesla_zap(src, 7, TESLA_MINI_POWER)
energy = 0 // ensure we dont have miniballs of miniballs
return
@@ -67,17 +68,19 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
/obj/singularity/energy_ball/proc/handle_energy()
if(energy >= 300)
energy = 0
var/obj/singularity/energy_ball/EB = new(loc)
orbiting_balls.Add(EB)
EB.transform *= pick(0.3,0.4,0.5,0.6,0.7)
EB.is_orbiting = 1
var/icon/I = icon(icon,icon_state,dir)
energy -= 300
playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 5)
spawn(100)
var/obj/singularity/energy_ball/EB = new(loc)
orbiting_balls.Add(EB)
EB.transform *= pick(0.3,0.4,0.5,0.6,0.7)
EB.is_orbiting = 1
var/icon/I = icon(icon,icon_state,dir)
var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7)
orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
spawn(1)
EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36))
var/orbitsize = (I.Width()+I.Height())*pick(0.5,0.6,0.7)
orbitsize -= (orbitsize/world.icon_size)*(world.icon_size*0.25)
spawn(1)
EB.orbit(src,orbitsize, pick(FALSE,TRUE), rand(10,25), pick(3,4,5,6,36))
@@ -110,7 +113,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
return closest_atom
/proc/tesla_zap(var/atom/source, zap_range = 3, power)
if(power < 1000)
if(power < 500)
return
var/list/tesla_coils = list()
var/list/grounding_rods = list()
@@ -176,6 +179,9 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics,
if(istype(L, /mob/living/silicon))
var/mob/living/silicon/S = L
S.emp_act(2)
tesla_zap(S, 7, power / 1.5) // metallic folks bounce it further
else
tesla_zap(L, 5, power / 1.5)
return
if(!closest_atom)
closest_atom = get_closest_atom(/obj/machinery, potential_machine_zaps, source)
@@ -29,8 +29,10 @@
/datum/reagent/blob/ripping_tendrils/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, BRUTE)
M.adjustStaminaLoss(0.6*reac_volume)
if(M)
M.apply_damage(0.6*reac_volume, BRUTE)
if(M)
M.adjustStaminaLoss(0.6*reac_volume)
if(iscarbon(M))
M.emote("scream")
@@ -44,7 +46,8 @@
/datum/reagent/blob/sporing_pods/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, TOX)
if(M)
M.apply_damage(0.4*reac_volume, TOX)
/datum/reagent/blob/sporing_pods/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(!isnull(cause) && damage < 20 && original_health - damage <= 0 && prob(50)) //if the cause isn't fire or a bomb, the damage is less than 20, we're going to die from that damage, 50% chance of a shitty spore.
@@ -71,7 +74,8 @@
/datum/reagent/blob/replicating_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, BRUTE)
if(M)
M.apply_damage(0.6*reac_volume, BRUTE)
/datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(damage > 0 && original_health - damage > 0 && prob(100 - damage))
@@ -96,8 +100,10 @@
/datum/reagent/blob/energized_fibers/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, BURN)
M.adjustStaminaLoss(0.8*reac_volume)
if(M)
M.apply_damage(0.4*reac_volume, BURN)
if(M)
M.adjustStaminaLoss(0.8*reac_volume)
/datum/reagent/blob/energized_fibers/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(damage_type == STAMINA)
@@ -118,8 +124,9 @@
/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.adjust_fire_stacks(round(reac_volume/12))
M.apply_damage(0.6*reac_volume, BURN)
M.IgniteMob()
if(M)
M.apply_damage(0.6*reac_volume, BURN)
if(iscarbon(M))
M.emote("scream")
@@ -135,11 +142,12 @@
/datum/reagent/blob/hallucinogenic_nectar/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, TOX)
M.hallucination += 0.6*reac_volume
M.druggy += 0.6*reac_volume
if(M.reagents)
M.reagents.add_reagent("spore", 0.2*reac_volume)
if(M)
M.apply_damage(0.4*reac_volume, TOX)
//toxin, stamina, and some bonus spore toxin
/datum/reagent/blob/envenomed_filaments
@@ -151,10 +159,12 @@
/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, TOX)
M.adjustStaminaLoss(0.4*reac_volume)
if(M.reagents)
M.reagents.add_reagent("spore", 0.2*reac_volume)
if(M)
M.apply_damage(0.6*reac_volume, TOX)
if(M)
M.adjustStaminaLoss(0.4*reac_volume)
//does tons of oxygen damage and a little brute
/datum/reagent/blob/lexorin_jelly
@@ -166,9 +176,11 @@
/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, BRUTE)
M.apply_damage(0.6*reac_volume, OXY)
M.losebreath += round(0.2*reac_volume)
if(M)
M.apply_damage(0.4*reac_volume, BRUTE)
if(M)
M.apply_damage(0.6*reac_volume, OXY)
//does semi-random brute damage and reacts to brute damage
/datum/reagent/blob/reactive
@@ -182,7 +194,8 @@
/datum/reagent/blob/reactive/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
var/damage = rand(10, 25)/25
M.apply_damage(damage*reac_volume, BRUTE)
if(M)
M.apply_damage(damage*reac_volume, BRUTE)
/datum/reagent/blob/reactive/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(damage && damage_type == BRUTE && original_health - damage > 0 && isliving(cause)) //is there any damage, is it brute, will we be alive, and is the cause a mob?
@@ -203,11 +216,13 @@
/datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, BURN)
M.adjustStaminaLoss(0.4*reac_volume)
if(M.reagents)
M.reagents.add_reagent("frostoil", 0.4*reac_volume)
M.reagents.add_reagent("ice", 0.4*reac_volume)
if(M)
M.apply_damage(0.4*reac_volume, BURN)
if(M)
M.adjustStaminaLoss(0.4*reac_volume)
//does brute damage, bonus damage for each nearby blob, and spreads damage out
/datum/reagent/blob/synchronous_mesh
@@ -220,13 +235,14 @@
/datum/reagent/blob/synchronous_mesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, BRUTE)
for(var/obj/effect/blob/B in range(1, M)) //if the target is completely surrounded, this is 0.8*reac_volume bonus damage, total of 1.2*reac_volume
M.apply_damage(0.1*reac_volume, BRUTE)
if(M)
M.apply_damage(0.4*reac_volume, BRUTE)
if(M)
for(var/obj/effect/blob/B in range(1, M)) //if the target is completely surrounded, this is 0.8*reac_volume bonus damage, total of 1.2*reac_volume
if(M)
M.apply_damage(0.1*reac_volume, BRUTE)
/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
if(istype(cause, /obj/effect/blob)) //if a blob is doing it, that means we're splitting the damage, so don't modify it.
return ..()
if(!isnull(cause)) //the cause isn't fire or bombs, so split the damage
var/damagesplit = 0.8 //maximum split is 7.2, reducing the damage each blob takes to 14% but doing that damage to 9 blobs
for(var/obj/effect/blob/C in orange(1, B))
@@ -234,7 +250,7 @@
damagesplit += 0.8
for(var/obj/effect/blob/C in orange(1, B))
if(C.overmind && C.overmind.blob_reagent_datum == B.overmind.blob_reagent_datum && !istype(C, /obj/effect/blob/core)) //only hurt blobs that have the same overmind chemical and aren't cores
C.take_damage(damage/damagesplit, CLONE, B)
C.take_damage(damage/damagesplit, CLONE, B, 0)
return damage/damagesplit
else
return damage*1.25
@@ -251,12 +267,15 @@
/datum/reagent/blob/pressurized_slime/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reac_volume = ..()
M.apply_damage(0.4*reac_volume, BRUTE)
M.apply_damage(0.4*reac_volume, OXY)
M.adjustStaminaLoss(0.4*reac_volume)
var/turf/simulated/T = get_turf(M)
if(istype(T, /turf/simulated))
T.MakeSlippery(TURF_WET_WATER)
if(M)
M.apply_damage(0.4*reac_volume, BRUTE)
if(M)
M.apply_damage(0.4*reac_volume, OXY)
if(M)
M.adjustStaminaLoss(0.4*reac_volume)
/datum/reagent/blob/pressurized_slime/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
for(var/turf/simulated/T in range(1, B))
@@ -282,7 +301,8 @@
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reagent_vortex(M, 0, reac_volume)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, BRUTE)
if(M)
M.apply_damage(0.6*reac_volume, BRUTE)
//does brute damage and throws or pushes nearby objects away from the target
/datum/reagent/blob/b_sorium
@@ -295,36 +315,38 @@
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
reagent_vortex(M, 1, reac_volume)
reac_volume = ..()
M.apply_damage(0.6*reac_volume, BRUTE)
if(M)
M.apply_damage(0.6*reac_volume, BRUTE)
/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, reac_volume)
var/turf/pull = get_turf(M)
var/range_power = Clamp(round(reac_volume/5, 1), 1, 5)
for(var/atom/movable/X in range(range_power,pull))
if(istype(X, /obj/effect))
continue
if(!X.anchored)
var/distance = get_dist(X, pull)
var/moving_power = max(range_power - distance, 1)
spawn(0)
if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
if(setting_type)
var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
var/throw_range = 5 - distance
X.throw_at(throw_target, throw_range, 1)
if(M)
var/turf/pull = get_turf(M)
var/range_power = Clamp(round(reac_volume/5, 1), 1, 5)
for(var/atom/movable/X in range(range_power,pull))
if(istype(X, /obj/effect))
continue
if(!X.anchored)
var/distance = get_dist(X, pull)
var/moving_power = max(range_power - distance, 1)
spawn(0)
if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
if(setting_type)
var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
var/throw_range = 5 - distance
X.throw_at(throw_target, throw_range, 1)
else
X.throw_at(pull, distance, 1)
else
X.throw_at(pull, distance, 1)
else
if(setting_type)
for(var/i = 0, i < moving_power, i++)
sleep(2)
if(!step_away(X, pull))
break
else
for(var/i = 0, i < moving_power, i++)
sleep(2)
if(!step_towards(X, pull))
break
if(setting_type)
for(var/i in 0 to moving_power-1)
sleep(2)
if(!step_away(X, pull))
break
else
for(var/i in 0 to moving_power-1)
sleep(2)
if(!step_towards(X, pull))
break
/datum/reagent/blob/proc/send_message(mob/living/M)
@@ -103,7 +103,7 @@
/datum/reagent/medicine/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the patient's body temperature must be under 170K for it to metabolise correctly."
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the patient's body temperature must be under 270K for it to metabolise correctly."
color = "#0000C8"
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M)
@@ -390,21 +390,23 @@
/datum/reagent/medicine/sal_acid
name = "Salicyclic Acid"
id = "sal_acid"
description = "Very slowly restores low bruising. Primarily used as an ingredient in other medicines. Overdose causes slight bruising."
description = "Stimulates the healing of severe bruises. Extremely rapidly heals severe bruising and slowly heals minor ones. Overdose will worsen existing bruising."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
overdose_threshold = 25
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/M)
if(M.getBruteLoss() < 50)
M.adjustBruteLoss(-0.25*REM)
if(M.getBruteLoss() > 50)
M.adjustBruteLoss(-4*REM) //Twice as effective as styptic powder for severe bruising
else
M.adjustBruteLoss(-0.5*REM) //But only a quarter as effective for more minor ones
..()
return
/datum/reagent/medicine/sal_acid/overdose_process(mob/living/M)
if(M.getBruteLoss() < 50)
M.adjustBruteLoss(0.5*REM)
if(M.getBruteLoss()) //It only makes existing bruises worse
M.adjustBruteLoss(4.5*REM) // it's going to be healing either 4 or 0.5
..()
return
@@ -78,10 +78,11 @@ Borg Hypospray
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
if(R && R.cell)
var/datum/reagents/RG = reagent_list[mode]
if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
RG.add_reagent(reagent_ids[mode], 5) //And fill hypo with reagent.
for(var/i in 1 to reagent_ids.len)
var/datum/reagents/RG = reagent_list[i]
if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
RG.add_reagent(reagent_ids[i], 5) //And fill hypo with reagent.
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/carbon/M, mob/user)
var/datum/reagents/R = reagent_list[mode]
@@ -440,8 +440,9 @@
G << "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist them in completing their goals at any cost."
G.mind.store_memory("<b>Serve [user.real_name], your creator.</b>")
if(user.mind.special_role)
message_admins("[G.real_name] has been summoned by [user.real_name], an antagonist.")
log_game("[G.real_name] ([G.key]) was made a golem by [user.real_name]([user.key]).")
message_admins("[key_name_admin(G)](<A HREF='?_src_=holder;adminmoreinfo=\ref[G]'>?</A>) has been summoned by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>), an antagonist.")
log_game("[key_name(G)] was made a golem by [key_name(user)].")
log_admin("[key_name(G)] was made a golem by [key_name(user)].")
qdel(src)