Merge pull request #12 from ZomgPonies/master

Update
This commit is contained in:
SamCroswell
2014-05-10 14:14:13 -04:00
26 changed files with 367 additions and 160 deletions
+4 -63
View File
@@ -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))
+3
View File
@@ -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
View File
@@ -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."
+12 -2
View File
@@ -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))
+20 -15
View File
@@ -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)
+2 -1
View File
@@ -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
)
+7 -3
View File
@@ -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>"
+14 -2
View File
@@ -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
+11 -10
View File
@@ -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))
+4 -1
View File
@@ -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"
+8 -3
View File
@@ -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"
+16 -4
View File
@@ -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)
+10 -1
View File
@@ -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)
+6 -4
View File
@@ -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
+5 -8
View File
@@ -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)
+1
View File
@@ -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