mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
+4
-63
@@ -5,65 +5,6 @@
|
||||
// END_INTERNALS
|
||||
// BEGIN_FILE_DIR
|
||||
#define FILE_DIR .
|
||||
#define FILE_DIR "code"
|
||||
#define FILE_DIR "code/TriDimension"
|
||||
#define FILE_DIR "code/WorkInProgress"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Jungle"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/ShieldGen"
|
||||
#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter"
|
||||
#define FILE_DIR "code/WorkInProgress/Susan"
|
||||
#define FILE_DIR "html"
|
||||
#define FILE_DIR "icons"
|
||||
#define FILE_DIR "icons/48x48"
|
||||
#define FILE_DIR "icons/ass"
|
||||
#define FILE_DIR "icons/effects"
|
||||
#define FILE_DIR "icons/mecha"
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/mob/human_races"
|
||||
#define FILE_DIR "icons/mob/otherHuman"
|
||||
#define FILE_DIR "icons/NTOS"
|
||||
#define FILE_DIR "icons/obj"
|
||||
#define FILE_DIR "icons/obj/assemblies"
|
||||
#define FILE_DIR "icons/obj/atmospherics"
|
||||
#define FILE_DIR "icons/obj/clothing"
|
||||
#define FILE_DIR "icons/obj/doors"
|
||||
#define FILE_DIR "icons/obj/flora"
|
||||
#define FILE_DIR "icons/obj/machines"
|
||||
#define FILE_DIR "icons/obj/pipes"
|
||||
#define FILE_DIR "icons/obj/power_cond"
|
||||
#define FILE_DIR "icons/pda_icons"
|
||||
#define FILE_DIR "icons/pods"
|
||||
#define FILE_DIR "icons/spideros_icons"
|
||||
#define FILE_DIR "icons/stamp_icons"
|
||||
#define FILE_DIR "icons/Testing"
|
||||
#define FILE_DIR "icons/turf"
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "nano"
|
||||
#define FILE_DIR "nano/images"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/effects"
|
||||
#define FILE_DIR "sound/effects/turret"
|
||||
#define FILE_DIR "sound/effects/wind"
|
||||
#define FILE_DIR "sound/hallucinations"
|
||||
#define FILE_DIR "sound/items"
|
||||
#define FILE_DIR "sound/machines"
|
||||
#define FILE_DIR "sound/mecha"
|
||||
#define FILE_DIR "sound/misc"
|
||||
#define FILE_DIR "sound/music"
|
||||
#define FILE_DIR "sound/piano"
|
||||
#define FILE_DIR "sound/turntable"
|
||||
#define FILE_DIR "sound/violin"
|
||||
#define FILE_DIR "sound/voice"
|
||||
#define FILE_DIR "sound/voice/complionator"
|
||||
#define FILE_DIR "sound/voice/Serithi"
|
||||
#define FILE_DIR "sound/vox"
|
||||
#define FILE_DIR "sound/vox_fem"
|
||||
#define FILE_DIR "sound/weapons"
|
||||
// END_FILE_DIR
|
||||
// BEGIN_PREFERENCES
|
||||
#define DEBUG
|
||||
@@ -919,10 +860,10 @@
|
||||
#include "code\modules\customitems\item_spawning.dm"
|
||||
#include "code\modules\customitems\definitions\base.dm"
|
||||
#include "code\modules\destilery\main.dm"
|
||||
#include "code\modules\DetectiveWork\detective_work.dm"
|
||||
#include "code\modules\DetectiveWork\evidence.dm"
|
||||
#include "code\modules\DetectiveWork\footprints_and_rag.dm"
|
||||
#include "code\modules\DetectiveWork\scanner.dm"
|
||||
#include "code\modules\detectivework\detective_work.dm"
|
||||
#include "code\modules\detectivework\evidence.dm"
|
||||
#include "code\modules\detectivework\footprints_and_rag.dm"
|
||||
#include "code\modules\detectivework\scanner.dm"
|
||||
#include "code\modules\economy\Accounts.dm"
|
||||
#include "code\modules\economy\Accounts_DB.dm"
|
||||
#include "code\modules\economy\ATM.dm"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if(C!=src && !istype(C,/mob/living/carbon/slime) && Adjacent(C))
|
||||
choices += C
|
||||
|
||||
var/mob/living/carbon/M = input(src,"Who do you wish to feed on?") in null|choices
|
||||
var/mob/living/carbon/M = pick(choices)
|
||||
if(!M) return
|
||||
if(Adjacent(M))
|
||||
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
if ("mentors")
|
||||
config.mods_are_mentors = 1
|
||||
|
||||
if ("mentors")
|
||||
config.mods_are_mentors = 1
|
||||
|
||||
if("allow_admin_ooccolor")
|
||||
config.allow_admin_ooccolor = 1
|
||||
|
||||
|
||||
+37
-1
@@ -347,7 +347,43 @@ its easier to just keep the beam vertical.
|
||||
var/full_print = md5(H.dna.uni_identity)
|
||||
|
||||
// Add the fingerprints
|
||||
fingerprints[full_print] = full_print
|
||||
//
|
||||
if(fingerprints[full_print])
|
||||
switch(stringpercent(fingerprints[full_print])) //tells us how many stars are in the current prints.
|
||||
|
||||
if(28 to 32)
|
||||
if(prob(1))
|
||||
fingerprints[full_print] = full_print // You rolled a one buddy.
|
||||
else
|
||||
fingerprints[full_print] = stars(full_print, rand(0,40)) // 24 to 32
|
||||
|
||||
if(24 to 27)
|
||||
if(prob(3))
|
||||
fingerprints[full_print] = full_print //Sucks to be you.
|
||||
else
|
||||
fingerprints[full_print] = stars(full_print, rand(15, 55)) // 20 to 29
|
||||
|
||||
if(20 to 23)
|
||||
if(prob(5))
|
||||
fingerprints[full_print] = full_print //Had a good run didn't ya.
|
||||
else
|
||||
fingerprints[full_print] = stars(full_print, rand(30, 70)) // 15 to 25
|
||||
|
||||
if(16 to 19)
|
||||
if(prob(5))
|
||||
fingerprints[full_print] = full_print //Welp.
|
||||
else
|
||||
fingerprints[full_print] = stars(full_print, rand(40, 100)) // 0 to 21
|
||||
|
||||
if(0 to 15)
|
||||
if(prob(5))
|
||||
fingerprints[full_print] = stars(full_print, rand(0,50)) // small chance you can smudge.
|
||||
else
|
||||
fingerprints[full_print] = full_print
|
||||
|
||||
else
|
||||
fingerprints[full_print] = stars(full_print, rand(0, 20)) //Initial touch, not leaving much evidence the first time.
|
||||
|
||||
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -208,6 +208,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
|
||||
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
|
||||
var/list/absorbed_dna = list()
|
||||
var/list/absorbed_species = list()
|
||||
var/list/absorbed_languages = list()
|
||||
var/absorbedcount = 0
|
||||
var/chem_charges = 20
|
||||
var/chem_recharge_rate = 0.5
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//Restores our verbs. It will only restore verbs allowed during lesser (monkey) form if we are not human
|
||||
/mob/proc/make_changeling()
|
||||
|
||||
if(!mind) return
|
||||
if(!mind.changeling) mind.changeling = new /datum/changeling(gender)
|
||||
if(!ishuman(src) && !ismonkey(src)) return
|
||||
@@ -24,6 +25,15 @@
|
||||
src.verbs += P.verbpath
|
||||
|
||||
mind.changeling.absorbed_dna |= dna
|
||||
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(istype(H))
|
||||
mind.changeling.absorbed_species += H.species.name
|
||||
|
||||
for(var/language in languages)
|
||||
if(!(language in mind.changeling.absorbed_languages))
|
||||
mind.changeling.absorbed_languages += language
|
||||
|
||||
return 1
|
||||
|
||||
//removes our changeling verbs
|
||||
@@ -64,6 +74,54 @@
|
||||
return changeling
|
||||
|
||||
|
||||
//Used to dump the languages from the changeling datum into the actual mob.
|
||||
/mob/proc/changeling_update_languages(var/updated_languages)
|
||||
|
||||
languages = list()
|
||||
for(var/language in updated_languages)
|
||||
languages += language
|
||||
|
||||
return
|
||||
|
||||
//Used to switch species based on the changeling datum.
|
||||
/mob/proc/changeling_change_species()
|
||||
|
||||
set category = "Changeling"
|
||||
set name = "Change Species (5)"
|
||||
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(!istype(H))
|
||||
src << "<span class='warning'>We may only use this power while in humanoid form.</span>"
|
||||
return
|
||||
|
||||
var/datum/changeling/changeling = changeling_power(5,1,0)
|
||||
if(!changeling) return
|
||||
|
||||
if(changeling.absorbed_species.len < 2)
|
||||
src << "<span class='warning'>We do not know of any other species genomes to use.</span>"
|
||||
return
|
||||
|
||||
var/S = input("Select the target species: ", "Target Species", null) as null|anything in changeling.absorbed_species
|
||||
if(!S) return
|
||||
|
||||
domutcheck(src, null)
|
||||
|
||||
changeling.chem_charges -= 5
|
||||
changeling.geneticdamage = 30
|
||||
|
||||
src.visible_message("<span class='warning'>[src] transforms!</span>")
|
||||
|
||||
src.verbs -= /mob/proc/changeling_change_species
|
||||
spawn(10) src.verbs += /mob/proc/changeling_change_species
|
||||
|
||||
H.set_species(S)
|
||||
|
||||
changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
feedback_add_details("changeling_powers","TR")
|
||||
|
||||
return 1
|
||||
|
||||
//Absorbs the victim's DNA making them uncloneable. Requires a strong grip on the victim.
|
||||
//Doesn't cost anything as it's the most basic ability.
|
||||
/mob/proc/changeling_absorb_dna()
|
||||
@@ -83,6 +141,9 @@
|
||||
src << "<span class='warning'>[T] is not compatible with our biology.</span>"
|
||||
return
|
||||
|
||||
if(T.species.flags & NO_SCAN)
|
||||
src << "<span class='warning'>We do not know how to parse this creature's DNA!</span>"
|
||||
return
|
||||
|
||||
if((M_NOCLONE || SKELETON) in T.mutations)
|
||||
src << "<span class='warning'>This creature's DNA is ruined beyond useability!</span>"
|
||||
@@ -130,21 +191,35 @@
|
||||
changeling.chem_charges += 10
|
||||
changeling.geneticpoints += 2
|
||||
|
||||
if(T.mind)
|
||||
T.mind.show_memory(src, 0) //I can read your mind, kekeke. Output all their notes.
|
||||
if(T.mind.changeling)
|
||||
if(T.mind.changeling.absorbed_dna)
|
||||
for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot
|
||||
if(dna_data in changeling.absorbed_dna)
|
||||
continue
|
||||
changeling.absorbed_dna += dna_data
|
||||
changeling.absorbedcount++
|
||||
T.mind.changeling.absorbed_dna.len = 1
|
||||
//Steal all of their languages!
|
||||
for(var/language in T.languages)
|
||||
if(!(language in changeling.absorbed_languages))
|
||||
changeling.absorbed_languages += language
|
||||
|
||||
if(T.mind.changeling.purchasedpowers)
|
||||
for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers)
|
||||
if(Tp in changeling.purchasedpowers)
|
||||
continue
|
||||
changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
//Steal their species!
|
||||
if(T.species && !(T.species.name in changeling.absorbed_species))
|
||||
changeling.absorbed_species += T.species.name
|
||||
|
||||
if(T.mind && T.mind.changeling)
|
||||
if(T.mind.changeling.absorbed_dna)
|
||||
for(var/dna_data in T.mind.changeling.absorbed_dna) //steal all their loot
|
||||
if(dna_data in changeling.absorbed_dna)
|
||||
continue
|
||||
changeling.absorbed_dna += dna_data
|
||||
changeling.absorbedcount++
|
||||
T.mind.changeling.absorbed_dna.len = 1
|
||||
|
||||
if(T.mind.changeling.purchasedpowers)
|
||||
for(var/datum/power/changeling/Tp in T.mind.changeling.purchasedpowers)
|
||||
if(Tp in changeling.purchasedpowers)
|
||||
continue
|
||||
else
|
||||
changeling.purchasedpowers += Tp
|
||||
|
||||
if(!Tp.isVerb)
|
||||
call(Tp.verbpath)()
|
||||
else
|
||||
changeling.purchasedpowers += Tp
|
||||
|
||||
@@ -265,6 +340,8 @@
|
||||
|
||||
O.make_changeling(1)
|
||||
O.verbs += /mob/proc/changeling_lesser_transform
|
||||
O.changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
feedback_add_details("changeling_powers","LF")
|
||||
del(C)
|
||||
return 1
|
||||
@@ -349,6 +426,7 @@
|
||||
|
||||
C.mind.transfer_to(O)
|
||||
O.make_changeling()
|
||||
O.changeling_update_languages(changeling.absorbed_languages)
|
||||
|
||||
feedback_add_details("changeling_powers","LFT")
|
||||
del(C)
|
||||
@@ -379,7 +457,7 @@
|
||||
if(changeling_power(20,1,100,DEAD))
|
||||
// charge the changeling chemical cost for stasis
|
||||
changeling.chem_charges -= 20
|
||||
|
||||
|
||||
// shut down various types of badness
|
||||
C.setToxLoss(0)
|
||||
C.setOxyLoss(0)
|
||||
@@ -388,7 +466,7 @@
|
||||
C.SetParalysis(0)
|
||||
C.SetStunned(0)
|
||||
C.SetWeakened(0)
|
||||
|
||||
|
||||
// shut down ongoing problems
|
||||
C.radiation = 0
|
||||
C.nutrition = 400
|
||||
@@ -396,59 +474,59 @@
|
||||
C.sdisabilities = 0
|
||||
C.disabilities = 0
|
||||
C.blinded = 0
|
||||
|
||||
|
||||
// fix blindness and deafness
|
||||
C.eye_blind = 0
|
||||
C.eye_blurry = 0
|
||||
C.ear_deaf = 0
|
||||
C.ear_damage = 0
|
||||
|
||||
|
||||
// head actual damage numbers
|
||||
C.heal_overall_damage(1000, 1000)
|
||||
|
||||
|
||||
// get rid of the reagents
|
||||
C.reagents.clear_reagents()
|
||||
|
||||
|
||||
// cure diseases
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
|
||||
|
||||
// fix all the organs
|
||||
C.restore_all_organs()
|
||||
|
||||
|
||||
// restore blood
|
||||
if(ishuman(C))
|
||||
var/mob/living/carbon/human/human_mob = C
|
||||
human_mob.restore_blood()
|
||||
|
||||
|
||||
// remove the character from the list of the dead
|
||||
if(C.stat == 2)
|
||||
dead_mob_list -= src
|
||||
living_mob_list += src
|
||||
|
||||
|
||||
// make us conscious again
|
||||
C.stat = CONSCIOUS
|
||||
|
||||
|
||||
// remove the time of death
|
||||
C.tod = null
|
||||
|
||||
|
||||
// fix all the icons
|
||||
C.regenerate_icons()
|
||||
|
||||
|
||||
// remove our fake death flag
|
||||
C.status_flags &= ~(FAKEDEATH)
|
||||
|
||||
|
||||
// let us move again
|
||||
C.update_canmove()
|
||||
|
||||
|
||||
// re-add out changeling powers
|
||||
C.make_changeling()
|
||||
|
||||
C.make_changeling()
|
||||
|
||||
// sending display messages
|
||||
C << "<span class='notice'>We have regenerated.</span>"
|
||||
C.visible_message("<span class='warning'>[src] appears to wake from the dead, having healed all wounds.</span>")
|
||||
|
||||
|
||||
|
||||
|
||||
feedback_add_details("changeling_powers","FD")
|
||||
return 1
|
||||
|
||||
|
||||
@@ -26,6 +26,12 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_transform
|
||||
|
||||
/datum/power/changeling/change_species
|
||||
name = "Change Species"
|
||||
desc = "We take on the apperance of a species that we have absorbed."
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_change_species
|
||||
|
||||
/datum/power/changeling/fakedeath
|
||||
name = "Regenerative Stasis"
|
||||
desc = "We become weakened to a death-like state, where we will rise again from death."
|
||||
|
||||
@@ -164,6 +164,7 @@
|
||||
|
||||
/obj/machinery/body_scanconsole
|
||||
var/obj/machinery/bodyscanner/connected
|
||||
var/known_implants = list(/obj/item/weapon/implant/chem, /obj/item/weapon/implant/death_alarm, /obj/item/weapon/implant/loyalty, /obj/item/weapon/implant/tracking)
|
||||
var/delete
|
||||
var/temphtml
|
||||
name = "Body Scanner Console"
|
||||
@@ -281,6 +282,7 @@
|
||||
dat += "</tr>"
|
||||
|
||||
for(var/datum/organ/external/e in occupant.organs)
|
||||
|
||||
dat += "<tr>"
|
||||
var/AN = ""
|
||||
var/open = ""
|
||||
@@ -306,8 +308,16 @@
|
||||
robot = "Prosthetic:"
|
||||
if(e.open)
|
||||
open = "Open:"
|
||||
if(e.implants.len)
|
||||
imp = "Unknown body present:"
|
||||
|
||||
var/unknown_body = 0
|
||||
for(var/I in e.implants)
|
||||
if(is_type_in_list(I,known_implants))
|
||||
imp += "[I] implanted:"
|
||||
else
|
||||
unknown_body++
|
||||
|
||||
if(unknown_body || e.hidden)
|
||||
imp += "Unknown body present:"
|
||||
if(!AN && !open && !infected & !imp)
|
||||
AN = "None:"
|
||||
if(!(e.status & ORGAN_DESTROYED))
|
||||
|
||||
@@ -344,30 +344,35 @@
|
||||
if(mineral == "diamond")
|
||||
return
|
||||
|
||||
overlays = list()
|
||||
var/obj/effect/overlay/O = new/obj/effect/overlay( src )
|
||||
O.name = "thermite"
|
||||
O.name = "Thermite"
|
||||
O.desc = "Looks hot."
|
||||
O.icon = 'icons/effects/fire.dmi'
|
||||
O.icon_state = "2"
|
||||
O.anchored = 1
|
||||
O.opacity = 1
|
||||
O.density = 1
|
||||
O.layer = 5
|
||||
|
||||
playsound(src, 'sound/items/Welder.ogg', 100, 1)
|
||||
src.ChangeTurf(/turf/simulated/floor/plating)
|
||||
|
||||
if(thermite >= 50)
|
||||
var/turf/simulated/floor/F = ChangeTurf(/turf/simulated/floor/plating)
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
F.add_hiddenprint(user)
|
||||
spawn(max(100,300-thermite))
|
||||
if(O) qdel(O)
|
||||
else
|
||||
thermite = 0
|
||||
spawn(50)
|
||||
if(O) qdel(O)
|
||||
var/turf/simulated/floor/F = src
|
||||
if(!F)
|
||||
if(O)
|
||||
message_admins("[user.real_name] ([formatPlayerPanel(user,user.ckey)]) thermited a wall into space at [formatJumpTo(loc)]!")
|
||||
del(O)
|
||||
user << "<span class='warning'>The thermite melts through the wall.</span>"
|
||||
return
|
||||
F.burn_tile()
|
||||
F.icon_state = "wall_thermite"
|
||||
user << "<span class='warning'>The thermite melts through the wall.</span>"
|
||||
|
||||
var/pdiff=performWallPressureCheck(src.loc)
|
||||
if(pdiff)
|
||||
message_admins("[user.real_name] ([formatPlayerPanel(user,user.ckey)]) thermited a wall with a pdiff of [pdiff] at [formatJumpTo(loc)]!")
|
||||
|
||||
spawn(100)
|
||||
if(O) del(O)
|
||||
// F.sd_LumReset() //TODO: ~Carn
|
||||
return
|
||||
|
||||
/turf/simulated/wall/meteorhit(obj/M as obj)
|
||||
|
||||
@@ -234,6 +234,7 @@ var/list/admin_verbs_mod = list(
|
||||
/client/proc/player_panel_new
|
||||
)
|
||||
|
||||
|
||||
var/list/admin_verbs_mentor = list(
|
||||
/client/proc/cmd_admin_pm_context,
|
||||
/client/proc/cmd_admin_pm_panel,
|
||||
@@ -241,7 +242,7 @@ var/list/admin_verbs_mentor = list(
|
||||
/client/proc/admin_ghost,
|
||||
/client/proc/cmd_mod_say,
|
||||
/datum/admins/proc/show_player_info,
|
||||
/client/proc/dsay,
|
||||
// /client/proc/dsay,
|
||||
/client/proc/cmd_admin_subtle_message
|
||||
)
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
set name = "Msay"
|
||||
set hidden = 1
|
||||
|
||||
if(!check_rights(R_ADMIN|R_MOD)) return
|
||||
if(!check_rights(R_ADMIN|R_MOD|R_MENTOR)) return
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
log_admin("MOD: [key_name(src)] : [msg]")
|
||||
@@ -32,6 +32,10 @@
|
||||
var/color = "mod"
|
||||
if (check_rights(R_ADMIN,0))
|
||||
color = "adminmod"
|
||||
|
||||
var/channel = "MOD:"
|
||||
if(config.mods_are_mentors)
|
||||
channel = "MENTOR:"
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
C << "<span class='[color]'><span class='prefix'>MOD:</span> <EM>[key_name(src,1)]</EM> (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
if((R_ADMIN|R_MOD|R_MENTOR) & C.holder.rights)
|
||||
C << "<span class='[color]'><span class='prefix'>[channel]</span> <EM>[key_name(src,1)]</EM> (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
|
||||
@@ -18,13 +18,25 @@
|
||||
if (src.handle_spam_prevention(msg,MUTE_DEADCHAT))
|
||||
return
|
||||
|
||||
|
||||
var/stafftype = null
|
||||
|
||||
if (src.holder.rights & R_MOD)
|
||||
stafftype = "MOD"
|
||||
|
||||
if (src.holder.rights & R_MENTOR)
|
||||
stafftype = "MENTOR"
|
||||
|
||||
if (src.holder.rights & R_ADMIN)
|
||||
stafftype = "ADMIN"
|
||||
|
||||
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
|
||||
log_admin("[key_name(src)] : [msg]")
|
||||
|
||||
if (!msg)
|
||||
return
|
||||
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>ADMIN</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>[stafftype]</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
|
||||
for (var/mob/M in player_list)
|
||||
if (istype(M, /mob/new_player))
|
||||
@@ -36,4 +48,4 @@
|
||||
else if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_DEAD)) // show the message to regular ghosts who have deadchat toggled on
|
||||
M.show_message(rendered, 2)
|
||||
|
||||
feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -124,10 +124,10 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
var/list/choices = list()
|
||||
for(var/mob/living/L in view(1,src))
|
||||
if(L.stat != 2 && src.Adjacent(L))
|
||||
if(L.stat != 2 && !istype(L,/mob/living/carbon/alien) && src.Adjacent(L))
|
||||
choices += L
|
||||
|
||||
var/mob/living/M = input(src,"Who do you wish to infest?") in null|choices
|
||||
var/mob/living/M = pick(choices)
|
||||
|
||||
if(!M || !src) return
|
||||
|
||||
@@ -235,4 +235,84 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
|
||||
/mob/living/carbon/alien/facehugger/death(gibbed)
|
||||
icon_state = icon_dead
|
||||
return ..(gibbed)
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/living/carbon/alien/facehugger/Life()
|
||||
..()
|
||||
//Status updates, death etc.
|
||||
handle_regular_status_updates()
|
||||
|
||||
/mob/living/carbon/alien/facehugger/proc/handle_regular_status_updates()
|
||||
updatehealth()
|
||||
|
||||
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
|
||||
blinded = 1
|
||||
silent = 0
|
||||
else //ALIVE. LIGHTS ARE ON
|
||||
if(health < -5 || brain_op_stage == 4.0)
|
||||
death()
|
||||
blinded = 1
|
||||
silent = 0
|
||||
return 1
|
||||
|
||||
//UNCONSCIOUS. NO-ONE IS HOME
|
||||
if( (getOxyLoss() > 5) || (0 > health) )
|
||||
//if( health <= 20 && prob(1) )
|
||||
// spawn(0)
|
||||
// emote("gasp")
|
||||
if(!reagents.has_reagent("inaprovaline"))
|
||||
adjustOxyLoss(1)
|
||||
Paralyse(3)
|
||||
|
||||
if(paralysis)
|
||||
AdjustParalysis(-2)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
else if(sleeping)
|
||||
sleeping = max(sleeping-1, 0)
|
||||
blinded = 1
|
||||
stat = UNCONSCIOUS
|
||||
if( prob(10) && health )
|
||||
spawn(0)
|
||||
emote("hiss_")
|
||||
//CONSCIOUS
|
||||
else
|
||||
stat = CONSCIOUS
|
||||
|
||||
/* What in the living hell is this?*/
|
||||
if(move_delay_add > 0)
|
||||
move_delay_add = max(0, move_delay_add - rand(1, 2))
|
||||
|
||||
//Eyes
|
||||
if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
|
||||
blinded = 1
|
||||
else if(eye_blind) //blindness, heals slowly over time
|
||||
eye_blind = max(eye_blind-1,0)
|
||||
blinded = 1
|
||||
else if(eye_blurry) //blurry eyes heal slowly
|
||||
eye_blurry = max(eye_blurry-1, 0)
|
||||
|
||||
//Ears
|
||||
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
|
||||
ear_deaf = max(ear_deaf, 1)
|
||||
else if(ear_deaf) //deafness, heals slowly over time
|
||||
ear_deaf = max(ear_deaf-1, 0)
|
||||
else if(ear_damage < 5) //ear damage heals slowly under this threshold.
|
||||
ear_damage = max(ear_damage-0.05, 0)
|
||||
|
||||
//Other
|
||||
if(stunned)
|
||||
AdjustStunned(-1)
|
||||
|
||||
if(weakened)
|
||||
weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times
|
||||
|
||||
if(stuttering)
|
||||
stuttering = max(stuttering-1, 0)
|
||||
|
||||
if(silent)
|
||||
silent = max(silent-1, 0)
|
||||
|
||||
if(druggy)
|
||||
druggy = max(druggy-1, 0)
|
||||
return 1
|
||||
|
||||
@@ -1333,9 +1333,6 @@
|
||||
else
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
|
||||
if(species.name=="Slime People")
|
||||
dna.mutantrace = "slime"
|
||||
|
||||
if(species.default_mutations.len>0 || species.default_blocks.len>0)
|
||||
do_deferred_species_setup=1
|
||||
|
||||
|
||||
@@ -20,21 +20,21 @@
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/weapon/holder/Destroy()
|
||||
//Hopefully this will stop the icon from remaining on human mobs.
|
||||
if(istype(loc,/mob/living))
|
||||
var/mob/living/A = src.loc
|
||||
src.loc = null
|
||||
A.update_icons()
|
||||
/obj/item/weapon/holder/Del()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/holder/process()
|
||||
if(!loc) del(src)
|
||||
|
||||
if(istype(loc,/turf) || !(contents.len))
|
||||
|
||||
for(var/mob/M in contents)
|
||||
M.loc = get_turf(src)
|
||||
|
||||
var/atom/movable/mob_container
|
||||
mob_container = M
|
||||
mob_container.forceMove(get_turf(src))
|
||||
M.reset_view()
|
||||
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/holder/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
@@ -199,8 +199,9 @@
|
||||
return
|
||||
|
||||
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/diona/adult = new(loc)
|
||||
src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","\red You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.")
|
||||
|
||||
var/mob/living/carbon/human/diona/adult = new(get_turf(src.loc))
|
||||
adult.set_species("Diona")
|
||||
|
||||
if(istype(loc,/obj/item/weapon/holder/diona))
|
||||
|
||||
@@ -234,15 +234,18 @@
|
||||
path = /mob/living/carbon/human/slime
|
||||
primitive = /mob/living/carbon/slime/adult
|
||||
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS
|
||||
flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
|
||||
bloodflags = BLOOD_SLIME
|
||||
bodyflags = FEET_NOSLIP
|
||||
abilities = list(/mob/living/carbon/human/slime/proc/slimepeople_ventcrawl)
|
||||
|
||||
/datum/species/slime/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
H.dna = new /datum/dna(null)
|
||||
H.dna.species=H.species.name
|
||||
H.dna.mutantrace = "slime"
|
||||
H.update_mutantrace()
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/grey // /vg/
|
||||
name = "Grey"
|
||||
|
||||
@@ -451,9 +451,14 @@
|
||||
|
||||
//Getting out of someone's inventory.
|
||||
if(istype(src.loc,/obj/item/weapon/holder))
|
||||
var/obj/item/weapon/holder/H = src.loc
|
||||
src.loc = get_turf(src.loc)
|
||||
del(H)
|
||||
var/obj/item/weapon/holder/H = src.loc //Get our item holder.
|
||||
var/mob/M = H.loc //Get our mob holder (if any).
|
||||
|
||||
if(istype(M))
|
||||
M.drop_from_inventory(H)
|
||||
M << "[H] wriggles out of your grip!"
|
||||
src << "You wriggle out of [M]'s grip!"
|
||||
|
||||
return
|
||||
|
||||
//Resisting control by an alien mind.
|
||||
|
||||
@@ -132,7 +132,8 @@
|
||||
icon_state = "working"
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=5000)
|
||||
|
||||
var/brute = 0
|
||||
var/burn = 0
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_component/binary_communication_device
|
||||
@@ -158,3 +159,4 @@
|
||||
/obj/item/robot_parts/robot_component/radio
|
||||
name = "radio"
|
||||
icon_state = "radio"
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
var/datum/robot_component/cell_component = components["power cell"]
|
||||
cell_component.wrapped = cell
|
||||
cell_component.installed = 1
|
||||
|
||||
|
||||
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
|
||||
hud_list[ID_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
@@ -151,9 +151,9 @@
|
||||
hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
|
||||
@@ -619,6 +619,14 @@
|
||||
user.drop_item()
|
||||
W.loc = null
|
||||
|
||||
var/obj/item/robot_parts/robot_component/WC = W
|
||||
if(istype(WC))
|
||||
C.brute_damage = WC.brute
|
||||
C.electronics_damage = WC.burn
|
||||
else //This will nominally mean that removing and replacing a power cell will repair the mount, but I don't care at this point. ~Z
|
||||
C.brute_damage = 0
|
||||
C.electronics_damage = 0
|
||||
|
||||
usr << "\blue You install the [W.name]."
|
||||
|
||||
return
|
||||
@@ -682,8 +690,12 @@
|
||||
if(!remove)
|
||||
return
|
||||
var/datum/robot_component/C = components[remove]
|
||||
var/obj/item/I = C.wrapped
|
||||
var/obj/item/robot_parts/robot_component/I = C.wrapped
|
||||
user << "You remove \the [I]."
|
||||
if(istype(I))
|
||||
I.brute = C.brute_damage
|
||||
I.burn = C.electronics_damage
|
||||
|
||||
I.loc = src.loc
|
||||
|
||||
if(C.installed == 1)
|
||||
|
||||
@@ -113,8 +113,17 @@
|
||||
return 1
|
||||
|
||||
/mob/living/silicon/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(!Proj.nodamage) adjustBruteLoss(Proj.damage)
|
||||
|
||||
|
||||
if(!Proj.nodamage)
|
||||
switch(Proj.damage_type)
|
||||
if(BRUTE)
|
||||
adjustBruteLoss(Proj.damage)
|
||||
if(BURN)
|
||||
adjustFireLoss(Proj.damage)
|
||||
|
||||
Proj.on_hit(src,2)
|
||||
|
||||
return 2
|
||||
|
||||
/mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
//
|
||||
// Gravity Generator
|
||||
//
|
||||
@@ -139,7 +138,10 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
var/obj/machinery/gravity_generator/part/part = new(T)
|
||||
if(count == 5) // Middle
|
||||
middle = part
|
||||
part.sprite_number = count;
|
||||
if(count <= 3) // Their sprite is the top part of the generator
|
||||
part.density = 0
|
||||
part.layer = MOB_LAYER + 0.1
|
||||
part.sprite_number = count
|
||||
part.main_part = src
|
||||
parts += part
|
||||
part.update_icon()
|
||||
@@ -316,7 +318,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
charge_count -= 2
|
||||
|
||||
if(charge_count % 4 == 0 && prob(75)) // Let them know it is charging/discharging.
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1)
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1)
|
||||
|
||||
updateDialog()
|
||||
if(prob(25)) // To help stop "Your clothes feel warm" spam.
|
||||
@@ -354,7 +356,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
var/turf/their_turf = get_turf(M)
|
||||
if(M.client && their_turf.z == our_turf.z)
|
||||
shake_camera(M, 15, 1)
|
||||
M.playsound_local(our_turf, 'sound/effects/alert.ogg', 100, 1, 0.5)
|
||||
M.playsound_local(our_turf, 'sound/machines/signal.ogg', 100)
|
||||
|
||||
/obj/machinery/gravity_generator/main/proc/gravity_in_level()
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
@@ -44,7 +44,7 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
if(charge_tick < 4) return 0
|
||||
charge_tick = 0
|
||||
if(!power_supply) return 0
|
||||
power_supply.give(100)
|
||||
power_supply.give(1000)
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -1122,14 +1122,11 @@ datum
|
||||
|
||||
reaction_turf(var/turf/T, var/volume)
|
||||
src = null
|
||||
if(volume >= 1 && istype(T, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/Wall = T
|
||||
if(istype(Wall, /turf/simulated/wall/r_wall))
|
||||
Wall.thermite = Wall.thermite+(volume*2.5)
|
||||
else
|
||||
Wall.thermite = Wall.thermite+(volume*10)
|
||||
Wall.overlays = list()
|
||||
Wall.overlays += image('icons/effects/effects.dmi',"thermite")
|
||||
if(volume >= 5)
|
||||
if(istype(T, /turf/simulated/wall))
|
||||
T:thermite = 1
|
||||
T.overlays.Cut()
|
||||
T.overlays = image('icons/effects/effects.dmi',icon_state = "thermite")
|
||||
return
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
|
||||
for(var/mob/living/carbon/alien/embryo/A in target)
|
||||
A.loc = A.loc.loc
|
||||
A.death()
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 258 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.6 KiB |
Reference in New Issue
Block a user