diff --git a/code/WorkInProgress/Cael_Aislinn/sculpture.dm b/code/WorkInProgress/Cael_Aislinn/sculpture.dm index 2ecc98a4ae..639c2c8487 100644 --- a/code/WorkInProgress/Cael_Aislinn/sculpture.dm +++ b/code/WorkInProgress/Cael_Aislinn/sculpture.dm @@ -26,7 +26,6 @@ G.assailant = src G.layer = 20 G.affecting = target - target.grabbed_by += G G.synch() target.LAssailant = src diff --git a/code/WorkInProgress/Cib/amorph/amorph_attack.dm b/code/WorkInProgress/Cib/amorph/amorph_attack.dm index 188c682033..814b977d1a 100644 --- a/code/WorkInProgress/Cib/amorph/amorph_attack.dm +++ b/code/WorkInProgress/Cib/amorph/amorph_attack.dm @@ -95,7 +95,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - grabbed_by += G G.synch() LAssailant = M @@ -150,7 +149,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - grabbed_by += G G.synch() LAssailant = M diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index adf80b1752..716c30171e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -116,7 +116,7 @@ if(!resolved && A && W) W.afterattack(A,src,1,params) // 1 indicates adjacency else - UnarmedAttack(A) + UnarmedAttack(A, 1) return if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 8654fb89a1..9b18e24356 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -121,9 +121,6 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() - //Set up gear list. - populate_gear_list() - //Set up roundstart seed list. populate_seed_list() diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index a9959ef063..8ab0f1b491 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -23,9 +23,6 @@ src.cure() if(stage == 1) - if(affected_mob.op_stage.appendix == 2.0) - // appendix is removed, can't get infected again - src.cure() if(prob(5)) affected_mob << "\red You feel a stinging pain in your abdomen!" affected_mob.emote("me",1,"winces slightly.") @@ -48,7 +45,6 @@ var/mob/living/carbon/human/H = affected_mob H << "\red Your abdomen is a world of pain!" H.Weaken(10) - H.op_stage.appendix = 2.0 var/datum/organ/external/groin = H.get_organ("groin") var/datum/wound/W = new /datum/wound/internal_bleeding(20) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index 34896cb96b..54bdd95397 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -1,6 +1,5 @@ /var/datum/announcement/priority/priority_announcement = new(do_log = 0) /var/datum/announcement/priority/command/command_announcement = new(do_log = 0, do_newscast = 1) -/var/datum/announcement/priority/security/security_announcement = new(do_log = 0, do_newscast = 1) /datum/announcement var/title = "Attention" @@ -16,17 +15,17 @@ log = do_log newscast = do_newscast -/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Priority Announcement" announcement_type = "Priority Announcement" -/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "[command_name()] Update" announcement_type = "[command_name()] Update" -/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Security Announcement" announcement_type = "Security Announcement" diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index a119a0cf4b..4f78d7f70f 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -32,7 +32,7 @@ M.mutations.Add(mutation) if(disability) M.disabilities|=disability - if(mutation) + if(sdisability) M.sdisabilities|=sdisability if(activation_message) M << "\red [activation_message]" @@ -43,9 +43,9 @@ if(mutation && (mutation in M.mutations)) M.mutations.Remove(mutation) if(disability) - M.disabilities-=disability - if(mutation) - M.sdisabilities-=sdisability + M.disabilities &= (~disability) + if(sdisability) + M.sdisabilities &= (~sdisability) if(deactivation_message) M << "\red [deactivation_message]" else diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 5dae9e6e4b..ff8b760bc1 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -415,7 +415,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. if(13) directive += "Some disgruntled NanoTrasen employees have been supportive of our operations. Be wary of any mistreatment by command staff." if(14) - var/xenorace = pick("Unathi","Tajaran", "Skrellian") + var/xenorace = pick("Unathi","Tajara", "Skrell") directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible." if(15) directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 6df5a22050..580322f8e1 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -6,7 +6,7 @@ datum/directive/terminations/alien_fraud proc/is_alien(mob/M) var/species = M.get_species() - return species == "Tajaran" || species == "Unathi" + return species == "Tajara" || species == "Unathi" datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] @@ -30,7 +30,7 @@ datum/directive/terminations/alien_fraud/meets_prerequisites() var/unathi = 0 for(var/mob/M in player_list) var/species = M.get_species() - if(species == "Tajaran") + if(species == "Tajara") tajarans++ if(species == "Unathi") unathi++ diff --git a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm index b70ffd659d..f1aa2e914d 100644 --- a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm +++ b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm @@ -28,7 +28,7 @@ datum/directive/tau_ceti_needs_women var/list/aliens[0] for(var/mob/M in get_crew_of_target_gender()) var/species = M.get_species() - if(species == "Tajaran" || species == "Unathi" || species == "Skrell") + if(species == "Tajara" || species == "Unathi" || species == "Skrell") aliens.Add(M) return aliens diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 911dc58d84..9a7f2e4cdf 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -232,8 +232,8 @@ var/global/list/turf/synd_spawn = list() switch(race) if("Unathi") new_suit.species_restricted = list("Unathi") - if("Tajaran") - new_suit.species_restricted = list("Tajaran") + if("Tajara") + new_suit.species_restricted = list("Tajara") if("Skrell") new_suit.species_restricted = list("Skrell") diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 0400d58689..16ae2f5e54 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -480,7 +480,7 @@ var/global/datum/controller/occupations/job_master //TODO: Generalize this by-species if(H.species) - if(H.species.name == "Tajaran" || H.species.name == "Unathi") + if(H.species.name == "Tajara" || H.species.name == "Unathi") H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes,1) else if(H.species.name == "Vox") H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index f8f3ee80a2..f1dc546aea 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -46,7 +46,6 @@ var/list/whitelist = list() return 1 if(findtext(s,"[M.ckey] - All")) return 1 - return 0 #undef WHITELISTFILE diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 00d5997814..5baa918911 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -311,6 +311,9 @@ M:reagents.add_reagent("inaprovaline", 5) return proc/toggle_filter() + if(!src.occupant) + filtering = 0 + return if(filtering) filtering = 0 else diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 874d66560a..1e53a770ab 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -1310,6 +1310,11 @@ FIRE ALARM user.visible_message("\red [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") else user.visible_message("\red [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\red [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + buildstage = 1 + update_icon() if(1) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 4ce50d404c..a0ac4258cc 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -5,6 +5,9 @@ desc = "It's a machine that grows replacement organs." icon = 'icons/obj/surgery.dmi' + anchored = 1 + density = 1 + icon_state = "bioprinter" var/prints_prosthetics diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index b40f511a3b..9341aca674 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -11,24 +11,24 @@ var/mode = 0.0 var/printing = null - proc/is_centcom() - return istype(src, /obj/machinery/computer/card/centcom) +/obj/machinery/computer/card/proc/is_centcom() + return 0 - proc/is_authenticated() - return scan ? check_access(scan) : 0 +/obj/machinery/computer/card/proc/is_authenticated() + return scan ? check_access(scan) : 0 - proc/get_target_rank() - return modify && modify.assignment ? modify.assignment : "Unassigned" +/obj/machinery/computer/card/proc/get_target_rank() + return modify && modify.assignment ? modify.assignment : "Unassigned" - proc/format_jobs(list/jobs) - var/list/formatted = list() - for(var/job in jobs) - formatted.Add(list(list( - "display_name" = replacetext(job, " ", " "), - "target_rank" = get_target_rank(), - "job" = job))) +/obj/machinery/computer/card/proc/format_jobs(list/jobs) + var/list/formatted = list() + for(var/job in jobs) + formatted.Add(list(list( + "display_name" = replacetext(job, " ", " "), + "target_rank" = get_target_rank(), + "job" = job))) - return formatted + return formatted /obj/machinery/computer/card/verb/eject_id() set category = "Object" @@ -288,3 +288,7 @@ name = "CentCom Identification Computer" circuit = "/obj/item/weapon/circuitboard/card/centcom" req_access = list(access_cent_captain) + + +/obj/machinery/computer/card/centcom/is_centcom() + return 1 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 3f0b744889..8fc6fa3599 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -602,7 +602,7 @@ //Departments that the cycler can paint suits to look like. var/list/departments = list("Engineering","Mining","Medical","Security","Atmos") //Species that the suits can be configured to fit. - var/list/species = list("Human","Skrell","Unathi","Tajaran") + var/list/species = list("Human","Skrell","Unathi","Tajara") var/target_department var/target_species @@ -622,35 +622,35 @@ model_text = "Engineering" req_access = list(access_construction) departments = list("Engineering","Atmos") - species = list("Human","Tajaran","Skrell","Unathi") //Add Unathi when sprites exist for their suits. + species = list("Human","Tajara","Skrell","Unathi") //Add Unathi when sprites exist for their suits. /obj/machinery/suit_cycler/mining name = "Mining suit cycler" model_text = "Mining" req_access = list(access_mining) departments = list("Mining") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/security name = "Security suit cycler" model_text = "Security" req_access = list(access_security) departments = list("Security") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/medical name = "Medical suit cycler" model_text = "Medical" req_access = list(access_medical) departments = list("Medical") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/syndicate name = "Nonstandard suit cycler" model_text = "Nonstandard" req_access = list(access_syndicate) departments = list("Mercenary") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") can_repair = 1 /obj/machinery/suit_cycler/attack_ai(mob/user as mob) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 1164c342ff..2adf280a6b 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1136,16 +1136,13 @@ M.verbs -= /obj/mecha/proc/move_inside_passenger /obj/item/mecha_parts/mecha_equipment/tool/passenger/get_equip_info() - var/output = ..() - if(output) - var/temp = "
[occupant? "\[Occupant: [occupant]\]|" : ""]Exterior Hatch: [door_locked? "Locked" : "Unlocked"]" - return "[output] [temp]" - return + return "[..()]
[occupant? "\[Occupant: [occupant]\]|" : ""]Exterior Hatch: Toggle Lock" /obj/item/mecha_parts/mecha_equipment/tool/passenger/Topic(href,href_list) ..() if (href_list["toggle_lock"]) door_locked = !door_locked + occupant_message("Passenger compartment hatch [door_locked? "locked" : "unlocked"].") if (chassis) chassis.visible_message("The hatch on \the [chassis] [door_locked? "locks" : "unlocks"].", "You hear something latching.") @@ -1200,6 +1197,4 @@ if (OCCUPIED|LOCKED) usr << "\red All of the passenger compartments are already occupied or locked!" if (0) - usr << "\red \The [src] doesn't have a passenger compartment." - -/obj/mecha/proc/remove_passenger() + usr << "\red \The [src] doesn't have a passenger compartment." \ No newline at end of file diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3f662e4411..51352e3afb 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1575,14 +1575,19 @@ var/pname = input(user, "Choose a passenger to forcibly remove.", "Forcibly Remove Passenger") as null|anything in passengers - if (pname) - var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] - var/mob/occupant = P.occupant + if (!pname) + return - visible_message("\red [user] opens the hatch on \the [P] and removes [occupant]!") - P.go_out() - P.log_message("[occupant] was removed.") - occupant_message("\red [occupant] was removed from \the [P] by [user]!") + var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] + var/mob/occupant = P.occupant + + user.visible_message("\red [user] begins opening the hatch on \the [P]...", "\red You begin opening the hatch on \the [P]...") + if (!do_after(user, 40, needhand=0)) + return + + user.visible_message("\red [user] opens the hatch on \the [P] and removes [occupant]!", "\red You open the hatch on \the [P] and remove [occupant]!") + P.go_out() + P.log_message("[occupant] was removed.") return if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) if(!in_range(src, usr)) return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c121bf746f..80f1fcb8e5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -44,7 +44,7 @@ /* Species-specific sprites, concept stolen from Paradise//vg/. ex: sprite_sheets = list( - "Tajaran" = 'icons/cat/are/bad' + "Tajara" = 'icons/cat/are/bad' ) If index term exists and icon_override is not set, this sprite sheet will be used. */ @@ -261,6 +261,9 @@ //START HUMAN var/mob/living/carbon/human/H = M + if(H.species && !(slot in H.species.hud.equip_slots)) + return 0 + switch(slot) if(slot_l_hand) if(H.l_hand) diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 02d11f2251..819583ef23 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -17,7 +17,7 @@ /obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) if(!proximity) return - + if (!target_species) return //it shouldn't be null, okay? @@ -31,12 +31,12 @@ for (var/permitted_type in permitted_types) if(istype(O, permitted_type)) allowed = 1 - + var/obj/item/clothing/I = O if (!istype(I) || !allowed) user << "[src] is unable to modify that." return - + var/excluding = ("exclude" in I.species_restricted) var/in_list = (target_species in I.species_restricted) if (excluding ^ in_list) @@ -57,7 +57,7 @@ parts &= ~MODKIT_HELMET if (istype(I, /obj/item/clothing/suit)) parts &= ~MODKIT_SUIT - + if(!parts) user.drop_from_inventory(src) del(src) @@ -69,4 +69,4 @@ /obj/item/device/modkit/tajaran name = "tajaran hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajaran" \ No newline at end of file + target_species = "Tajara" \ No newline at end of file diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index d023f20782..6676acec32 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -14,7 +14,7 @@ var/global/vox_tick = 1 if(1) // Vox raider! equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) - equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(src), slot_belt) + equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(src), slot_belt) equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store) @@ -66,4 +66,4 @@ var/global/vox_tick = 1 vox_tick++ if (vox_tick > 4) vox_tick = 1 - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ae333eb8dd..f00a8a9e6e 100755 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -277,15 +277,15 @@ datum/preferences dat += "
Custom Loadout: " var/total_cost = 0 - if(isnull(gear) || !islist(gear)) gear = list() + if(!islist(gear)) gear = list() if(gear && gear.len) dat += "
" - for(var/gear_name in gear) - if(gear_datums[gear_name]) - var/datum/gear/G = gear_datums[gear_name] + for(var/i = 1; i <= gear.len; i++) + var/datum/gear/G = gear_datums[gear[i]] + if(G) total_cost += G.cost - dat += "[gear_name] \[remove\]
" + dat += "[gear[i]] ([G.cost] points) \[remove\]
" dat += "Used: [total_cost] points." else @@ -294,7 +294,7 @@ datum/preferences if(total_cost < MAX_GEAR_COST) dat += " \[add\]" if(gear && gear.len) - dat += " \[remove\]" + dat += " \[clear\]" dat += "

Occupation Choices
" dat += "\tSet Preferences
" @@ -882,17 +882,17 @@ datum/preferences total_cost += C.cost if(C && total_cost <= MAX_GEAR_COST) gear += choice - user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + user << "Added \the '[choice]' for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." else - user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + user << "Adding \the '[choice]' will exceed the maximum loadout cost of [MAX_GEAR_COST] points." else if(href_list["task"] == "remove") - var/to_remove = href_list["gear"] - if(!to_remove) return - for(var/gear_name in gear) - if(gear_name == to_remove) - gear -= gear_name - break + var/i_remove = text2num(href_list["gear"]) + if(i_remove < 1 || i_remove > gear.len) return + gear.Cut(i_remove, i_remove + 1) + + else if(href_list["task"] == "clear") + gear.Cut() else if(href_list["preference"] == "flavor_text") switch(href_list["task"]) @@ -1187,7 +1187,7 @@ datum/preferences b_type = new_b_type if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Human" || species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null if(new_hair) r_hair = hex2num(copytext(new_hair, 2, 4)) @@ -1267,7 +1267,7 @@ datum/preferences s_tone = 35 - max(min( round(new_s_tone), 220),1) if("skin") - if(species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference") as color|null if(new_skin) r_skin = hex2num(copytext(new_skin, 2, 4)) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 240f6602a3..5f2a5880cb 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -1,9 +1,10 @@ var/global/list/gear_datums = list() -proc/populate_gear_list() +/hook/startup/proc/populate_gear_list() for(var/type in typesof(/datum/gear)-/datum/gear) var/datum/gear/G = new type() gear_datums[G.display_name] = G + return 1 /datum/gear var/display_name //Name/index. @@ -176,12 +177,14 @@ proc/populate_gear_list() cost = 2 slot = slot_head +// This was sprited and coded specifically for Zhan-Khazan characters. Before you +// decide that it's 'not even Taj themed' maybe you should read the wiki, gamer. ~ Z /datum/gear/zhan_scarf - display_name = "headscarf, white" + display_name = "Zhan headscarf" path = /obj/item/clothing/head/tajaran/scarf cost = 2 slot = slot_head -// whitelisted = "Tajaran" // It's a headscarf. It isn't even a taj-themed headscarf! + whitelisted = "Tajara" // Eyes @@ -459,7 +462,7 @@ proc/populate_gear_list() path = /obj/item/clothing/suit/tajaran/furs cost = 3 slot = slot_wear_suit - whitelisted = "Tajaran" // You do have a monopoly on a fur suit tho + whitelisted = "Tajara" // You do have a monopoly on a fur suit tho // Gloves @@ -653,4 +656,4 @@ proc/populate_gear_list() /datum/gear/comb display_name = "purple comb" path = /obj/item/weapon/fluff/cado_keppel_1 - cost = 2 \ No newline at end of file + cost = 2 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fa4dad398d..232fd91dad 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -44,7 +44,7 @@ //Set species_restricted list switch(target_species) if("Human", "Skrell") //humanoid bodytypes - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -63,9 +63,9 @@ //Set species_restricted list switch(target_species) if("Skrell") - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") if("Human") - species_restricted = list("exclude","Skrell","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -177,7 +177,7 @@ BLIND // can't see anything body_parts_covered = HANDS slot_flags = SLOT_GLOVES attack_verb = list("challenged") - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/gloves.dmi') /obj/item/clothing/gloves/examine() @@ -214,7 +214,7 @@ BLIND // can't see anything desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return //Head @@ -248,7 +248,7 @@ BLIND // can't see anything permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi') //Suit diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index c40ff3e80c..976b16e7e6 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -3,29 +3,29 @@ user << "That won't work." //i'm not putting my lips on that! ..() return - + //add wires if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if (clipped) user << "The [src] are too badly mangled for wiring." return - + if(wired) user << "The [src] are already wired." return - + if(C.get_amount() < 2) user << "There is not enough wire to cover the [src]." return - + C.use(2) wired = 1 siemens_coefficient = 3.0 user << "You wrap some wires around the [src]." update_icon() return - + //add cell else if(istype(W, /obj/item/weapon/cell)) if(!wired) @@ -56,26 +56,26 @@ user << "You cut the wires away from the [src]." update_icon() return - + //clipping fingertips if(!clipped) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].") - + clipped = 1 name = "mangled [name]" desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return else user << "The [src] have already been clipped!" update_icon() return - + return - + ..() /obj/item/clothing/gloves/update_icon() diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index a8017a95da..4fef9c1958 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -14,15 +14,15 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE //Species-specific stuff. - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/helmet.dmi', - "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', + "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', "Skrell" = 'icons/mob/species/skrell/helmet.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/hats.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi', ) @@ -64,15 +64,15 @@ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/suit.dmi', - "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', + "Tajara" = 'icons/mob/species/tajaran/suit.dmi', "Skrell" = 'icons/mob/species/skrell/suit.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/suits.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi', ) @@ -364,7 +364,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.6 var/obj/machinery/camera/camera - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") /obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user) @@ -392,7 +392,7 @@ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) siemens_coefficient = 0.6 - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") //Wizard Rig diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 913b312d2c..bb875baff5 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1005,8 +1005,9 @@ desc = "A well maintained uniform from one of the many Private Security firms Nanotrasen hires from. The name Harper is printed on the back." icon = 'icons/obj/custom_items.dmi' icon_state = "harper_uniform" - item_state = "harper_uniform" + item_state = "jensensuit" item_color = "harper_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS //////////////////// Layla's Dress - Layla Davies-Halabi - sabirm /////////////// diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 60adf1e704..39128c4568 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -57,7 +57,7 @@ set category = "Object" set name = "Draw" set desc = "Draw a card from a deck." - set src in oview(1) + set src in view(1) if(usr.stat || !Adjacent(usr)) return @@ -93,6 +93,7 @@ set category = "Object" set name = "Deal" set desc = "Deal a card from a deck." + set src in view(1) if(usr.stat || !Adjacent(usr)) return @@ -101,28 +102,35 @@ return var/list/players = list() - for(var/mob/living/player in orange(3)) + for(var/mob/living/player in viewers(3)) if(!player.stat) players += player - players -= usr + //players -= usr var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players if(!usr || !src || !M) return - var/obj/item/weapon/hand/H = new(get_turf(src)) + deal_at(usr, M) + +/obj/item/weapon/deck/proc/deal_at(mob/user, mob/target) + var/obj/item/weapon/hand/H = new(get_step(user, user.dir)) H.cards += cards[1] cards -= cards[1] H.concealed = 1 H.update_icon() - usr.visible_message("\The [usr] deals a card to \the [M].") - H.throw_at(get_step(M,M.dir),10,1,H) + if(user==target) + user.visible_message("\The [user] deals a card to \himself.") + else + user.visible_message("\The [user] deals a card to \the [target].") + H.throw_at(get_step(target,target.dir),10,1,H) /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) if(istype(O,/obj/item/weapon/hand)) var/obj/item/weapon/hand/H = O for(var/datum/playingcard/P in H.cards) cards += P + src.concealed = H.concealed del(O) user.put_in_hands(src) update_icon() @@ -139,6 +147,18 @@ cards = newcards user.visible_message("\The [user] shuffles [src].") +/obj/item/weapon/deck/MouseDrop(atom/over) + if(!usr || !over) return + if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows + + if(!ishuman(over) || !(over in viewers(3))) return + + if(!cards.len) + usr << "There are no cards in the deck." + return + + deal_at(usr, over) + /obj/item/weapon/hand name = "hand of cards" desc = "Some playing cards." @@ -170,6 +190,7 @@ cards -= card H.concealed = 0 H.update_icon() + src.update_icon() usr.visible_message("\The [usr] plays \the [discarding].") H.loc = get_step(usr,usr.dir) @@ -188,7 +209,7 @@ for(var/datum/playingcard/P in cards) usr << "The [P.name]." -/obj/item/weapon/hand/update_icon() +/obj/item/weapon/hand/update_icon(var/direction = 0) if(!cards.len) del(src) @@ -211,12 +232,43 @@ overlays += I return - var/origin = -12 - var/offset = Floor(32/cards.len) + var/offset = Floor(20/cards.len) + var/matrix/M = matrix() + if(direction) + switch(direction) + if(NORTH) + M.Translate( 0, 0) + if(SOUTH) + M.Translate( 0, 4) + if(WEST) + M.Turn(90) + M.Translate( 3, 0) + if(EAST) + M.Turn(90) + M.Translate(-2, 0) var/i = 0 for(var/datum/playingcard/P in cards) var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = origin+(offset*i) + //I.pixel_x = origin+(offset*i) + switch(direction) + if(SOUTH) + I.pixel_x = 8-(offset*i) + if(WEST) + I.pixel_y = -6+(offset*i) + if(EAST) + I.pixel_y = 8-(offset*i) + else + I.pixel_x = -7+(offset*i) + I.transform = M overlays += I - i++ \ No newline at end of file + i++ + +/obj/item/weapon/hand/dropped(mob/user as mob) + if(locate(/obj/structure/table, loc)) + src.update_icon(user.dir) + else + update_icon() + +/obj/item/weapon/hand/pickup(mob/user as mob) + src.update_icon() \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 83b0616aea..5e6bd3cba1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -179,6 +179,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) + following = null dir = direct if(NewLoc) loc = NewLoc @@ -306,6 +307,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp usr << "No area available." usr.loc = pick(L) + following = null /mob/dead/observer/verb/follow() set category = "Ghost" @@ -325,18 +327,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp following = target src << "\blue Now following [target]" spawn(0) - var/turf/pos = get_turf(src) - while(loc == pos && target && following == target && client) + while(target && following == target && client) var/turf/T = get_turf(target) if(!T) break // To stop the ghost flickering. if(loc != T) loc = T - pos = loc sleep(15) - following = null - /mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" @@ -361,6 +359,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. A.loc = T + following = null else A << "This mob is not located in the game world." /* diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index fc7d589cd9..b592c6292b 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -1,6 +1,8 @@ //Stand-in until this is made more lore-friendly. /datum/species/xenos name = "Xenomorph" + name_plural = "Xenomorphs" + default_language = "Xenomorph" language = "Hivemind" unarmed_type = /datum/unarmed_attack/claws/strong @@ -40,7 +42,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -116,7 +117,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -155,7 +155,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/hunter, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -183,7 +182,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/sentinel, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -214,7 +212,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "egg sac" = /datum/organ/internal/xenos/eggsac, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c8294d7358..7194eba099 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1210,7 +1210,7 @@ src << msg organ.take_damage(rand(1,3), 0, 0) - if(!(organ.status & ORGAN_ROBOT)) //There is no blood in protheses. + if(!(organ.status & ORGAN_ROBOT) && !(species.flags & NO_BLOOD)) //There is no blood in protheses. organ.status |= ORGAN_BLEEDING src.adjustToxLoss(rand(1,3)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 46e70c06ac..b8030886c3 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -102,7 +102,6 @@ if(!G) //the grab will delete itself in New if affecting is anchored return M.put_in_active_hand(G) - grabbed_by += G G.synch() LAssailant = M diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index c313c6015e..051ef214f4 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -12,7 +12,7 @@ /mob/living/carbon/human/tajaran/New(var/new_loc) h_style = "Tajaran Ears" - ..(new_loc, "Tajaran") + ..(new_loc, "Tajara") /mob/living/carbon/human/unathi/New(var/new_loc) h_style = "Unathi Horns" diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 6178cddf3c..27883d145e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -687,6 +687,7 @@ It can still be worn/put on as normal. for (var/obj/item/weapon/grab/G in target.grabbed_by) if (G.loc == source && G.state >= GRAB_AGGRESSIVE) grabbing = 1 + break if (!grabbing) slot_to_process = null source << "\red Your grasp was broken before you could restrain [target]!" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 917251731d..bc94620069 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -5,6 +5,7 @@ /datum/species var/name // Species name. + var/name_plural var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. @@ -202,6 +203,7 @@ /datum/species/human name = "Human" + name_plural = "Humans" language = "Sol Common" primitive = /mob/living/carbon/monkey unarmed_type = /datum/unarmed_attack/punch @@ -213,6 +215,7 @@ /datum/species/unathi name = "Unathi" + name_plural = "Unathi" icobase = 'icons/mob/human_races/r_lizard.dmi' deform = 'icons/mob/human_races/r_def_lizard.dmi' language = "Sinta'unathi" @@ -239,7 +242,8 @@ base_color = "#066000" /datum/species/tajaran - name = "Tajaran" + name = "Tajara" + name_plural = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi' language = "Siik'tajr" @@ -264,6 +268,7 @@ /datum/species/skrell name = "Skrell" + name_plural = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' deform = 'icons/mob/human_races/r_def_skrell.dmi' language = "Skrellian" @@ -278,6 +283,7 @@ /datum/species/vox name = "Vox" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_vox.dmi' deform = 'icons/mob/human_races/r_def_vox.dmi' default_language = "Vox-pidgin" @@ -324,6 +330,7 @@ /datum/species/vox/armalis name = "Vox Armalis" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_armalis.dmi' deform = 'icons/mob/human_races/r_armalis.dmi' rarity_value = 10 @@ -364,6 +371,7 @@ /datum/species/diona name = "Diona" + name_plural = "Dionaea" icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' language = "Rootspeak" @@ -428,6 +436,8 @@ /datum/species/machine name = "Machine" + name_plural = "machines" + icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' language = "Tradeband" @@ -551,6 +561,7 @@ var/has_throw = 1 // Set to draw throw button. var/has_resist = 1 // Set to draw resist button. var/has_internals = 1 // Set to draw the internals toggle button. + var/list/equip_slots = list() // Checked by mob_can_equip(). // Contains information on the position and tag for all inventory slots // to be drawn for the mob. This is fairly delicate, try to avoid messing with it @@ -572,3 +583,18 @@ "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"), "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt") ) + +/datum/hud_data/New() + ..() + for(var/slot in gear) + equip_slots |= gear[slot]["slot"] + + if(has_hands) + equip_slots |= slot_l_hand + equip_slots |= slot_r_hand + equip_slots |= slot_handcuffed + + if(slot_back in equip_slots) + equip_slots |= slot_in_backpack + + equip_slots |= slot_legcuffed \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a49760a527..f3a13b6035 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -177,6 +177,7 @@ var/global/list/damage_icon_parts = list() proc/get_damage_icon_part(damage_state, body_part) if(damage_icon_parts["[damage_state]/[body_part]"] == null) var/icon/DI = new /icon('icons/mob/dam_human.dmi', damage_state) // the damage icon for whole human + // TODO: Convert dam_human.dmi to greyscale and blend in species.blood_colour here. DI.Blend(new /icon('icons/mob/dam_mask.dmi', body_part), ICON_MULTIPLY) // mask with this organ's pixels damage_icon_parts["[damage_state]/[body_part]"] = DI return DI diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index a38ba9c695..4371c68f8f 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -94,7 +94,7 @@ ..() dna.mutantrace = "tajaran" - greaterform = "Tajaran" + greaterform = "Tajara" add_language("Siik'tajr") /mob/living/carbon/monkey/movement_delay() @@ -231,7 +231,6 @@ M.put_in_active_hand(G) - grabbed_by += G G.synch() LAssailant = M @@ -256,6 +255,7 @@ return /mob/living/carbon/monkey/attack_animal(mob/living/M as mob) + if(M.melee_damage_upper == 0) M.emote("[M.friendly] [src]") else diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a6d6f02d39..2e60eed9fc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -861,6 +861,7 @@ var/list/robot_verbs_default = list( spark_system.start() return ..() + /mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob) if (!ticker) M << "You cannot attack people before the game has started." diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm index 9f47dd6cf4..c07a105cbb 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm @@ -181,6 +181,9 @@ H.internal_organs_by_name["brain"] = B H.internal_organs |= B + var/datum/organ/external/affecting = H.get_organ("head") + affecting.implants -= src + var/s2h_id = src.computer_id var/s2h_ip= src.lastKnownIP src.computer_id = null diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b9e6e714dd..f65d25d929 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -250,7 +250,6 @@ M.put_in_active_hand(G) - grabbed_by += G G.synch() G.affecting = src LAssailant = M diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index ad8915f5e3..d6e6496f9d 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -28,6 +28,8 @@ del(src) return + affecting.grabbed_by += src + hud = new /obj/screen/grab(src) hud.icon_state = "reinforce" hud.name = "reinforce grab" diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 1e5906eaef..3b231b751e 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -496,7 +496,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Machine") + species_allowed = list("Human","Unathi","Tajara","Skrell","Vox","Machine") watson name = "Watson Mustache" @@ -636,62 +636,62 @@ taj_ears name = "Tajaran Ears" icon_state = "ears_plain" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_clean name = "Tajara Clean" icon_state = "hair_clean" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_bangs name = "Tajara Bangs" icon_state = "hair_bangs" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_braid name = "Tajara Braid" icon_state = "hair_tbraid" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_shaggy name = "Tajara Shaggy" icon_state = "hair_shaggy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_mohawk name = "Tajaran Mohawk" icon_state = "hair_mohawk" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_plait name = "Tajara Plait" icon_state = "hair_plait" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_straight name = "Tajara Straight" icon_state = "hair_straight" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_long name = "Tajara Long" icon_state = "hair_long" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_rattail name = "Tajara Rat Tail" icon_state = "hair_rattail" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_spiky name = "Tajara Spiky" icon_state = "hair_tajspiky" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_messy name = "Tajara Messy" icon_state = "hair_messy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") vox_quills_short name = "Short Vox Quills" @@ -703,32 +703,32 @@ taj_sideburns name = "Tajara Sideburns" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_mutton name = "Tajara Mutton" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_pencilstache name = "Tajara Pencilstache" icon_state = "facial_pencilstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_moustache name = "Tajara Moustache" icon_state = "facial_moustache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_goatee name = "Tajara Goatee" icon_state = "facial_goatee" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_smallstache name = "Tajara Smallsatche" icon_state = "facial_smallstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") //skin styles - WIP //going to have to re-integrate this with surgery @@ -750,7 +750,7 @@ name = "Default tajaran skin" icon_state = "default" icon = 'icons/mob/human_races/r_tajaran.dmi' - species_allowed = list("Tajaran") + species_allowed = list("Tajara") unathi name = "Default Unathi skin" diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 32f6bfc13f..203159f3c6 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -8,10 +8,14 @@ mob/var/last_typed_time var/global/image/typing_indicator /mob/proc/set_typing_indicator(var/state) + + if(!typing_indicator) + typing_indicator = image('icons/mob/talk.dmi',null,"typing") + if(client) - if(!(client.prefs.toggles & SHOW_TYPING)) - if(!typing_indicator) - typing_indicator = image('icons/mob/talk.dmi',null,"typing") + if(client.prefs.toggles & SHOW_TYPING) + overlays -= typing_indicator + else if(state) if(!typing) overlays += typing_indicator @@ -72,5 +76,10 @@ var/global/image/typing_indicator set desc = "Toggles showing an indicator when you are typing emote or say message." prefs.toggles ^= SHOW_TYPING prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_OOC) ? "no longer" : "now"] display typing indicator." - feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + src << "You will [(prefs.toggles & SHOW_TYPING) ? "no longer" : "now"] display a typing indicator." + + // Clear out any existing typing indicator. + if(prefs.toggles & SHOW_TYPING) + if(istype(mob)) mob.set_typing_indicator(0) + + feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 45eb41585d..9af498eea3 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -32,7 +32,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(B.id == "blood") B.data = list( "donor"=src,"viruses"=null,"species"=species.name,"blood_DNA"=dna.unique_enzymes,"blood_colour"= species.blood_color,"blood_type"=dna.b_type, \ "resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = null) - B.color = B.data["blood_color"] + B.color = B.data["blood_colour"] // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index 8ecb8bb658..ae70f485d9 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -96,8 +96,8 @@ if(!istype(H)) return - var/datum/reagent/blood = H.vessel.reagent_list["blood"] - blood_splatter(H,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list + blood_splatter(H,B,1) var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner) if(goo) goo.name = "husk ichor" @@ -170,27 +170,31 @@ name = "xeno organ" icon = 'icons/effects/blood.dmi' desc = "It smells like an accident in a chemical factory." - organ_tag = "special" //TODO functionality for transplants. /obj/item/organ/xenos/eggsac name = "egg sac" icon_state = "xgibmid1" + organ_tag = "egg sac" /obj/item/organ/xenos/plasmavessel name = "plasma vessel" - icon_state = "xgibdown" + icon_state = "xgibdown1" + organ_tag = "plasma vessel" /obj/item/organ/xenos/acidgland name = "acid gland" icon_state = "xgibtorso" + organ_tag = "acid gland" /obj/item/organ/xenos/hivenode name = "hive node" icon_state = "xgibmid2" + organ_tag = "hive node" /obj/item/organ/xenos/resinspinner name = "hive node" icon_state = "xgibmid2" + organ_tag = "resin spinner" //VOX ORGANS. /datum/organ/internal/stack diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c4df67cc87..874bb93672 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -490,13 +490,18 @@ Note that amputating the affected organ does in fact remove the infection from t burn_dam = 0 status &= ~ORGAN_BLEEDING var/clamped = 0 + + var/mob/living/carbon/human/H + if(istype(owner,/mob/living/carbon/human)) + H = owner + for(var/datum/wound/W in wounds) if(W.damage_type == CUT || W.damage_type == BRUISE) brute_dam += W.damage else if(W.damage_type == BURN) burn_dam += W.damage - if(!(status & ORGAN_ROBOT) && W.bleeding()) + if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && !(H.species.flags & NO_BLOOD))) W.bleed_timer-- status |= ORGAN_BLEEDING @@ -504,7 +509,7 @@ Note that amputating the affected organ does in fact remove the infection from t number_wounds += W.amount - if (open && !clamped) //things tend to bleed if they are CUT OPEN + if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN status |= ORGAN_BLEEDING diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5605f8c40f..907d5fa122 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -83,14 +83,15 @@ if(rejecting % 10 == 0) //Only fire every ten rejection ticks. switch(rejecting) if(1 to 50) - take_damage(rand(1,2)) + take_damage(1) if(51 to 200) - take_damage(rand(2,3)) - if(201 to 500) - take_damage(rand(3,4)) owner.reagents.add_reagent("toxin", 1) + take_damage(1) + if(201 to 500) + take_damage(rand(2,3)) + owner.reagents.add_reagent("toxin", 2) if(501 to INFINITY) - take_damage(5) + take_damage(4) owner.reagents.add_reagent("toxin", rand(3,5)) /datum/organ/internal/proc/take_damage(amount, var/silent=0) diff --git a/code/modules/organs/organ_objects.dm b/code/modules/organs/organ_objects.dm index ea49f7276a..178958d936 100644 --- a/code/modules/organs/organ_objects.dm +++ b/code/modules/organs/organ_objects.dm @@ -46,8 +46,8 @@ if(fresh && prob(40)) fresh-- - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) health -= rand(1,3) if(health <= 0) @@ -215,8 +215,8 @@ return user << "\blue You take an experimental bite out of \the [src]." - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) user.drop_from_inventory(src) diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index ce31514adc..f15d032221 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -66,13 +66,13 @@ // TG uses a special garbage collector.. qdel(P) del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. -/obj/item/device/camera/siliconcam/proc/deletepicture(obj/item/device/camera/siliconcam/cam) - var/datum/picture/selection = selectpicture(cam) +/obj/item/device/camera/siliconcam/proc/deletepicture() + var/datum/picture/selection = selectpicture() if(!selection) return - cam.aipictures -= selection + aipictures -= selection usr << "Image deleted" /obj/item/device/camera/siliconcam/ai_camera/can_capture_turf(turf/T, mob/user) @@ -147,7 +147,12 @@ set src in usr // Explicitly only allow deletion from the local camera - deletepicture(src) + var/mob/living/silicon/robot/C = src.loc + if(C.connected_ai) + C << "Not allowed to delete from the remote database." + return + + deletepicture() obj/item/device/camera/siliconcam/proc/getsource() if(istype(src.loc, /mob/living/silicon/ai)) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 18400350d8..b4c8cfc2f5 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -234,7 +234,7 @@ user << "There is already a [nicetype] at that location." return - anchored = 1 + anchored = 1 if(ispipe) level = 1 // We don't want disposal bins to disappear under the floors density = 0 diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 2037ef78e5..ad1b300481 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -5,6 +5,8 @@ //3 = code delta //config.alert_desc_blue_downto +/var/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg')) +/var/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1) /proc/set_security_level(var/level) switch(level) @@ -21,7 +23,7 @@ if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level) switch(level) if(SEC_LEVEL_GREEN) - security_announcement.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green") + security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green") security_level = SEC_LEVEL_GREEN for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) @@ -29,9 +31,9 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_green") if(SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE) - security_announcement.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue") + security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue") else - security_announcement.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue") + security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue") security_level = SEC_LEVEL_BLUE for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) @@ -39,9 +41,9 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_blue") if(SEC_LEVEL_RED) if(security_level < SEC_LEVEL_RED) - security_announcement.Announce("[config.alert_desc_red_upto]", "Attention! Code red!") + security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Code red!") else - security_announcement.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") + security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") security_level = SEC_LEVEL_RED /* - At the time of commit, setting status displays didn't work properly @@ -55,7 +57,7 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_red") if(SEC_LEVEL_DELTA) - security_announcement.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!") + security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!") security_level = SEC_LEVEL_DELTA for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index a05c6f120b..238657c28d 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -52,7 +52,10 @@ "\blue You have made a bloodless incision on [target]'s [affected.display_name] with \the [tool].",) //Could be cleaner ... affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() spread_germs_to_organ(affected, user) @@ -89,7 +92,10 @@ user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].", \ "\blue You have constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() affected.open = 2 @@ -128,7 +134,10 @@ user.visible_message("\blue [user] has made an incision on [target]'s [affected.display_name] with \the [tool].", \ "\blue You have made an incision on [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index e2ad2be210..b5fbb3ecb0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -327,7 +327,7 @@ O.organ_data.rejecting = null // Transfer over some blood data, if the organ doesn't have data. - var/datum/reagent/blood/organ_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!organ_blood || !organ_blood.data["blood_DNA"]) target.vessel.trans_to(O, 5, 1, 1) @@ -367,32 +367,32 @@ if(!target.species) user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 0 + return 2 var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : " a" + var/o_a = (O.gender == PLURAL) ? "" : "a " var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" if(target.species.has_organ[O.organ_tag]) if(!O.health) user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 0 + return 2 if(!target.internal_organs_by_name[O.organ_tag]) organ_missing = 1 else user << "\red \The [target] already has [o_a][O.organ_tag]." - return 0 + return 2 if(O.organ_data && affected.name == O.organ_data.parent_organ) organ_compatible = 1 else user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.display_name]." - return 0 + return 2 else - user << "\red \A [target.species.name] doesn't normally have [o_a][O.organ_tag]." - return 0 + user << "\red You're pretty sure [target.species.name_plural] don't normally have [o_a][O.organ_tag]." + return 2 return ..() && organ_missing && organ_compatible @@ -412,7 +412,7 @@ if(istype(O)) - var/datum/reagent/blood/transplant_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!transplant_blood) O.organ_data.transplant_data = list() O.organ_data.transplant_data["species"] = target.species.name diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 9ce44d1260..c5e883e79a 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -77,21 +77,34 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. -proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) - if(!istype(M,/mob/living/carbon)) +proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) + if(!istype(M)) return 0 if (user.a_intent == "harm") //check for Hippocratic Oath return 0 + if(M.op_stage.in_progress) //Can't operate on someone repeatedly. + user << "\red You can't operate on the patient while surgery is already in progress." + return 1 + for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible - if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_target(M)) - S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it - //We had proper tools! (or RNG smiled.) and user did not move or change hands. - if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully - else if (tool in user.contents && user.Adjacent(M)) //or - S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ - return 1 //don't want to do weapony things after surgery + if(S.tool_quality(tool)) + var/step_is_valid = S.can_use(user, M, user.zone_sel.selecting, tool) + if(step_is_valid && S.is_valid_target(M)) + if(step_is_valid == 2) // This is a failure that already has a message for failing. + return 1 + M.op_stage.in_progress = 1 + S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it + //We had proper tools! (or RNG smiled.) and user did not move or change hands. + if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) + S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully + else if (tool in user.contents && user.Adjacent(M)) //or + S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ + else // This failing silently was a pain. + user << "\red You must remain close to your patient to conduct surgery." + M.op_stage.in_progress = 0 // Clear the in-progress flag. + return 1 //don't want to do weapony things after surgery + if (user.a_intent == "help") user << "\red You can't see any useful way to use [tool] on [M]." return 1 @@ -116,6 +129,6 @@ proc/sort_surgeries() /datum/surgery_status/ var/eyes = 0 var/face = 0 - var/appendix = 0 var/head_reattach = 0 - var/current_organ + var/current_organ = "organ" + var/in_progress = 0 \ No newline at end of file diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index d21f8b72af..977c9ab9ca 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -10,7 +10,7 @@ var/list/datum/disease2/effectholder/effects = list() var/antigen = 0 // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here var/max_stage = 4 - var/list/affected_species = list("Human","Unathi","Skrell","Tajaran") + var/list/affected_species = list("Human","Unathi","Skrell","Tajara") /datum/disease2/disease/New() uniqueID = rand(0,10000) diff --git a/code/unused/hivebot/hivebot.dm b/code/unused/hivebot/hivebot.dm index cf764c088b..ade7dab091 100644 --- a/code/unused/hivebot/hivebot.dm +++ b/code/unused/hivebot/hivebot.dm @@ -207,7 +207,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - src.grabbed_by += G G.synch() playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 2f31429878..362dcc96ea 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index c83c988676..9205508d66 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -347,7 +347,7 @@ macro "hotkeymode" is-disabled = false elem name = "T" - command = "say" + command = ".say" is-disabled = false elem "w_key" name = "W+REP" diff --git a/nano/templates/escape_shuttle_control_console.tmpl b/nano/templates/escape_shuttle_control_console.tmpl index 968860c0ff..8fdb6b4cc5 100644 --- a/nano/templates/escape_shuttle_control_console.tmpl +++ b/nano/templates/escape_shuttle_control_console.tmpl @@ -65,7 +65,7 @@
{{for data.auth_list}} {{if value.auth_hash}} - {{:helper.link(auth_name, 'eject', {'removeid' : value.auth_hash}, null, 'itemContentWide')}} + {{:helper.link(value.auth_name, 'eject', {'removeid' : value.auth_hash}, null, 'itemContentWide')}} {{else}} {{:helper.link("", 'eject', {'scanid' : 1}, null, 'itemContentWide')}} {{/if}} diff --git a/nano/templates/identification_computer.tmpl b/nano/templates/identification_computer.tmpl index d7635dc9f7..e783d9e3af 100644 --- a/nano/templates/identification_computer.tmpl +++ b/nano/templates/identification_computer.tmpl @@ -209,7 +209,7 @@
{{for data.all_centcom_access}}
- {{:helper.link(value.desc, '', {'choice' : 'access', 'access_target' : value.ref, 'allowed' : allowed}, null, value.allowed ? 'selected' : null)}} + {{:helper.link(value.desc, '', {'choice' : 'access', 'access_target' : value.ref, 'allowed' : value.allowed}, null, value.allowed ? 'selected' : null)}}
{{/for}}
diff --git a/sound/misc/notice1.ogg b/sound/misc/notice1.ogg new file mode 100644 index 0000000000..da6454ce3c Binary files /dev/null and b/sound/misc/notice1.ogg differ diff --git a/sound/misc/notice2.ogg b/sound/misc/notice2.ogg new file mode 100644 index 0000000000..3489ca3e15 Binary files /dev/null and b/sound/misc/notice2.ogg differ