Merge pull request #8 from ZomgPonies/master

Update
This commit is contained in:
SamCroswell
2014-02-10 17:04:47 -05:00
41 changed files with 10280 additions and 10574 deletions
+1
View File
@@ -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
-314
View File
@@ -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
*/
+6 -2
View File
@@ -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
+3 -3
View File
@@ -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)
+2 -1
View File
@@ -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
+30 -19
View File
@@ -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)
+1 -1
View File
@@ -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'
+7 -3
View File
@@ -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>&nbsp;</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!
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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
+1 -77
View File
@@ -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
View File
@@ -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
View File
@@ -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()
+21 -1
View File
@@ -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
+1 -1
View File
@@ -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
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -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:&nbsp;<span class="average">{{:convo_name}}&nbsp;({{: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.