mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-11 23:23:28 +01:00
Merge branch 'master' of https://github.com/ZomgPonies/Paradise
Conflicts: icons/obj/weapons.dmi maps/cyberiad.dmm
This commit is contained in:
@@ -304,7 +304,7 @@ var/list/admin_verbs_mod = list(
|
||||
|
||||
/client/proc/colorooc()
|
||||
set category = "Admin"
|
||||
set name = "OOC Text Color"
|
||||
set name = "Personal OOC Text Color"
|
||||
if(!holder) return
|
||||
var/new_ooccolor = input(src, "Please select your OOC colour.", "OOC colour") as color|null
|
||||
if(new_ooccolor)
|
||||
|
||||
@@ -244,7 +244,7 @@ BLIND // can't see anything
|
||||
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.9
|
||||
species_restricted = list("exclude","Diona","Vox")
|
||||
loose = 1 // very rarely falls off
|
||||
loose = 0 // What kind of idiot designs a pressurized suit where the helmet can fall off?
|
||||
|
||||
/obj/item/clothing/suit/space
|
||||
name = "Space suit"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
siemens_coefficient = 0.2
|
||||
loose = 0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/space_ninja
|
||||
|
||||
@@ -42,6 +42,12 @@
|
||||
has_sensor = 1 // Just to make sure it has a sensor
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) // Standar Jumpsuit stats
|
||||
|
||||
/obj/item/clothing/head/fluff/sparkyninja_beret //Sparkyninja: Neil Wilkinson
|
||||
name = "royal marines commando beret"
|
||||
desc = "Dark Green beret with an old insignia on it."
|
||||
icon_state = "sparkyninja_beret"
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
//////////////////////////////////
|
||||
////////// Fluff Items ///////////
|
||||
//////////////////////////////////
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","psilocybin","lube",
|
||||
"plantbgone","banana","anti_toxin","space_drugs","hyperzine","holywater","ethanol","hot_coco","pacid",
|
||||
"blood","stoxin","fluorine","ryetalyn","mutagen","oxycodone","fuel","cryptobiolin",
|
||||
"impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","alchdranine","beepskysmash",
|
||||
"impedrezene","mindbreaker","nanites","xenomicrobes","lipozine","frostoil","doctorsdelight","beepskysmash",
|
||||
"tricordrazine", "amatoxin", "adminordrazine", "neurotoxin", "zombiepowder", "synaptizine")
|
||||
var/datum/reagents/R = new/datum/reagents(50)
|
||||
R.my_atom = vent
|
||||
|
||||
@@ -18,6 +18,17 @@
|
||||
|
||||
var/datum/seed/grown_seed
|
||||
var/datum/reagents/grown_reagents
|
||||
|
||||
//--FalseIncarnate
|
||||
var/IS_TRAY = 0 //used to track if the target is a hydroponics tray or soil. 1 if true, otherwise 0
|
||||
var/tray_age //age of the plant in the tray
|
||||
var/tray_weed_level //weed level of tray
|
||||
var/tray_pest_level //pest level of tray
|
||||
var/tray_toxins //toxicity of the tray
|
||||
var/tray_yield_mod //yield modifier of the tray
|
||||
var/tray_mutation_mod //mutation modifier of the tray
|
||||
//--FalseIncarnate
|
||||
|
||||
if(istype(target,/obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = target
|
||||
@@ -38,6 +49,19 @@
|
||||
else if(istype(target,/obj/machinery/portable_atmospherics/hydroponics))
|
||||
|
||||
var/obj/machinery/portable_atmospherics/hydroponics/H = target
|
||||
|
||||
//--FalseIncarnate
|
||||
//Flag the target as a tray for showing tray-specific stats
|
||||
IS_TRAY = 1
|
||||
//Save tray data to matching variables
|
||||
tray_age = H.age
|
||||
tray_weed_level = H.weedlevel
|
||||
tray_pest_level = H.pestlevel
|
||||
tray_toxins = H.toxins
|
||||
tray_yield_mod = H.yield_mod
|
||||
tray_mutation_mod = H.mutation_mod
|
||||
//--FalseIncarnate
|
||||
|
||||
grown_seed = H.seed
|
||||
grown_reagents = H.reagents
|
||||
|
||||
@@ -57,6 +81,19 @@
|
||||
dat += "<tr><td><b>Maturation time</b></td><td>[grown_seed.maturation]</td></tr>"
|
||||
dat += "<tr><td><b>Production time</b></td><td>[grown_seed.production]</td></tr>"
|
||||
dat += "<tr><td><b>Potency</b></td><td>[grown_seed.potency]</td></tr>"
|
||||
|
||||
//--FalseIncarnate
|
||||
//Tray-specific stats like Age and Mutation Modifier, not shown if target was not a hydroponics tray or soil
|
||||
if(IS_TRAY == 1)
|
||||
dat += "<tr><td></td></tr>"
|
||||
dat += "<tr><td><b>Age</b></td><td>[tray_age]</td></tr>"
|
||||
dat += "<tr><td><b>Weed Level</b></td><td>[tray_weed_level]</td></tr>"
|
||||
dat += "<tr><td><b>Pest Level</b></td><td>[tray_pest_level]</td></tr>"
|
||||
dat += "<tr><td><b>Toxins</b></td><td>[tray_toxins]</td></tr>"
|
||||
dat += "<tr><td><b>Yield Modifier</b></td><td>[tray_yield_mod]</td></tr>"
|
||||
dat += "<tr><td><b>Mutation Modifier</b></td><td>[tray_mutation_mod]</td></tr>"
|
||||
//--FalseIncarnate
|
||||
|
||||
dat += "</table>"
|
||||
|
||||
if(grown_reagents && grown_reagents.reagent_list && grown_reagents.reagent_list.len)
|
||||
|
||||
@@ -131,6 +131,13 @@
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=5"
|
||||
desc = "Yours is the drill that will pierce the heavens!"
|
||||
|
||||
traitor //Pocket-sized traitor diamond drill.
|
||||
name = "supermatter drill"
|
||||
icon_state = "smdrill"
|
||||
origin_tech = "materials=6;powerstorage=4;engineering=5;syndicate=3"
|
||||
desc = "Microscopic supermatter crystals cover the head of this tiny drill."
|
||||
w_class = 2.0
|
||||
|
||||
borgdrill
|
||||
name = "cyborg mining drill"
|
||||
icon_state = "diamonddrill"
|
||||
|
||||
@@ -19,6 +19,69 @@
|
||||
if(src.stat == 2.0 && (act != "deathgasp"))
|
||||
return
|
||||
switch(act)
|
||||
if("ping")
|
||||
if (species.name == "Machine")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> pings at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> pings."
|
||||
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
m_type = 1
|
||||
else
|
||||
if (!species.name == "Machine")
|
||||
return
|
||||
|
||||
if("buzz")
|
||||
if (species.name == "Machine")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> buzzes at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> buzzes."
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
m_type = 1
|
||||
else
|
||||
if (!species.name == "Machine")
|
||||
return
|
||||
|
||||
if("beep")
|
||||
if(species.name == "Machine")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> beeps at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> beeps."
|
||||
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
|
||||
m_type = 1
|
||||
else
|
||||
if (!species.name == "Machine")
|
||||
return
|
||||
|
||||
if ("airguitar")
|
||||
if (!src.restrained())
|
||||
message = "<B>[src]</B> is strumming the air and headbanging like a safari chimp."
|
||||
@@ -567,6 +630,8 @@
|
||||
message = "<B>[src]</B> makes a very loud noise."
|
||||
m_type = 2
|
||||
|
||||
|
||||
|
||||
// Needed for M_TOXIC_FART
|
||||
if("fart")
|
||||
if(world.time-lastFart >= 600)
|
||||
|
||||
@@ -244,6 +244,17 @@
|
||||
else
|
||||
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
|
||||
throw_at(target, 200, 4)
|
||||
|
||||
var/limbs_affected = pick(2,3,4)
|
||||
var/datum/organ/external/processing_dismember
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "groin")
|
||||
processing_dismember.dismember_limb()
|
||||
limbs_affected -= 1
|
||||
|
||||
|
||||
//return
|
||||
// var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
|
||||
//user.throw_at(target, 200, 4)
|
||||
@@ -258,6 +269,25 @@
|
||||
b_loss = b_loss/1.5
|
||||
f_loss = f_loss/1.5
|
||||
|
||||
var/limbs_affected = pick(0, 1, 2)
|
||||
var/datum/organ/external/processing_dismember
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
|
||||
processing_dismember.dismember_limb()
|
||||
limbs_affected -= 1
|
||||
|
||||
else
|
||||
var/limbs_affected = pick(1, 2, 3)
|
||||
var/datum/organ/external/processing_dismember
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "groin")
|
||||
processing_dismember.dismember_limb()
|
||||
limbs_affected -= 1
|
||||
|
||||
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
ear_damage += 30
|
||||
ear_deaf += 120
|
||||
@@ -268,6 +298,18 @@
|
||||
b_loss += 30
|
||||
if (prob(getarmor(null, "bomb")))
|
||||
b_loss = b_loss/2
|
||||
|
||||
else
|
||||
|
||||
var/limbs_affected = pick(0, 1)
|
||||
var/datum/organ/external/processing_dismember
|
||||
|
||||
while(limbs_affected != 0)
|
||||
processing_dismember = pick(organs)
|
||||
if(processing_dismember.name != "chest" && processing_dismember.name != "groin" && processing_dismember.name != "head")
|
||||
processing_dismember.dismember_limb()
|
||||
limbs_affected -= 1
|
||||
|
||||
if (!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
ear_damage += 15
|
||||
ear_deaf += 60
|
||||
|
||||
@@ -10,8 +10,6 @@ emp_act
|
||||
|
||||
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone)
|
||||
|
||||
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
|
||||
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
|
||||
visible_message("<span class='danger'>The [P.name] gets reflected by [src]!</span>", \
|
||||
@@ -40,6 +38,7 @@ emp_act
|
||||
|
||||
//Shrapnel
|
||||
if (P.damage_type == BRUTE)
|
||||
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
|
||||
var/armor = getarmor_organ(organ, "bullet")
|
||||
if((P.embed && prob(20 + max(P.damage - armor, -10))))
|
||||
var/obj/item/weapon/shard/shrapnel/SP = new()
|
||||
@@ -265,7 +264,7 @@ emp_act
|
||||
if(armor >= 2) return 0
|
||||
if(!I.force) return 0
|
||||
var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords)
|
||||
|
||||
|
||||
apply_damage(I.force, I.damtype, affecting, armor, sharp=weapon_sharp, edge=weapon_edge, used_weapon=I)
|
||||
|
||||
var/bloody = 0
|
||||
@@ -313,8 +312,13 @@ emp_act
|
||||
|
||||
|
||||
if(Iforce > 10 || Iforce >= 5 && prob(33))
|
||||
forcesay(hit_appends) //forcesay checks stat already
|
||||
|
||||
forcesay(hit_appends) //forcesay checks stat already
|
||||
|
||||
if (I.damtype == BRUTE)
|
||||
if((I.edge && prob(2 * I.force)) || (I.force > 20 && prob(I.force)))
|
||||
if(affecting.brute_dam >= affecting.max_damage * config.organ_health_multiplier)
|
||||
affecting.dismember_limb()
|
||||
|
||||
//Melee weapon embedded object code.
|
||||
if (I.damtype == BRUTE && !I.is_robot_module())
|
||||
var/damage = I.force
|
||||
@@ -353,11 +357,11 @@ emp_act
|
||||
zone = get_zone_with_miss_chance(zone, src, min(15*(distance-2), 0))
|
||||
else
|
||||
zone = get_zone_with_miss_chance(zone, src, 15)
|
||||
|
||||
/*
|
||||
if(!zone)
|
||||
visible_message("\blue \The [O] misses [src] narrowly!")
|
||||
return
|
||||
|
||||
*/
|
||||
O.throwing = 0 //it hit, so stop moving
|
||||
|
||||
if ((O.thrower != src) && check_shields(throw_damage, "[O]"))
|
||||
@@ -465,7 +469,7 @@ emp_act
|
||||
var/penetrated_dam = max(0,(damage - max(0,(SS.breach_threshold - SS.damage))))
|
||||
|
||||
if(penetrated_dam) SS.create_breaches(damtype, penetrated_dam)
|
||||
|
||||
|
||||
/mob/living/carbon/human/mech_melee_attack(obj/mecha/M)
|
||||
if(M.occupant.a_intent == "harm")
|
||||
if(M.damtype == "brute")
|
||||
|
||||
@@ -99,17 +99,14 @@
|
||||
|
||||
if(findtext(temp, "*", 1, 2)) //emotes
|
||||
return
|
||||
world << "Text after stuff is [temp]"
|
||||
temp = copytext(trim_left(temp), 1, rand(5,8))
|
||||
world << "Text after trimming is [temp]"
|
||||
|
||||
var/trimmed = trim_left(temp)
|
||||
if(length(trimmed))
|
||||
if(append)
|
||||
temp += pick(append)
|
||||
|
||||
say(temp)
|
||||
winset(client, "input", "text=[null]")
|
||||
winset(client, "input", "text=[null]")
|
||||
|
||||
/mob/living/carbon/human/say_understands(var/other,var/datum/language/speaking = null)
|
||||
|
||||
|
||||
@@ -57,13 +57,14 @@
|
||||
signaler.signal()
|
||||
*/
|
||||
|
||||
//Stun Beams
|
||||
/*
|
||||
//Stun Beams -- These were commented out, making appropriate changes here. - Dave
|
||||
if(istype(P, /obj/item/projectile/beam/stun) || istype(P, /obj/item/projectile/bullet/stunshot))
|
||||
stun_effect_act(0, P.agony, def_zone, P)
|
||||
src <<"\red You have been hit by [P]!"
|
||||
del P
|
||||
return
|
||||
|
||||
*/
|
||||
//Armor
|
||||
var/absorb = run_armor_check(def_zone, P.flag)
|
||||
var/proj_sharp = is_sharp(P)
|
||||
@@ -119,15 +120,15 @@
|
||||
|
||||
var/throw_damage = O.throwforce*(speed/5)
|
||||
|
||||
var/miss_chance = 15
|
||||
if (O.throw_source)
|
||||
var/distance = get_dist(O.throw_source, loc)
|
||||
miss_chance = min(15*(distance-2), 0)
|
||||
|
||||
//var/miss_chance = 15
|
||||
//if (O.throw_source)
|
||||
//var/distance = get_dist(O.throw_source, loc)
|
||||
//miss_chance = min(15*(distance-2), 0)
|
||||
/*
|
||||
if (prob(miss_chance))
|
||||
visible_message("\blue \The [O] misses [src] narrowly!")
|
||||
return
|
||||
|
||||
*/
|
||||
src.visible_message("\red [src] has been hit by [O].")
|
||||
var/armor = run_armor_check(null, "melee")
|
||||
|
||||
@@ -168,7 +169,7 @@
|
||||
visible_message("<span class='warning'>[src] is pinned to the wall by [O]!</span>","<span class='warning'>You are pinned to the wall by [O]!</span>")
|
||||
src.anchored = 1
|
||||
src.pinned += O
|
||||
|
||||
|
||||
/mob/living/mech_melee_attack(obj/mecha/M)
|
||||
if(M.occupant.a_intent == "harm")
|
||||
if(M.damtype == "brute")
|
||||
|
||||
@@ -1242,7 +1242,7 @@
|
||||
else
|
||||
src << "Module isn't activated"
|
||||
installed_modules()
|
||||
|
||||
|
||||
if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
|
||||
var/L = text2num(href_list["lawc"])
|
||||
switch(lawcheck[L+1])
|
||||
@@ -1404,6 +1404,61 @@
|
||||
else
|
||||
src << "Your icon has been set. You now require a module reset to change it."
|
||||
|
||||
/mob/living/silicon/robot/deathsquad
|
||||
var/searching_for_ckey = 0
|
||||
icon_state = "nano_bloodhound"
|
||||
lawupdate = 0
|
||||
scrambledcodes = 1
|
||||
syndicateborg = 1
|
||||
modtype = "Commando"
|
||||
faction = list("nanotrasen")
|
||||
designation = "NT Combat Cyborg"
|
||||
req_access = list(access_cent_specops)
|
||||
|
||||
/mob/living/silicon/robot/deathsquad/New(loc)
|
||||
..()
|
||||
cell.maxcharge = 50000
|
||||
cell.charge = 50000
|
||||
radio = new /obj/item/device/radio/borg/deathsquad(src)
|
||||
module = new /obj/item/weapon/robot_module/deathsquad(src)
|
||||
laws = new /datum/ai_laws/deathsquad()
|
||||
|
||||
/mob/living/silicon/robot/deathsquad/attack_hand(mob/user)
|
||||
if((ckey == null) && searching_for_ckey == 0 && (alert(user,"Attempt to boot NanoTrasen Commando cyborg?","","Yes","No") == "Yes"))
|
||||
get_borg_occupant(user, get_candidates())
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/mob/living/silicon/robot/deathsquad/proc/get_borg_occupant(mob/user as mob, var/list/possiblecandidates = list())
|
||||
var/time_passed = world.time
|
||||
searching_for_ckey = 1
|
||||
if(possiblecandidates.len <= 0)
|
||||
searching_for_ckey = 0
|
||||
user << "<span class='notice'>Cyborg MMI interface failure, unit unable to be started.</span>"
|
||||
return
|
||||
else
|
||||
var/possibleborg = pick(possiblecandidates)
|
||||
spawn(0)
|
||||
var/input = alert(possibleborg,"Do you want to spawn in as a cyborg for the NT Deathsquad?","Please answer in thirty seconds!","Yes","No")
|
||||
if(input == "Yes" && ckey == null)
|
||||
if((world.time-time_passed)>300)
|
||||
return
|
||||
possiblecandidates -= possibleborg
|
||||
searching_for_ckey = 0
|
||||
ckey = possibleborg
|
||||
else
|
||||
possiblecandidates -= possibleborg
|
||||
get_borg_occupant(user, possiblecandidates)
|
||||
return
|
||||
|
||||
sleep(300)
|
||||
if(searching_for_ckey)
|
||||
possiblecandidates -= possibleborg
|
||||
get_borg_occupant(user, possiblecandidates)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/robot/syndicate
|
||||
icon_state = "syndie_bloodhound"
|
||||
lawupdate = 0
|
||||
@@ -1414,18 +1469,18 @@
|
||||
designation = "Syndicate"
|
||||
modtype = "Syndicate"
|
||||
req_access = list(access_syndicate)
|
||||
|
||||
|
||||
/mob/living/silicon/robot/syndicate/New(loc)
|
||||
..()
|
||||
cell.maxcharge = 25000
|
||||
cell.charge = 25000
|
||||
radio = new /obj/item/device/radio/borg/syndicate(src)
|
||||
module = new /obj/item/weapon/robot_module/syndicate(src)
|
||||
laws = new /datum/ai_laws/syndicate_override()
|
||||
|
||||
laws = new /datum/ai_laws/syndicate_override()
|
||||
|
||||
Namepick()
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/silicon/robot/proc/notify_ai(var/notifytype, var/oldname, var/newname)
|
||||
if(!connected_ai)
|
||||
return
|
||||
|
||||
@@ -324,6 +324,20 @@
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/robot_module/deathsquad
|
||||
name = "NT advanced combat module"
|
||||
|
||||
/obj/item/weapon/robot_module/deathsquad/New()
|
||||
src.modules += new /obj/item/device/flash(src)
|
||||
src.modules += new /obj/item/device/flashlight(src)
|
||||
src.modules += new /obj/item/borg/sight/thermal(src)
|
||||
src.modules += new /obj/item/weapon/melee/energy/sword/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.emag = null
|
||||
return
|
||||
|
||||
/obj/item/weapon/robot_module/syndicate
|
||||
name = "syndicate robot module"
|
||||
|
||||
|
||||
@@ -153,6 +153,6 @@
|
||||
for(counter=0, counter<=powerlevel, counter++)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice(src.loc)
|
||||
S.reagents.add_reagent("mushroomhallucinogen", powerlevel)
|
||||
S.reagents.add_reagent("alchdranine", powerlevel)
|
||||
S.reagents.add_reagent("doctorsdelight", powerlevel)
|
||||
S.reagents.add_reagent("synaptizine", powerlevel)
|
||||
del(src)
|
||||
@@ -158,12 +158,13 @@
|
||||
src.update_damages()
|
||||
|
||||
//If limb took enough damage, try to cut or tear it off
|
||||
/*
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
|
||||
if(config.limbs_can_break && brute_dam >= max_damage * config.organ_health_multiplier)
|
||||
if( (edge && prob(5 * brute)) || (brute > 20 && prob(2 * brute)) )
|
||||
droplimb(1)
|
||||
return
|
||||
|
||||
*/
|
||||
owner.updatehealth()
|
||||
|
||||
var/result = update_icon()
|
||||
@@ -290,6 +291,12 @@ This function completely restores a damaged organ to perfect condition.
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/organ/external/proc/dismember_limb()
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) //as hilarious as it is, getting hit on the chest too much shouldn't effectively gib you.
|
||||
if(config.limbs_can_break)
|
||||
droplimb(1)
|
||||
return
|
||||
|
||||
/datum/organ/external/process()
|
||||
//Dismemberment
|
||||
if(status & ORGAN_DESTROYED)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
var/tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them.
|
||||
var/firerate = 1 // 0 for one bullet after tarrget moves and aim is lowered,
|
||||
//1 for keep shooting until aim is lowered
|
||||
var/fire_delay = 6
|
||||
var/fire_delay = 0
|
||||
var/last_fired = 0
|
||||
|
||||
proc/ready_to_fire()
|
||||
@@ -154,6 +154,7 @@
|
||||
in_chamber.current = curloc
|
||||
in_chamber.yo = targloc.y - curloc.y
|
||||
in_chamber.xo = targloc.x - curloc.x
|
||||
|
||||
if(istype(user, /mob/living/carbon))
|
||||
var/mob/living/carbon/mob = user
|
||||
if(mob.shock_stage > 120)
|
||||
@@ -238,7 +239,7 @@
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
if(istype(in_chamber, /obj/item/projectile/beam/lastertag))
|
||||
if(istype(in_chamber, /obj/item/projectile/lasertag))
|
||||
user.show_message("<span class = 'warning'>You feel rather silly, trying to commit suicide with a toy.</span>")
|
||||
mouthshoot = 0
|
||||
return
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser gun"
|
||||
desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice."
|
||||
projectile_type = "/obj/item/projectile/beam/practice"
|
||||
projectile_type = "/obj/item/projectile/practice"
|
||||
clumsy_check = 0
|
||||
|
||||
obj/item/weapon/gun/energy/laser/retro
|
||||
@@ -58,7 +58,6 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
if(R && R.cell)
|
||||
R.cell.use(500)
|
||||
in_chamber = new/obj/item/projectile/beam(src)
|
||||
fire_delay = 12
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -74,7 +73,6 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
origin_tech = "combat=4;materials=3;powerstorage=3"
|
||||
projectile_type = "/obj/item/projectile/beam/heavylaser"
|
||||
charge_cost = 1250
|
||||
fire_delay = 10
|
||||
|
||||
isHandgun()
|
||||
return 0
|
||||
@@ -106,7 +104,7 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
name = "laser tag gun"
|
||||
icon_state = "bluetag"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
projectile_type = "/obj/item/projectile/beam/lastertag/blue"
|
||||
projectile_type = "/obj/item/projectile/lastertag/blue"
|
||||
origin_tech = "combat=1;magnets=2"
|
||||
clumsy_check = 0
|
||||
var/charge_tick = 0
|
||||
@@ -143,7 +141,7 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
name = "laser tag gun"
|
||||
icon_state = "redtag"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
projectile_type = "/obj/item/projectile/beam/lastertag/red"
|
||||
projectile_type = "/obj/item/projectile/lastertag/red"
|
||||
origin_tech = "combat=1;magnets=2"
|
||||
clumsy_check = 0
|
||||
var/charge_tick = 0
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
|
||||
projectile_type = "/obj/item/projectile/beam/stun"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
origin_tech = "combat=3;magnets=2"
|
||||
modifystate = "energystun"
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
charge_cost = 1000
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
user << "\red [src.name] is now set to stun."
|
||||
projectile_type = "/obj/item/projectile/beam/stun"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
modifystate = "energystun"
|
||||
update_icon()
|
||||
if(user.l_hand == src)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
projectile_type = "/obj/item/projectile/beam/pulse"
|
||||
cell_type = "/obj/item/weapon/cell/super"
|
||||
var/mode = 2
|
||||
fire_delay = 15
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 4.0
|
||||
|
||||
@@ -18,21 +17,18 @@
|
||||
if(2)
|
||||
mode = 0
|
||||
charge_cost = 100
|
||||
fire_delay = 5
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
user << "\red [src.name] is now set to stun."
|
||||
projectile_type = "/obj/item/projectile/beam/stun"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode/revolver"
|
||||
if(0)
|
||||
mode = 1
|
||||
charge_cost = 100
|
||||
fire_delay = 8
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
user << "\red [src.name] is now set to kill."
|
||||
projectile_type = "/obj/item/projectile/beam"
|
||||
if(1)
|
||||
mode = 2
|
||||
charge_cost = 200
|
||||
fire_delay = 15
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
user << "\red [src.name] is now set to DESTROY."
|
||||
projectile_type = "/obj/item/projectile/beam/pulse"
|
||||
|
||||
@@ -179,7 +179,7 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
projectile_type = "/obj/item/projectile/beam/sniper"
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 2500
|
||||
fire_delay = 35
|
||||
fire_delay = 10
|
||||
w_class = 4.0
|
||||
var/zoom = 0
|
||||
|
||||
@@ -227,7 +227,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
projectile_type = "/obj/item/projectile/kinetic"
|
||||
cell_type = "/obj/item/weapon/cell/crap"
|
||||
charge_cost = 5000
|
||||
fire_delay = 20
|
||||
|
||||
/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(var/mob/living/user/L)
|
||||
power_supply.give(5000)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "taser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = "/obj/item/projectile/beam/stun"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
cell_type = "/obj/item/weapon/cell"
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/cyborg
|
||||
@@ -13,7 +13,7 @@
|
||||
desc = "A small, low capacity gun used for non-lethal takedowns."
|
||||
icon_state = "taser"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = "/obj/item/projectile/beam/stun"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
cell_type = "/obj/item/weapon/cell/secborg"
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 10 //Time it takes for shots to recharge (in ticks)
|
||||
@@ -51,7 +51,7 @@
|
||||
icon_state = "stunrevolver"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
origin_tech = "combat=3;materials=3;powerstorage=2"
|
||||
projectile_type = "/obj/item/projectile/energy/electroderevolver"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode/revolver"
|
||||
cell_type = "/obj/item/weapon/cell"
|
||||
|
||||
|
||||
@@ -88,11 +88,11 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow/update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow/cyborg/process()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow/cyborg/process_chambered()
|
||||
if(in_chamber)
|
||||
return 1
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r
|
||||
name = "\improper C-20r SMG"
|
||||
desc = "A lightweight, fast firing gun, for when you REALLY need someone dead. Uses 12mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp"
|
||||
desc = "A lightweight, compact bullpup SMG. Uses .45 rounds in medium-capacity magazines and has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
|
||||
icon_state = "c20r"
|
||||
item_state = "c20r"
|
||||
w_class = 3.0
|
||||
@@ -60,14 +60,14 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/l6_saw
|
||||
name = "\improper L6 SAW"
|
||||
desc = "A rather traditionally made medium machine gun with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2531' engraved on the reciever"
|
||||
desc = "A heavily modified light machine gun with a tactical plasteel frame resting on a rather traditionally-made belt-fed ballistic weapon. Has 'Aussec Armoury - 2531' engraved on the reciever."
|
||||
icon_state = "l6closed100"
|
||||
item_state = "l6closedmag"
|
||||
w_class = 4
|
||||
slot_flags = 0
|
||||
origin_tech = "combat=5;materials=1;syndicate=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m762"
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
fire_sound = 'sound/weapons/Gunshot3.ogg'
|
||||
|
||||
var/cover_open = 0
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
w_class = 3.0
|
||||
origin_tech = "combat=5;materials=4;syndicate=6"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m12g"
|
||||
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||
fire_sound = 'sound/weapons/Gunshot4.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/bulldog/New()
|
||||
..()
|
||||
|
||||
@@ -75,12 +75,13 @@
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol
|
||||
name = "\improper Stechtkin pistol"
|
||||
desc = "A small, easily concealable gun. Uses 10mm rounds."
|
||||
desc = "A small, easily concealable gun. Uses 10mm rounds and has a threaded barrel for suppressors."
|
||||
icon_state = "pistol"
|
||||
w_class = 2
|
||||
silenced = 0
|
||||
origin_tech = "combat=2;materials=2;syndicate=2"
|
||||
mag_type = "/obj/item/ammo_box/magazine/m10mm"
|
||||
fire_sound = 'sound/weapons/Gunshot2.ogg'
|
||||
|
||||
/obj/item/weapon/gun/projectile/automatic/pistol/attack_hand(mob/user as mob)
|
||||
if(loc == user)
|
||||
@@ -122,8 +123,8 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/silencer
|
||||
name = "silencer"
|
||||
desc = "a silencer"
|
||||
name = "supressor"
|
||||
desc = "A universal syndicate small-arms suppressor."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
icon_state = "silencer"
|
||||
w_class = 2
|
||||
|
||||
@@ -109,30 +109,31 @@
|
||||
f.hotspot_expose(1000,CELL_VOLUME)
|
||||
else
|
||||
def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 8*distance)
|
||||
|
||||
/*
|
||||
if(!def_zone)
|
||||
visible_message("\blue \The [src] misses [M] narrowly!")
|
||||
forcedodge = -1
|
||||
else
|
||||
if(silenced)
|
||||
playsound(loc, hitsound, 5, 1, -1)
|
||||
M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!"
|
||||
*/
|
||||
if(silenced)
|
||||
playsound(loc, hitsound, 5, 1, -1)
|
||||
M << "\red You've been shot in the [parse_zone(def_zone)] by the [src.name]!"
|
||||
else
|
||||
playsound(loc, hitsound, 20, 1, -1)
|
||||
visible_message("\red [A.name] is hit by the [src.name] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
if(istype(firer, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
if(M.ckey)
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
if(!iscarbon(firer))
|
||||
M.LAssailant = null
|
||||
else
|
||||
playsound(loc, hitsound, 20, 1, -1)
|
||||
visible_message("\red [A.name] is hit by the [src.name] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
|
||||
if(istype(firer, /mob))
|
||||
M.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
firer.attack_log += "\[[time_stamp()]\] <b>[firer]/[firer.ckey]</b> shot <b>[M]/[M.ckey]</b> with a <b>[src.type]</b>"
|
||||
if(M.ckey)
|
||||
msg_admin_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
if(!iscarbon(firer))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
if(M.ckey)
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
M.LAssailant = firer
|
||||
else
|
||||
M.attack_log += "\[[time_stamp()]\] <b>UNKNOWN SUBJECT (No longer exists)</b> shot <b>[M]/[M.ckey]</b> with a <b>[src]</b>"
|
||||
if(M.ckey)
|
||||
msg_admin_attack("UNKNOWN shot [M] ([M.ckey]) with a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[firer.x];Y=[firer.y];Z=[firer.z]'>JMP</a>)") //BS12 EDIT ALG
|
||||
|
||||
if(A)
|
||||
if (!forcedodge)
|
||||
|
||||
@@ -1,3 +1,248 @@
|
||||
/obj/item/projectile/beam
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 20
|
||||
damage_type = BURN
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
|
||||
/obj/item/projectile/practice
|
||||
name = "laser"
|
||||
icon_state = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
damage = 0
|
||||
hitsound = null
|
||||
damage_type = BURN
|
||||
flag = "laser"
|
||||
eyeblur = 2
|
||||
|
||||
/obj/item/projectile/beam/scatter
|
||||
name = "laser pellet"
|
||||
icon_state = "scatterlaser"
|
||||
damage = 5
|
||||
|
||||
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
icon_state = "xray"
|
||||
damage = 15
|
||||
irradiate = 30
|
||||
|
||||
/obj/item/projectile/beam/pulse
|
||||
name = "pulse"
|
||||
icon_state = "u_laser"
|
||||
damage = 50
|
||||
|
||||
/obj/item/projectile/beam/pulse/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target,/turf/)||istype(target,/obj/structure/))
|
||||
target.ex_act(2)
|
||||
..()
|
||||
|
||||
/obj/item/projectile/beam/pulse/shot
|
||||
damage = 40
|
||||
|
||||
/obj/item/projectile/beam/emitter
|
||||
name = "emitter beam"
|
||||
icon_state = "emitter"
|
||||
damage = 30
|
||||
/obj/item/projectile/lasertag
|
||||
name = "laser tag beam"
|
||||
icon_state = "omnilaser"
|
||||
hitsound = null
|
||||
damage = 0
|
||||
flag = "laser"
|
||||
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
|
||||
var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag)
|
||||
|
||||
/obj/item/projectile/lasertag/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/M = target
|
||||
if(istype(M.wear_suit))
|
||||
if(M.wear_suit.type in suit_types)
|
||||
M.Weaken(34)
|
||||
return 1
|
||||
|
||||
/obj/item/projectile/lasertag/omni
|
||||
name = "laser tag beam"
|
||||
icon_state = "omnilaser"
|
||||
|
||||
/obj/item/projectile/lasertag/red
|
||||
icon_state = "laser"
|
||||
suit_types = list(/obj/item/clothing/suit/bluetag)
|
||||
|
||||
/obj/item/projectile/lasertag/blue
|
||||
icon_state = "bluelaser"
|
||||
suit_types = list(/obj/item/clothing/suit/redtag)
|
||||
|
||||
/obj/item/projectile/beam/lightning
|
||||
invisibility = 101
|
||||
name = "lightning"
|
||||
damage = 0
|
||||
icon = 'icons/obj/lightning.dmi'
|
||||
icon_state = "lightning"
|
||||
stun = 10
|
||||
weaken = 10
|
||||
stutter = 50
|
||||
eyeblur = 50
|
||||
var/tang = 0
|
||||
layer = 3
|
||||
var/turf/last = null
|
||||
kill_count = 6
|
||||
|
||||
proc/adjustAngle(angle)
|
||||
angle = round(angle) + 45
|
||||
if(angle > 180)
|
||||
angle -= 180
|
||||
else
|
||||
angle += 180
|
||||
if(!angle)
|
||||
angle = 1
|
||||
/*if(angle < 0)
|
||||
//angle = (round(abs(get_angle(A, user))) + 45) - 90
|
||||
angle = round(angle) + 45 + 180
|
||||
else
|
||||
angle = round(angle) + 45*/
|
||||
return angle
|
||||
|
||||
process()
|
||||
var/first = 1 //So we don't make the overlay in the same tile as the firer
|
||||
var/broke = 0
|
||||
var/broken
|
||||
var/atom/curr = current
|
||||
var/Angle=round(Get_Angle(firer,curr))
|
||||
var/icon/I=new('icons/obj/zap.dmi',"lightning")
|
||||
I.Turn(Angle)
|
||||
var/DX=(32*curr.x+curr.pixel_x)-(32*firer.x+firer.pixel_x)
|
||||
var/DY=(32*curr.y+curr.pixel_y)-(32*firer.y+firer.pixel_y)
|
||||
var/N=0
|
||||
var/length=round(sqrt((DX)**2+(DY)**2))
|
||||
var/count = 0
|
||||
for(N,N<length,N+=32)
|
||||
if(count >= kill_count)
|
||||
break
|
||||
count++
|
||||
var/obj/effect/overlay/beam/X=new(loc)
|
||||
X.BeamSource=src
|
||||
if(N+32>length)
|
||||
var/icon/II=new(icon,icon_state)
|
||||
II.DrawBox(null,1,(length-N),32,32)
|
||||
II.Turn(Angle)
|
||||
X.icon=II
|
||||
else X.icon=I
|
||||
var/Pixel_x=round(sin(Angle)+32*sin(Angle)*(N+16)/32)
|
||||
var/Pixel_y=round(cos(Angle)+32*cos(Angle)*(N+16)/32)
|
||||
if(DX==0) Pixel_x=0
|
||||
if(DY==0) Pixel_y=0
|
||||
if(Pixel_x>32)
|
||||
for(var/a=0, a<=Pixel_x,a+=32)
|
||||
X.x++
|
||||
Pixel_x-=32
|
||||
if(Pixel_x<-32)
|
||||
for(var/a=0, a>=Pixel_x,a-=32)
|
||||
X.x--
|
||||
Pixel_x+=32
|
||||
if(Pixel_y>32)
|
||||
for(var/a=0, a<=Pixel_y,a+=32)
|
||||
X.y++
|
||||
Pixel_y-=32
|
||||
if(Pixel_y<-32)
|
||||
for(var/a=0, a>=Pixel_y,a-=32)
|
||||
X.y--
|
||||
Pixel_y+=32
|
||||
X.pixel_x=Pixel_x
|
||||
X.pixel_y=Pixel_y
|
||||
var/turf/TT = get_turf(X.loc)
|
||||
if(TT == firer.loc)
|
||||
continue
|
||||
if(TT.density)
|
||||
del(X)
|
||||
break
|
||||
for(var/atom/O in TT)
|
||||
if(!O.CanPass(src))
|
||||
del(X)
|
||||
broke = 1
|
||||
break
|
||||
for(var/mob/living/O in TT.contents)
|
||||
if(istype(O, /mob/living))
|
||||
if(O.density)
|
||||
del(X)
|
||||
broke = 1
|
||||
break
|
||||
if(broke)
|
||||
if(X)
|
||||
del(X)
|
||||
break
|
||||
spawn
|
||||
while(src) //Move until we hit something
|
||||
if(first)
|
||||
icon = midicon
|
||||
if((!( current ) || loc == current)) //If we pass our target
|
||||
broken = 1
|
||||
icon = endicon
|
||||
tang = adjustAngle(get_angle(original,current))
|
||||
if(tang > 180)
|
||||
tang -= 180
|
||||
else
|
||||
tang += 180
|
||||
icon_state = "[tang]"
|
||||
var/turf/simulated/floor/f = current
|
||||
if(f && istype(f))
|
||||
f.break_tile()
|
||||
f.hotspot_expose(1000,CELL_VOLUME)
|
||||
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
|
||||
//world << "deleting"
|
||||
//del(src) //Delete if it passes the world edge
|
||||
broken = 1
|
||||
return
|
||||
if(kill_count < 1)
|
||||
//world << "deleting"
|
||||
//del(src)
|
||||
broken = 1
|
||||
kill_count--
|
||||
//world << "[x] [y]"
|
||||
if(!bumped && !isturf(original))
|
||||
if(loc == get_turf(original))
|
||||
if(!(original in permutated))
|
||||
icon = endicon
|
||||
if(!broken)
|
||||
tang = adjustAngle(get_angle(original,current))
|
||||
if(tang > 180)
|
||||
tang -= 180
|
||||
else
|
||||
tang += 180
|
||||
icon_state = "[tang]"
|
||||
Bump(original)
|
||||
first = 0
|
||||
if(broken)
|
||||
//world << "breaking"
|
||||
break
|
||||
else
|
||||
last = get_turf(src.loc)
|
||||
step_towards(src, current) //Move~
|
||||
if(src.loc != current)
|
||||
tang = adjustAngle(get_angle(src.loc,current))
|
||||
icon_state = "[tang]"
|
||||
del(src)
|
||||
return
|
||||
/*cleanup(reference) //Waits .3 seconds then removes the overlay.
|
||||
//world << "setting invisibility"
|
||||
sleep(50)
|
||||
src.invisibility = 101
|
||||
return*/
|
||||
on_hit(atom/target, blocked = 0)
|
||||
if(istype(target, /mob/living))
|
||||
var/mob/living/M = target
|
||||
M.playsound_local(src, "explosion", 50, 1)
|
||||
..()
|
||||
|
||||
/*
|
||||
/*
|
||||
* Use: Caches beam state images and holds turfs that had these images overlaid.
|
||||
* Structure:
|
||||
@@ -399,3 +644,4 @@ var/list/beam_master = list()
|
||||
damage = 0
|
||||
agony = 40
|
||||
damage_type = HALLOSS
|
||||
*/
|
||||
@@ -20,8 +20,14 @@
|
||||
hitsound = 'sound/weapons/tase.ogg'
|
||||
//Damage will be handled on the MOB side, to prevent window shattering.
|
||||
|
||||
on_hit(var/atom/target, var/blocked = 0)
|
||||
if(!ismob(target) || blocked >= 2) //Fully blocked by mob or collided with dense object - burst into sparks!
|
||||
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread
|
||||
sparks.set_up(1, 1, src)
|
||||
sparks.start()
|
||||
|
||||
/obj/item/projectile/energy/electroderevolver
|
||||
|
||||
/obj/item/projectile/energy/electrode/revolver
|
||||
name = "electrode"
|
||||
icon_state = "spark"
|
||||
nodamage = 1
|
||||
|
||||
@@ -1717,8 +1717,6 @@ datum
|
||||
description = "Alchdranine is an extremely strange chemical substance that can be used to treat almost any injury with a high level of effectiveness "
|
||||
reagent_state = LIQUID
|
||||
color = "#07a4d1" // rgb: 7, 164, 209
|
||||
toxod = OVERDOSE/3
|
||||
burnod = OVERDOSE/3
|
||||
|
||||
on_mob_life(var/mob/living/M as mob, var/alien)
|
||||
if(M.stat == 2.0)
|
||||
@@ -1913,6 +1911,21 @@ datum
|
||||
..()
|
||||
return
|
||||
|
||||
inacusiate
|
||||
name = "Inacusiate"
|
||||
id = "inacusiate"
|
||||
description = "Heals ear damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#6600FF" // rgb: 100, 165, 255
|
||||
toxod = OVERDOSE
|
||||
scannable = 1
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M.ear_damage = 0
|
||||
M.ear_deaf = 0
|
||||
..()
|
||||
return
|
||||
|
||||
peridaxon
|
||||
name = "Peridaxon"
|
||||
@@ -1986,9 +1999,9 @@ datum
|
||||
if(!M) M = holder.my_atom
|
||||
if(M.bodytemperature < 170)
|
||||
M.adjustCloneLoss(-1)
|
||||
M.adjustOxyLoss(-2)
|
||||
M.heal_organ_damage(2,2)
|
||||
M.adjustToxLoss(-2)
|
||||
M.adjustOxyLoss(-3)
|
||||
M.heal_organ_damage(3,3)
|
||||
M.adjustToxLoss(-3)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2003,7 +2016,11 @@ datum
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
if(M.bodytemperature < 170)
|
||||
M.adjustCloneLoss(-4)
|
||||
M.adjustCloneLoss(-3)
|
||||
M.adjustOxyLoss(-3)
|
||||
M.heal_organ_damage(3,3)
|
||||
M.adjustToxLoss(-3)
|
||||
M.status_flags &= ~DISFIGURED
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2272,6 +2289,7 @@ datum
|
||||
M.drowsyness = 0
|
||||
M.stuttering = 0
|
||||
M.confused = 0
|
||||
M.reagents.remove_all_type(/datum/reagent/ethanol, 1*REM, 0, 1)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2309,9 +2327,9 @@ datum
|
||||
M.sleeping += 1
|
||||
if(51 to INFINITY)
|
||||
M.sleeping += 1
|
||||
M:toxloss += (data - 50)
|
||||
M.adjustToxLoss((data - 50)*REM)
|
||||
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
|
||||
..()
|
||||
|
||||
return
|
||||
|
||||
beer2 //copypasta of chloral hydrate, disguised as normal beer for use by emagged brobots
|
||||
@@ -2515,27 +2533,37 @@ datum
|
||||
return
|
||||
else if ( mouth_covered ) // Reduced effects if partially protected
|
||||
victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
|
||||
victim.eye_blurry = max(M.eye_blurry, 15)
|
||||
victim.eye_blind = max(M.eye_blind, 5)
|
||||
victim.Stun(5)
|
||||
victim.Weaken(5)
|
||||
//victim.Paralyse(10)
|
||||
//victim.drop_item()
|
||||
if(prob(5))
|
||||
victim.emote("scream")
|
||||
victim.eye_blurry = max(M.eye_blurry, 3)
|
||||
victim.eye_blind = max(M.eye_blind, 1)
|
||||
victim.confused = max(M.confused, 3)
|
||||
victim.damageoverlaytemp = 60
|
||||
victim.Weaken(3)
|
||||
victim.drop_item()
|
||||
return
|
||||
else if ( eyes_covered ) // Eye cover is better than mouth cover
|
||||
victim << "\red Your [safe_thing] protects your eyes from the pepperspray!"
|
||||
victim.emote("scream")
|
||||
victim.eye_blurry = max(M.eye_blurry, 5)
|
||||
victim.eye_blurry = max(M.eye_blurry, 3)
|
||||
victim.damageoverlaytemp = 30
|
||||
return
|
||||
else // Oh dear :D
|
||||
victim.emote("scream")
|
||||
if(prob(5))
|
||||
victim.emote("scream")
|
||||
victim << "\red You're sprayed directly in the eyes with pepperspray!"
|
||||
victim.eye_blurry = max(M.eye_blurry, 25)
|
||||
victim.eye_blind = max(M.eye_blind, 10)
|
||||
victim.Stun(5)
|
||||
victim.eye_blurry = max(M.eye_blurry, 5)
|
||||
victim.eye_blind = max(M.eye_blind, 2)
|
||||
victim.confused = max(M.confused, 6)
|
||||
victim.damageoverlaytemp = 75
|
||||
victim.Weaken(5)
|
||||
//victim.Paralyse(10)
|
||||
//victim.drop_item()
|
||||
victim.drop_item()
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
if(prob(5))
|
||||
M.visible_message("<span class='warning'>[M] [pick("dry heaves!","coughs!","splutters!")]</span>")
|
||||
..()
|
||||
return
|
||||
|
||||
frostoil
|
||||
name = "Frost Oil"
|
||||
@@ -2917,7 +2945,7 @@ datum
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
..()
|
||||
if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1*REM)
|
||||
if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1*REM)
|
||||
return
|
||||
|
||||
tomatojuice
|
||||
@@ -2967,15 +2995,16 @@ datum
|
||||
id = "doctorsdelight"
|
||||
description = "A gulp a day keeps the MediBot away. That's probably for the best."
|
||||
reagent_state = LIQUID
|
||||
nutriment_factor = 1 * FOOD_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
color = "#FF8CFF" // rgb: 255, 140, 255
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M:nutrition += nutriment_factor
|
||||
holder.remove_reagent(src.id, FOOD_METABOLISM)
|
||||
if(!M) M = holder.my_atom
|
||||
if(M:getToxLoss() && prob(80)) M:adjustToxLoss(-1)
|
||||
|
||||
if(M.getOxyLoss() && prob(80)) M.adjustOxyLoss(-2)
|
||||
if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(2,0)
|
||||
if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,2)
|
||||
if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-2)
|
||||
if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15)
|
||||
if(M.confused !=0) M.confused = max(0,M.confused - 5)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -3014,11 +3043,31 @@ datum
|
||||
description = "The raw essence of a banana."
|
||||
color = "#863333" // rgb: 175, 175, 0
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(1,1)
|
||||
M.nutrition += nutriment_factor
|
||||
..()
|
||||
return
|
||||
..()
|
||||
|
||||
nothing
|
||||
name = "Nothing"
|
||||
id = "nothing"
|
||||
description = "Absolutely nothing."
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(1,1)
|
||||
M.nutrition += nutriment_factor
|
||||
..()
|
||||
return
|
||||
..()
|
||||
|
||||
potato_juice
|
||||
name = "Potato Juice"
|
||||
id = "potato"
|
||||
@@ -3938,6 +3987,16 @@ datum
|
||||
nutriment_factor = 1 * FOOD_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(1,1)
|
||||
M.nutrition += nutriment_factor
|
||||
..()
|
||||
return
|
||||
..()
|
||||
|
||||
silencer
|
||||
name = "Silencer"
|
||||
id = "silencer"
|
||||
@@ -3945,6 +4004,16 @@ datum
|
||||
nutriment_factor = 1 * FOOD_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.nutrition += nutriment_factor
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
|
||||
if(!M) M = holder.my_atom
|
||||
M.heal_organ_damage(1,1)
|
||||
M.nutrition += nutriment_factor
|
||||
..()
|
||||
return
|
||||
..()
|
||||
|
||||
changelingsting
|
||||
name = "Changeling Sting"
|
||||
id = "changelingsting"
|
||||
|
||||
@@ -319,6 +319,13 @@ datum
|
||||
required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
|
||||
result_amount = 2
|
||||
|
||||
inacusiate
|
||||
name = "inacusiate"
|
||||
id = "inacusiate"
|
||||
result = "inacusiate"
|
||||
required_reagents = list("water" = 1, "carbon" = 1, "anti_toxin" = 1)
|
||||
result_amount = 2
|
||||
|
||||
ethylredoxrazine
|
||||
name = "Ethylredoxrazine"
|
||||
id = "ethylredoxrazine"
|
||||
@@ -1397,6 +1404,78 @@ datum
|
||||
var/obj/effect/golem_rune/Z = new /obj/effect/golem_rune
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
Z.announce_to_ghosts()
|
||||
//Bluespace
|
||||
slimecrystal
|
||||
name = "Slime Crystal"
|
||||
id = "m_crystal"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/bluespace
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
if(holder.my_atom)
|
||||
var/obj/item/bluespace_crystal/BC = new(get_turf(holder.my_atom))
|
||||
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
|
||||
//Cerulean
|
||||
slimepsteroid2
|
||||
name = "Slime Steroid 2"
|
||||
id = "m_steroid2"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/cerulean
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/obj/item/weapon/slimesteroid2/P = new /obj/item/weapon/slimesteroid2
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
//Sepia
|
||||
slimecamera
|
||||
name = "Slime Camera"
|
||||
id = "m_camera"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/obj/item/device/camera/P = new /obj/item/device/camera
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
|
||||
slimefilm
|
||||
name = "Slime Film"
|
||||
id = "m_film"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/obj/item/device/camera_film/P = new /obj/item/device/camera_film
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
//Pyrite
|
||||
slimepaint
|
||||
name = "Slime Paint"
|
||||
id = "s_paint"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/pyrite
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[replacetext(name," ","_")]")
|
||||
var/list/paints = typesof(/obj/item/weapon/reagent_containers/glass/paint) - /obj/item/weapon/reagent_containers/glass/paint
|
||||
var/chosen = pick(paints)
|
||||
var/obj/P = new chosen
|
||||
if(P)
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
|
||||
//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
|
||||
|
||||
tofu
|
||||
@@ -1697,7 +1776,7 @@ datum
|
||||
name = "The Doctor's Delight"
|
||||
id = "doctordelight"
|
||||
result = "doctorsdelight"
|
||||
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1)
|
||||
required_reagents = list("limejuice" = 1, "tomatojuice" = 1, "orangejuice" = 1, "cream" = 1, "tricordrazine" = 1)
|
||||
result_amount = 5
|
||||
|
||||
irish_cream
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
|
||||
|
||||
var/list/datum/reagents/reagent_list = list()
|
||||
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
|
||||
var/list/reagent_ids = list("doctorsdelight", "inaprovaline", "spaceacillin")
|
||||
//var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/surgeon
|
||||
reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/crisis
|
||||
reagent_ids = list("tricordrazine", "inaprovaline", "tramadol")
|
||||
reagent_ids = list("doctorsdelight", "inaprovaline", "tramadol")
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/New()
|
||||
..()
|
||||
|
||||
@@ -1276,7 +1276,7 @@
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 4)
|
||||
reagents.add_reagent("alchdranine", 5)
|
||||
reagents.add_reagent("doctorsdelight", 5)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
|
||||
@@ -2205,7 +2205,7 @@
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 8)
|
||||
reagents.add_reagent("alchdranine", 5)
|
||||
reagents.add_reagent("doctorsdelight", 5)
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/appletart
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
|
||||
..()
|
||||
reagents.add_reagent("tricordrazine", 30)
|
||||
reagents.add_reagent("doctorsdelight", 30)
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat/New()
|
||||
..()
|
||||
reagents.remove_reagent("tricordrazine", 30)
|
||||
reagents.remove_reagent("doctorsdelight", 30)
|
||||
reagents.add_reagent("synaptizine", 30)
|
||||
|
||||
|
||||
@@ -76,10 +76,11 @@
|
||||
amount_per_transfer_from_this = 5
|
||||
possible_transfer_amounts = list(5)
|
||||
volume = 5
|
||||
var/emagged = 0
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
|
||||
..()
|
||||
reagents.remove_reagent("tricordrazine", 30)
|
||||
reagents.remove_reagent("doctorsdelight", 30)
|
||||
reagents.add_reagent("tramadol", 4)
|
||||
reagents.add_reagent("hyperzine", 1)
|
||||
update_icon()
|
||||
@@ -87,8 +88,9 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
|
||||
..()
|
||||
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
|
||||
flags &= ~OPENCONTAINER
|
||||
if(!emagged)
|
||||
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
|
||||
flags &= ~OPENCONTAINER
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -105,6 +107,13 @@
|
||||
else
|
||||
usr << "\blue It is spent."
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
|
||||
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
|
||||
emagged = 1
|
||||
user << "<span class='notice'>You bypass the electronic child-safety lock on the reagent storage.</span>"
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/hyperzine
|
||||
name = "emergency stimulant autoinjector"
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
|
||||
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
|
||||
if(!istype(Proj ,/obj/item/projectile/lasertag) && !istype(Proj ,/obj/item/projectile/practice) )
|
||||
explode()
|
||||
|
||||
blob_act()
|
||||
|
||||
@@ -207,7 +207,7 @@ datum/tech/bluespace
|
||||
name = "'Blue-space' Research"
|
||||
desc = "Research into the sub-reality known as 'blue-space'"
|
||||
id = "bluespace"
|
||||
max_level=4
|
||||
max_level=6
|
||||
|
||||
datum/tech/biotech
|
||||
name = "Biological Technology"
|
||||
|
||||
@@ -27,7 +27,7 @@ datum/chemical_reaction/coolant
|
||||
|
||||
/obj/structure/reagent_dispensers/coolanttank/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet))
|
||||
if(!istype(Proj ,/obj/item/projectile/beam/lastertag) && !istype(Proj ,/obj/item/projectile/beam/practice) )
|
||||
if(!istype(Proj ,/obj/item/projectile/lasertag) && !istype(Proj ,/obj/item/projectile/practice) )
|
||||
explode()
|
||||
|
||||
/obj/structure/reagent_dispensers/coolanttank/blob_act()
|
||||
|
||||
Reference in New Issue
Block a user