diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 92256192..224570da 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -54,6 +54,9 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_changelings -= player + continue + if(player.current.isipc()) //Removing ipc's + possible_changelings -= player changeling_amount = 1 + round(num_players() / 10) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 538e63dc..f8d6076b 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -829,6 +829,11 @@ var/list/datum/dna/hivemind_bank = list() T.Paralyse(10) T.make_jittery(1000) if(T.reagents) T.reagents.add_reagent("lexorin", 40) + + //Becase a deadly powerful attack should be logged + msg_admin_attack("[usr.name] ([usr.ckey]) Death Stung [T.name] ([T.ckey])") + usr.attack_log += text("\[[time_stamp()]\] Death stung [T.name] ([T.ckey])") + T.attack_log += text("\[[time_stamp()]\] Was death stung by [usr.name] ([usr.ckey])") feedback_add_details("changeling_powers","DTHS") return 1 diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index a8be5ea4..e0c63bd6 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -55,6 +55,9 @@ for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_vampires -= player + continue + if(player.current.isipc()) + possible_vampires -= player vampire_amount = max(1,round(num_players() / 10)) //1 + round(num_players() / 10) @@ -261,9 +264,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha var/blood = 0 var/bloodtotal = 0 //used to see if we increased our blood total var/bloodusable = 0 //used to see if we increased our blood usable - src.attack_log += text("\[[time_stamp()]\] Bit [src.name] ([src.ckey]) in the neck and draining their blood") - H.attack_log += text("\[[time_stamp()]\] Has been bit in the neck by [src.name] ([src.ckey])") - log_attack("[src.name] ([src.ckey]) bit [H.name] ([H.ckey]) in the neck") + src.visible_message("\red [src.name] bites [H.name]'s neck!", "\red You bite [H.name]'s neck and begin to drain their blood.", "\blue You hear a soft puncture and a wet sucking noise") if(!iscarbon(src)) H.LAssailant = null @@ -327,8 +328,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha vamp.powers.Add(VAMP_BATS) if(!(VAMP_SCREAM in vamp.powers)) vamp.powers.Add(VAMP_SCREAM) - // Commented out until we can figured out a way to stop this from spamming. - //src << "\blue Your rejuvination abilities have improved and will now heal you over time when used." + src << "\blue Your rejuvination abilities have improved and will now heal you over time when used." // TIER 3.5 (/vg/) if(vamp.bloodtotal >= 250) diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 91b6337d..0fa8671d 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -11,6 +11,7 @@ var/datum/vampire/vampire = src.mind.vampire if(!vampire) + msg_scopes("[src] has vampire verbs but isn't a vampire.") world.log << "[src] has vampire verbs but isn't a vampire." return 0 @@ -37,12 +38,14 @@ /mob/proc/vampire_affected(datum/mind/M) //Other vampires aren't affected if(mind && mind.vampire) return 0 - //Vampires who have reached their full potential can affect nearly everything - if(M && M.vampire && (VAMP_FULL in M.vampire.powers)) - return 1 //Chaplains are resistant to vampire powers if(mind && mind.assigned_role == "Chaplain") return 0 + if(mind && mind.current.isipc())//Not sure if this should be here but we can easily override. + return 0 + //Vampires who have reached their full potential can affect nearly everything + if(M && M.vampire && (VAMP_FULL in M.vampire.powers)) + return 1 // This doesn't really need to be here because of well the line below it. return 1 /mob/proc/vampire_can_reach(mob/M as mob, active_range = 1) @@ -59,6 +62,7 @@ if(!vampire) return var/list/victims = list() for(var/mob/living/carbon/C in view(active_range)) + if(C==src) continue victims += C var/mob/living/carbon/T = input(src, "Victim?") as null|anything in victims @@ -102,6 +106,9 @@ var/mob/living/carbon/C = M.current.vampire_active(20, 0, 1) if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return M.current.visible_message("[M]'s eyes flash briefly as he stares into [C.name]'s eyes") // M.current.remove_vampire_blood(20) Moved to remove if it works only. if(M.current.vampire_power(20, 0)) @@ -133,6 +140,12 @@ var/mob/living/carbon/C = M.current.vampire_active(100, 0, 1) if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return + if(C.isipc()) + M.current << "\red You can't to that to a machine" + return if(!M.current.vampire_can_reach(C, 1)) M.current << "\red You cannot touch [C.name] from where you are standing!" return @@ -162,6 +175,9 @@ shutdown.speed = 1 shutdown.stage = 2 shutdown.clicks = 185 + msg_admin_attack("[usr.name] ([usr.ckey]) gave [C.name] ([C.ckey]) the shutdown disease") + usr.attack_log += text("\[[time_stamp()]\] Gave [C.name] ([C.ckey]) the shutdown disease") + C.attack_log += text("\[[time_stamp()]\] Has been given the shutdown disease by [usr.name] ([usr.ckey])") infect_virus2(C,shutdown,0) M.current.remove_vampire_blood(100) M.current.verbs -= /client/vampire/proc/vampire_disease @@ -183,9 +199,11 @@ M.current << "You're blindfolded!" return for(var/mob/living/carbon/C in view(1)) - if(!C.vampire_affected(M)) continue + if(!C.vampire_affected(M)) + if(!C.isipc()) + continue if(!M.current.vampire_can_reach(C, 1)) continue - C.Stun(8) +// C.Stun(8) C.Weaken(8) C.stuttering = 20 C << "\red You are blinded by [M.current]'s glare" @@ -207,7 +225,7 @@ */ /client/vampire/proc/vampire_screech() set category = "Abilities" - set name = "Chiroptean Screech (30)" + set name = "Chiropteran Screech (30)" set desc = "An extremely loud shriek that stuns nearby humans in a four-tile radius." //and breaks windows as well ||Or would if duck knew how to code. end orig text. var/datum/mind/M = usr.mind if(!M) return @@ -216,7 +234,9 @@ for(var/mob/living/carbon/C in hearers(4, M.current)) if(C == M.current) continue if(ishuman(C) && (C:l_ear || C:r_ear) && istype((C:l_ear || C:r_ear), /obj/item/clothing/ears/earmuffs)) continue - if(!C.vampire_affected(M)) continue + if(!C.vampire_affected(M)) + if(!C.isipc()) + continue C << "You hear a ear piercing shriek and your senses dull!" C.Weaken(8) C.ear_deaf = 20 @@ -238,6 +258,12 @@ if(!M) return var/mob/living/carbon/C = M.current.vampire_active(150, 0, 1) if(!C) return + if(C==usr) + M.current << "\red You can't do that to yourself" + return + if(C.isipc()) + M.current << "\red You can only enthrall humans" + return M.current.visible_message("\red [M.current.name] bites [C.name]'s neck!", "\red You bite [C.name]'s neck and begin the flow of power.") C << "You feel the tendrils of evil invade your mind." if(!ishuman(C)) @@ -245,17 +271,16 @@ return if(do_mob(M.current, C, 50)) - if(M.current.can_enthrall(C) && M.current.vampire_power(150, 0)) // recheck - M.current.handle_enthrall(C) - M.current.remove_vampire_blood(150) - M.current.verbs -= /client/vampire/proc/vampire_enthrall - spawn(1800) M.current.verbs += /client/vampire/proc/vampire_enthrall + if(M.current.can_enthrall(C)) // recheck + if(M.current.vampire_power(150, 0)) + M.current.handle_enthrall(C) + M.current.remove_vampire_blood(150) + M.current.verbs -= /client/vampire/proc/vampire_enthrall + spawn(1800) M.current.verbs += /client/vampire/proc/vampire_enthrall else M.current << "\red You or your target either moved or you dont have enough usable blood." return - - /client/vampire/proc/vampire_cloak() set category = "Abilities" set name = "Cloak of Darkness (toggle)" @@ -305,6 +330,7 @@ return 0 if(!C.vampire_affected(mind)) C.visible_message("\red [C] seems to resist the takeover!", "\blue Your faith of [ticker.Bible_deity_name] has kept your mind clear of all evil") + return 0 if(!ishuman(C)) src << "\red You can only enthrall humans!" return 0 @@ -312,6 +338,7 @@ /mob/proc/handle_enthrall(mob/living/carbon/human/H as mob) if(!istype(H)) + msg_scopes("handle_enthrall fucked up with no H < [src]") src << "\red SOMETHING WENT WRONG, YELL AT POMF OR NEXIS" return 0 var/ref = "\ref[src.mind]" @@ -319,6 +346,7 @@ ticker.mode.thralls[ref] = list(H.mind) else ticker.mode.thralls[ref] += H.mind + msg_scopes("[H.name] Changed in handle_enthrall") //purely here to see live changes incase of unexpected things ticker.mode.enthralled.Add(H.mind) ticker.mode.enthralled[H.mind] = src.mind H.mind.special_role = "VampThrall" @@ -326,7 +354,7 @@ src << "\red You have successfully Enthralled [H.name]. If they refuse to do as you say just adminhelp." ticker.mode.update_vampire_icons_added(H.mind) ticker.mode.update_vampire_icons_added(src.mind) - log_admin("[ckey(src.key)] has mind-slaved [ckey(H.key)].") + msg_admin_attack("[name]([ckey]) has mind-slaved [H.name]([H.ckey]).") /client/vampire/proc/vampire_bats() set category = "Abilities" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index d5a7b205..e4f793ce 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -350,34 +350,50 @@ var/global/datum/controller/occupations/job_master var/datum/job/job = GetJob(rank) if(job) //Equip custom gear loadout. - if(H.client.prefs.gear && H.client.prefs.gear.len) + switch(rank) + if("Cyborg","AI","Clown")//Because yeah + else + if(H.client.prefs.gear && H.client.prefs.gear.len) - for(var/thing in H.client.prefs.gear) - var/datum/gear/G = gear_datums[thing] - if(G) - var/permitted - if(G.allowed_roles) - for(var/job_name in G.allowed_roles) - if(job.title == job_name) + for(var/thing in H.client.prefs.gear) + var/datum/gear/G = gear_datums[thing] + if(G) + var/permitted + if(G.allowed_roles) + for(var/job_name in G.allowed_roles) + if(job.title == job_name) + permitted = 1 + else permitted = 1 - else - permitted = 1 - if(G.whitelisted && !is_alien_whitelisted(H, G.whitelisted)) - permitted = 0 + if(G.whitelisted && !is_alien_whitelisted(H, G.whitelisted)) + permitted = 0 - if(!permitted) - H << "\red Your current job or whitelist status does not permit you to spawn with [thing]!" - continue + if(!permitted) + H << "\red Your current job or whitelist status does not permit you to spawn with [thing]!" + continue - if(G.slot) - H.equip_to_slot_or_del(new G.path(H), G.slot) - else - spawn(1) - new G.path(get_turf(H)) + if(G.slot) + msg_scopes("G.slot = [G.slot]") + if(!H.equip_to_slot_or_del(new G.path(H), G.slot)) + spawn(6) + if(!H.equip_to_slot_or_del(new G.path(H.back), slot_in_backpack)) + new G.path(H.loc) + else + if(H.backbag) + msg_scopes("G.path = [G.path]") + spawn(6) //I can't beleive this worked: 4 works but I want to give a little time for lags + if(!H.equip_to_slot_or_del(new G.path(H.back), slot_in_backpack)) + new G.path(H.loc) + else + msg_scopes("G.path = [G.path] | This got called, see if [H.name] has it") // If I never see this in game then Yiss + new G.path(H.loc) +// spawn(1) +// new G.path(get_turf(H.loc)) //Equip job items. job.equip(H) else + msg_scopes("[H.mind.name] has rank: [rank] and this thing happened.") H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator." H.job = rank diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index bc6c01bb..8506ec36 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -378,6 +378,9 @@ proc/populate_gear_list() allowed_roles = list("Roboticist", "Scientist", "Research Director") //Species-specific gear datums. + +//Taken out until fixes are done +/* /datum/gear/zhan_furs display_name = "Zhan-Khazan furs" path = /obj/item/clothing/suit/tajaran/furs @@ -391,6 +394,7 @@ proc/populate_gear_list() cost = 2 slot = slot_head whitelisted = "Tajaran" +*/ /datum/gear/unathi_robe display_name = "roughspun robe" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b1a26c44..8b35a218 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -40,6 +40,9 @@ h_style = "blue IPC screen" ..(new_loc, "Machine") +/mob/living/carbon/human/machine/isipc() + return 1 + /mob/living/carbon/human/kocasslani/New(var/new_loc) h_style = "Bald" ..(new_loc, "Kocasslani") diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index a9f2ff63..9d9f1145 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -124,7 +124,14 @@ if(mind && mind.vampire && (mind in ticker.mode.vampires)) M << "\red Your fangs fail to pierce [src.name]'s cold flesh" return 0 + if(isipc()) + M << "\red They have no blood" + return 0 //we're good to suck the blood, blaah + //and leave an attack log + M.attack_log += text("\[[time_stamp()]\] Bit [src.name] ([src.ckey]) in the neck and draining their blood") + src.attack_log += text("\[[time_stamp()]\] Has been bit in the neck by [M.name] ([M.ckey])") + msg_admin_attack("[M.name] ([M.ckey]) bit [src.name] ([src.ckey]) in the neck") M.handle_bloodsucking(src) return //end vampire codes diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 5c5c0416..3223a39c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -109,6 +109,9 @@ if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle return //We go ahead and process them 5 times for HUD images and other stuff though. + if(stat == DEAD && floating) + float(0) + //Handle temperature/pressure differences between body and environment handle_environment(environment) //Optimized a good bit. diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 6dc3bb20..1f5cce5f 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -64,43 +64,47 @@ return var/list/obj/item/used_radios = new + switch (message_mode) if("headset") - if(l_ear && istype(l_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = l_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - var/obj/item/device/radio/R = r_ear - R.talk_into(src,message,null,verb,speaking) - used_radios += r_ear + if(!(stunned >= 4)) + if(l_ear && istype(l_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = l_ear + R.talk_into(src,message,null,verb,speaking) + used_radios += l_ear + else if(r_ear && istype(r_ear,/obj/item/device/radio)) + var/obj/item/device/radio/R = r_ear + R.talk_into(src,message,null,verb,speaking) + used_radios += r_ear if("right ear") - var/obj/item/device/radio/R - var/has_radio = 0 - if(r_ear && istype(r_ear,/obj/item/device/radio)) - R = r_ear - has_radio = 1 - if(r_hand && istype(r_hand, /obj/item/device/radio)) - R = r_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) - used_radios += R + if(!(stunned >= 4)) + var/obj/item/device/radio/R + var/has_radio = 0 + if(r_ear && istype(r_ear,/obj/item/device/radio)) + R = r_ear + has_radio = 1 + if(r_hand && istype(r_hand, /obj/item/device/radio)) + R = r_hand + has_radio = 1 + if(has_radio) + R.talk_into(src,message,null,verb,speaking) + used_radios += R if("left ear") - var/obj/item/device/radio/R - var/has_radio = 0 - if(l_ear && istype(l_ear,/obj/item/device/radio)) - R = l_ear - has_radio = 1 - if(l_hand && istype(l_hand,/obj/item/device/radio)) - R = l_hand - has_radio = 1 - if(has_radio) - R.talk_into(src,message,null,verb,speaking) - used_radios += R + if(!(stunned >= 4)) + var/obj/item/device/radio/R + var/has_radio = 0 + if(l_ear && istype(l_ear,/obj/item/device/radio)) + R = l_ear + has_radio = 1 + if(l_hand && istype(l_hand,/obj/item/device/radio)) + R = l_hand + has_radio = 1 + if(has_radio) + R.talk_into(src,message,null,verb,speaking) + used_radios += R if("intercom") for(var/obj/item/device/radio/intercom/I in view(1, null)) @@ -120,14 +124,15 @@ Changeling << "[mind.changeling.changelingID]: [message]" return else - if(message_mode) - if(message_mode in (radiochannels | "department")) - if(l_ear && istype(l_ear,/obj/item/device/radio)) - l_ear.talk_into(src,message, message_mode, verb, speaking) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) - r_ear.talk_into(src,message, message_mode, verb, speaking) - used_radios += r_ear + if(!(stunned >= 4)) + if(message_mode) + if(message_mode in (radiochannels | "department")) + if(l_ear && istype(l_ear,/obj/item/device/radio)) + l_ear.talk_into(src,message, message_mode, verb, speaking) + used_radios += l_ear + else if(r_ear && istype(r_ear,/obj/item/device/radio)) + r_ear.talk_into(src,message, message_mode, verb, speaking) + used_radios += r_ear if(used_radios.len) @@ -212,9 +217,6 @@ return verb - - - /mob/living/carbon/human/proc/handle_speech_problems(var/message) var/list/returns[3] var/verb = "says" diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 12614e3a..0fdab79c 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -123,3 +123,9 @@ return 0 // End BS12 momentum-transfer code. + +//Why did I place it here? +//Remind me to place this somewhere else +//I sware this uses less memory +/mob/living/proc/isipc() + return 0 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 261df980..e58a086c 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -481,6 +481,5 @@ msg_scopes("[name] was made to float") else msg_scopes("[real_name] was made to float") - msg_scopes("[real_name] was told to stop floating") animate(src, pixel_y = initial(pixel_y), time = 10) floating = 0 \ No newline at end of file diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index a4445612..36b102ba 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -127,7 +127,7 @@ C.status |= ORGAN_DEAD H.update_body(1) if(multiplier < 1) multiplier = 1 - H.adjustToxLoss(15*multiplier) + H.adjustToxLoss(10*multiplier) vampire stage = 3 diff --git a/html/changelog.html b/html/changelog.html index af11f6c3..ff535791 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -60,6 +60,10 @@ should be listed in the changelog upon commit though. Thanks. -->

10 August 2014

SoundScopes updated:

    +
  • IPC's can no longer be absorbed by a ling
  • +
  • Vampires can no longer bite themselves
  • +
  • Chaplain can no longer be a vampire
  • +
  • Custom loadouts now spawn with you
  • Drones removed from auto-traitor selection
  • Auto-traitor now listens to traitor bans
  • Engineer Apprentice access
  • @@ -85,6 +89,7 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Faxes can be sent through request consoles
  • Vampires
  • Gun power changed a little
  • +
  • No longer able to use radios if you're stunned
  • Shotguns require 2 hands to be fired
  • Delta level when called by an admin destroys the station
  • Map changes