mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
@@ -6,6 +6,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
/obj/effect/proc_holder/spell
|
||||
name = "Spell"
|
||||
desc = "A wizard spell"
|
||||
panel = "Spells"//What panel the proc holder needs to go on.
|
||||
density = 0
|
||||
opacity = 0
|
||||
|
||||
|
||||
@@ -41,317 +41,3 @@
|
||||
if(M)
|
||||
M.active_genes -= gene.type
|
||||
M.update_icon = 1
|
||||
|
||||
/* Old, inflexibile
|
||||
/proc/domutcheck(var/mob/living/M, var/connected, var/flags)
|
||||
if (!M) return
|
||||
|
||||
M.dna.check_integrity()
|
||||
|
||||
M.disabilities = 0
|
||||
M.sdisabilities = 0
|
||||
var/old_mutations = M.mutations
|
||||
M.mutations = list()
|
||||
M.pass_flags = 0
|
||||
// M.see_in_dark = 2
|
||||
// M.see_invisible = 0
|
||||
|
||||
if(PLANT in old_mutations)
|
||||
M.mutations.Add(PLANT)
|
||||
if(SKELETON in old_mutations)
|
||||
M.mutations.Add(SKELETON)
|
||||
if(M_FAT in old_mutations)
|
||||
M.mutations.Add(M_FAT)
|
||||
if(M_HUSK in old_mutations)
|
||||
M.mutations.Add(M_HUSK)
|
||||
|
||||
var/inj = (flags & MUTCHK_FROM_INJECTOR) == MUTCHK_FROM_INJECTOR
|
||||
var/forced = (flags & MUTCHK_FORCED) == MUTCHK_FORCED
|
||||
|
||||
if(M.dna.GetSEState(NOBREATHBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_NO_BREATH in old_mutations))
|
||||
M << "\blue You feel no need to breathe."
|
||||
M.mutations.Add(M_NO_BREATH)
|
||||
if(M.dna.GetSEState(REMOTEVIEWBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_REMOTE_VIEW in old_mutations))
|
||||
M << "\blue Your mind expands"
|
||||
M.mutations.Add(M_REMOTE_VIEW)
|
||||
M.verbs += /mob/living/carbon/human/proc/remoteobserve
|
||||
if(M.dna.GetSEState(REGENERATEBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_REGEN in old_mutations))
|
||||
M << "\blue You feel better"
|
||||
M.mutations.Add(M_REGEN)
|
||||
if(M.dna.GetSEState(INCREASERUNBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_RUN in old_mutations))
|
||||
M << "\blue Your leg muscles pulsate."
|
||||
M.mutations.Add(M_RUN)
|
||||
if(M.dna.GetSEState(REMOTETALKBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_REMOTE_TALK in old_mutations))
|
||||
M << "\blue You expand your mind outwards"
|
||||
M.mutations.Add(M_REMOTE_TALK)
|
||||
M.verbs += /mob/living/carbon/human/proc/remotesay
|
||||
if(M.dna.GetSEState(MORPHBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_MORPH in old_mutations))
|
||||
M.mutations.Add(M_MORPH)
|
||||
M << "\blue Your skin feels strange"
|
||||
M.verbs += /mob/living/carbon/human/proc/morph
|
||||
if(M.dna.GetSEState(COLDBLOCK))
|
||||
if(!(M_RESIST_COLD in old_mutations))
|
||||
if(forced || probinj(15,inj) || (M_RESIST_HEAT in old_mutations))
|
||||
M.mutations.Add(M_RESIST_HEAT)
|
||||
M << "\blue Your skin is icy to the touch"
|
||||
else
|
||||
if(forced || probinj(5,inj) || (M_RESIST_HEAT in old_mutations))
|
||||
M.mutations.Add(M_RESIST_HEAT)
|
||||
M << "\blue Your skin is icy to the touch"
|
||||
if(M.dna.GetSEState(HALLUCINATIONBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_HALLUCINATE in old_mutations))
|
||||
M.mutations.Add(M_HALLUCINATE)
|
||||
M << "\red Your mind says 'Hello'"
|
||||
if(M.dna.GetSEState(NOPRINTSBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_FINGERPRINTS in old_mutations))
|
||||
M.mutations.Add(M_FINGERPRINTS)
|
||||
M << "\blue Your fingers feel numb"
|
||||
if(M.dna.GetSEState(SHOCKIMMUNITYBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_NO_SHOCK in old_mutations))
|
||||
M.mutations.Add(M_NO_SHOCK)
|
||||
M << "\blue Your skin feels strange"
|
||||
if(M.dna.GetSEState(SMALLSIZEBLOCK))
|
||||
if(forced || probinj(45,inj) || (M_DWARF in old_mutations))
|
||||
M << "\blue Your skin feels rubbery"
|
||||
M.mutations.Add(M_DWARF)
|
||||
M.pass_flags |= 1
|
||||
|
||||
|
||||
|
||||
if (M.dna.GetSEState(HULKBLOCK))
|
||||
if(forced || probinj(5,inj) || (M_HULK in old_mutations))
|
||||
M << "\blue Your muscles hurt."
|
||||
M.mutations.Add(M_HULK)
|
||||
if (M.dna.GetSEState(HEADACHEBLOCK))
|
||||
M.disabilities |= EPILEPSY
|
||||
M << "\red You get a headache."
|
||||
if (M.dna.GetSEState(FAKEBLOCK))
|
||||
M << "\red You feel strange."
|
||||
if (prob(95))
|
||||
if(prob(50))
|
||||
randmutb(M)
|
||||
else
|
||||
randmuti(M)
|
||||
else
|
||||
randmutg(M)
|
||||
if (M.dna.GetSEState(COUGHBLOCK))
|
||||
M.disabilities |= COUGHING
|
||||
M << "\red You start coughing."
|
||||
if (M.dna.GetSEState(CLUMSYBLOCK))
|
||||
M << "\red You feel lightheaded."
|
||||
M.mutations.Add(M_CLUMSY)
|
||||
if (M.dna.GetSEState(TWITCHBLOCK))
|
||||
M.disabilities |= TOURETTES
|
||||
M << "\red You twitch."
|
||||
if (M.dna.GetSEState(XRAYBLOCK))
|
||||
if(forced || probinj(30,inj) || (M_XRAY in old_mutations))
|
||||
M << "\blue The walls suddenly disappear."
|
||||
// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
|
||||
// M.see_in_dark = 8
|
||||
// M.see_invisible = 2
|
||||
M.mutations.Add(M_XRAY)
|
||||
if (M.dna.GetSEState(NERVOUSBLOCK))
|
||||
M.disabilities |= NERVOUS
|
||||
M << "\red You feel nervous."
|
||||
if (M.dna.GetSEState(FIREBLOCK))
|
||||
if(!(M_RESIST_HEAT in old_mutations))
|
||||
if(forced || probinj(30,inj) || (M_RESIST_COLD in old_mutations))
|
||||
M << "\blue Your body feels warm."
|
||||
M.mutations.Add(M_RESIST_COLD)
|
||||
else
|
||||
if(forced || probinj(5,inj) || (M_RESIST_COLD in old_mutations))
|
||||
M << "\blue Your body feels warm."
|
||||
M.mutations.Add(M_RESIST_COLD)
|
||||
if (M.dna.GetSEState(BLINDBLOCK))
|
||||
M.sdisabilities |= BLIND
|
||||
M << "\red You can't seem to see anything."
|
||||
if (M.dna.GetSEState(TELEBLOCK))
|
||||
if(forced || probinj(15,inj) || (M_TK in old_mutations))
|
||||
M << "\blue You feel smarter."
|
||||
M.mutations.Add(M_TK)
|
||||
if (M.dna.GetSEState(DEAFBLOCK))
|
||||
M.sdisabilities |= DEAF
|
||||
M.ear_deaf = 1
|
||||
M << "\red Its kinda quiet.."
|
||||
if (M.dna.GetSEState(GLASSESBLOCK))
|
||||
M.disabilities |= NEARSIGHTED
|
||||
M << "Your eyes feel weird..."
|
||||
|
||||
/* If you want the new mutations to work, UNCOMMENT THIS.
|
||||
if(istype(M, /mob/living/carbon))
|
||||
for (var/datum/mutations/mut in global_mutations)
|
||||
mut.check_mutation(M)
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////// Monkey Block
|
||||
if (M.dna.GetSEState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human))
|
||||
// human > monkey
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.monkeyizing = 1
|
||||
var/list/implants = list() //Try to preserve implants.
|
||||
for(var/obj/item/weapon/implant/W in H)
|
||||
implants += W
|
||||
W.loc = null
|
||||
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (H.contents-implants))
|
||||
if (W==H.w_uniform) // will be teared
|
||||
continue
|
||||
H.drop_from_inventory(W)
|
||||
M.monkeyizing = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new( M.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
|
||||
|
||||
var/mob/living/carbon/monkey/O = null
|
||||
if(H.species.primitive)
|
||||
O = new H.species.primitive(src)
|
||||
else
|
||||
H.gib() //Trying to change the species of a creature with no primitive var set is messy.
|
||||
return
|
||||
|
||||
if(M)
|
||||
if (M.dna)
|
||||
O.dna = M.dna.Clone()
|
||||
M.dna = null
|
||||
|
||||
if (M.suiciding)
|
||||
O.suiciding = M.suiciding
|
||||
M.suiciding = null
|
||||
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
O.viruses += D
|
||||
D.affected_mob = O
|
||||
M.viruses -= D
|
||||
|
||||
|
||||
for(var/obj/T in (M.contents-implants))
|
||||
del(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(O) //transfer our mind to the cute little monkey
|
||||
|
||||
if (connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6))
|
||||
O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss())
|
||||
O.adjustToxLoss(M.getToxLoss() + 20)
|
||||
O.adjustOxyLoss(M.getOxyLoss())
|
||||
O.stat = M.stat
|
||||
O.a_intent = "hurt"
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
return
|
||||
|
||||
if (!M.dna.GetSEState(MONKEYBLOCK) && !istype(M, /mob/living/carbon/human))
|
||||
// monkey > human,
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
Mo.monkeyizing = 1
|
||||
var/list/implants = list() //Still preserving implants
|
||||
for(var/obj/item/weapon/implant/W in Mo)
|
||||
implants += W
|
||||
W.loc = null
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (Mo.contents-implants))
|
||||
Mo.drop_from_inventory(W)
|
||||
M.monkeyizing = 1
|
||||
M.canmove = 0
|
||||
M.icon = null
|
||||
M.invisibility = 101
|
||||
var/atom/movable/overlay/animation = new( M.loc )
|
||||
animation.icon_state = "blank"
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.master = src
|
||||
flick("monkey2h", animation)
|
||||
sleep(48)
|
||||
del(animation)
|
||||
|
||||
var/mob/living/carbon/human/O = new( src )
|
||||
if(Mo.greaterform)
|
||||
O.set_species(Mo.greaterform)
|
||||
|
||||
if (M.dna.GetUIState(DNA_UI_GENDER))
|
||||
O.gender = FEMALE
|
||||
else
|
||||
O.gender = MALE
|
||||
|
||||
if (M)
|
||||
if (M.dna)
|
||||
O.dna = M.dna.Clone()
|
||||
M.dna = null
|
||||
|
||||
if (M.suiciding)
|
||||
O.suiciding = M.suiciding
|
||||
M.suiciding = null
|
||||
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
O.viruses += D
|
||||
D.affected_mob = O
|
||||
M.viruses -= D
|
||||
|
||||
//for(var/obj/T in M)
|
||||
// del(T)
|
||||
|
||||
O.loc = M.loc
|
||||
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(O) //transfer our mind to the human
|
||||
|
||||
if (connected) //inside dna thing
|
||||
var/obj/machinery/dna_scannernew/C = connected
|
||||
O.loc = C
|
||||
C.occupant = O
|
||||
connected = null
|
||||
|
||||
var/i
|
||||
while (!i)
|
||||
var/randomname
|
||||
if (O.gender == MALE)
|
||||
randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
|
||||
else
|
||||
randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
|
||||
if (findname(randomname))
|
||||
continue
|
||||
else
|
||||
O.real_name = randomname
|
||||
i++
|
||||
O.UpdateAppearance()
|
||||
O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
|
||||
O.adjustToxLoss(M.getToxLoss())
|
||||
O.adjustOxyLoss(M.getOxyLoss())
|
||||
O.stat = M.stat
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
I.implanted = O
|
||||
// O.update_icon = 1 //queue a full icon update at next life() call
|
||||
del(M)
|
||||
return
|
||||
//////////////////////////////////////////////////////////// Monkey Block
|
||||
if(M)
|
||||
M.update_icon = 1 //queue a full icon update at next life() call
|
||||
return null
|
||||
/////////////////////////// DNA MISC-PROCS
|
||||
*/
|
||||
@@ -81,12 +81,16 @@
|
||||
|
||||
activate(var/mob/M, var/connected, var/flags)
|
||||
..()
|
||||
M.spell_list += spelltype
|
||||
M.spell_list += new spelltype(M)
|
||||
return 1
|
||||
|
||||
deactivate(var/mob/M, var/connected, var/flags)
|
||||
..()
|
||||
M.spell_list -= spelltype
|
||||
for(var/obj/effect/proc_holder/spell/S in M.spell_list)
|
||||
if(istype(S,spelltype))
|
||||
M.spell_list.Remove(S)
|
||||
return 1
|
||||
|
||||
/datum/dna/gene/basic/grant_verb
|
||||
var/verbtype
|
||||
|
||||
|
||||
@@ -314,14 +314,14 @@ Implants;
|
||||
|
||||
comm.messagetitle.Add("Cent. Com. Status Summary")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
world << sound('sound/AI/commandreport.ogg')
|
||||
/* world << sound('sound/AI/commandreport.ogg') */
|
||||
|
||||
/* command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercepted. Security Level Elevated.")
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player))
|
||||
M << sound('sound/AI/intercept.ogg')
|
||||
if(security_level < SEC_LEVEL_BLUE)
|
||||
set_security_level(SEC_LEVEL_BLUE)*/
|
||||
set_security_level(SEC_LEVEL_BLUE)
|
||||
|
||||
|
||||
/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0)
|
||||
|
||||
@@ -41,7 +41,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
login_music = pick(\
|
||||
'sound/music/knights.ogg',\
|
||||
'sound/music/space.ogg',\
|
||||
'sound/music/traitor.ogg',\
|
||||
'sound/music/Title1.ogg',\
|
||||
'sound/music/Title2.ogg',\
|
||||
'sound/music/space_oddity.ogg') //Ground Control to Major Tom, this song is cool, what's going on?
|
||||
do
|
||||
pregame_timeleft = 180
|
||||
|
||||
@@ -60,31 +60,42 @@
|
||||
_color = "grey"
|
||||
can_label = 0
|
||||
|
||||
/*
|
||||
* return 0 (reached the proc code end)
|
||||
* 1 (canister is destroyed)
|
||||
*/
|
||||
/obj/machinery/portable_atmospherics/canister/update_icon()
|
||||
src.overlays = 0
|
||||
var/L[0]
|
||||
overlays = L
|
||||
|
||||
if (src.destroyed)
|
||||
src.icon_state = text("[]-1", src._color)
|
||||
if (destroyed)
|
||||
icon_state = "[_color]-1"
|
||||
return 1
|
||||
|
||||
else
|
||||
icon_state = "[_color]"
|
||||
if(holding)
|
||||
overlays += "can-open"
|
||||
icon_state = "[_color]"
|
||||
|
||||
if(connected_port)
|
||||
overlays += "can-connector"
|
||||
L += "can-o3"
|
||||
|
||||
var/tank_pressure = air_contents.return_pressure()
|
||||
var/tank_pressure = air_contents.return_pressure()
|
||||
|
||||
if (tank_pressure < 10)
|
||||
overlays += image('icons/obj/atmos.dmi', "can-o0")
|
||||
else if (tank_pressure < ONE_ATMOSPHERE)
|
||||
overlays += image('icons/obj/atmos.dmi', "can-o1")
|
||||
else if (tank_pressure < 15*ONE_ATMOSPHERE)
|
||||
overlays += image('icons/obj/atmos.dmi', "can-o2")
|
||||
else
|
||||
overlays += image('icons/obj/atmos.dmi', "can-o3")
|
||||
return
|
||||
if (tank_pressure < 10)
|
||||
L[L.len] = "can-o0"
|
||||
else if (tank_pressure < ONE_ATMOSPHERE)
|
||||
L[L.len] = "can-o1"
|
||||
else if (tank_pressure < 15 * ONE_ATMOSPHERE)
|
||||
L[L.len] = "can-o2"
|
||||
|
||||
tank_pressure = null
|
||||
|
||||
if (holding)
|
||||
L += "can-open"
|
||||
|
||||
if (connected_port)
|
||||
L += "can-connector"
|
||||
|
||||
overlays = L
|
||||
L = null
|
||||
return 0
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > temperature_resistance)
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
equip_cooldown = 15
|
||||
name = "CH-LC \"Solaris\" Laser Cannon"
|
||||
icon_state = "mecha_laser"
|
||||
energy_drain = 60
|
||||
energy_drain = 50
|
||||
projectile = /obj/item/projectile/beam/heavylaser
|
||||
fire_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
|
||||
|
||||
@@ -120,12 +120,12 @@ var/global/floorIsLava = 0
|
||||
else
|
||||
body += "<A href='?src=\ref[src];makeanimal=\ref[M]'>Animalize</A> | "
|
||||
|
||||
// MUTATIONS
|
||||
// DNA2 - Admin Hax
|
||||
if(iscarbon(M))
|
||||
body += "<br><br>"
|
||||
body += "<b>DNA Blocks:</b><br><table border='0'><tr><th> </th><th>1</th><th>2</th><th>3</th><th>4</th><th>5</th>"
|
||||
var/bname
|
||||
for(var/block=1;block<DNA_SE_LENGTH;block++)
|
||||
for(var/block=1;block<=DNA_SE_LENGTH;block++)
|
||||
if(((block-1)%5)==0)
|
||||
body += "</tr><tr><th>[block-1]</th>"
|
||||
bname = assigned_blocks[block]
|
||||
@@ -873,7 +873,11 @@ var/global/floorIsLava = 0
|
||||
if(!chosen)
|
||||
return
|
||||
|
||||
new chosen(usr.loc)
|
||||
if(ispath(chosen,/turf))
|
||||
var/turf/T = get_turf(usr.loc)
|
||||
T.ChangeTurf(chosen)
|
||||
else
|
||||
new chosen(usr.loc)
|
||||
|
||||
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
|
||||
feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -273,7 +273,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
log_admin("[key_name(src)] has made [M.key] a changeling.")
|
||||
spawn(10)
|
||||
M.absorbed_dna[M.real_name] = M.dna
|
||||
M.absorbed_dna[M.real_name] = M.dna.Clone()
|
||||
M.make_changeling()
|
||||
if(M.mind)
|
||||
M.mind.special_role = "Changeling"
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
continue
|
||||
var/datum/disease/dnaspread/D = new
|
||||
D.strain_data["name"] = H.real_name
|
||||
D.strain_data["UI"] = H.dna.UI
|
||||
D.strain_data["SE"] = H.dna.SE
|
||||
D.strain_data["UI"] = H.dna.UI.Copy()
|
||||
D.strain_data["SE"] = H.dna.SE.Copy()
|
||||
D.carrier = 1
|
||||
D.holder = H
|
||||
D.affected_mob = H
|
||||
|
||||
@@ -1217,83 +1217,7 @@
|
||||
del(feet_blood_DNA)
|
||||
return 1
|
||||
|
||||
mob/living/carbon/human/yank_out_object()
|
||||
set category = "Object"
|
||||
set name = "Yank out object"
|
||||
set desc = "Remove an embedded item at the cost of bleeding and pain."
|
||||
set src in view(1)
|
||||
|
||||
if(!isliving(usr) || usr.next_move > world.time)
|
||||
return
|
||||
usr.next_move = world.time + 20
|
||||
|
||||
if(usr.stat == 1)
|
||||
usr << "You are unconcious and cannot do that!"
|
||||
return
|
||||
|
||||
if(usr.restrained())
|
||||
usr << "You are restrained and cannot do that!"
|
||||
return
|
||||
|
||||
var/list/valid_objects = list()
|
||||
var/datum/organ/external/affected = null
|
||||
var/mob/living/carbon/human/S = src
|
||||
var/mob/living/carbon/human/U = usr
|
||||
var/self = null
|
||||
|
||||
if(S == U)
|
||||
self = 1 // Removing object from yourself.
|
||||
|
||||
valid_objects = get_visible_implants(1)
|
||||
|
||||
if(!valid_objects.len)
|
||||
if(self)
|
||||
src << "You have nothing stuck in your wounds that is large enough to remove without surgery."
|
||||
else
|
||||
U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery."
|
||||
return
|
||||
|
||||
var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
|
||||
|
||||
for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant.
|
||||
for(var/obj/item/weapon/O in organ.implants)
|
||||
if(O == selection)
|
||||
affected = organ
|
||||
if(self)
|
||||
src << "<span class='warning'>You attempt to get a good grip on the [selection] in your [affected.display_name] with bloody fingers.</span>"
|
||||
else
|
||||
U << "<span class='warning'>You attempt to get a good grip on the [selection] in [S]'s [affected.display_name] with bloody fingers.</span>"
|
||||
|
||||
if(istype(U,/mob/living/carbon/human/)) U.bloody_hands(S)
|
||||
|
||||
if(!do_after(U, 80))
|
||||
return
|
||||
|
||||
if(!selection || !affected || !S || !U)
|
||||
return
|
||||
|
||||
if(self)
|
||||
visible_message("<span class='warning'><b>[src] rips [selection] out of their [affected.display_name] in a welter of blood.</b></span>","<span class='warning'><b>You rip [selection] out of your [affected] in a welter of blood.</b></span>")
|
||||
else
|
||||
visible_message("<span class='warning'><b>[usr] rips [selection] out of [src]'s [affected.display_name] in a welter of blood.</b></span>","<span class='warning'><b>[usr] rips [selection] out of your [affected] in a welter of blood.</b></span>")
|
||||
|
||||
selection.loc = get_turf(src)
|
||||
affected.implants -= selection
|
||||
shock_stage+=10
|
||||
|
||||
for(var/obj/item/weapon/O in pinned)
|
||||
if(O == selection)
|
||||
pinned -= O
|
||||
if(!pinned.len)
|
||||
anchored = 0
|
||||
|
||||
if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
|
||||
var/datum/wound/internal_bleeding/I = new (15)
|
||||
affected.wounds += I
|
||||
custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/get_visible_implants(var/class = 0)
|
||||
/mob/living/carbon/human/get_visible_implants(var/class = 0)
|
||||
|
||||
var/list/visible_implants = list()
|
||||
for(var/datum/organ/external/organ in src.organs)
|
||||
|
||||
@@ -251,24 +251,13 @@
|
||||
if(!istype(W, /obj/item/weapon/butch/meatcleaver))
|
||||
organ.implants += W
|
||||
visible_message("<span class='danger'>\The [W] sticks in the wound!</span>")
|
||||
src.verbs += /mob/proc/yank_out_object
|
||||
W.add_blood(src)
|
||||
if(ismob(W.loc))
|
||||
var/mob/living/H = W.loc
|
||||
H.drop_item()
|
||||
W.loc = src
|
||||
|
||||
else if(istype(used_weapon,/obj/item/projectile)) //We don't want to use the actual projectile item, so we spawn some shrapnel.
|
||||
var/obj/item/projectile/P = used_weapon
|
||||
if(prob(75) && P.embed)
|
||||
var/obj/item/weapon/shard/shrapnel/S = new()
|
||||
S.name = "[P.name] shrapnel"
|
||||
S.desc = "[S.desc] It looks like it was fired from [P.shot_from]."
|
||||
S.loc = src
|
||||
organ.implants += S
|
||||
visible_message("<span class='danger'>The projectile sticks in the wound!</span>")
|
||||
S.add_blood(src)
|
||||
return 1
|
||||
|
||||
// incredibly important stuff follows
|
||||
/mob/living/carbon/human/fall(var/forced)
|
||||
..()
|
||||
@@ -284,4 +273,4 @@
|
||||
if(prob(60))
|
||||
step_rand(H)
|
||||
if(!stat)
|
||||
src << "<span class='warning'>Your [H] fell off!</span>"
|
||||
src << "<span class='warning'>Your [H] fell off!</span>"
|
||||
@@ -89,6 +89,19 @@ emp_act
|
||||
//END TASER NERF
|
||||
|
||||
|
||||
var/datum/organ/external/organ = get_organ(check_zone(def_zone))
|
||||
|
||||
var/armor = checkarmor(organ, "bullet")
|
||||
|
||||
if((P.embed && prob(20 + max(P.damage - armor, -10))) && P.damage_type == BRUTE)
|
||||
var/obj/item/weapon/shard/shrapnel/SP = new()
|
||||
(SP.name) = "[P.name] shrapnel"
|
||||
(SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]."
|
||||
(SP.loc) = organ
|
||||
organ.implants += SP
|
||||
visible_message("<span class='danger'>The projectile sticks in the wound!</span>")
|
||||
src.verbs += /mob/proc/yank_out_object
|
||||
SP.add_blood(src)
|
||||
return (..(P , def_zone))
|
||||
|
||||
|
||||
|
||||
@@ -200,7 +200,7 @@
|
||||
|
||||
src.split()
|
||||
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark and twigs!","\red You begin to shift and quiver, then erupt in a shower of shed bark and twigs, attaining your adult form!")
|
||||
var/mob/living/carbon/human/adult = new(loc)
|
||||
var/mob/living/carbon/human/diona/adult = new(loc)
|
||||
adult.set_species("Diona")
|
||||
|
||||
if(istype(loc,/obj/item/weapon/holder/diona))
|
||||
|
||||
+35
-8
@@ -909,11 +909,11 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
for(var/obj/effect/proc_holder/spell/S in spell_list)
|
||||
switch(S.charge_type)
|
||||
if("recharge")
|
||||
statpanel("Spells","[S.charge_counter/10.0]/[S.charge_max/10]",S)
|
||||
statpanel(S.panel,"[S.charge_counter/10.0]/[S.charge_max/10]",S)
|
||||
if("charges")
|
||||
statpanel("Spells","[S.charge_counter]/[S.charge_max]",S)
|
||||
statpanel(S.panel,"[S.charge_counter]/[S.charge_max]",S)
|
||||
if("holdervar")
|
||||
statpanel("Spells","[S.holder_var_type] [S.holder_var_amount]",S)
|
||||
statpanel(S.panel,"[S.holder_var_type] [S.holder_var_amount]",S)
|
||||
|
||||
if(listed_turf)
|
||||
if(get_dist(listed_turf,src) > 1)
|
||||
@@ -1109,7 +1109,14 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
/mob/proc/flash_weak_pain()
|
||||
flick("weak_pain",pain)
|
||||
|
||||
mob/verb/yank_out_object()
|
||||
/mob/proc/get_visible_implants(var/class = 0)
|
||||
var/list/visible_implants = list()
|
||||
for(var/obj/item/O in embedded)
|
||||
if(O.w_class > class)
|
||||
visible_implants += O
|
||||
return visible_implants
|
||||
|
||||
mob/proc/yank_out_object()
|
||||
set category = "Object"
|
||||
set name = "Yank out object"
|
||||
set desc = "Remove an embedded item at the cost of bleeding and pain."
|
||||
@@ -1135,10 +1142,7 @@ mob/verb/yank_out_object()
|
||||
if(S == U)
|
||||
self = 1 // Removing object from yourself.
|
||||
|
||||
for(var/obj/item/weapon/W in embedded)
|
||||
if(W.w_class >= 2)
|
||||
valid_objects += W
|
||||
|
||||
valid_objects = get_visible_implants(1)
|
||||
if(!valid_objects.len)
|
||||
if(self)
|
||||
src << "You have nothing stuck in your body that is large enough to remove."
|
||||
@@ -1162,6 +1166,29 @@ mob/verb/yank_out_object()
|
||||
visible_message("<span class='warning'><b>[src] rips [selection] out of their body.</b></span>","<span class='warning'><b>You rip [selection] out of your body.</b></span>")
|
||||
else
|
||||
visible_message("<span class='warning'><b>[usr] rips [selection] out of [src]'s body.</b></span>","<span class='warning'><b>[usr] rips [selection] out of your body.</b></span>")
|
||||
valid_objects = get_visible_implants(0)
|
||||
if(valid_objects.len == 1) //Yanking out last object - removing verb.
|
||||
src.verbs -= /mob/proc/yank_out_object
|
||||
|
||||
if(istype(src,/mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = src
|
||||
var/datum/organ/external/affected
|
||||
|
||||
for(var/datum/organ/external/organ in H.organs) //Grab the organ holding the implant.
|
||||
for(var/obj/item/weapon/O in organ.implants)
|
||||
if(O == selection)
|
||||
affected = organ
|
||||
|
||||
affected.implants -= selection
|
||||
H.shock_stage+=10
|
||||
H.bloody_hands(S)
|
||||
|
||||
if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
|
||||
var/datum/wound/internal_bleeding/I = new (15)
|
||||
affected.wounds += I
|
||||
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
|
||||
return 1
|
||||
|
||||
selection.loc = get_turf(src)
|
||||
|
||||
|
||||
+45
-18
@@ -114,8 +114,10 @@
|
||||
//if area isn't specified use current
|
||||
if(isarea(A) && src.areastring == null)
|
||||
src.area = A
|
||||
name = "\improper [area.name] APC"
|
||||
else
|
||||
src.area = get_area_name(areastring)
|
||||
name = "\improper [area.name] APC"
|
||||
update_icon()
|
||||
|
||||
make_terminal()
|
||||
@@ -149,34 +151,59 @@
|
||||
else
|
||||
usr << "The cover is closed."
|
||||
|
||||
|
||||
// update the APC icon to show the three base states
|
||||
// also add overlays for indicator lights
|
||||
/*
|
||||
* return 0 (reached the proc code end)
|
||||
* 1 (wires is exposed)
|
||||
* 2 (something is wrong)
|
||||
* 3 (broken)
|
||||
* 4 (opened)
|
||||
*/
|
||||
/obj/machinery/power/apc/update_icon()
|
||||
var/L[0]
|
||||
overlays = L
|
||||
|
||||
overlays.Cut()
|
||||
if(opened)
|
||||
var/basestate = "apc[ cell ? "2" : "1" ]" // if opened, show cell if it's inserted
|
||||
if (opened==1)
|
||||
if (stat & (MAINT|BROKEN))
|
||||
icon_state = "apcmaint" //disassembled APC cannot hold cell
|
||||
if (opened)
|
||||
// 2 = has cell, 1 = no cell
|
||||
var/basestate = "apc[cell ? "2" : "1"]"
|
||||
|
||||
if (opened == 1)
|
||||
if (stat & (BROKEN | MAINT))
|
||||
//disassembled APC cannot hold cell
|
||||
icon_state = "apcmaint"
|
||||
else
|
||||
icon_state = basestate
|
||||
else if (opened == 2)
|
||||
icon_state = "[basestate]-nocover"
|
||||
|
||||
basestate = null
|
||||
return 4
|
||||
else if (stat & BROKEN)
|
||||
icon_state = "apc-b"
|
||||
else if(emagged || malfai || spooky)
|
||||
return 3
|
||||
else if (emagged || malfai || spooky)
|
||||
icon_state = "apcemag"
|
||||
else if(wiresexposed)
|
||||
return 2
|
||||
else if (wiresexposed)
|
||||
icon_state = "apcewires"
|
||||
else
|
||||
icon_state = "apc0"
|
||||
// if closed, update overlays for channel status
|
||||
if(!(stat & (BROKEN|MAINT)))
|
||||
overlays.Add("apcox-[locked]","apco3-[charging]") // 0=blue 1=red // 0=red, 1=yellow/black 2=green
|
||||
if(operating)
|
||||
overlays.Add("apco0-[equipment]","apco1-[lighting]","apco2-[environ]") // 0=red, 1=green, 2=blue
|
||||
return 1
|
||||
|
||||
icon_state = "apc0"
|
||||
|
||||
if(!(stat & (BROKEN|MAINT)))
|
||||
// 0 = green, 1 = red
|
||||
L += "apcox-[locked]"
|
||||
// 0 = red, 1 = blue, 2 = green
|
||||
L += "apco3-[charging]"
|
||||
|
||||
if (operating)
|
||||
// 0 = red, 1 = yellow, 2 = green, 3 = blue
|
||||
L += "apco0-[equipment]"
|
||||
L += "apco1-[lighting]"
|
||||
L += "apco2-[environ]"
|
||||
|
||||
overlays = L
|
||||
L = null
|
||||
return 0
|
||||
|
||||
// Used in process so it doesn't update the icon too much
|
||||
/obj/machinery/power/apc/proc/queue_icon_update()
|
||||
|
||||
@@ -30,6 +30,26 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/ammo_casing/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(BB)
|
||||
if(initial(BB.name) == "bullet")
|
||||
var/tmp_label = ""
|
||||
var/label_text = sanitize(input(user, "Inscribe some text into \the [initial(BB.name)]","Inscription",tmp_label))
|
||||
if(length(label_text) > 20)
|
||||
user << "\red The inscription can be at most 20 characters long."
|
||||
else
|
||||
if(label_text == "")
|
||||
user << "\blue You scratch the inscription off of [initial(BB)]."
|
||||
BB.name = initial(BB.name)
|
||||
else
|
||||
user << "\blue You inscribe \"[label_text]\" into \the [initial(BB.name)]."
|
||||
BB.name = "[initial(BB.name)] \"[label_text]\""
|
||||
else
|
||||
user << "\blue You can only inscribe a metal bullet." //because inscribing beanbags is silly
|
||||
else
|
||||
user << "\blue There is no bullet in the casing to inscribe anything into."
|
||||
|
||||
|
||||
//Boxes of ammo
|
||||
/obj/item/ammo_box
|
||||
@@ -107,4 +127,4 @@
|
||||
|
||||
//Behavior for magazines
|
||||
/obj/item/ammo_box/magazine/proc/ammo_count()
|
||||
return stored_ammo.len
|
||||
return stored_ammo.len
|
||||
|
||||
@@ -193,7 +193,7 @@ var/list/beam_master = list()
|
||||
/obj/item/projectile/beam/heavylaser
|
||||
name = "heavy laser"
|
||||
icon_state = "heavylaser"
|
||||
damage = 40
|
||||
damage = 45
|
||||
|
||||
/obj/item/projectile/beam/xray
|
||||
name = "xray beam"
|
||||
|
||||
+2
-2
@@ -164,9 +164,9 @@
|
||||
|
||||
|
||||
/world/Reboot(var/reason)
|
||||
/*spawn(0)
|
||||
spawn(0)
|
||||
world << sound(pick('sound/AI/newroundsexy.ogg','sound/misc/apcdestroyed.ogg','sound/misc/bangindonk.ogg')) // random end sounds!! - LastyBatsy
|
||||
*/
|
||||
|
||||
for(var/client/C in clients)
|
||||
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
|
||||
C << link("byond://[config.server]")
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 662 KiB After Width: | Height: | Size: 793 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 662 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
+10101
-10102
File diff suppressed because it is too large
Load Diff
@@ -169,7 +169,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
<b>Notes</b>:
|
||||
</div>
|
||||
</div>
|
||||
<div class="statusDisplayRecords" style="height: 225px">
|
||||
<div class="statusDisplayRecords">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
<span class="average">{{:note}}</span>
|
||||
@@ -250,7 +250,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
</div>
|
||||
<br><br>
|
||||
<H3>Conversation with: <span class="average">{{:convo_name}} ({{:convo_job}})</span></H3>
|
||||
<div class="statusDisplay" style="height: 250px; overflow: auto;">
|
||||
<div class="statusDisplay" style="overflow: auto;">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{{for messages}}
|
||||
@@ -544,7 +544,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
|
||||
{{else mode == 441}}
|
||||
<H2>Medical Record</H2>
|
||||
<div class="statusDisplayRecords" style="height: 400px;">
|
||||
<div class="statusDisplayRecords">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{{if records.general_exists == 1}}
|
||||
@@ -599,7 +599,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
|
||||
{{else mode == 451}}
|
||||
<H2>Security Record</H2>
|
||||
<div class="statusDisplayRecords" style="height: 400px;">
|
||||
<div class="statusDisplayRecords">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
{{if records.general_exists == 1}}
|
||||
@@ -712,7 +712,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="statusDisplayRecords" style="height: 325px">
|
||||
<div class="statusDisplayRecords">
|
||||
<div class="item">
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
<span class="good"><B>Current Approved Orders</B></span><br>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user