diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 9278be59503..de48c5bba60 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -249,7 +249,7 @@ CREATE TABLE `player` ( `volume` smallint(4) DEFAULT '100', `nanoui_fancy` smallint(4) DEFAULT '1', `show_ghostitem_attack` smallint(4) DEFAULT '1', - `lastchangelog` varchar(32) NOT NULL, + `lastchangelog` varchar(32) NOT NULL DEFAULT '0', `exp` mediumtext DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index 453554f5c69..a07684cd8da 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -249,7 +249,8 @@ CREATE TABLE `SS13_player` ( `volume` smallint(4) DEFAULT '100', `nanoui_fancy` smallint(4) DEFAULT '1', `show_ghostitem_attack` smallint(4) DEFAULT '1', - `lastchangelog` varchar(32) NOT NULL, + `lastchangelog` varchar(32) NOT NULL DEFAULT '0', + `exp` mediumtext DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `ckey` (`ckey`) ) ENGINE=InnoDB AUTO_INCREMENT=32446 DEFAULT CHARSET=latin1; diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e1965cf701e..889a0824f35 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -270,4 +270,75 @@ proc/add_logs(mob/target, mob/user, what_done, var/object=null, var/addition=nul . = 0 break if(progress) - qdel(progbar) \ No newline at end of file + qdel(progbar) + +/proc/admin_mob_info(mob/M, mob/user = usr) + if(!ismob(M)) + to_chat(user, "This can only be used on instances of type /mob") + return + + var/location_description = "" + var/special_role_description = "" + var/health_description = "" + var/gender_description = "" + var/turf/T = get_turf(M) + + //Location + if(isturf(T)) + if(isarea(T.loc)) + location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z] in area [T.loc])" + else + location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z])" + + //Job + antagonist + if(M.mind) + special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [M.mind.special_role]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]" + else + special_role_description = "Role: Mind datum missing Antagonist: Mind datum missing; Has been rev: Mind datum missing;" + + //Health + if(isliving(M)) + var/mob/living/L = M + var/status + switch(M.stat) + if(CONSCIOUS) + status = "Alive" + if(UNCONSCIOUS) + status = "Unconscious" + if(DEAD) + status = "Dead" + health_description = "Status = [status]" + health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]" + else + health_description = "This mob type has no health to speak of." + + //Gener + switch(M.gender) + if(MALE, FEMALE) + gender_description = "[M.gender]" + else + gender_description = "[M.gender]" + + to_chat(user, "Info about [M.name]: ") + to_chat(user, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]") + to_chat(user, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") + to_chat(user, "Location = [location_description];") + to_chat(user, "[special_role_description]") + to_chat(user, "(PM) (PP) (VV) (SM) (FLW) (CA)") + +// Gets the first mob contained in an atom, and warns the user if there's not exactly one +/proc/get_mob_in_atom_with_warning(atom/A, mob/user = usr) + if(!istype(A)) + return null + if(ismob(A)) + return A + + . = null + for(var/mob/M in A) + if(!.) + . = M + else + to_chat(user, "Multiple mobs in [A], using first mob found...") + break + if(!.) + to_chat(user, "No mob located in [A].") diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 869ee83ff9c..d04abfe5a87 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -25,6 +25,21 @@ return var/list/modifiers = params2list(params) + if(check_rights(R_ADMIN, 0)) // Admin click shortcuts + var/mob/M + if(modifiers["shift"] && modifiers["ctrl"]) + client.debug_variables(A) + return + if(modifiers["ctrl"]) + M = get_mob_in_atom_with_warning(A) + if(M) + client.holder.show_player_panel(M) + return + if(modifiers["shift"] && modifiers["middle"]) + M = get_mob_in_atom_with_warning(A) + if(M) + admin_mob_info(M) + return if(modifiers["shift"]) ShiftClickOn(A) return diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index 83b3a4a226a..172c4b63757 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -43,11 +43,11 @@ Bonus return /datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A) - var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth())*1) + var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()) M.adjustOxyLoss(get_damage) return 1 /datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A) - var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth()*5)) + var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()*5) M.adjustOxyLoss(get_damage) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/advance/symptoms/damage_converter.dm index eb7afcaf6be..cba4d4a4cd0 100644 --- a/code/datums/diseases/advance/symptoms/damage_converter.dm +++ b/code/datums/diseases/advance/symptoms/damage_converter.dm @@ -45,9 +45,11 @@ Bonus if(!parts.len) return - M.heal_overall_damage(get_damage, get_damage) + for(var/obj/item/organ/external/E in parts) + E.heal_damage(get_damage, get_damage, 0, 0) M.adjustToxLoss(get_damage*parts.len) + else if(M.getFireLoss() > 0 || M.getBruteLoss() > 0) M.adjustFireLoss(-get_damage) diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 3ec0f16358a..9234b54b088 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -21,7 +21,7 @@ Bonus resistance = -4 stage_speed = -4 transmittable = -3 - level = 6 + level = 5 severity = 0 /datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A) @@ -38,12 +38,12 @@ Bonus M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10)) to_chat(M, "You feel sober.") if(4) - if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10) - M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaptizine"=5)) + if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10) + M.reagents.add_reagent_list(list("antihol"=10, "oculine"=10, "synaphydramine"=5)) to_chat(M, "You feel focused.") if(5) - if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaptizine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10) - M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaptizine"=10)) + if(M.reagents.get_reagent_amount("antihol") < 10 && M.reagents.get_reagent_amount("oculine") < 10 && M.reagents.get_reagent_amount("synaphydramine") < 10 && M.reagents.get_reagent_amount("mannitol") < 10) + M.reagents.add_reagent_list(list("mannitol"=10, "antihol"=10, "oculine"=10, "synaphydramine"=10)) to_chat(M, "Your mind feels relaxed.") return diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index e2f4fc50c12..5b0884788b9 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -36,7 +36,6 @@ melee_damage_upper = 4 attacktext = "hits" attack_sound = 'sound/weapons/genhit1.ogg' - del_on_death = 1 speak_emote = list("pulses") var/obj/effect/blob/factory/factory = null var/list/human_overlays = list() @@ -92,6 +91,7 @@ loc.visible_message("The corpse of [H.name] suddenly rises!") /mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) + ..() // On death, create a small smoke of harmful gas (s-Acid) var/datum/effect/system/chem_smoke_spread/S = new var/turf/location = get_turf(src) @@ -108,7 +108,7 @@ S.attach(location) S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud S.start() - ..() + qdel(src) /mob/living/simple_animal/hostile/blob/blobspore/Destroy() if(factory) diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 1de4ecef264..982d2be445f 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -339,7 +339,8 @@ equip(var/mob/living/carbon/human/H) - if(!H) return 0 + if(!H) + return 0 switch(H.backbag) if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) @@ -348,12 +349,10 @@ H.equip_or_collect(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform) H.equip_or_collect(new /obj/item/device/pda/librarian(H), slot_wear_pda) H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes) - H.equip_or_collect(new /obj/item/weapon/barcodescanner(H), slot_l_hand) + H.equip_or_collect(new /obj/item/weapon/storage/bag/books(H), slot_l_hand) + H.equip_or_collect(new /obj/item/weapon/barcodescanner(H), slot_r_store) H.equip_or_collect(new /obj/item/device/laser_pointer(H), slot_l_store) - if(H.backbag == 1) - H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) - else - H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 /datum/job/barber diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 66685c85d3f..ddf59f576f9 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -97,7 +97,7 @@ return -1 for(var/client/C in clients) - if(C.inactivity < (10 * 10 * 60)) + if(C.inactivity < (10 MINUTES)) //var/list/play_records = params2list(C.prefs.exp) var/DBQuery/exp_read = dbcon.NewQuery("SELECT exp FROM [format_table_name("player")] WHERE ckey='[C.ckey]'") diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 257c583814b..0c68064d913 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -458,7 +458,7 @@ // Book keeping! log_admin("[key_name(M)] has entered a stasis pod.") - message_admins("[key_name_admin(user)] has entered a stasis pod. (JMP)") + message_admins("[key_name_admin(M)] has entered a stasis pod. (JMP)") //Despawning occurs when process() is called with an occupant without a client. src.add_fingerprint(M) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 66cb11a9dd6..af4d9aa6008 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -375,7 +375,7 @@ max_combined_w_class = 21 max_w_class = 3 w_class = 4 //Bigger than a book because physics - can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/spellbook") //No bibles, consistent with bookcase + can_hold = list("/obj/item/weapon/book", "/obj/item/weapon/storage/bible", "/obj/item/weapon/tome", "/obj/item/weapon/spellbook") /* * Trays - Agouri diff --git a/code/game/response_team.dm b/code/game/response_team.dm index abd4f0fcffa..5f8543ca934 100644 --- a/code/game/response_team.dm +++ b/code/game/response_team.dm @@ -422,7 +422,7 @@ var/ert_request_answered = 0 switch(officer_type) if("Engineer") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/engi(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson(M), slot_glasses) @@ -442,7 +442,7 @@ var/ert_request_answered = 0 if("Security") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/security(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) @@ -460,7 +460,7 @@ var/ert_request_answered = 0 if("Medic") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex/nitrile(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/medical(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/health_advanced(M), slot_glasses) @@ -479,7 +479,7 @@ var/ert_request_answered = 0 if("Commander") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/commander(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) @@ -507,7 +507,7 @@ var/ert_request_answered = 0 switch(officer_type) if("Engineer") M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/advance(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/rig/ert/engineer(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_s_store) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/meson/night(M), slot_glasses) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index a7fc809aa88..6dacca13d12 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1565,53 +1565,7 @@ else if(href_list["adminmoreinfo"]) var/mob/M = locate(href_list["adminmoreinfo"]) - if(!ismob(M)) - to_chat(usr, "This can only be used on instances of type /mob") - return - - var/location_description = "" - var/special_role_description = "" - var/health_description = "" - var/gender_description = "" - var/turf/T = get_turf(M) - - //Location - if(isturf(T)) - if(isarea(T.loc)) - location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z] in area [T.loc])" - else - location_description = "([M.loc == T ? "at coordinates " : "in [M.loc] at coordinates "] [T.x], [T.y], [T.z])" - - //Job + antagonist - if(M.mind) - special_role_description = "Role: [M.mind.assigned_role]; Antagonist: [M.mind.special_role]; Has been rev: [(M.mind.has_been_rev)?"Yes":"No"]" - else - special_role_description = "Role: Mind datum missing Antagonist: Mind datum missing; Has been rev: Mind datum missing;" - - //Health - if(isliving(M)) - var/mob/living/L = M - var/status - switch(M.stat) - if(0) status = "Alive" - if(1) status = "Unconscious" - if(2) status = "Dead" - health_description = "Status = [status]" - health_description += "
Oxy: [L.getOxyLoss()] - Tox: [L.getToxLoss()] - Fire: [L.getFireLoss()] - Brute: [L.getBruteLoss()] - Clone: [L.getCloneLoss()] - Brain: [L.getBrainLoss()]" - else - health_description = "This mob type has no health to speak of." - - //Gener - switch(M.gender) - if(MALE,FEMALE) gender_description = "[M.gender]" - else gender_description = "[M.gender]" - - to_chat(src.owner, "Info about [M.name]: ") - to_chat(src.owner, "Mob type = [M.type]; Gender = [gender_description] Damage = [health_description]") - to_chat(src.owner, "Name = [M.name]; Real_name = [M.real_name]; Mind_name = [M.mind?"[M.mind.name]":""]; Key = [M.key];") - to_chat(src.owner, "Location = [location_description];") - to_chat(src.owner, "[special_role_description]") - to_chat(src.owner, "(PM) (PP) (VV) (SM) (FLW) (CA)") + admin_mob_info(M) else if(href_list["adminspawncookie"]) if(!check_rights(R_ADMIN|R_EVENT)) return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 1cc723ab903..01f6736e5ca 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -593,17 +593,25 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that "tournament janitor", "pirate", "space pirate", + "soviet tourist", + "soviet soldier", "soviet admiral", "tunnel clown", + "mime assassin", "survivor", + "greytide", + "greytide leader", + "greytide xeno", "masked killer", "singuloth knight", "dark lord", "assassin", "spy", + "vox", "death commando", "syndicate agent", "syndicate operative", + "syndicate bomber", "syndicate strike team", "syndicate officer", "chrono legionnaire", @@ -746,30 +754,29 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if("pirate") M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) - equip_special_id(M,get_all_accesses(), "Pirate", /obj/item/weapon/card/id) + equip_special_id(M,list(access_maint_tunnels), "Pirate", /obj/item/weapon/card/id) - if("space pirate") + if("space pirate") // not spaceworthy, just has fancier coat. M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/pirate(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/pirate(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/pirate(M), slot_r_hand) - equip_special_id(M,get_all_accesses(), "Space Pirate", /obj/item/weapon/card/id) - - if("soviet soldier") - M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head) - equip_special_id(M,get_all_accesses(), "Soviet Soldier", /obj/item/weapon/card/id) + equip_special_id(M,list(access_maint_tunnels), "Space Pirate", /obj/item/weapon/card/id) if("tunnel clown") M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) @@ -780,25 +787,106 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/suit/chaplain_hoodie(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_r_store) - equip_special_id(M,get_all_accesses(), "Tunnel Clown", /obj/item/weapon/card/id) + equip_special_id(M,list(access_clown, access_theatre, access_maint_tunnels), "Tunnel Clown", /obj/item/weapon/card/id) M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) M.equip_to_slot_or_del(fire_axe, slot_r_hand) + + if("mime assassin") + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/mime(M), slot_back) + if(M.gender == FEMALE) + M.equip_or_collect(new /obj/item/clothing/under/sexymime(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/mask/gas/sexymime(M), slot_wear_mask) + else + M.equip_or_collect(new /obj/item/clothing/under/mime(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/mask/gas/mime(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/white(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/syndie_kit/caneshotgun, slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/toy/crayon/mime, slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/suppressor(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack) + var/obj/item/device/pda/mime/pda = new(M) + pda.owner = M.real_name + pda.ownjob = "Mime" + pda.name = "PDA-[M.real_name] ([pda.ownjob])" + M.equip_to_slot_or_del(pda, slot_wear_pda) + equip_special_id(M,list(access_mime, access_theatre, access_maint_tunnels), "Mime", /obj/item/weapon/card/id/syndicate) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + if("survivor") M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) - equip_special_id(M,get_all_accesses(), "Survivor", /obj/item/weapon/card/id) + equip_special_id(M,list(access_maint_tunnels), "Survivor", /obj/item/weapon/card/id) for(var/obj/item/carried_item in M.contents) if(!istype(carried_item, /obj/item/weapon/implant)) carried_item.add_blood(M) + if("greytide") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand) + M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + equip_special_id(M,list(access_maint_tunnels), "Greytide", /obj/item/weapon/card/id) + + if("greytide leader") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(M), slot_l_hand) + M.equip_to_slot_or_del(new /obj/item/flag/grey(M), slot_r_hand) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + equip_special_id(M,list(access_maint_tunnels), "Greytide Leader", /obj/item/weapon/card/id) + + if("greytide xeno") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/xenos(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/head/xenos(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/toy/toy_xeno(M), slot_r_store) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + equip_special_id(M,list(access_maint_tunnels), "Legit Xenomorph", /obj/item/weapon/card/id) + if("masked killer") M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) @@ -809,7 +897,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) - equip_special_id(M,get_all_accesses(), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie") + equip_special_id(M,list(access_maint_tunnels), "Masked Killer", /obj/item/weapon/card/id/syndicate, "syndie") var/obj/item/weapon/twohanded/fireaxe/fire_axe = new(M) M.equip_to_slot_or_del(fire_axe, slot_r_hand) for(var/obj/item/carried_item in M.contents) @@ -821,6 +909,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/dualsaber/red(M), slot_l_hand) @@ -841,6 +930,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword/saber(M), slot_l_store) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M) for(var/obj/item/briefcase_item in sec_briefcase) @@ -880,14 +970,39 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/pen/sleepy(M), slot_r_store) var/obj/item/weapon/implant/dust/DUST = new /obj/item/weapon/implant/dust(M) DUST.implant(M) - var/obj/item/weapon/implant/dust/STOR = new /obj/item/weapon/implant/storage(M) - STOR.implant(M) + M.equip_to_slot_or_del(new /obj/item/weapon/implanter/storage(M), slot_in_backpack) var/obj/item/device/pda/heads/pda = new(M) pda.owner = M.real_name pda.ownjob = "Spy" pda.name = "PDA-[M.real_name] ([pda.ownjob])" M.equip_to_slot_or_del(pda, slot_belt) - equip_special_id(M,get_all_accesses(), "Spy", /obj/item/weapon/card/id/syndicate, "syndie") + equip_special_id(M,list(access_maint_tunnels), "Spy", /obj/item/weapon/card/id/syndicate, "syndie") + + + if("vox") + if(istype(M, /mob/living/carbon/human/voxarmalis)) // have to do this, they cannot wear normal vox gear! + M.equip_to_slot_or_del(new /obj/item/clothing/under/vox_grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/syndicate(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/vox/vox_robes (M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/magboots/vox(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate/vox(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate, slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow/vox, slot_gloves) + M.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic, slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/vox, slot_r_store) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle, slot_glasses) + M.equip_to_slot_or_del(new /obj/item/device/flashlight, slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs/cable/zipties, slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/flash, slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/noisecannon, slot_in_backpack) + equip_special_id(M,get_all_accesses(), "Vox Armalis", /obj/item/weapon/card/id/syndicate/vox, "syndie") + else + M.equip_vox_raider() + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_l_hand) + M.regenerate_icons() if("death commando") M.equip_death_commando() @@ -909,15 +1024,31 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that U.hidden_uplink.uses = 20 M.equip_to_slot_or_del(U, slot_r_store) + if("syndicate bomber") + M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/radio/beacon/syndicate/bomb(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/syndicatedetonator(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/storage/belt/utility/full/multitool(M), slot_belt) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/snacks/syndidonkpocket(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) + equip_special_id(M,get_syndicate_access("Syndicate Operative"), "Syndicate Bomber", /obj/item/weapon/card/id/syndicate, "syndie") + if("syndicate operative") M.equip_or_collect(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/gun/projectile/automatic/pistol(M), slot_in_backpack) M.equip_or_collect(new /obj/item/ammo_box/magazine/m10mm(M), slot_in_backpack) - M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/crowbar/red(M), slot_in_backpack) M.equip_or_collect(new /obj/item/clothing/glasses/night(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt) @@ -948,8 +1079,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_or_collect(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_or_collect(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_or_collect(new /obj/item/weapon/reagent_containers/food/pill/initropidril(M), slot_in_backpack) M.equip_or_collect(new /obj/item/clothing/glasses/thermal(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/storage/belt/military(M), slot_belt) M.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer(M), slot_l_store) @@ -974,6 +1105,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_or_collect(new /obj/item/clothing/shoes/black(M), slot_shoes) M.equip_or_collect(new /obj/item/clothing/gloves/color/black(M), slot_gloves) M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_or_collect(new /obj/item/clothing/head/that(M), slot_head) M.equip_or_collect(new /obj/item/device/radio/headset/ert(M), slot_l_ear) M.equip_or_collect(new /obj/item/device/pda/(M), slot_wear_pda) @@ -989,6 +1121,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) @@ -1007,6 +1140,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_or_collect(new /obj/item/clothing/glasses/hud/security/sunglasses(M), slot_glasses) M.equip_or_collect(new /obj/item/weapon/gun/energy/pulse/pistol(M), slot_belt) M.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) M.equip_or_collect(new /obj/item/weapon/implanter/death_alarm(M), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(M) @@ -1051,6 +1185,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/cyber(M), slot_glasses) // job has /obj/item/clothing/glasses/hud/security/sunglasses M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/deathsquad/officer(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen/double/full(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/implanter/dust(M), slot_in_backpack) @@ -1078,6 +1213,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/pulse/pistol/m1911(M), slot_belt) M.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/cohiba(M), slot_wear_mask) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_or_collect(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/matches(M), slot_r_store) M.equip_or_collect(new /obj/item/weapon/melee/classic_baton/telescopic(M), slot_in_backpack) @@ -1117,7 +1253,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) if("red wizard") @@ -1130,7 +1266,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) if("marisa wizard") @@ -1143,20 +1279,53 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that M.equip_to_slot_or_del(new /obj/item/weapon/spellbook(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/weapon/twohanded/staff(M), slot_l_hand) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) equip_special_id(M,get_all_accesses(), "Wizard", /obj/item/weapon/card/id) + if("soviet tourist") + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(M), slot_in_backpack) + equip_special_id(M,list(access_maint_tunnels), "Soviet Tourist", /obj/item/weapon/card/id) + + if("soviet soldier") + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/card/emag(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/device/flashlight(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/grenade/plastic/c4(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + equip_special_id(M,list(access_maint_tunnels), "Soviet Soldier", /obj/item/weapon/card/id) + if("soviet admiral") + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) - M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_l_ear) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(M), slot_l_ear) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_belt) - M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) - equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Admiral", /obj/item/weapon/card/id, "commander") + M.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/revolver/mateba(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_in_backpack) + equip_special_id(M,get_all_accesses() + get_all_centcom_access(), "Soviet Admiral", /obj/item/weapon/card/id, "commander") //W.icon_state = "commander" if("chrono legionnaire") diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 5955d60cbec..deaa1b85aa8 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -149,7 +149,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)), //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100)), //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100)), - //new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1), diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 4d58fee8e11..aa7d9ea4607 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -20,26 +20,32 @@ opacity = 1 var/health = 50 var/tmp/busy = 0 - var/list/valid_types = list(/obj/item/weapon/book, \ - /obj/item/weapon/tome, \ - /obj/item/weapon/spellbook, \ - /obj/item/weapon/storage/bible) + var/list/allowed_books = list(/obj/item/weapon/book, /obj/item/weapon/spellbook, /obj/item/weapon/storage/bible, /obj/item/weapon/tome) //Things allowed in the bookcase /obj/structure/bookcase/initialize() ..() for(var/obj/item/I in loc) - if(is_type_in_list(I, valid_types)) + if(is_type_in_list(I, allowed_books)) I.forceMove(src) update_icon() /obj/structure/bookcase/attackby(obj/O as obj, mob/user as mob, params) if(busy) //So that you can't mess with it while deconstructing return 1 - if(is_type_in_list(O, valid_types)) - user.drop_item() + if(is_type_in_list(O, allowed_books)) + if(!user.drop_item()) + return O.forceMove(src) update_icon() return 1 + else if(istype(O, /obj/item/weapon/storage/bag/books)) + var/obj/item/weapon/storage/bag/books/B = O + for(var/obj/item/T in B.contents) + if(istype(T, /obj/item/weapon/book) || istype(T, /obj/item/weapon/spellbook) || istype(T, /obj/item/weapon/tome) || istype(T, /obj/item/weapon/storage/bible)) + B.remove_from_storage(T, src) + to_chat(user, "You empty [O] into [src].") + update_icon() + return 1 else if(istype(O, /obj/item/weapon/wrench)) user.visible_message("[user] starts disassembling \the [src].", \ "You start disassembling \the [src].") @@ -51,8 +57,6 @@ user.visible_message("[user] disassembles \the [src].", \ "You disassemble \the [src].") busy = 0 - for(var/i = 1 to 5) - new /obj/item/stack/sheet/wood(get_turf(src)) density = 0 qdel(src) else @@ -72,9 +76,6 @@ else if(health <= 0) visible_message("The bookcase is smashed apart!") - new /obj/item/stack/sheet/wood(get_turf(src)) - new /obj/item/stack/sheet/wood(get_turf(src)) - new /obj/item/stack/sheet/wood(get_turf(src)) qdel(src) return ..() @@ -110,10 +111,10 @@ return /obj/structure/bookcase/Destroy() - for(var/i = 1 to 3) + for(var/i in 1 to 5) new /obj/item/stack/sheet/wood(get_turf(src)) for(var/obj/item/I in contents) - if(is_type_in_list(I, valid_types)) + if(is_type_in_list(I, allowed_books)) I.forceMove(get_turf(src)) return ..() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index bc166cfe893..6665bb54982 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -246,7 +246,8 @@ if(!is_job_whitelisted(src, rank)) return 0 if(!job.player_old_enough(src.client)) return 0 if(job.admin_only && !(check_rights(R_EVENT, 0))) return 0 - if(!has_exp_for_job(src, rank)) return 0 + if(!has_exp_for_job(src, rank)) + return 0 if(config.assistantlimit) if(job.title == "Civilian") diff --git a/code/modules/reagents/newchem/disease.dm b/code/modules/reagents/newchem/disease.dm index 6f8e7fd6308..def94ba9a2c 100644 --- a/code/modules/reagents/newchem/disease.dm +++ b/code/modules/reagents/newchem/disease.dm @@ -122,6 +122,25 @@ qdel(ate_heart) ..() +//virus-specific symptom reagents + +/datum/reagent/synaphydramine + name = "Diphen-Synaptizine" + id = "synaphydramine" + description = "Reduces drowsiness and hallucinations while also purging histamine from the body." + color = "#EC536D" // rgb: 236, 83, 109 + +/datum/reagent/synaphydramine/on_mob_life(mob/living/M) + M.drowsyness = max(M.drowsyness-5, 0) + if(holder.has_reagent("lsd")) + holder.remove_reagent("lsd", 5) + if(holder.has_reagent("histamine")) + holder.remove_reagent("histamine", 5) + M.hallucination = max(0, M.hallucination - 10) + if(prob(30)) + M.adjustToxLoss(1) + ..() + //virus food /datum/reagent/virus_food name = "Virus Food" diff --git a/html/changelog.html b/html/changelog.html index 27fe9b5f57f..674ceedea5f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,128 @@ -->
+

28 July 2016

+

A Giant-Ass Mountain of Salt updated:

+ +

Crazylemon64 updated:

+ +

FlattestGuitar updated:

+ +

Fox McCloud updated:

+ +

Fox-McCloud updated:

+ +

FreeStylaLT updated:

+ +

Krausus updated:

+ +

Kyep updated:

+ +

Spacemanspark updated:

+ +

TheDZD updated:

+ +

TullyBurnalot updated:

+ +

Twinmold updated:

+ +

Ty-Omaha updated:

+ +

monster860, clusterfack, and DeityLink updated:

+ +

tigercat2000 updated:

+ +

21 July 2016

Alffd updated: