diff --git a/baystation12.dme b/baystation12.dme index d771304cc6b..528a42cfd82 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -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" diff --git a/code/WorkInProgress/ZomgPonies/mobs/metroid/powers.dm b/code/WorkInProgress/ZomgPonies/mobs/metroid/powers.dm index 6c32146a234..cb123bb4323 100644 --- a/code/WorkInProgress/ZomgPonies/mobs/metroid/powers.dm +++ b/code/WorkInProgress/ZomgPonies/mobs/metroid/powers.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)) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index bc573f19c30..851cf505817 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -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 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 32bc87cd5bb..d5a56d5baf8 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -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 diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index abbfd884b80..b22aee7eadf 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -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 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 539ef55529b..8eb8199e4f8 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -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 << "We may only use this power while in humanoid form." + return + + var/datum/changeling/changeling = changeling_power(5,1,0) + if(!changeling) return + + if(changeling.absorbed_species.len < 2) + src << "We do not know of any other species genomes to use." + 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("[src] transforms!") + + 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 << "[T] is not compatible with our biology." return + if(T.species.flags & NO_SCAN) + src << "We do not know how to parse this creature's DNA!" + return if((M_NOCLONE || SKELETON) in T.mutations) src << "This creature's DNA is ruined beyond useability!" @@ -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 << "We have regenerated." C.visible_message("[src] appears to wake from the dead, having healed all wounds.") - - + + feedback_add_details("changeling_powers","FD") return 1 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 099d805c056..68458760855 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -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." diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 5c61d2cf226..467c42b33d8 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -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 += "" for(var/datum/organ/external/e in occupant.organs) + dat += "" 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)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 97bd65f820a..4630fe8253b 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -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 << "The thermite melts through the wall." + return + F.burn_tile() + F.icon_state = "wall_thermite" + user << "The thermite melts through the wall." + + 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) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ab75c250ba9..571871cd7a0 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -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 ) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 3d9ab9dffee..11c595d91b1 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -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 << "MOD: [key_name(src,1)] (JMP): [msg]" + if((R_ADMIN|R_MOD|R_MENTOR) & C.holder.rights) + C << "[channel] [key_name(src,1)] (JMP): [msg]" diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index 7176767fae9..5f653302b35 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -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 = "DEAD: ADMIN says, \"[msg]\"" + var/rendered = "DEAD: [stafftype] says, \"[msg]\"" 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! \ No newline at end of file + feedback_add_details("admin_verb","D") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 48806371bf6..92d07c19652 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -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) \ No newline at end of file + 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 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1298118a985..f6b8cfd587a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -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 diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm index 4f1233515ee..dc2911cfcad 100644 --- a/code/modules/mob/living/carbon/monkey/diona.dm +++ b/code/modules/mob/living/carbon/monkey/diona.dm @@ -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)) diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 9c73a8719db..dfa92ace514 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -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" diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2381f9741a8..bb3f1af8f61 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -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. diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 94a14d11c90..0198b881f5e 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -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" + diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index d4fb5431fa7..5249c4c95a4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index e07a1975004..ba8e18c65d0 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -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) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index c952d0735d3..a2beecbbecb 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -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) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2e76ee01857..62bf3c9a554 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -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 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index f45407d5c53..866aa1c7221 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -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) diff --git a/code/modules/surgery/ribcage.dm b/code/modules/surgery/ribcage.dm index 99d443306ed..44eddb312ef 100644 --- a/code/modules/surgery/ribcage.dm +++ b/code/modules/surgery/ribcage.dm @@ -181,6 +181,7 @@ for(var/mob/living/carbon/alien/embryo/A in target) A.loc = A.loc.loc + A.death() ////////////////////////////////////////////////////////////////// diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 25fb9fb5a39..9bb27fef02c 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/human_races/r_diona.dmi b/icons/mob/human_races/r_diona.dmi index c07e7088f9e..c09acaa9538 100644 Binary files a/icons/mob/human_races/r_diona.dmi and b/icons/mob/human_races/r_diona.dmi differ