diff --git a/Scopes Files/gravitygenerator.dm b/Scopes Files/gravitygenerator.dm index affa4f5a..18d1e09b 100644 --- a/Scopes Files/gravitygenerator.dm +++ b/Scopes Files/gravitygenerator.dm @@ -21,7 +21,7 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi /client/proc/cmd_dev_reset_gravity() set category = "Debug" set name = "Restore Default Gravity" - set desc = "Resets all gravity on the entire server(This spams Scopes like mad.)" + set desc = "Resets all gravity on the entire server." if(!check_rights(R_DEBUG|R_DEV)) return @@ -36,7 +36,7 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi src << "\red The game hasn't started yet!" return - if(alert(usr, "Be sure to warn Scopes, Chris, and Skull. This could be very spammy for their logs", "Restore gravity", "No", "Yes") == "No") + if(alert(usr, "Make people fall on their face?", "Restore gravity", "No", "Yes") == "No") return 0 world << "\red \b Resetting Gravity Simulation." @@ -47,12 +47,10 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi continue A.has_gravity = 1 - msg_scopes("Gravity reset in: [A.name]") for(var/area/SubA in A.related) SubA.has_gravity = 1 for(var/mob/living/carbon/human/M in SubA) M:float(0) - msg_scopes("Did you enjoy that insane amount of things") world << "\red Gravity Simulation reset." feedback_add_details("admin_verb","RSG") @@ -348,6 +346,8 @@ var/list/gravity_field_generators = list() // We will keep track of this by addi gravity_is_on = 0 investigate_log("was brought offline and there is now no gravity for this level.", "gravity") message_admins("The gravity generator was brought offline with no backup generator. ([area.name])") + message_mods("The gravity generator was brought offline with no backup generator. ([area.name])") + update_icon() update_list() diff --git a/aurora.dme b/aurora.dme index 558067c9..3c46778f 100644 --- a/aurora.dme +++ b/aurora.dme @@ -552,6 +552,7 @@ #include "code\game\objects\items\devices\debugger.dm" #include "code\game\objects\items\devices\flash.dm" #include "code\game\objects\items\devices\flashlight.dm" +#include "code\game\objects\items\devices\isocube.dm" #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" @@ -723,6 +724,7 @@ #include "code\game\objects\structures\stool_bed_chair_nest\bed.dm" #include "code\game\objects\structures\stool_bed_chair_nest\chairs.dm" #include "code\game\objects\structures\stool_bed_chair_nest\stools.dm" +#include "code\game\objects\structures\stool_bed_chair_nest\wheelchair.dm" #include "code\game\turfs\simulated.dm" #include "code\game\turfs\turf.dm" #include "code\game\turfs\unsimulated.dm" diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 04612128..b84b9f46 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -23,7 +23,7 @@ /mob/living/carbon/human/RangedAttack(var/atom/A) if(!gloves && !mutations.len) return var/obj/item/clothing/gloves/G = gloves - if((LASER in mutations) && a_intent == "harm") + if((LASER in mutations) && a_intent == "hurt") LaserEyes(A) // moved into a proc below else if(istype(G) && G.Touch(A,0)) // for magic gloves diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 207d51f2..2eea0aa0 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -181,7 +181,7 @@ datum/controller/vote log_game("Rebooting due to restart vote") world.Reboot() - last_vote_time = world.time + last_vote_time = time_stamp() return . proc/submit_vote(var/ckey, var/vote) @@ -236,14 +236,16 @@ datum/controller/vote mode = vote_type initiator = initiator_key started_time = world.time - var/timedifference = round((world.time - last_vote_time)) - var/timedifference_text - timedifference_text = time2text(timedifference, "hh:mm:ss") - msg_scopes("timedifference_text debug: [timedifference]") - timedifference_text = time2text(timedifference,"mm:ss") - msg_scopes("timedifference: [timedifference] timedifference_text: [timedifference_text] started_time: [started_time]") +// var/timedifference = round((world.time - last_vote_time)) +// var/timedifference_text +// timedifference_text = time2text(timedifference, "hh:mm:ss") +// msg_scopes("timedifference_text debug: [timedifference]") +// timedifference_text = time2text(timedifference,"mm:ss") +// msg_scopes("timedifference: [timedifference] timedifference_text: [timedifference_text] started_time: [started_time]") for(var/client/C in admins) - C << "Time since last vote: [timedifference_text]" + if((C.holder.rights & R_ADMIN) || (C.holder.rights & R_MOD)) + C << "Time last vote: [last_vote_time]" + C << "Time: [time_stamp()]" var/text = "[capitalize(mode)] vote started by [initiator]." if(mode == "custom") text += "\n[question]" diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 02f09088..6d65fcec 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -465,7 +465,7 @@ client cmd_mass_modify_object_variables(A, href_list["varnamemass"]) else if(href_list["mob_player_panel"]) - if(!check_rights(0)) return + if(!check_rights(R_ADMIN|R_MOD)) return var/mob/M = locate(href_list["mob_player_panel"]) if(!istype(M)) @@ -933,7 +933,6 @@ client if(amount != 0) log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [L] ") message_admins("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [L] ") - msg_scopes("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [L] ", 1) href_list["datumrefresh"] = href_list["mobToDamage"] if(href_list["datumrefresh"]) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1c12d54d..934cb1b9 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -69,6 +69,7 @@ datum/mind proc/transfer_to(mob/living/new_character) if(!istype(new_character)) + msg_scopes("transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob.") world.log << "## DEBUG: transfer_to(): Some idiot has tried to transfer_to() a non mob/living mob. Please inform Carn" if(current) //remove ourself from our old body's mind variable if(changeling) @@ -1229,6 +1230,18 @@ datum/mind // fail |= !ticker.mode.equip_traitor(current, 1) fail |= !ticker.mode.equip_revolutionary(current) +//Look here again to make sure it works right -- SoundScopes + proc/make_Vampire() + if(!(src in ticker.mode.vampires)) + ticker.mode.vampires += src + ticker.mode.grant_vampire_powers(current) + special_role = "Vampire" + current << "Your powers are awoken. Your lust for blood grows... You are a Vampire!" + log_admin("[key_name_admin(usr)] has vampired [current].") + if (!config.objectives_disabled) + ticker.mode.forge_vampire_objectives(src) + ticker.mode.greet_vampire(src) + // check whether this mind's mob has been brigged for the given duration // have to call this periodically for the duration to work properly diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 64371dfe..7dafef5d 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -46,7 +46,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin usr << "\red You shouldn't have this spell! Something's wrong." return 0 - if(usr.z == 2 && !centcomm_cancast) //Certain spells are not allowed on the centcomm zlevel + if(usr.z == 2 && !centcomm_cancast || usr.weakened > 100) //Certain spells are not allowed on the centcomm zlevel return 0 if(!skipcharge) diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm index 7f7e6613..58a2be60 100644 --- a/code/datums/spells/area_teleport.dm +++ b/code/datums/spells/area_teleport.dm @@ -60,9 +60,10 @@ else break - if(!success) + if(target.weakened > 100)//if you are megastunned by the isocube, there is no escape + target <<"An outside force prevents you from teleporting." + else if(!success) target.loc = pick(L) - return /obj/effect/proc_holder/spell/targeted/area_teleport/invocation(area/chosenarea = null) @@ -78,5 +79,4 @@ playsound(usr.loc, pick('sound/misc/null.ogg','sound/misc/null.ogg'), 100, 1) if("whisper") usr.whisper("[invocation] [uppertext(chosenarea.name)]") - return \ No newline at end of file diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index fe39ae58..d84c7ba3 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -736,17 +736,15 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /datum/supply_packs/shotgunammo name = "Shotgun shells" - contains = list(/obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun, - /obj/item/ammo_casing/shotgun) - cost = 20 + contains = list(/obj/item/ammo_magazine/shotgun, + /obj/item/ammo_magazine/shotgun, + /obj/item/ammo_magazine/shotgun, + /obj/item/ammo_magazine/shotgun, + /obj/item/ammo_magazine/shotgun/beanbag, + /obj/item/ammo_magazine/shotgun/beanbag, + /obj/item/ammo_magazine/shotgun/incendiary, + /obj/item/ammo_magazine/shotgun/incendiary) + cost = 40 containertype = /obj/structure/closet/crate/secure containername = "Shotgun shells" access = access_armory @@ -1124,6 +1122,88 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee access = access_hydroponics group = "Hydroponics" + +//My foray into encryption key crates. - Duck +/datum/supply_packs/sec_keys + name = "Security Encryption Keys" + contains = list(/obj/item/device/encryptionkey/headset_sec, + /obj/item/device/encryptionkey/headset_sec, + /obj/item/device/encryptionkey/headset_sec, + /obj/item/device/encryptionkey/headset_sec, + /obj/item/device/encryptionkey/headset_sec) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Security Encryption Keys" + group = "Operations" + access = access_security + +/datum/supply_packs/sci_keys + name = "Science Encryption Keys" + contains = list(/obj/item/device/encryptionkey/headset_sci, + /obj/item/device/encryptionkey/headset_sci, + /obj/item/device/encryptionkey/headset_sci, + /obj/item/device/encryptionkey/headset_sci, + /obj/item/device/encryptionkey/headset_sci) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Science Encryption Keys" + group = "Operations" + access = access_research + +/datum/supply_packs/eng_keys + name = "Engineering Encryption Keys" + contains = list(/obj/item/device/encryptionkey/headset_eng, + /obj/item/device/encryptionkey/headset_eng, + /obj/item/device/encryptionkey/headset_eng, + /obj/item/device/encryptionkey/headset_eng, + /obj/item/device/encryptionkey/headset_eng) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Engineering Encryption Keys" + group = "Operations" + access = access_engine + +/datum/supply_packs/med_keys + name = "Medical Encryption Keys" + contains = list(/obj/item/device/encryptionkey/headset_med, + /obj/item/device/encryptionkey/headset_med, + /obj/item/device/encryptionkey/headset_med, + /obj/item/device/encryptionkey/headset_med, + /obj/item/device/encryptionkey/headset_med) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Medical Encryption Keys" + group = "Operations" + access = access_medical + + +/datum/supply_packs/cargo_keys + name = "Cargo Encryption Keys" + contains = list(/obj/item/device/encryptionkey/headset_cargo, + /obj/item/device/encryptionkey/headset_cargo, + /obj/item/device/encryptionkey/headset_cargo, + /obj/item/device/encryptionkey/headset_cargo, + /obj/item/device/encryptionkey/headset_cargo) + cost = 20 + containertype = /obj/structure/closet/crate/secure + containername = "Cargo Encryption Keys" + group = "Operations" + access = access_cargo + +/datum/supply_packs/head_keys + name = "Head Encryption Keys" + contains = list(/obj/item/device/encryptionkey/heads/captain, + /obj/item/device/encryptionkey/heads/rd, + /obj/item/device/encryptionkey/heads/hos, + /obj/item/device/encryptionkey/heads/ce, + /obj/item/device/encryptionkey/heads/cmo, + /obj/item/device/encryptionkey/heads/hop) + cost = 50 + containertype = /obj/structure/closet/crate/secure + containername = "Head Encryption Keys" + group = "Operations" + access = access_heads + /* *Skull's additions to satisfy the cravings of any atmospheric tech begin here. */ diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 5891b812..f0f14e73 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -51,13 +51,16 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING) for(var/datum/mind/player in possible_changelings) +//This could be the fuckup with game start + if(player.current.client.prefs.species == "Machine") //Removing ipc's + possible_changelings -= player + msg_scopes("[player.key] has an invalid mob for this role.") + continue for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_changelings -= player - continue -//This could be the fuckup with game start -// if(player.current.isipc()) //Removing ipc's -// possible_changelings -= player + msg_scopes("[player.key] has an invalid job for this role.") + break 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 f405ae7b..d98853dd 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -839,7 +839,7 @@ var/list/datum/dna/hivemind_bank = list() 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])") + msg_admin_attack("[usr.name] ([usr.ckey]) Death Stung [T.name] ([T.ckey]) - JMP") 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") diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 9515b665..ee19a0ca 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -68,6 +68,7 @@ for(var/datum/mind/player in cultists_possible) for(var/job in restricted_jobs)//Removing heads and such from the list if(player.assigned_role == job) + msg_scopes("[player.key] has an invalid job for this role.") cultists_possible -= player for(var/cultists_number = 1 to max_cultists_to_start) diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm index dbebc649..815c3a6b 100644 --- a/code/game/gamemodes/events/power_failure.dm +++ b/code/game/gamemodes/events/power_failure.dm @@ -86,6 +86,8 @@ continue S.charge = S.capacity S.output = 200000 + spawn(600) + S.output = S.last_output S.online = 1 S.updateicon() S.power_change() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 20b0ff79..577bb9b1 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -92,12 +92,16 @@ Implants; if((player.client)&&(player.ready)) playerC++ + msg_scopes("playerC: [playerC]") if(master_mode=="secret") + msg_scopes("req [required_players_secret]") if(playerC >= required_players_secret) return 1 else + msg_scopes("req [required_players]") if(playerC >= required_players) return 1 + msg_scopes("Nope, players not here or something") return 0 @@ -282,6 +286,7 @@ Implants; if(BE_CULTIST) roletext="cultist" if(BE_NINJA) roletext="ninja" if(BE_RAIDER) roletext="raider" + if(BE_VAMPIRE) roletext="vampire" // Assemble a list of active players without jobbans. for(var/mob/new_player/player in player_list) @@ -311,6 +316,7 @@ Implants; // Remove candidates who want to be antagonist but have a job that precludes it if(restricted_jobs) + msg_scopes("going through restricted jobs") for(var/datum/mind/player in candidates) for(var/job in restricted_jobs) if(player.assigned_role == job) diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 071f2442..4bea30a5 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -76,6 +76,7 @@ var/global/datum/controller/gameticker/ticker if((master_mode=="random") || (master_mode=="secret")) runnable_modes = config.get_runnable_modes() if (runnable_modes.len==0) + msg_scopes("Well we can't continue runnable_modes.0") current_state = GAME_STATE_PREGAME world << "Unable to choose playable game mode. Reverting to pre-game lobby." return 0 @@ -92,6 +93,7 @@ var/global/datum/controller/gameticker/ticker else src.mode = config.pick_mode(master_mode) if (!src.mode.can_start()) + msg_scopes("Well we can't continue can_start") world << "Unable to start [mode.name]. Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby." del(mode) current_state = GAME_STATE_PREGAME @@ -104,6 +106,7 @@ var/global/datum/controller/gameticker/ticker if(!can_continue) del(mode) current_state = GAME_STATE_PREGAME + msg_scopes("Well we can't continue pre_setup") world << "Error setting up [master_mode]. Reverting to pre-game lobby." job_master.ResetOccupations() return 0 diff --git a/code/game/gamemodes/revolution/rp-revolution.dm b/code/game/gamemodes/revolution/rp-revolution.dm index 2fdf8af2..25858c30 100644 --- a/code/game/gamemodes/revolution/rp-revolution.dm +++ b/code/game/gamemodes/revolution/rp-revolution.dm @@ -296,6 +296,7 @@ mob/living/carbon/human/proc src << "\red Attempting to convert [M]..." log_admin("[src]([src.ckey]) attempted to convert [M].") message_admins("\red [src]([src.ckey]) attempted to convert [M].") + message_mods("\red [src]([src.ckey]) attempted to convert [M].") var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!") if(choice == "Yes!") ticker.mode:add_revolutionary(M.mind) diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm index fa64d90b..88ca9af0 100644 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ b/code/game/gamemodes/revolution/rp_revolution.dm @@ -186,6 +186,7 @@ src << "\red Attempting to convert [M]..." log_admin("[src]([src.ckey]) attempted to convert [M].") message_admins("\red [src]([src.ckey]) attempted to convert [M].") + message_mods("\red [src]([src.ckey]) attempted to convert [M].") var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!") if(choice == "Yes!") ticker.mode:add_revolutionary(M.mind) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 188108cf..1d235132 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -52,16 +52,19 @@ var/list/datum/mind/possible_vampires = get_players_for_role(BE_VAMPIRE) for(var/datum/mind/player in possible_vampires) - for(var/job in restricted_jobs)//Removing robots from the list +//This could be the fuckup with game start + if(player.current.client.prefs.species == "Machine") + possible_vampires -= player + msg_scopes("[player.key] has an invalid mob for this role.") + continue + for(var/job in restricted_jobs) if(player.assigned_role == job) possible_vampires -= player - continue -//This could be the fuckup with game start -// if(player.current.isipc()) -// possible_vampires -= player + msg_scopes("[player.key] has an invalid job for this role.") + break vampire_amount = max(1,round(num_players() / 10)) //1 + round(num_players() / 10) - + msg_scopes("vampire_amount: [vampire_amount]") if(possible_vampires.len>0) for(var/i = 0, i < vampire_amount, i++) if(!possible_vampires.len) break @@ -71,6 +74,7 @@ modePlayer += vampires return 1 else + msg_scopes("possible_vampires went poof") return 0 /datum/game_mode/vampire/post_setup() @@ -289,7 +293,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha blood = min(10, H.vessel.get_reagent_amount("blood"))// if they have less than 10 blood, give them the remnant else they get 10 blood src.mind.vampire.bloodtotal += blood src.mind.vampire.bloodusable += blood - H.adjustCloneLoss(10) // beep boop 10 damage +// H.adjustCloneLoss(10) // beep boop 10 damage //probably not necessary actually honestly okay else blood = min(5, H.vessel.get_reagent_amount("blood"))// The dead only give 5 bloods src.mind.vampire.bloodtotal += blood diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index 4ad1c547..0939375c 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -98,12 +98,12 @@ /client/vampire/proc/vampire_hypnotise() set category = "Abilities" - set name = "Hypnotise (20)" + set name = "Hypnotise" // (20) set desc= "A piercing stare that incapacitates your victim for a good length of time." var/datum/mind/M = usr.mind if(!M) return - var/mob/living/carbon/C = M.current.vampire_active(20, 0, 1) + var/mob/living/carbon/C = M.current.vampire_active(0, 0, 1) //(20, 0, 1) if(!C) return if(C==usr) @@ -111,9 +111,9 @@ 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)) + if(M.current.vampire_power(0, 0)) //if(M.current.vampire_power(20, 0)) M.current.verbs -= /client/vampire/proc/vampire_hypnotise - spawn(900) + spawn(1200) M.current.verbs += /client/vampire/proc/vampire_hypnotise if(do_mob(M.current, C, 50)) if(C.mind && C.mind.vampire) @@ -126,7 +126,7 @@ C.Weaken(20) C.Stun(20) C.stuttering = 20 - M.current.remove_vampire_blood(20) +// M.current.remove_vampire_blood(20) else M.current << "\red You broke your gaze." return @@ -175,7 +175,7 @@ shutdown.speed = 1 shutdown.stage = 2 shutdown.clicks = 185 - msg_admin_attack("[usr.name] ([usr.ckey]) gave [C.name] ([C.ckey]) the shutdown disease") + msg_admin_attack("[usr.name] ([usr.ckey]) gave [C.name] ([C.ckey]) the shutdown disease - JMP") 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) @@ -354,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) - msg_admin_attack("[name]([ckey]) has mind-slaved [H.name]([H.ckey]).") + msg_admin_attack("[name]([ckey]) has mind-slaved [H.name]([H.ckey]) - JMP.") /client/vampire/proc/vampire_bats() set category = "Abilities" @@ -379,7 +379,7 @@ new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) else // we had no good locations so make two on top of us new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) -// new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) + new /mob/living/simple_animal/hostile/scarybat(M.current.loc, M.current) M.current.remove_vampire_blood(60) M.current.verbs -= /client/vampire/proc/vampire_bats spawn(1200) M.current.verbs += /client/vampire/proc/vampire_bats @@ -387,13 +387,13 @@ /client/vampire/proc/vampire_jaunt() //AHOY COPY PASTE INCOMING set category = "Abilities" - set name = "Mist Form (45)" + set name = "Mist Form (30)" set desc = "You take on the form of mist for a short period of time." var/jaunt_duration = 50 //in deciseconds var/datum/mind/M = usr.mind if(!M) return - if(M.current.vampire_power(45, 0)) + if(M.current.vampire_power(30, 0)) if(M.current.buckled) M.current.buckled.unbuckle() spawn(0) var/originalloc = get_turf(M.current.loc) @@ -407,6 +407,8 @@ animation.layer = 5 animation.master = holder M.current.ExtinguishMob() + M.current.weakened = 0 + M.current.stunned = 0 if(M.current.buckled) M.current.buckled.unbuckle() flick("liquify",animation) @@ -437,7 +439,7 @@ M.current.client.eye = M.current del(animation) del(holder) - M.current.remove_vampire_blood(45) + M.current.remove_vampire_blood(30) M.current.verbs -= /client/vampire/proc/vampire_jaunt spawn(600) M.current.verbs += /client/vampire/proc/vampire_jaunt diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index a9904ac8..8a92dcd5 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -407,6 +407,10 @@ var/global/datum/controller/occupations/job_master S = locate("start*[rank]") // use old stype if(istype(S, /obj/effect/landmark/start) && istype(S.loc, /turf)) H.loc = S.loc + // Moving wheelchair if they have one + if(H.buckled && istype(H.buckled, /obj/structure/stool/bed/chair/wheelchair)) + H.buckled.loc = H.loc + H.buckled.dir = H.dir //give them an account in the station database var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null) diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index f4a80c0a..9647d427 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -148,9 +148,11 @@ emagged = !emagged if(emagged) message_admins("[key_name_admin(usr)] overrode the holodeck's safeties") + message_mods("[key_name_admin(usr)] overrode the holodeck's safeties") log_game("[key_name(usr)] overrided the holodeck's safeties") else message_admins("[key_name_admin(usr)] restored the holodeck's safeties") + message_mods("[key_name_admin(usr)] restored the holodeck's safeties") log_game("[key_name(usr)] restored the holodeck's safeties") src.add_fingerprint(usr) @@ -447,7 +449,7 @@ if(isrobot(user)) return - + ..() /obj/structure/table/holotable/wood diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 4cc773c5..ac066bf5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -158,6 +158,7 @@ new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) new /obj/item/clothing/head/collectable/petehat(src.loc) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") + message_mods("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") src.New() emagged = 0 diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 157e9622..4ddb45ad 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -552,6 +552,7 @@ emergency_shuttle.incall(2) log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.") message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1) + message_mods("All the AIs, comm consoles and boards are destroyed. Shuttle called.") captain_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.") world << sound('sound/AI/shuttlecalled.ogg') diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index cdce6fdf..ed7c05d4 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -122,6 +122,7 @@ if(src.check_access(I)) if (!status) message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") + message_mods("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!") src.status = 1 src.start_sequence() @@ -167,6 +168,7 @@ else message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") + message_mods("\blue [key_name_admin(usr)] detonated [R.name]!") log_game("\blue [key_name_admin(usr)] detonated [R.name]!") R.self_destruct() else @@ -180,6 +182,7 @@ if(choice == "Confirm") if(R && istype(R)) message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") + message_mods("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") R.canmove = !R.canmove if (R.lockcharge) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 2f85c5f2..88649b08 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -324,6 +324,7 @@ obj/machinery/computer/cryopod/Topic(href, href_list) // Book keeping! log_admin("[key_name_admin(M)] has entered a stasis pod.") message_admins("\blue [key_name_admin(M)] has entered a stasis pod.") + message_mods("\blue [key_name_admin(M)] has entered a stasis pod.") //Despawning occurs when process() is called with an occupant without a client. src.add_fingerprint(M) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 3b59dca4..e8f8eace 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -81,6 +81,14 @@ else flick("door_deny", src) return + if(istype(AM, /obj/structure/stool/bed/chair/wheelchair)) + var/obj/structure/stool/bed/chair/wheelchair/wheel = AM + if(density) + if(wheel.pulling && (src.allowed(wheel.pulling))) + open() + else + flick("door_deny", src) + return return diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index ecd16e68..188af968 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -341,7 +341,11 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant! else if ( istype(myseed, /obj/item/seeds/appleseed )) del(myseed) - myseed = new /obj/item/seeds/goldappleseed + switch(rand(1,100)) + if(1 to 50) + myseed = new /obj/item/seeds/goldappleseed + if(51 to 100) + myseed = new /obj/item/seeds/poisonedappleseed else if ( istype(myseed, /obj/item/seeds/berryseed )) del(myseed) diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index 7d2ffc5a..895f82dd 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -212,7 +212,7 @@ if(src.occupant.client) // Gibbed a cow with a client in it? log that shit src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey]" user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey]" - msg_admin_attack("\[[time_stamp()]\] [key_name(user)] gibbed [key_name(src.occupant)]") + msg_admin_attack("\[[time_stamp()]\] [key_name(user)] gibbed [key_name(src.occupant)] - JMP") src.occupant.death(1) src.occupant.ghostize() diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index becfc69d..4f3cd656 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -27,7 +27,7 @@ var/raised = 0 // if the turret cover is "open" and the turret is raised var/raising= 0 // if the turret is currently opening or closing its cover var/health = 80 // the turret's health - var/locked = 1 // if the turret's behaviour control access is locked + var/locked = 0 // if the turret's behaviour control access is locked var/installation // the type of weapon installed var/gun_charge = 0 // the charge of the gun inserted @@ -66,7 +66,7 @@ spark_system.attach(src) sleep(10) if(!installation)// if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots - projectile = /obj/item/projectile/energy/electrode//holder for the projectile, here it is being set + projectile = /obj/item/projectile/energy/electrode/high//holder for the projectile, here it is being set eprojectile = /obj/item/projectile/beam//holder for the projectile when emagged, if it is different reqpower = 200 sound = 1 @@ -128,13 +128,13 @@ reqpower = 700 if(/obj/item/weapon/gun/energy/taser) - projectile = /obj/item/projectile/energy/electrode + projectile = /obj/item/projectile/energy/electrode/high eprojectile = projectile iconholder = 1 reqpower = 200 if(/obj/item/weapon/gun/energy/stunrevolver) - projectile = /obj/item/projectile/energy/electrode + projectile = /obj/item/projectile/energy/electrode/high eprojectile = projectile iconholder = 1 reqpower = 200 @@ -169,8 +169,14 @@ iconholder = null reqpower = 500 + if(/obj/item/weapon/gun/energy/laser) //laser rifles are cool and all. + projectile = /obj/item/projectile/beam //but captainlaser and retrolaser still use energy/laser pathing. + eprojectile = projectile + iconholder = null + reqpower = 500 + else // Energy gun shots - projectile = /obj/item/projectile/energy/electrode// if it hasn't been emagged, it uses normal taser shots + projectile = /obj/item/projectile/energy/electrode/high// if it hasn't been emagged, it uses normal taser shots eprojectile = /obj/item/projectile/beam//If it has, going to kill mode iconholder = 1 egun = 1 @@ -395,8 +401,8 @@ Status: []
"}, check_records=pick(0,1) criminals=pick(0,1) auth_weapons=pick(0,1) - stun_all=pick(0,0,0,0,1) // stun_all is a pretty big deal, so it's least likely to get turned on - if(prob(5)) emagged=1 + stun_all=pick(0,1) // stun_all is a pretty big deal, so it's least likely to get turned on //but think of the fun + if(prob(50)) emagged=1 on=0 sleep(rand(60,600)) if(!on) diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm index 6911a571..c9334924 100644 --- a/code/game/machinery/turrets.dm +++ b/code/game/machinery/turrets.dm @@ -233,7 +233,7 @@ A.original = target use_power(500) else - A = new /obj/item/projectile/energy/electrode( loc ) + A = new /obj/item/projectile/energy/electrode/high( loc ) use_power(200) A.current = T A.yo = U.y - T.y diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 081d997d..97e721d7 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -12,7 +12,7 @@ use_power = 1 idle_power_usage = 20 active_power_usage = 5000 - req_access = list(access_robotics) + req_access = list(access_research) var/time_coeff = 1.5 //can be upgraded with research var/resource_coeff = 1.5 //can be upgraded with research var/list/resources = list( diff --git a/code/game/objects/effects/chemsmoke.dm b/code/game/objects/effects/chemsmoke.dm index 4c245b78..9e107ebb 100644 --- a/code/game/objects/effects/chemsmoke.dm +++ b/code/game/objects/effects/chemsmoke.dm @@ -86,7 +86,7 @@ message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") else - message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) + message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. No associated key.", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 574597e0..1aa12332 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -53,7 +53,12 @@ var/global/list/image/splatter_cache=list() if(invisibility != 0) return - if(perp.shoes)//Adding blood to shoes + var/datum/organ/external/l_foot = perp.get_organ("l_foot") + var/datum/organ/external/r_foot = perp.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + if(perp.shoes && !perp.buckled)//Adding blood to shoes perp.shoes.blood_color = basecolor perp.shoes:track_blood = max(amount,perp.shoes:track_blood) if(!perp.shoes.blood_overlay) @@ -64,16 +69,20 @@ var/global/list/image/splatter_cache=list() perp.shoes.overlays += perp.shoes.blood_overlay perp.shoes.blood_DNA |= blood_DNA.Copy() - else//Or feet + else if (hasfeet)//Or feet perp.feet_blood_color = basecolor perp.track_blood = max(amount,perp.track_blood) if(!perp.feet_blood_DNA) perp.feet_blood_DNA = list() perp.feet_blood_DNA |= blood_DNA.Copy() + else if (perp.buckled && istype(perp.buckled, /obj/structure/stool/bed/chair/wheelchair)) + var/obj/structure/stool/bed/chair/wheelchair/W = perp.buckled + W.bloodiness = 4 perp.update_inv_shoes(1) amount-- + /obj/effect/decal/cleanable/blood/proc/dry() name = "dried [src.name]" desc = "It's dry and crusty. Someone is not doing their job." diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 6b6c45ab..9538cd81 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -760,10 +760,12 @@ var/global/list/obj/item/device/pda/PDAs = list() detonate_act(src) log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed.", 1) + message_mods("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed.") else U.show_message("\blue Success!", 1) log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded") message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded.", 1) + message_mods("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge and succeeded.") detonate_act(P) else U << "No charges left." diff --git a/code/game/objects/items/devices/isocube.dm b/code/game/objects/items/devices/isocube.dm new file mode 100644 index 00000000..00eb5d94 --- /dev/null +++ b/code/game/objects/items/devices/isocube.dm @@ -0,0 +1,136 @@ +/obj/item/device/isocube + name = "Isocube" + icon = 'icons/obj/wizard.dmi' + icon_state = "soulstone" + item_state = "electronic" + desc = "two weeks in the isocubes." + w_class = 3 + unacidable = 1 + flags = FPRINT | TABLEPASS + slot_flags = SLOT_BELT + origin_tech = "bluespace=4;materials=4" + + + +//////////////////////////////Capturing//////////////////////////////////////////////////////// + + attack(mob/living/carbon/human/M as mob, mob/user as mob) + if(!istype(M, /mob/living/carbon/human))//If target is not a human. + return ..() + if(istype(M, /mob/living/carbon/human/dummy)) + return..() + + if(M.has_brain_worms()) //Borer stuff - RR + user << "The isocube spits out an error message: multiple lifeforms detected." + return..() + + M.attack_log += text("\[[time_stamp()]\] Has been imprisoned with [src.name] by [user.name] ([user.ckey])") + user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to imprison [M.name] ([M.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) is attemptin to imprison [M.name] ([M.ckey]) with the [src.name] (JMP)") + + isolate("VICTIM", M, user) + return + + attack_self(mob/user) + if (!in_range(src, user)) + return + user.set_machine(src) + var/dat = "Isocube
" + for(var/mob/living/carbon/human/A in src) + dat += "Prisoner: [A.name]
" + dat += {"Release Prisoner"} + dat += "
" + dat += {"Disable Prisoner"} + dat += "
" + dat += {"Enable Prisoner"} + dat += "
" + dat += {" Close"} + user << browse(dat, "window=aicard") + onclose(user, "aicard") + return + + + + + Topic(href, href_list) + var/mob/U = usr + if (!in_range(src, U)||U.machine!=src) + U << browse(null, "window=aicard") + U.unset_machine() + return + + add_fingerprint(U) + U.set_machine(src) + + switch(href_list["choice"])//Now we switch based on choice. + if ("Close") + U << browse(null, "window=aicard") + U.unset_machine() + return + + if ("Release") + for(var/mob/living/carbon/human/A in src) + A.status_flags &= ~GODMODE + A.canmove = 1 + A << "You feel a sickening lurch as the isocube dumps you out, weak and disoriented." + for(var/mob/O in viewers(U, null)) + O.show_message(text("[U] fiddles with the isocube, releasing [A]!"), 1) + A.loc = U.loc + A.weakened = 10 + A.paralysis = 0 + A.cancel_camera() + src.icon_state = "soulstone" + for(var/obj/O in src) + O.loc = U.loc + if ("Disable") + for(var/mob/living/carbon/human/A in src) + if (A.paralysis < 100) + A << "You feel a sudden, crippling agony, then darkness creeps over you." + for(var/mob/O in viewers(U, null)) + O.show_message(text("You hear an ominous crunch."), 1) + A.paralysis = 9000000 + if ("Enable") + for(var/mob/living/carbon/human/A in src) + if (A.paralysis > 10) + A << "You feel a jolt of consciousness." + for(var/mob/O in viewers(U, null)) + O.show_message(text("Something whirrs."), 1) + A.paralysis = 0 + attack_self(U) + + +/obj/item/proc/isolate(var/choice as text, var/target, var/mob/U as mob). + if("VICTIM") + var/mob/living/carbon/human/T = target + var/obj/item/device/isocube/C = src + + if(C.contents.len) + U << "\red The isocube is full!" + else if (U == T) + U << "\red The isocube's safeties prevent you from capturing yourself." + return + else + for(var/mob/O in viewers(U, null)) + O.show_message("\red [U] is trying to pull [T] into an isocube!", 1) + var/turf/p_loc = U.loc + var/turf/p_loc_m = T.loc + spawn(30) + if(!T) return + if(p_loc == U.loc && p_loc_m == T.loc) +/* var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = T + flick("dust-h", animation) + del(animation)*/ + T.loc = C //put dummy in isocube + T.status_flags |= GODMODE //So they won't die inside the stone somehow + T.canmove = 0//Can't move out of the soul stone + if (T.client) + T.cancel_camera() + C.icon_state = "soulstone2" + T << "You feel a heavy weightlessness and find yourself barely able to move. The outside world seems larger." + U << "\blue [T.real_name] has been successfully captured within the isocube. " + T.Weaken(9000000) + msg_admin_attack("[U.name] ([U.ckey]) used the [src.name] to imprison [T.name] ([T.ckey]) (JMP)") + return \ No newline at end of file diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index e175ff46..509f0533 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -98,7 +98,7 @@ if(prob(effectchance * diode.rating)) //msg_admin_attack(user, C, "shone in the eyes", object="laser pointer") - msg_admin_attack("\[[time_stamp()]\] [user.name] ([user.ckey]) used a laser pointer to blind [C]") + msg_admin_attack("[user.name] ([user.ckey]) used a laser pointer to blind [C]") //eye target check outmsg = "You blind [C] by shining [src] in their eyes." @@ -120,26 +120,26 @@ C << "A small, bright dot appears in your vision." if(1) //industrial grade eye protection - E.damage += rand(0, 2) + //E.damage += rand(0, 2) C << "Something bright flashes in the corner of your vision!" if(2) //basic eye protection (sunglasses) flick("flash", C.flash) - E.damage += rand(2, 4) + //E.damage += rand(2, 4) C << "Your eyes were blinded!" if(3) //no eye protection if(prob(10)) C.Weaken(1) flick("e_flash", C.flash) - E.damage += rand(3, 5) + E.damage += 1 C << "Your eyes were blinded!" if(4) //the effect has been worsened by something if(prob(5)) C.Weaken(1) flick("e_flash", C.flash) - E.damage += rand(5, 10) + E.damage += 2 C << "Your eyes were blinded!" else outmsg = "You fail to blind [C] by shining [src] at their eyes." @@ -155,7 +155,7 @@ S.attack_log += text("\[[time_stamp()]\] Has had a laser pointer shone in their eyes by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Shone a laser pointer in the eyes of [S.name] ([S.ckey])") - log_attack("[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [S.name] ([S.ckey])") + msg_admin_attack("[user.name] ([user.ckey]) Shone a laser pointer in the eyes of [S.name] ([S.ckey])") else outmsg = "You fail to overload [S] by shining [src] at their sensors." @@ -166,7 +166,7 @@ C.emp_act(1) outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" - msg_admin_attack("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer") + msg_admin_attack("[user.name] ([user.ckey]) EMPd a camera with a laser pointer") user.attack_log += text("\[[time_stamp()]\] [user.name] ([user.ckey]) EMPd a camera with a laser pointer") else outmsg = "You missed the lens of [C] with [src]." diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 7baa2e98..7c7a7153 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -52,6 +52,7 @@ bombers += "[key_name(user)] attached a [item] to a transfer valve." message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") + message_mods("[key_name_admin(user)] attached a [item] to a transfer valve.") log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") attacher = user nanomanager.update_uis(src) // update all UIs attached to src @@ -66,7 +67,7 @@ /obj/item/device/transfer_valve/attack_self(mob/user as mob) ui_interact(user) - + /obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) // this is the data which will be sent to the ui @@ -77,13 +78,13 @@ data["valveOpen"] = valve_open ? 1 : 0 // update the ui if it exists, returns null if no ui is passed/found - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) // when the ui is first opened this is the data it will use - ui.set_initial_data(data) + ui.set_initial_data(data) // open the new ui window ui.open() // auto update every Master Controller tick @@ -191,6 +192,7 @@ log_str += " Last touched by: [src.fingerprintslast][last_touch_info]" bombers += log_str message_admins(log_str, 0, 1) + message_mods(log_str) log_game(log_str) merge_gases() spawn(20) // In case one tank bursts diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index c0fdee0c..a35a956a 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -196,7 +196,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM M.attack_log += text("\[[time_stamp()]\] Has been burnt with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to burn [M.name] ([M.ckey])") - msg_admin_attack("[key_name(user)] burnt [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("[key_name(user)] burnt [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)]) - JMP") /obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user as mob, proximity) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index dc969588..12eb57f7 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -109,7 +109,7 @@ playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1) user.attack_log += "\[[time_stamp()]\] Defibrillated [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Defibrillated by [user.name] ([user.ckey]) with [src.name]" - msg_admin_attack("[user.name] ([user.ckey]) defibrillated [H.name] ([H.ckey]) with [src.name]" ) + msg_admin_attack("[user.name] ([user.ckey]) defibrillated [H.name] ([H.ckey]) with [src.name] - JMP" ) if(!iscarbon(user)) M.LAssailant = null else diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 39598e61..e65abf26 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -128,6 +128,7 @@ testing("Isolated block [block] injector with contents: [GetValue()]") if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") else @@ -136,6 +137,7 @@ testing("DNA injector with contents: [english_list(buf.dna.SE)]") if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human) ) message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") log_attack("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") else @@ -163,6 +165,7 @@ testing("Isolated block [block] injector with contents: [GetValue()]") if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") else @@ -171,6 +174,7 @@ testing("DNA injector with contents: [english_list(buf.dna.SE)]") if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + message_mods("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 53466e96..e05cff16 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -5,12 +5,12 @@ icon_state = "fire_extinguisher0" item_state = "fire_extinguisher" hitsound = 'sound/weapons/smash.ogg' - flags = FPRINT | USEDELAY | TABLEPASS | CONDUCT + flags = FPRINT | TABLEPASS | CONDUCT throwforce = 10 w_class = 3.0 throw_speed = 2 throw_range = 10 - force = 10 + force = 10.0 m_amt = 90 attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") var/max_water = 50 @@ -24,7 +24,7 @@ icon_state = "miniFE0" item_state = "miniFE" hitsound = null //it is much lighter, after all. - flags = FPRINT | USEDELAY | TABLEPASS + flags = FPRINT | TABLEPASS throwforce = 2 w_class = 2.0 force = 3.0 @@ -78,8 +78,12 @@ if(usr.buckled && isobj(usr.buckled) && !usr.buckled.anchored ) spawn(0) + var/obj/structure/stool/bed/chair/C = null + if(istype(usr.buckled, /obj/structure/stool/bed/chair)) + C = usr.buckled var/obj/B = usr.buckled var/movementdirection = turn(direction,180) + if(C) C.propelled = 1 B.Move(get_step(usr,movementdirection), movementdirection) sleep(1) B.Move(get_step(usr,movementdirection), movementdirection) @@ -91,6 +95,7 @@ B.Move(get_step(usr,movementdirection), movementdirection) sleep(2) B.Move(get_step(usr,movementdirection), movementdirection) + if(C) C.propelled = 0 sleep(3) B.Move(get_step(usr,movementdirection), movementdirection) sleep(3) @@ -117,18 +122,15 @@ for(var/b=0, b<5, b++) step_towards(W,my_target) if(!W) return - if(!W.reagents) return W.reagents.reaction(get_turf(W)) for(var/atom/atm in get_turf(W)) if(!W) return W.reagents.reaction(atm) - if(isliving(atm)) //For extinguishing mobs on fire - var/mob/living/M = atm - M.ExtinguishMob() if(W.loc == my_target) break sleep(2) - W.delete() +// spawn(20) + W.Del() if((istype(usr.loc, /turf/space)) || (usr.lastarea.has_gravity == 0)) user.inertia_dir = get_dir(target, user) step(user, user.inertia_dir) diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index 9e876154..2dabc2cf 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -185,7 +185,7 @@ H.attack_log += text("\[[time_stamp()]\] Has been wrapped with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to wrap [H.name] ([H.ckey])") - msg_admin_attack("[key_name(user)] used [src] to wrap [key_name(H)]") + msg_admin_attack("[key_name(user)] used [src] to wrap [key_name(H)] - JMP") else user << "\blue You need more paper." diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 7bd91a4f..6aed134a 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -54,7 +54,7 @@ C.attack_log += text("\[[time_stamp()]\] Has been handcuffed (attempt) by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Attempted to handcuff [C.name] ([C.ckey])") - msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)]") + msg_admin_attack("[key_name(user)] attempted to handcuff [key_name(C)] - JMP") var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( ) O.source = user diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 91f8e0ca..85872fd6 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -203,7 +203,7 @@ /obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan potency = newValue - force = round((5+potency/2.5), 1) + force = round((5+potency), 1) ///2.5. deadly nettles because you have earned it. /* diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 0a7e2a51..eb98d587 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -163,6 +163,7 @@ Implant Specifics:
"} if(istype(imp_in, /mob/)) var/mob/T = imp_in message_admins("Explosive implant triggered in [T] ([T.key]). (JMP) ") + message_mods("Explosive implant triggered in [T] ([T.key]). (JMP) ") log_game("Explosive implant triggered in [T] ([T.key]).") need_gib = 1 diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index cca97f3e..9599e097 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -83,8 +83,10 @@ else break - if(!success) - user.loc = pick(L) + if(user.weakened > 100)//if you are megastunned by the isocube, there is no escape + user <<"An outside force prevents you from teleporting." + else if(!success) + user.loc = pick(L) smoke.start() src.uses -= 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 7dbc5f31..bddfda17 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -88,7 +88,7 @@ user.attack_log += "\[[time_stamp()]\] Stunned [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Stunned by [user.name] ([user.ckey]) with [src.name]" - msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name]") + msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name] - JMP") playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) if(charges < 1) @@ -115,7 +115,7 @@ H.visible_message("[src], thrown by [foundmob.name], strikes [H] and stuns them!") H.attack_log += "\[[time_stamp()]\] Stunned by thrown [src.name] last touched by ([src.fingerprintslast])" - msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)]" ) + msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)] - JMP" ) /obj/item/weapon/melee/baton/emp_act(severity) switch(severity) @@ -228,7 +228,7 @@ user.attack_log += "\[[time_stamp()]\] Stunned [H.name] ([H.ckey]) with [src.name]" H.attack_log += "\[[time_stamp()]\] Stunned by [user.name] ([user.ckey]) with [src.name]" - msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name]") + msg_admin_attack("[key_name(user)] stunned [key_name(H)] with [src.name] - JMP") playsound(src.loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) if(charges < 1) @@ -256,7 +256,7 @@ H.visible_message("[src], thrown by [foundmob.name], strikes [H] and stuns them!") H.attack_log += "\[[time_stamp()]\] Stunned by thrown [src.name] last touched by ([src.fingerprintslast])" - msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)]" ) + msg_admin_attack("Flying [src.name], last touched by ([src.fingerprintslast]) stunned [key_name(H)] - JMP" ) /obj/item/weapon/melee/baton/stunrod/emp_act(severity) switch(severity) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index a5c01637..180a89ea 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -104,7 +104,7 @@ M.Weaken(5) M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey])") - msg_admin_attack("[key_name(user)] attacked [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)])") + msg_admin_attack("[key_name(user)] attacked [key_name(user)] with [src.name] (INTENT: [uppertext(user.a_intent)]) - JMP") src.add_fingerprint(user) for(var/mob/O in viewers(M)) diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index 4593bf93..a4da7142 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -77,6 +77,7 @@ src.bomb.detonate() log_admin("[user.real_name]([user.ckey]) has triggered [src.bomb] with [src].") message_admins("\red [user.real_name]([user.ckey]) has triggered [src.bomb] with [src].") + message_mods("\red [user.real_name]([user.ckey]) has triggered [src.bomb] with [src].") if("Close the lighter.") src.icon_state = "c-4detonator_0" diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index d1e94df9..9c8dd739 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -27,7 +27,7 @@ src.air_contents.volume = volume //liters src.air_contents.temperature = T20C - processing_objects.Add(src) + processing_objects.Add(src) return /obj/item/weapon/tank/Del() @@ -141,8 +141,8 @@ data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) data["valveOpen"] = using_internal ? 1 : 0 - - data["maskConnected"] = 0 + + data["maskConnected"] = 0 if(istype(loc,/mob/living/carbon)) var/mob/living/carbon/location = loc if(location.internal == src || (location.wear_mask && (location.wear_mask.flags & MASKINTERNALS))) @@ -239,6 +239,7 @@ if(pressure > TANK_FRAGMENT_PRESSURE) if(!istype(src.loc,/obj/item/device/transfer_valve)) message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") + message_mods("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") //world << "\blue[x],[y] tank is exploding: [pressure] kPa" //Give the gas a chance to build up more pressure through reacting diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index eb922967..974655df 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -260,6 +260,7 @@ tank.armed = 1 user.visible_message("[user] begins heating the [O].", "You start to heat the [O].") message_admins("[key_name_admin(user)] is attempting a welder bomb at ([loc.x],[loc.y],[loc.z]) - JMP") + message_mods("[key_name_admin(user)] is attempting a welder bomb at ([loc.x],[loc.y],[loc.z]) - JMP") if(do_after(user,100)) // var/obj/structure/reagent_dispensers/fueltank/tank = O if(tank.defuse) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 3160e681..0d831cb7 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -12,6 +12,7 @@ desc = "This is used to lie in, sleep in or strap on." icon_state = "bed" var/mob/living/buckled_mob + var/movable = 0 /obj/structure/stool/bed/psych name = "psych bed" diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index deb3a1e0..5b152839 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -3,6 +3,8 @@ desc = "You sit in this. Either by will or force." icon_state = "chair" + var/propelled = 0 // Check for fire-extinguisher-driven chairs + /obj/structure/stool/MouseDrop(atom/over_object) return @@ -115,13 +117,39 @@ /obj/structure/stool/bed/chair/office/Move() ..() if(buckled_mob) - buckled_mob.buckled = null //Temporary, so Move() succeeds. - var/moved = buckled_mob.Move(src.loc) - buckled_mob.buckled = src - if(!moved) - unbuckle() + var/mob/living/occupant = buckled_mob + occupant.buckled = null + occupant.Move(src.loc) + occupant.buckled = src + if (occupant && (src.loc != occupant.loc)) + if (propelled) + for (var/mob/O in src.loc) + if (O != occupant) + Bump(O) + else + unbuckle() handle_rotation() +/obj/structure/stool/bed/chair/office/Bump(atom/A) + ..() + if(!buckled_mob) return + + if(propelled) + var/mob/living/occupant = buckled_mob + unbuckle() + occupant.throw_at(A, 3, 2) + occupant.apply_effect(6, STUN, 0) + occupant.apply_effect(6, WEAKEN, 0) + occupant.apply_effect(6, STUTTER, 0) + playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) + if(istype(A, /mob/living)) + var/mob/living/victim = A + victim.apply_effect(6, STUN, 0) + victim.apply_effect(6, WEAKEN, 0) + victim.apply_effect(6, STUTTER, 0) + victim.take_organ_damage(10) + occupant.visible_message("[occupant] clashed into \the [A]!") + /obj/structure/stool/bed/chair/office/light icon_state = "officechair_white" diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm new file mode 100644 index 00000000..9c00ee38 --- /dev/null +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -0,0 +1,187 @@ +/obj/structure/stool/bed/chair/wheelchair + name = "wheelchair" + desc = "You sit in this. Either by will or force." + icon_state = "wheelchair" + anchored = 0 + movable = 1 + + var/driving = 0 + var/mob/living/pulling = null + var/bloodiness + + +/obj/structure/stool/bed/chair/wheelchair/handle_rotation() + overlays = null + var/image/O = image(icon = 'icons/obj/objects.dmi', icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir) + overlays += O + if(buckled_mob) + buckled_mob.dir = dir + +/obj/structure/stool/bed/chair/wheelchair/relaymove(mob/user, direction) + // Redundant check? + if(user.stat || user.stunned || user.weakened || user.paralysis || user.lying || user.restrained()) + if(user==pulling) + pulling = null + user.pulledby = null + user << "\red You lost your grip!" + return + if(buckled_mob && pulling && user == buckled_mob) + if(pulling.stat || pulling.stunned || pulling.weakened || pulling.paralysis || pulling.lying || pulling.restrained()) + pulling.pulledby = null + pulling = null + if(user.pulling && (user == pulling)) + pulling = null + user.pulledby = null + return + if(propelled) + return + if(pulling && (get_dist(src, pulling) > 1)) + pulling = null + user.pulledby = null + if(user==pulling) + return + if(pulling && (get_dir(src.loc, pulling.loc) == direction)) + user << "\red You cannot go there." + return + if(pulling && buckled_mob && (buckled_mob == user)) + user << "\red You cannot drive while being pushed." + return + + // Let's roll + driving = 1 + var/turf/T = null + //--1---Move occupant---1--// + if(buckled_mob) + buckled_mob.buckled = null + step(buckled_mob, direction) + buckled_mob.buckled = src + //--2----Move driver----2--// + if(pulling) + T = pulling.loc + if(get_dist(src, pulling) >= 1) + step(pulling, get_dir(pulling.loc, src.loc)) + //--3--Move wheelchair--3--// + step(src, direction) + if(buckled_mob) // Make sure it stays beneath the occupant + Move(buckled_mob.loc) + dir = direction + handle_rotation() + if(pulling) // Driver + if(pulling.loc == src.loc) // We moved onto the wheelchair? Revert! + pulling.loc = T + else + spawn(0) + if(get_dist(src, pulling) > 1) // We are too far away? Losing control. + pulling = null + user.pulledby = null + pulling.dir = get_dir(pulling, src) // When everything is right, face the wheelchair + if(bloodiness) + create_track() + driving = 0 + +/obj/structure/stool/bed/chair/wheelchair/Move() + ..() + if(buckled_mob) + var/mob/living/occupant = buckled_mob + if(!driving) + occupant.buckled = null + occupant.Move(src.loc) + occupant.buckled = src + if (occupant && (src.loc != occupant.loc)) + if (propelled) + for (var/mob/O in src.loc) + if (O != occupant) + Bump(O) + else + unbuckle() + if (pulling && (get_dist(src, pulling) > 1)) + pulling.pulledby = null + pulling << "\red You lost your grip!" + pulling = null + else + if (occupant && (src.loc != occupant.loc)) + src.loc = occupant.loc // Failsafe to make sure the wheelchair stays beneath the occupant after driving + handle_rotation() + +/obj/structure/stool/bed/chair/wheelchair/attack_hand(mob/user as mob) + if (pulling) + MouseDrop(usr) + else + manual_unbuckle(user) + return + +/obj/structure/stool/bed/chair/wheelchair/MouseDrop(over_object, src_location, over_location) + ..() + if(over_object == usr && in_range(src, usr)) + if(!ishuman(usr)) return + if(usr == buckled_mob) + usr << "\red You realize you are unable to push the wheelchair you sit in." + return + if(!pulling) + pulling = usr + usr.pulledby = src + if(usr.pulling) + usr.stop_pulling() + usr.dir = get_dir(usr, src) + usr << "You grip \the [name]'s handles." + else + if(usr != pulling) + for(var/mob/O in viewers(pulling, null)) + O.show_message("\red [usr] breaks [pulling]'s grip on the wheelchair.", 1) + else + usr << "You let go of \the [name]'s handles." + pulling.pulledby = null + pulling = null + return + +/obj/structure/stool/bed/chair/wheelchair/Bump(atom/A) + ..() + if(!buckled_mob) return + + if(propelled || (pulling && (pulling.a_intent == "hurt"))) + var/mob/living/occupant = buckled_mob + unbuckle() + + if (pulling && (pulling.a_intent == "hurt")) + occupant.throw_at(A, 3, 3, pulling) + else if (propelled) + occupant.throw_at(A, 3, propelled) + + occupant.apply_effect(6, STUN, 0) + occupant.apply_effect(6, WEAKEN, 0) + occupant.apply_effect(6, STUTTER, 0) + playsound(src.loc, 'sound/weapons/punch1.ogg', 50, 1, -1) + if(istype(A, /mob/living)) + var/mob/living/victim = A + victim.apply_effect(6, STUN, 0) + victim.apply_effect(6, WEAKEN, 0) + victim.apply_effect(6, STUTTER, 0) + victim.take_organ_damage(10) + if(pulling) + occupant.visible_message("[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!") + + pulling.attack_log += "\[[time_stamp()]\] Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]" + occupant.attack_log += "\[[time_stamp()]\] Thrusted into \a [A] by [pulling.name] ([pulling.ckey]) with \the [name]" + msg_admin_attack("[pulling.name] ([pulling.ckey]) has thrusted [occupant.name]'s ([occupant.ckey]) [name] into \a [A] (JMP)") + else + occupant.visible_message("[occupant] crashed into \the [A]!") + +/obj/structure/stool/bed/chair/wheelchair/proc/create_track() + var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) + var/newdir = get_dir(get_step(loc, dir), loc) + if(newdir == dir) + B.dir = newdir + else + newdir = newdir | dir + if(newdir == 3) + newdir = 1 + else if(newdir == 12) + newdir = 4 + B.dir = newdir + bloodiness-- + +/obj/structure/stool/bed/chair/wheelchair/buckle_mob(mob/M as mob, mob/user as mob) + if(M == pulling) + pulling = null + usr.pulledby = null + ..() \ No newline at end of file diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index c778ddd3..5a1d266f 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -21,7 +21,7 @@ throwpass = 1 //You can throw objects over this, despite it's density.") var/parts = /obj/item/weapon/table_parts var/flipped = 0 - var/health = 100 + var/health = 200 /obj/structure/table/proc/update_adjacent() for(var/direction in list(1,2,4,8,5,6,9,10)) @@ -311,14 +311,14 @@ if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close return 1 if (get_turf(P.original) == cover) - var/chance = 20 + var/chance = 30 if (ismob(P.original)) var/mob/M = P.original if (M.lying) - chance += 20 //Lying down lets you catch less bullets + chance += 50 //Lying down lets you catch less bullets if(flipped) if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets - chance += 20 + chance += 50 else return 1 //But only from one side if(prob(chance)) @@ -364,7 +364,7 @@ if (prob(15)) M.Weaken(5) M.apply_damage(8,def_zone = "head") visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - JMP") playsound(src.loc, 'sound/weapons/tablehit1.ogg', 50, 1) else user << "\red You need a better grip to do that!" @@ -545,7 +545,7 @@ desc = "Do not apply fire to this. Rumour says it burns easily." icon_state = "wood_table" parts = /obj/item/weapon/table_parts/wood - health = 50 + health = 100 /* * Reinforced tables */ @@ -553,7 +553,7 @@ name = "reinforced table" desc = "A version of the four legged table. It is stronger." icon_state = "reinf_table" - health = 200 + health = 400 var/status = 2 parts = /obj/item/weapon/table_parts/reinforced diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 0b5c9178..755641f4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -180,20 +180,20 @@ M.apply_damage(7) hit(10) visible_message("\red [user] slams [M] against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) against \the [src]! - JMP") if(2) if (prob(50)) M.Weaken(1) M.apply_damage(10) hit(25) visible_message("\red [user] bashes [M] against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) bashes [M.name]'s([M.ckey]) against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) bashes [M.name]'s([M.ckey]) against \the [src]! - JMP") if(3) M.Weaken(5) M.apply_damage(20) hit(50) visible_message("\red [user] crushes [M] against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) crushes [M.name]'s([M.ckey]) against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) crushes [M.name]'s([M.ckey]) against \the [src]! - JMP") return if(istype(W, /obj/item/weapon/screwdriver)) if(reinf && state >= 1) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 77268870..b798f636 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -160,7 +160,7 @@ if (prob(15)) M.Weaken(5) M.apply_damage(8,def_zone = "head") visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - JMP") // switch(rand(1,3)) // if(1) // playsound(src.loc, 'sound/weapons/genhit1.ogg', 50, 1) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index e234df64..b8da744a 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -48,7 +48,7 @@ if (prob(15)) M.Weaken(5) M.apply_damage(16,def_zone = "head") visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!") - msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]!") + msg_admin_attack("[user.name]([user.ckey]) slams [M.name]'s([M.ckey]) face against \the [src]! - JMP") // switch(rand(1,3)) // if(1) // playsound(src.loc, 'sound/weapons/genhit1.ogg', 50, 1) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 7e566fc6..3380fd58 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -11,11 +11,17 @@ var/global/floorIsLava = 0 if(R_ADMIN & C.holder.rights) C << msg +/proc/message_mods(var/msg) + msg = "MOD LOG: [msg]" + for(var/client/C in admins) + if(R_MOD & C.holder.rights && !(R_ADMIN & C.holder.rights)) + C << msg + /proc/msg_admin_attack(var/text) //Toggleable Attack Messages log_attack(text) var/rendered = "ATTACK: [text]" for(var/client/C in admins) - if(R_MOD || R_ADMIN & C.holder.rights) + if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) if(C.prefs.toggles & CHAT_ATTACKLOGS) var/msg = rendered C << msg @@ -28,14 +34,18 @@ var/global/floorIsLava = 0 set name = "Show Player Panel" set desc="Edit player (respawn, ban, heal, etc)" + if(!check_rights(R_ADMIN|R_MOD)) return + if(!M) usr << "You seem to be selecting a mob that doesn't exist anymore." return +/* if (!istype(src,/datum/admins)) src = usr.client.holder if (!istype(src,/datum/admins)) usr << "Error: you are not an admin!" return +*/ var/body = "Options for [M.key]" body += "Options panel for [M]" @@ -192,11 +202,14 @@ var/global/floorIsLava = 0 /datum/admins/proc/PlayerNotes() set category = "Admin" set name = "Player Notes" - if (!istype(src,/datum/admins)) +/* if (!istype(src,/datum/admins)) src = usr.client.holder if (!istype(src,/datum/admins)) usr << "Error: you are not an admin!" return +*/ + if(!check_rights(R_ADMIN|R_MOD)) + return PlayerNotesPage(1) /datum/admins/proc/PlayerNotesPage(page) @@ -246,7 +259,6 @@ var/global/floorIsLava = 0 if(!infos || !infos.len) return 0 else return 1 - /datum/admins/proc/show_player_info(var/key as text) set category = "Admin" set name = "Show Player Info" @@ -855,11 +867,12 @@ var/global/floorIsLava = 0 set desc="Delay the game start/end" set name="Delay" - if(!check_rights(R_SERVER|R_DEV)) return + if(!check_rights(R_SERVER|R_DEBUG)) return if (!ticker || ticker.current_state != GAME_STATE_PREGAME) ticker.delay_end = !ticker.delay_end log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) return //alert("Round end delayed", null, null, null, null, null) going = !( going ) if (!( going )) @@ -1237,6 +1250,7 @@ proc/move_alien_ship() log_admin("[key_name(usr)] winded [key_name(M)]!") message_admins("[key_name_admin(usr)] winded [key_name_admin(M)]!", 1) + message_mods("[key_name_admin(usr)] winded [key_name_admin(M)]!") // feedback_add_details("admin_verb","WIND") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! // Chop chop. return @@ -1249,4 +1263,5 @@ proc/move_alien_ship() log_admin("[key_name(usr)] unwinded [key_name(M)]!") message_admins("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1) + message_mods("[key_name_admin(usr)] unwinded [key_name_admin(M)]!", 1) return \ No newline at end of file diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 6ff00af9..e43d85ad 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,17 +1,17 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/list/admin_verbs_default = list( - /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ /client/proc/player_panel, /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ /client/proc/hide_verbs, /*hides all our adminverbs*/ /client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/ /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/ - /client/proc/check_antagonists, /*shows all antags*/ /client/proc/cmd_mentor_check_new_players // /client/proc/deadchat /*toggles deadchat on/off*/ ) var/list/admin_verbs_admin = list( + /datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/ + /client/proc/check_antagonists, /*shows all antags*/ /client/proc/alertlevels, /client/proc/cmd_admin_wind, /client/proc/cmd_admin_unwind, @@ -53,11 +53,11 @@ var/list/admin_verbs_admin = list( /client/proc/check_antagonists, /client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/ /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ - /client/proc/toggleprayers, /*toggles prayers on/off*/ // /client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/ /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ /client/proc/secrets, + /client/proc/toggleprayers, /datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/ /datum/admins/proc/togglelooc, /datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/ @@ -96,7 +96,7 @@ var/list/admin_verbs_fun = list( /client/proc/cmd_admin_dress, /client/proc/cmd_admin_gib_self, /client/proc/drop_bomb, - /client/proc/everyone_random, + /client/proc/everyone_random, /client/proc/cinematic, /client/proc/one_click_antag, /datum/admins/proc/toggle_aliens, @@ -105,6 +105,7 @@ var/list/admin_verbs_fun = list( /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/cmd_admin_add_random_ai_law, /client/proc/make_sound, + /client/proc/make_area_sound, /client/proc/toggle_random_events, /client/proc/set_ooc, /client/proc/editappear @@ -112,8 +113,6 @@ var/list/admin_verbs_fun = list( var/list/admin_verbs_dev = list( /client/proc/dsay, /client/proc/togglebuildmodeself, - /datum/admins/proc/restart, - /datum/admins/proc/delay, /client/proc/giveruntimelog, /client/proc/getruntimelog, /client/proc/cmd_admin_list_open_jobs, @@ -128,12 +127,11 @@ var/list/admin_verbs_dev = list( /client/proc/cmd_admin_delete, /client/proc/cmd_debug_del_all, /client/proc/cmd_debug_tog_aliens, + /datum/admins/proc/restart, /client/proc/air_report, /client/proc/reload_admins, /client/proc/restart_controller, /client/proc/enable_debug_verbs, - /client/proc/callproc, - /client/proc/toggleattacklogs, /client/proc/toggledebuglogs, /client/proc/SDQL_query, /client/proc/SDQL2_query, @@ -168,8 +166,10 @@ var/list/admin_verbs_server = list( /client/proc/check_customitem_activity ) var/list/admin_verbs_debug = list( - /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/ + /client/proc/getruntimelog, /*allows us to access runtime logs to somebody*/ /client/proc/cmd_admin_list_open_jobs, + /datum/admins/proc/restart, + /datum/admins/proc/delay, /client/proc/Debug2, /client/proc/kill_air, /client/proc/ZASSettings, @@ -188,7 +188,6 @@ var/list/admin_verbs_debug = list( /client/proc/toggledebuglogs, /client/proc/SDQL_query, /client/proc/SDQL2_query, - /client/proc/cmd_dev_bst, /client/proc/cmd_dev_reset_gravity ) var/list/admin_verbs_possess = list( @@ -240,6 +239,7 @@ var/list/admin_verbs_hideable = list( /client/proc/cmd_admin_add_random_ai_law, /client/proc/cmd_admin_create_centcom_report, /client/proc/make_sound, + /client/proc/make_area_sound, /client/proc/toggle_random_events, /client/proc/cmd_admin_add_random_ai_law, /client/proc/Set_Holiday, @@ -274,6 +274,8 @@ var/list/admin_verbs_hideable = list( /proc/release ) var/list/admin_verbs_mod = list( + /client/proc/check_antagonists, /*shows all antags*/ + /client/proc/cmd_admin_check_contents, /client/proc/cmd_admin_wind, /client/proc/cmd_admin_unwind, /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ @@ -281,15 +283,18 @@ var/list/admin_verbs_mod = list( /client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game.*/ /client/proc/toggleattacklogs, /client/proc/toggledebuglogs, + /client/proc/toggleprayers, /datum/admins/proc/PlayerNotes, /client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/ /client/proc/cmd_mod_say, + /client/proc/check_ai_laws, /datum/admins/proc/show_player_info, /client/proc/player_panel_new, /client/proc/dsay, /datum/admins/proc/show_skills, /datum/admins/proc/show_player_panel, /client/proc/check_antagonists, + /datum/admins/proc/adjump, /client/proc/jobbans, /client/proc/cmd_admin_subtle_message /*send an message to somebody as a 'voice in their head'*/ ) @@ -520,7 +525,7 @@ var/list/admin_verbs_mod = list( #define AUTOBANTIME 10 /client/proc/warn(warned_ckey) - if(!check_rights(R_ADMIN)) return + if(!check_rights(R_ADMIN|R_MOD)) return if(!warned_ckey || !istext(warned_ckey)) return if(warned_ckey in admin_datums) @@ -540,18 +545,22 @@ var/list/admin_verbs_mod = list( ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.") if(C) message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.") + message_mods("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban.") C << "You have been autobanned due to a warning by [ckey].
This is a temporary ban, it will be removed in [AUTOBANTIME] minutes." del(C) else message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.") + message_mods("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.") AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME) feedback_inc("ban_warn",1) else if(C) C << "You have been formally warned by an administrator.
Further warnings will result in an autoban.
" message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.") + message_mods("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.") else message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.") + message_mods("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.") feedback_add_details("admin_verb","WARN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -658,6 +667,23 @@ var/list/admin_verbs_mod = list( message_admins("\blue [key_name_admin(usr)] made [O] at [O.x], [O.y], [O.z]. make a sound", 1) feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/make_area_sound(var/turf/T in world) // -- TLE + set category = "Special Verbs" + set name = "Make Area Sound" + set desc = "Display a message to everyone in the area (Experimental)" + if(T) + var/message = input("What do you want the message to be?", "Make Area Sound (Experimental)") as text|null + if(!message) + return + var/area/A = get_area(T) + if(!A == A.master) + A = A.master + for(var/area/SubA in A.related) + for (var/mob/V in SubA) + V.show_message(message, 2) + log_admin("[key_name(usr)] made [A.name] make a sound") + message_admins("\blue [key_name_admin(usr)] made [A.name] make a sound", 1) + feedback_add_details("admin_verb","MAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/togglebuildmodeself() set name = "Toggle Build Mode Self" @@ -797,6 +823,9 @@ var/list/admin_verbs_mod = list( /client/proc/playernotes() set name = "Show Player Info" set category = "Admin" + if(!check_rights(R_ADMIN|R_MOD)) + return + if(holder) holder.PlayerNotes() return diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 33d99f4f..13d06c1a 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -323,7 +323,13 @@ if (!usr.client.holder) return var/dat = "Player Menu" - dat += "" + dat += "
NameReal NameAssigned JobKeyOptionsPMTraitor?
" + + if(check_rights(R_ADMIN|R_MOD, 0)) + dat += "" + else + dat += "" + //add to this if wanting to add back in IP checking //add if you want to know their ip to the lists below var/list/mobs = sortmobs() @@ -364,13 +370,16 @@ "} - switch(is_special_character(M)) - if(0) - dat += {""} - if(1) - dat += {""} - if(2) - dat += {""} + if(!check_rights(R_ADMIN|R_MOD, 0)) + dat += {""} + else + switch(is_special_character(M)) + if(0) + dat += {""} + if(1) + dat += {""} + if(2) + dat += {""} dat += "
NameReal NameAssigned JobKeyOptionsPMTraitor?
View Var's
IP:(IP: [M.lastKnownIP])X PMTraitor?Traitor?Traitor?VVTraitor?Traitor?Traitor?
" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5779bc7f..a4879a4d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -48,6 +48,10 @@ log_admin("[key_name(usr)] has spawned vox raiders.") if(!src.makeVoxRaiders()) usr << "\red Unfortunately there weren't enough candidates available." + if("12") + log_admin("[key_name(usr)] has spawned a vampire.") + if(!src.makeVampire()) + usr << "\red Unfortunately there weren't enough candidates available." else if(href_list["dbsearchckey"] || href_list["dbsearchadmin"]) var/adminckey = href_list["dbsearchadmin"] var/playerckey = href_list["dbsearchckey"] @@ -248,6 +252,7 @@ ticker.delay_end = !ticker.delay_end log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") message_admins("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].", 1) + message_mods("\blue [key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].") href_list["secretsadmin"] = "check_antagonist" else if(href_list["simplemake"]) @@ -1470,6 +1475,20 @@ log_admin("[src.owner] replied to [key_name(H)]'s Syndicate message with the message [input].") H << "You hear something crackle in your headset for a moment before a voice speaks. \"Please stand by for a message from your benefactor. Message as follows, agent. \"[input]\" Message ends.\"" + else if(href_list["CentcommAIReply"]) + var/mob/living/silicon/ai/H = locate(href_list["CentcommAIReply"]) + if(!istype(H)) + usr << "This can only be used on instances of type /mob/living/silicon" + return + + var/input = input(src.owner, "Please enter a message to reply to [key_name(H)] via encripted.","Outgoing message from Central Command", "") + if(!input) return + + src.owner << "You sent [input] to [H] via a secure channel." + log_admin("[src.owner] replied to [key_name(H)]'s Centcomm message with the message [input].") + message_admins("[src.owner] replied to [key_name(H)]'s Centcom message with: \"[input]\"") + H << "An encripted connection was made and a file was uploaded to your systems. \"Please stand by for a message from Central Command. Message as follows. \"[input]\" Message ends.\"" + else if(href_list["CentcommFaxView"]) var/info = locate(href_list["CentcommFaxView"]) @@ -1510,6 +1529,7 @@ src.owner << "Message reply to transmitted successfully." log_admin("[key_name(src.owner)] replied to a fax message from [key_name(H)]: [input]") message_admins("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]", 1) + message_mods("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]") else if(href_list["jumpto"]) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 2f6d1f81..c5a17f72 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -33,7 +33,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!msg) return var/original_msg = msg - + //explode the input msg into a list var/list/msglist = text2list(msg, " ") @@ -94,9 +94,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," msg = "\blue HELP: [get_options_bar(mob, 2, 1, 1)][ai_found ? " (CL)" : ""]: [msg]" //send this msg to all admins + var/admin_number_present = 0 var/admin_number_afk = 0 for(var/client/X in admins) if((R_ADMIN|R_MOD) & X.holder.rights) + admin_number_present++ if(X.is_afk()) admin_number_afk++ if(X.prefs.toggles & SOUND_ADMINHELP) @@ -106,7 +108,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," //show it to the person adminhelping too src << "PM to-Admins: [original_msg]" - var/admin_number_present = admins.len - admin_number_afk + admin_number_present = (admin_number_present - admin_number_afk) log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.") if(admin_number_present <= 0) if(!admin_number_afk) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 64c2a887..c37fa1dc 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -31,7 +31,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that set category = "Debug" set name = "Advanced ProcCall" - if(!check_rights(R_DEBUG|R_DEV)) return + if(!check_rights(R_DEBUG)) return spawn(0) var/target = null @@ -436,7 +436,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that GLOBAL_RADIO_TYPE = !GLOBAL_RADIO_TYPE // toggle log_admin("[key_name(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].") message_admins("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0) - msg_scopes("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 0) + msg_scopes("[key_name_admin(src)] has turned the experimental radio system [GLOBAL_RADIO_TYPE ? "on" : "off"].", 1) feedback_add_details("admin_verb","SRM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_areatest() @@ -1103,11 +1103,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return /client/proc/startSinglo() - set category = "Debug" set name = "Start Singularity" set desc = "Sets up the singularity and all machines to get power flowing through the station" + if(!check_rights(R_DEBUG)) return + if(alert("Are you sure? This will start up the engine. Should only be used during debug!",,"Yes","No") != "Yes") return diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index ca58c10d..093d0bd5 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -144,7 +144,7 @@ var/list/debug_verbs = list ( ,/client/proc/splash ,/client/proc/cmd_admin_areatest ,/client/proc/cmd_admin_rejuvenate - ,/datum/admins/proc/show_traitor_panel +// ,/datum/admins/proc/show_traitor_panel //What has this got to do with mapping ,/client/proc/print_jobban_old ,/client/proc/print_jobban_old_filter ,/client/proc/forceEvent diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 2bf70822..570745e2 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -264,6 +264,12 @@ var/list/forbidden_varedit_object_types = list( if("marked datum") L[L.Find(variable)] = holder.marked_datum +//Runtimes >_< List's are like organised messes. +//This worked the other day. +// world.log << "### VarEdit by [src]: [variable]=[html_encode("[L[L.Find(variable)]]")]" +// log_admin("[key_name(src)] modified [variable] to [L[L.Find(variable)]]") +// message_admins("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1) +// msg_scopes("[key_name_admin(src)] modified [variable] to [L[L.Find(variable)]]", 1) // Tell dev's to but not log twice /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) if(!check_rights(R_VAREDIT|R_DEV)) return @@ -498,4 +504,4 @@ var/list/forbidden_varedit_object_types = list( world.log << "### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]" log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]") message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) - msg_scopes("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) // Tell dev's to but look at the logs + msg_scopes("[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]", 1) // Tell dev's to but not log twice diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 1bd128a8..65de9a41 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -18,6 +18,7 @@ client/proc/one_click_antag() Make Malf AI
Make Wizard (Requires Ghosts)
Make Vox Raiders (Requires Ghosts)
+ Make Vampire
"} /* These dont work just yet Ninja, aliens and deathsquad I have not looked into yet @@ -100,9 +101,10 @@ client/proc/one_click_antag() if(!applicant.stat) if(applicant.mind) if (!applicant.mind.special_role) - if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate")) - if(!(applicant.job in temp.restricted_jobs)) - candidates += applicant + if(applicant.species.name != "Machine") + if(!jobban_isbanned(applicant, "changeling") && !jobban_isbanned(applicant, "Syndicate")) + if(!(applicant.job in temp.restricted_jobs)) + candidates += applicant if(candidates.len) var/numChanglings = min(candidates.len, 3) @@ -520,4 +522,35 @@ client/proc/one_click_antag() ticker.mode.traitors += new_vox.mind new_vox.equip_vox_raider() - return new_vox \ No newline at end of file + return new_vox + +/datum/admins/proc/makeVampire() + + var/datum/game_mode/vampire/temp = new + if(config.protect_roles_from_antagonist) + temp.restricted_jobs += temp.protected_jobs + + var/list/mob/living/carbon/human/candidates = list() + var/mob/living/carbon/human/H = null + + for(var/mob/living/carbon/human/applicant in player_list) + if(applicant.client.prefs.be_special & BE_VAMPIRE) + if(!applicant.stat) + if(applicant.mind) + if (!applicant.mind.special_role) + if(applicant.species.name != "Machine") + if(!jobban_isbanned(applicant, "vampire") && !jobban_isbanned(applicant, "Syndicate")) + if(!(applicant.job in temp.restricted_jobs)) + candidates += applicant + + if(candidates.len) + var/numVampires = min(candidates.len, 3) + + for(var/i = 0, i[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + if(silicon) + msg = "\blue CENTCOMM(A.L.I.C.E.):[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" + else + msg = "\blue CENTCOMM[iamessage ? " IA" : ""]:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" + for(var/client/C in admins) + if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) + C << msg /proc/Syndicate_announce(var/text , var/mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue SYNDICATE:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + for(var/client/C in admins) + if((R_ADMIN & C.holder.rights) || (R_MOD & C.holder.rights)) + C << msg \ No newline at end of file diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 303b1140..7d4e05f9 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -46,6 +46,7 @@ status = 1 bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") + message_mods("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") user << "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited." else status = 0 diff --git a/code/modules/aurora/weldbackpack.dm b/code/modules/aurora/weldbackpack.dm index 1bbedce2..7d7c9d61 100644 --- a/code/modules/aurora/weldbackpack.dm +++ b/code/modules/aurora/weldbackpack.dm @@ -18,6 +18,7 @@ var/obj/item/weapon/weldingtool/T = W if(T.welding & prob(50)) message_admins("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - JMP") + message_mods("[key_name_admin(user)] triggered a welderpack explosion at ([loc.x],[loc.y],[loc.z]) - JMP") log_game("[key_name(user)] triggered a fueltank explosion.") user << "\red That was stupid of you." explosion(get_turf(src),-1,0,2) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index b3cdba60..378aed54 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -54,7 +54,7 @@ return cmd_admin_irc_pm() return - + //Logs all hrefs @@ -155,6 +155,12 @@ if(holder) add_admin_verbs() admin_memo_show() + if(!ooc_allowed) + src << "OOC is Disabled" + if(!looc_allowed) + src << "LOOC is Disabled" + if(!dsay_allowed) + src << "Deadchat is Disabled" log_client_to_db() @@ -255,7 +261,7 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() // preload_vox() //Causes long delays with initial start window and subsequent windows when first logged in. - + getFiles( 'html/search.js', 'html/panels.css', diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a5375661..f2a67218 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1401,6 +1401,17 @@ datum/preferences else continue + // Wheelchair necessary? + var/datum/organ/external/l_foot = character.get_organ("l_foot") + var/datum/organ/external/r_foot = character.get_organ("r_foot") + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + var/obj/structure/stool/bed/chair/wheelchair/W = new /obj/structure/stool/bed/chair/wheelchair (character.loc) + character.buckled = W + character.update_canmove() + W.dir = character.dir + W.buckled_mob = character + W.add_fingerprint(character) + if(underwear > underwear_m.len || underwear < 1) underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES character.underwear = underwear diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index cbea8c1f..6ae0ec5c 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -25,7 +25,7 @@ proc/populate_gear_list() path = /obj/item/weapon/dice/d20 cost = 1 -/datum/gear/dice +/datum/gear/wallet display_name = "wallet" path = /obj/item/weapon/storage/wallet cost = 2 @@ -41,6 +41,51 @@ proc/populate_gear_list() path = /obj/item/weapon/cane cost = 2 +/datum/gear/briefcase + display_name = "briefcase" + path = /obj/item/weapon/storage/briefcase + cost = 2 + +/datum/gear/securebriefcase + display_name = "secure briefcase" + path = /obj/item/weapon/storage/secure/briefcase + cost = 3 + +/datum/gear/zippolighter + display_name = "zippo lighter" + path = /obj/item/weapon/lighter/zippo + cost = 1 + +/datum/gear/recorder + display_name = "universal recorder" + path = /obj/item/device/taperecorder + cost = 2 + +/datum/gear/camera + display_name = "camera" + path = /obj/item/device/camera + cost = 1 + +/datum/gear/clipboard + display_name = "clipboard" + path = /obj/item/weapon/clipboard + cost = 1 + +/datum/gear/redpen + display_name = "red pen" + path = /obj/item/weapon/pen/red + cost = 1 + +/datum/gear/bluepen + display_name = "blue pen" + path = /obj/item/weapon/pen/blue + cost = 1 + +/datum/gear/flask + display_name = "flask" + path = /obj/item/weapon/reagent_containers/food/drinks/flask/barflask + cost = 2 + /datum/gear/tie_horrible display_name = "horrible tie" path = /obj/item/clothing/tie/horrible @@ -395,12 +440,6 @@ proc/populate_gear_list() // slot = slot_w_uniform cost = 3 -/datum/gear/exec_suit - display_name = "executive suit" - path = /obj/item/clothing/under/suit_jacket/really_black -// slot = slot_w_uniform - cost = 3 - /datum/gear/oldmansuit display_name = "old man suit" path = /obj/item/clothing/under/lawyer/oldman @@ -423,10 +462,16 @@ proc/populate_gear_list() /datum/gear/armpit display_name = "shoulder holster" -// path = /obj/item/clothing/tie/holster/armpit + path = /obj/item/clothing/tie/holster/armpit cost = 3 allowed_roles = list("Captain", "Head of Personnel", "Security Officer", "Head of Security") + +/datum/gear/normal_beret + display_name = "beret" + path = /obj/item/clothing/head/beret + cost = 3 + /datum/gear/sec_beret display_name = "security beret" path = /obj/item/clothing/head/beret/sec diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index 381259b8..9af5880e 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -390,14 +390,14 @@ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding." icon_state = "rig0-medical" item_state = "medical_helm" - species_restricted = list("tajara") + species_restricted = list("Tajaran") /obj/item/clothing/head/helmet/space/rig/medical/unathi name = "medical hardsuit helmet" desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding." icon_state = "rig0-medical" item_state = "medical_helm" - species_restricted = list("unathi") + species_restricted = list("Unathi") /obj/item/clothing/head/helmet/space/rig/medical/skrell name = "medical hardsuit helmet" diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 9d88a467..4f101779 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -59,10 +59,11 @@ var/scheduledEvent = null set name = "Trigger Event (Debug Only)" set category = "Debug" + if(!check_rights(R_DEBUG)) return + if(!holder) return if(ispath(type)) new type message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) - msg_scopes("[key_name_admin(usr)] has triggered an event. ([type])", 0) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 80a01ba5..49554154 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -76,7 +76,9 @@ if(hard_to_hear) message = stars(message) - var/speaker_name = speaker.name + var/speaker_name + if(speaker) + speaker_name = speaker.name if(vname) speaker_name = vname diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 9d9f1145..844d239e 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -131,13 +131,15 @@ //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") + msg_admin_attack("[M.name] ([M.ckey]) bit [src.name] ([src.ckey]) in the neck - JMP") M.handle_bloodsucking(src) +// var/datum/organ/external/affecting = get_organ(src.zone_sel.selecting) +// affecting.take_damage(10,0,1,0,"dual puncture marks") //this does not work and causes runtimes. return //end vampire codes M.attack_log += text("\[[time_stamp()]\] [pick(attack.attack_verb)]ed [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] Has been [pick(attack.attack_verb)]ed by [M.name] ([M.ckey])") - msg_admin_attack("[key_name(M)] [pick(attack.attack_verb)]ed [key_name(src)]") + msg_admin_attack("[key_name(M)] [pick(attack.attack_verb)]ed [key_name(src)] - JMP") var/damage = rand(0, 5)//BS12 EDIT if(!damage) @@ -168,7 +170,7 @@ M.attack_log += text("\[[time_stamp()]\] Disarmed [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey])") - msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey])") + msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey]) - JMP") if(w_uniform) w_uniform.add_fingerprint(M) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 60c44fe3..5bf36827 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -22,17 +22,29 @@ if(wear_suit) tally += wear_suit.slowdown - if(shoes) - tally += shoes.slowdown - for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg")) - var/datum/organ/external/E = get_organ(organ_name) - if(!E || (E.status & ORGAN_DESTROYED)) - tally += 4 - if(E.status & ORGAN_SPLINTED) - tally += 0.5 - else if(E.status & ORGAN_BROKEN) - tally += 1.5 + if(!buckled || (buckled && !istype(buckled, /obj/structure/stool/bed/chair/wheelchair))) + if(shoes) + tally += shoes.slowdown + + for(var/organ_name in list("l_foot","r_foot","l_leg","r_leg")) + var/datum/organ/external/E = get_organ(organ_name) + if(!E || (E.status & ORGAN_DESTROYED)) + tally += 4 + if(E.status & ORGAN_SPLINTED) + tally += 0.5 + else if(E.status & ORGAN_BROKEN) + tally += 1.5 + + if(buckled && istype(buckled, /obj/structure/stool/bed/chair/wheelchair)) + for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm")) + var/datum/organ/external/E = get_organ(organ_name) + if(!E || (E.status & ORGAN_DESTROYED)) + tally += 4 + if(E.status & ORGAN_SPLINTED) + tally += 0.5 + else if(E.status & ORGAN_BROKEN) + tally += 1.5 if(shock_stage >= 10) tally += 3 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 1f5cce5f..3839ee2e 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -237,7 +237,7 @@ handled = 1 if((HULK in mutations) && health >= 25 && length(message)) - message = "[uppertext(message)]!!!" + //message = "[uppertext(message)]!!!" //this is really irritating. let's not. verb = pick("yells","roars","hollers") handled = 1 if(slurring) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4b684828..00c72af6 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -747,12 +747,12 @@ var/list/ai_list = list() if(centcomm_message_cooldown) usr << "\red Arrays recycling. Please stand by." return - var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 30 second delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response. There is a 10 minute delay before you may send another message, be clear, full and concise.", "To abort, send an empty message.", "") if(!input || !(usr in view(1,src))) return - Centcomm_announce(input, usr) + Centcomm_announce(input, usr, 1) usr << "\blue Message transmitted." log_say("[key_name(usr)] has made an IA Centcomm announcement: [input]") centcomm_message_cooldown = 1 - spawn(300)//10 minute cooldown + spawn(6000)//10 minute cooldown centcomm_message_cooldown = 0 diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 52b59873..d95f9c19 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -42,6 +42,7 @@ emergency_shuttle.incall(2) log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.") message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1) + message_mods("All the AIs, comm consoles and boards are destroyed. Shuttle called.") captain_announce("The emergency shuttle has been called. It will arrive in [round(emergency_shuttle.timeleft()/60)] minutes.") world << sound('sound/AI/shuttlecalled.ogg') diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 82ee8c50..73727f8e 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -90,6 +90,7 @@ if(D.stat != 2) usr << "\red You issue a kill command for the unfortunate drone." message_admins("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") + message_mods("[key_name_admin(usr)] issued kill order for drone [key_name_admin(D)] from control console.") log_game("[key_name(usr)] issued kill order for [key_name(src)] from control console.") D.shut_down() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 407ef126..16a3b62a 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -731,6 +731,7 @@ connected_ai = null user << "You emag [src]'s interface." message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") + message_mods("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") clear_supplied_laws() clear_inherent_laws() diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 32e38ce9..5487e317 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -13,11 +13,11 @@ response_disarm = "gently pushes aside the" response_harm = "hits the" speed = 4 - maxHealth = 70 - health = 70 + maxHealth = 45 + health = 45 harm_intent_damage = 8 - melee_damage_lower = 15 + melee_damage_lower = 10 melee_damage_upper = 15 attacktext = "bites" attack_sound = 'sound/weapons/bite.ogg' diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 342dde47..385885bd 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -18,9 +18,11 @@ if(matches) if(M.client) message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].", 1) + message_mods("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)].") log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].") else message_admins("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ", 1) + message_mods("Notice: [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). ") log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") /mob/Login() @@ -56,4 +58,4 @@ if(H.species && H.species.abilities) client.verbs |= H.species.abilities - nanomanager.send_resources(client) + nanomanager.send_resources(client) \ No newline at end of file diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 2460285a..77cfef8b 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -7,6 +7,7 @@ var/admins_number = admins.len message_admins("Admin logout: [key_name(src)]") + message_mods("Staff logout: [key_name(src)]") if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell. send2adminirc("[key_name(src)] logged out - no more admins online.") ..() diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index fcaf9888..9c9656d6 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -137,7 +137,7 @@ affecting.loc = assailant.loc affecting.attack_log += "\[[time_stamp()]\] Has had their neck grabbed by [assailant.name] ([assailant.ckey])" assailant.attack_log += "\[[time_stamp()]\] Grabbed the neck of [affecting.name] ([affecting.ckey])" - msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)]") + msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)] - JMP") hud.icon_state = "disarm/kill" hud.name = "disarm/kill" else @@ -158,7 +158,7 @@ assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!") affecting.attack_log += "\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])" assailant.attack_log += "\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])" - msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]") + msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)] - JMP") assailant.next_move = world.time + 10 affecting.losebreath += 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 82dead6f..c3537785 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -200,10 +200,14 @@ if(Process_Grab()) return - if(mob.buckled) //if we're buckled to something, tell it we moved. - return mob.buckled.relaymove(mob, direct) +// if(mob.buckled) //if we're buckled to something, tell it we moved. +// return mob.buckled.relaymove(mob, direct) - if(!mob.canmove) return +// if(!mob.canmove) return + + if(!mob.canmove) + if (mob.buckled && (istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair))) // Exception for wheelchairs + else return //if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV)) // if(!mob.Process_Spacemove(0)) return 0 @@ -254,8 +258,20 @@ var/tickcomp = ((1/(world.tick_lag))*1.3) move_delay = move_delay + tickcomp - - + if(mob.pulledby || mob.buckled) // Wheelchair driving! + if(istype(mob.loc, /turf/space)) + return // No wheelchair driving in space + if(istype(mob.pulledby, /obj/structure/stool/bed/chair/wheelchair)) + return mob.pulledby.relaymove(mob, direct) + else if(istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair)) + if(ishuman(mob.buckled)) + var/mob/living/carbon/human/driver = mob.buckled + var/datum/organ/external/l_hand = driver.get_organ("l_hand") + var/datum/organ/external/r_hand = driver.get_organ("r_hand") + if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED))) + return // No hands to drive your chair? Tough luck! + move_delay += 2 + return mob.buckled.relaymove(mob,direct) //We are now going to move moving = 1 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 29ea9173..45a1ee4f 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -293,6 +293,10 @@ EquipCustomItems(character) character.loc = pick(latejoin) character.lastarea = get_area(loc) + // Moving wheelchair if they have one + if(character.buckled && istype(character.buckled, /obj/structure/stool/bed/chair/wheelchair)) + character.buckled.loc = character.loc + character.buckled.dir = character.dir ticker.mode.latespawn(character) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 03fddfb8..1d374f73 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -82,7 +82,8 @@ rigged = 1 log_admin("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") - message_admins("LOG: [user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") + message_admins("[user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") + message_mods("[user.name] ([user.ckey]) injected a power cell with plasma, rigging it to explode.") S.reagents.clear_reagents() @@ -108,7 +109,8 @@ //explosion(T, 0, 1, 2, 2) log_admin("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") - message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]") + message_admins("Rigged power cell explosion, last touched by [fingerprintslast]") + message_mods("Rigged power cell explosion, last touched by [fingerprintslast]") explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 357f3587..2197fc5c 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -287,7 +287,8 @@ if(status == LIGHT_OK && trigger) log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]") - message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]") + message_admins("Rigged light explosion, last touched by [fingerprintslast]") + message_mods("Rigged light explosion, last touched by [fingerprintslast]") explode() else if( prob( min(60, switchcount*switchcount*0.01) ) ) @@ -365,7 +366,8 @@ if(on && rigged) log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]") - message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]") + message_admins("Rigged light explosion, last touched by [fingerprintslast]") + message_mods("Rigged light explosion, last touched by [fingerprintslast]") explode() else @@ -723,7 +725,8 @@ if(S.reagents.has_reagent("plasma", 5)) log_admin("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") - message_admins("LOG: [user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") + message_admins("[user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") + message_mods("[user.name] ([user.ckey]) injected a light with plasma, rigging it to explode.") rigged = 1 diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index cbacdd7b..0a22877d 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -41,6 +41,7 @@ /obj/machinery/power/emitter/Del() message_admins("Emitter deleted at ([x],[y],[z] - JMP)",0,1) + message_mods("Emitter deleted at ([x],[y],[z] - JMP)",0,1) log_game("Emitter deleted at ([x],[y],[z])") investigate_log("deleted at ([x],[y],[z])","singulo") ..() @@ -63,6 +64,7 @@ src.active = 0 user << "You turn off the [src]." message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) + message_mods("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) log_game("Emitter turned off by [user.ckey]([user]) in ([x],[y],[z])") investigate_log("turned off by [user.key]","singulo") else @@ -71,6 +73,7 @@ src.shot_number = 0 src.fire_delay = 100 message_admins("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) + message_mods("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1) log_game("Emitter turned on by [user.ckey]([user]) in ([x],[y],[z])") investigate_log("turned on by [user.key]","singulo") update_icon() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 31f32143..b4289730 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -350,6 +350,7 @@ field_generator power level display if(O.last_warning && temp) if((world.time - O.last_warning) > 50) //to stop message-spam temp = 0 + message_mods("A singulo exists and a containment field has failed.") message_admins("A singulo exists and a containment field has failed.",1) investigate_log("has failed whilst a singulo exists.","singulo") O.last_warning = world.time diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 85cd68cd..cdc4013d 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -87,9 +87,9 @@ if(href_list["togglep"]) src.toggle_power() investigate_log("turned [active?"ON":"OFF"] by [usr.key]","singulo") - if (active) - message_admins("PA Control Computer turned ON by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) - log_game("PA Control Computer turned ON by [usr.ckey]([usr]) in ([x],[y],[z])") + message_admins("PA Control Computer turned [active?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) + message_mods("PA Control Computer turned [active?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)") + log_game("PA Control Computer turned [active?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])") else if(href_list["scan"]) src.part_scan() else if(href_list["strengthup"]) @@ -98,6 +98,7 @@ strength = 2 else message_admins("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) + message_mods("PA Control Computer increased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)") log_game("PA Control Computer increased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])") investigate_log("increased to [strength] by [usr.key]","singulo") for(var/obj/structure/particle_accelerator/part in connected_parts) @@ -109,6 +110,9 @@ if(strength < 0) strength = 0 else + message_admins("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1) + message_mods("PA Control Computer decreased to [strength] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)") + log_game("PA Control Computer decreased to [strength] by [usr.ckey]([usr]) in ([x],[y],[z])") investigate_log("decreased to [strength] by [usr.key]","singulo") for(var/obj/structure/particle_accelerator/part in connected_parts) part.strength = strength diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index ba7bc25d..010bcd61 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -102,7 +102,9 @@ var/global/list/uneatable = list( /obj/machinery/singularity/proc/admin_investigate_setup() last_warning = world.time var/count = locate(/obj/machinery/containment_field) in orange(30, src) - if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1) + if(!count) + message_mods("A singulo has been created without containment fields active ([x],[y],[z])") + message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1) investigate_log("was created. [count?"":"No containment fields were active"]","singulo") /obj/machinery/singularity/proc/dissipate() @@ -166,6 +168,10 @@ var/global/list/uneatable = list( dissipate_delay = 10 dissipate_track = 0 dissipate_strength = 10 + investigate_log("turned to a stage 4","singulo") + message_mods("Singluo is at stage 4 ([x],[y],[z] - JMP)") + message_admins("Singluo is at stage 4 ([x],[y],[z] - JMP)",0,1) + log_game("Singluo turned to a stage 4 ([x],[y],[z])") if(9)//this one also lacks a check for gens because it eats everything current_size = 9 icon = 'icons/effects/288x288.dmi' diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index bda822eb..ebac699d 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -9,6 +9,7 @@ var/cell_type = "/obj/item/weapon/cell" var/projectile_type = "/obj/item/projectile/beam/practice" var/modifystate + rangedrop = -5 // energy weapons more accurate than bulletweapons. isHandgun() return 0 diff --git a/code/modules/projectiles/guns/energy/erifles.dm b/code/modules/projectiles/guns/energy/erifles.dm index 9fda55e1..e0899974 100644 --- a/code/modules/projectiles/guns/energy/erifles.dm +++ b/code/modules/projectiles/guns/energy/erifles.dm @@ -135,7 +135,7 @@ Commenting out right now, due to a lack of sprites existing. I hate on-mob weapo fire_delay_unwielded = 105 //3x difference, let's be an arse about this, and push the issue var/zoom = 0 - accuracy = -90 + accuracy = -110 rangedrop = -5 // fully accurate up to first 10 tiles. the last 4 zoomed tiles you are on your /obj/item/weapon/gun/energy/rifle/sniperrifle/dropped(mob/user) @@ -210,7 +210,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. slot_flags = SLOT_BACK //Just realized... Going to need A LOT more on-back sprites now... FECK... var/mode = 2 fire_delay_wielded = 8 - fire_delay_unwielded = 75 + fire_delay_unwielded = 24 // attack_self(mob/living/user as mob) //Let's do some magical things, make this a verb, yes? diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm index 6807b113..7b218704 100644 --- a/code/modules/projectiles/guns/energy/modular.dm +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -58,8 +58,8 @@ desc = "A basic, modular laser pistol." icon_state = "modpistolopen" open = 1 - w_class = 2 - upgradepointtotal = 16 + w_class = 3 // leave it at three until protorifle is implemented. then severely nerf pistol points. + upgradepointtotal = 16 //current protopistol is at protorifle point totals. /obj/item/weapon/gun/energy/laser/modular/pistol/advanced //better version of the pistol name = "advanced protopistol" @@ -310,16 +310,16 @@ accuracy = 30 //positive. subtracts to 0 accuracy base, 30 if aimed. fully accurate up to two tiles *if aimed*, -15% per tile after canzoom = 0 else if(targetmod.rating == 1) - rangedrop = 5 + rangedrop = 0 accuracy = -30 //standard accuracy. standard gun. canzoom = 0 else if(targetmod.rating == 2) - rangedrop = 5 + rangedrop = 0 accuracy = -60 //Fully accurate up to 6 tiles aimed. 15% drop per tile after that for ~-120% accuracy at 14 tiles. If you want to snipe things, get phasic. canzoom = 1 //advanced and up scanning modules let you zoom in. good luck hitting without phasic though pal. good luck. else if(targetmod.rating == 3) rangedrop = -5 //Accurate aimed up to 12 tiles. 20% miss at 14. 9 tiles and 50% miss at 14 without aiming. - accuracy = -90 //If you're paying a premium for accuracy, you can have accuracy. + accuracy = -110 //If you're paying a premium for accuracy, you can have accuracy. canzoom = 1 if(!powermod) diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm index a1575b93..bcf183cf 100644 --- a/code/modules/projectiles/guns/projectile/rocket.dm +++ b/code/modules/projectiles/guns/projectile/rocket.dm @@ -45,6 +45,7 @@ M.primed = 1 M.throw_at(target, missile_range, missile_speed) message_admins("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).") + message_mods("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).") log_game("[key_name_admin(user)] used a rocket launcher ([src.name]).") rockets -= I del(I) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index ca3e127d..e57d13e6 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -94,7 +94,7 @@ if (daddy.target && original in daddy.target) //As opposed to no-delay pew pew miss_modifier += -30 def_zone = get_zone_with_miss_chance(def_zone, M, miss_modifier + 15*distance + daddy.accuracy + daddy.rangedrop) // add +daddy.missmod vars to gun and this. snowflake accuracy -//moving def_zone to be a child of the daddyblock because i need the daddy +//moving def_zone to be a child of the daddyblock because i need the daddy. all projectiles should be fired from guns anyway if(!def_zone) visible_message("\blue \The [src] misses [M] narrowly!") forcedodge = -1 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 5db22131..3f7772e0 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -278,7 +278,7 @@ datum description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality." color = "#E0E8EF" // rgb: 224, 232, 239 - on_mob_life(var/mob/living/M as mob) + on_mob_life(var/mob/living/carbon/human/M as mob) if(ishuman(M)) if((M.mind in ticker.mode.cult) && prob(10)) M << "\blue A cooling sensation from inside you brings you an untold calmness." @@ -288,8 +288,10 @@ datum if((M.mind in ticker.mode.vampires) && (M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers))) if(!M) M = holder.my_atom M.adjustFireLoss(6) + M.adjust_fire_stacks(1) + M.IgniteMob() //M.take_organ_damage(0, 1*REM) - if(prob(50)) + if(prob(20)) for(var/mob/O in viewers(M, null)) O.show_message(text("\red []'s skin sizzles and burns.", M), 1) holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls. @@ -1532,8 +1534,10 @@ datum if((M.mind in ticker.mode.vampires) && (M.mind.vampire) && (!(VAMP_FULL in M.mind.vampire.powers))) if(!M) M = holder.my_atom M.adjustFireLoss(6) + M.adjust_fire_stacks(1) + M.IgniteMob() //M.take_organ_damage(0, 1*REM) - if(prob(50)) + if(prob(20)) for(var/mob/O in viewers(M, null)) O.show_message(text("\red []'s skin sizzles and burns.", M), 1) holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls. diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 0ea66d79..ce8c7f2e 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -58,6 +58,7 @@ F.loc = user.loc F.throw_at(target, 30, 2) message_admins("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") + message_mods("[key_name_admin(user)] fired a grenade ([F.name]) from a grenade launcher ([src.name]).") log_game("[key_name_admin(user)] used a grenade ([src.name]).") F.active = 1 F.icon_state = initial(icon_state) + "_active" diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index acbb5810..6a04ea7f 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -382,7 +382,7 @@ reagents.add_reagent("nutriment", 1) reagents.add_reagent("toxin", 3+round(potency / 3, 1)) reagents.add_reagent("lexorin", 1+round(potency / 5, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + bitesize = reagents.total_volume /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris seed = "/obj/item/seeds/ambrosiavulgaris" @@ -833,7 +833,7 @@ reagents.add_reagent("nutriment", 1) reagents.add_reagent("amatoxin", 3+round(potency / 3, 1)) reagents.add_reagent("psilocybin", 1+round(potency / 25, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + bitesize = reagents.total_volume /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita/attackby(var/obj/item/O as obj, var/mob/user as mob) . = ..() @@ -854,7 +854,7 @@ reagents.add_reagent("nutriment", 1+round((potency / 50), 1)) reagents.add_reagent("amatoxin", 13+round(potency / 3, 1)) reagents.add_reagent("psilocybin", 1+round(potency / 25, 1)) - bitesize = 1+round(reagents.total_volume / 2, 1) + bitesize = reagents.total_volume /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel/attackby(var/obj/item/O as obj, var/mob/user as mob) . = ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index fe6e1dd0..70908cfe 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -122,6 +122,7 @@ modded = modded ? 0 : 1 if (modded) message_admins("[key_name_admin(user)] opened fueltank at ([loc.x],[loc.y],[loc.z]) - JMP.") + message_mods("[key_name_admin(user)] opened fueltank at ([loc.x],[loc.y],[loc.z]) - JMP.") leak_fuel(amount_per_transfer_from_this) if (istype(W,/obj/item/device/assembly_holder)) if (rig) @@ -134,6 +135,7 @@ var/obj/item/device/assembly_holder/H = W if (istype(H.a_left,/obj/item/device/assembly/igniter) || istype(H.a_right,/obj/item/device/assembly/igniter)) message_admins("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion - JMP.") + message_mods("[key_name_admin(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion - JMP.") log_game("[key_name(user)] rigged fueltank at ([loc.x],[loc.y],[loc.z]) for explosion.") rig = W @@ -153,10 +155,12 @@ if(!src.defuse && user.client.holder) src.defuse = 1 message_admins("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).") + message_mods("[key_name_admin(user)] defused fueltank at ([loc.x],[loc.y],[loc.z]).") else if(!src.armed && user.client.holder) src.defuse = 0 message_admins("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).") + message_mods("[key_name_admin(user)] reset fuse on fueltank at ([loc.x],[loc.y],[loc.z]).") /obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) diff --git a/data/investigate/gravity.html b/data/investigate/gravity.html index 510be218..2f2f7345 100644 --- a/data/investigate/gravity.html +++ b/data/investigate/gravity.html @@ -1,2 +1,2 @@ -20:24 [0x20077ee] (92,152,1) || the gravitational generator has regained power.
-20:24 [0x20077ee] (92,152,1) || the gravitational generator is now charging.
+13:13 [0x20077c6] (92,152,1) || the gravitational generator has regained power.
+13:13 [0x20077c6] (92,152,1) || the gravitational generator is now charging.
diff --git a/html/changelog.html b/html/changelog.html index 1eb93bb8..c79977ed 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,65 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

23 September 2014

+

SoundScopes updated:

+
    +
  • Forensics
  • +
  • Forensics - Microscope
  • +
  • Forensics - DNA Analyzer
  • +
  • Forensics - Luminol and luminol reactions
  • +
  • Forensics - Crime scene kit
  • +
  • Forensics - Swab kits
  • +
  • Forensics - Detective must now collate case files by himself + run partial prints without the system doing it for them
  • +
  • Forensics - Luminol goggles (fluff item(does nothing))
  • +
  • Forensics - Gunshot Residue
  • +
  • Admin - Area make sound
  • +
  • Admin - Mod Logs similar to admin logs for better modding abillitys
  • +
  • All staff get a message if a chat channel is muted when they login
  • +
  • New Medicines
  • +
  • Chemicals - Philodexphil
  • +
  • Chemicals - Ecyeipate
  • +
  • Wheelchairs
  • +
  • Cargo can order encryption keys for headsets (secure access crates)
  • +
  • Cargo can order Swab kits
  • +
  • Blood is now only completely cleanable by a mop
  • +
  • Custom Loadout - Berets
  • +
  • Custom Loadout - Universal Recorder
  • +
  • Custom Loadout - Camera
  • +
  • Custom Loadout - Clipboard
  • +
  • Custom Loadout - Briefcase
  • +
  • Custom Loadout - Zippo lighter
  • +
  • Custom Loadout - Flask
  • +
  • Custom Loadout - Red and Blue pens
  • +
  • Telescopic baton knockdown adjusted
  • +
  • Poisonous plants you'll now eat in a single bite
  • +
  • Death nettles buffed significantly
  • +
  • Vampire - Hypnotize now a free power with increased cooldown time
  • +
  • Vampire - Vampjaunt brought back down to thirty
  • +
  • Vampire - Holy water ignites and burns vamps
  • +
  • Vampire - Health and Damage lowered on bats
  • +
  • Table laserblocking chance increased significantly
  • +
  • All energy weapons made more accurate.
  • +
  • AI's can only message centcom every 10 minutes.
  • +
  • Hulks no longer talk in all capitals
  • +
  • Laserpointer permablinding severely nerfed
  • +
  • Pulse Rifle unwielded firedelay to match other weapons delays
  • +
  • Built turrets start unlocked
  • +
  • Turrets now fire electrode/high like all other tasing implements
  • +
  • Robotics fabricator access changed to general research access
  • +
  • Shotgun shell crate changed-- doubled cost. Contains several shellboxes: slugs, incendiaries, blanks.
  • +
  • Turret placement in the AI core won't kill the AI now
  • +
  • Tajaran & Unathi Medical Hardsuit Helmet actually go on their head
  • +
  • IPC's can't be vamps or changelings (Actual fix)
  • +
  • Vampires added to one click antags
  • +
  • Tcomms runtime fix. NOTE: Rest of Tcomms does not actually work
  • +
  • Fixes pulse rifle firedelay (Its firedelay used to be 24, so its unwielded firedelay was like a million)
  • +
  • New hairstyles
  • +
+
+ +

6 September 2014

SoundScopes updated:

diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 0d8fba24..fd693889 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ