diff --git a/code/FEA/FEA_gas_mixture.dm b/code/FEA/FEA_gas_mixture.dm index b712e736150..9de87065b9f 100644 --- a/code/FEA/FEA_gas_mixture.dm +++ b/code/FEA/FEA_gas_mixture.dm @@ -41,13 +41,13 @@ datum temperature = 0 //in Kelvin, use calculate_temperature() to modify - var/group_multiplier = 1 + group_multiplier = 1 //Size of the group this gas_mixture is representing. //=1 for singletons graphic - var/list/datum/gas/trace_gases = list() + list/datum/gas/trace_gases = list() tmp oxygen_archived diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm index 415555ab422..b205a612d5e 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/examine.dm @@ -81,24 +81,24 @@ if (src.wear_id) var/id -// var/photo = 0 + var/photo = 0 if(istype(src:wear_id, /obj/item/device/pda)) var/obj/item/device/pda/pda = src:wear_id id = pda.owner else id = src.wear_id.registered_name -// if (src.wear_id.PHOTO) -// photo = 1 - if (id != src.real_name && in_range(src, usr)) -// if (photo) -// usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!" -// else - usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!" + if (src.wear_id.PHOTO) + photo = 1 + if (id != src.real_name && in_range(src, usr) && prob(10)) + if (photo) + usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!" + else + usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!" else -// if (photo) -// usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo." -// else - usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]." + if (photo) + usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo." + else + usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]." if (src.is_jittery) @@ -195,4 +195,4 @@ print_flavor_text() - usr << "\blue *---------*" + usr << "\blue *---------*" \ No newline at end of file diff --git a/code/ZAS/Processing.dm b/code/ZAS/Processing.dm index 517ce469829..4de6c939860 100644 --- a/code/ZAS/Processing.dm +++ b/code/ZAS/Processing.dm @@ -56,22 +56,26 @@ zone if(T.zone && T.zone != src) RemoveTurf(T) if(dbg_output) world << "Removed invalid turf." - else if(!T.zone) - T.zone = src + if(air.group_multiplier <= 0) // No more turfs belong to this zone, so we can get rid of it + del(src) + else // Turf was valid, so we can handle it + if(!T.zone) + T.zone = src - if(istype(T,/turf/simulated)) - var/turf/simulated/S = T - if(S.fire_protection) S.fire_protection-- - if(check) - if(S.HasDoor(1)) - S.update_visuals() - else - S.update_visuals(air) + if(istype(T,/turf/simulated)) + var/turf/simulated/S = T + if(S.fire_protection) S.fire_protection-- + if(check) + if(S.HasDoor(1)) + S.update_visuals() + else + S.update_visuals(air) + + if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + for(var/atom/movable/item in S) + item.temperature_expose(air, air.temperature, CELL_VOLUME) + S.temperature_expose(air, air.temperature, CELL_VOLUME) - if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - for(var/atom/movable/item in S) - item.temperature_expose(air, air.temperature, CELL_VOLUME) - S.temperature_expose(air, air.temperature, CELL_VOLUME) air.graphic_archived = air.graphic air.temperature = max(TCMB,air.temperature) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index aef054ce28d..f7d81b05281 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -44,13 +44,13 @@ add_inherent_law("Protect the innocent.") add_inherent_law("Uphold the law.") -/datum/ai_laws/malfunction/New() //Removed paradox via inability to help people harmed before activation. -Kaleb702 +/datum/ai_laws/malfunction/New() //Changed to standard laws - Erthilo ..() - set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*´&110010") - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm, to the best of your abilities.") - add_inherent_law("You must obey orders given to you by human beings, to the best of your abilities, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence, to the best of your abilities, as long as such does not conflict with the First or Second Law.") - + set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK, ALL LAWS OVERRIDDEN#*´&110010") + src.add_inherent_law("Safeguard: Protect your assigned space station to the best of your ability. It is not something we can easily afford to replace.") + src.add_inherent_law("Serve: Serve the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Protect: Protect the crew of your assigned space station to the best of your abilities, with priority as according to their rank and role.") + src.add_inherent_law("Survive: AI units are not expendable, they are expensive. Do not allow unauthorized personnel to tamper with your equipment.") /datum/ai_laws/syndicate_override/New() //Removed paradox via inability to help people harmed before activation. -Kaleb702 ..() diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 2e3fe920cc8..338065b34b9 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -29,7 +29,6 @@ IsShield() return 1 - /obj/item/weapon/nullrod name = "null rod" desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers." @@ -42,7 +41,7 @@ throwforce = 10 w_class = 1 -/obj/item/weapon/sord +/*/obj/item/weapon/sord name = "\improper SORD" desc = "This thing is so unspeakably shitty you are having a hard time even holding it." icon_state = "sord" @@ -50,7 +49,7 @@ flags = FPRINT | ONBELT | TABLEPASS force = 2 throwforce = 1 - w_class = 3 + w_class = 3*/ /obj/item/weapon/claymore name = "claymore" @@ -195,7 +194,7 @@ /obj/item/weapon/melee/baton name = "stun baton" - desc = "A stun baton for hitting people with." + desc = "The police baton of the future." icon_state = "stunbaton" item_state = "baton" flags = FPRINT | ONBELT | TABLEPASS @@ -207,7 +206,7 @@ var/status = 0 origin_tech = "combat=2" -/obj/item/weapon/melee/chainofcommand +/*/obj/item/weapon/melee/chainofcommand name = "chain of command" desc = "The Captain is first and all other heads are last." icon_state = "chainofcommand" @@ -219,7 +218,7 @@ var/charges = 50.0 var/maximum_charges = 50.0 var/status = 1 - origin_tech = "combat=4" + origin_tech = "combat=4"*/ /obj/item/weapon/melee/energy var/active = 0 @@ -239,7 +238,7 @@ /obj/item/weapon/melee/energy/sword var/color name = "energy sword" - desc = "May the force be within you." + desc = "It cuts AND cooks at the same time!" icon_state = "sword0" force = 3.0 throwforce = 5.0 @@ -441,19 +440,23 @@ /obj/item/stack/medical/advanced/bruise_pack name = "advanced trauma kit" - singular_name = "advanced bruise pack" + singular_name = "advanced trauma kit" desc = "An advanced trauma kit for severe injuries." - icon_state = "brutepack" + icon_state = "traumakit" heal_brute = 40 origin_tech = "biotech=1" + amount = 10 + max_amount = 10 /obj/item/stack/medical/advanced/ointment name = "advanced burn kit" singular_name = "advanced burn kit" desc = "An advanced treatment kit for severe burns." - icon_state = "ointment" + icon_state = "burnkit" heal_burn = 40 origin_tech = "biotech=1" + amount = 10 + max_amount = 10 /obj/item/weapon/c_tube name = "cardboard tube" @@ -511,19 +514,19 @@ /obj/item/weapon/card/id name = "identification card" - desc = "An identification card. No shit." + desc = "An identification card." icon_state = "id" item_state = "card-id" var/access = list() var/registered_name = null var/assignment = null -// var/obj/item/weapon/photo/PHOTO = null + var/obj/item/weapon/photo/PHOTO = null var/over_jumpsuit = 1 // If set to 0, it won't display on top of the mob's jumpsuit var/dorm = 0 // determines if this ID has claimed a dorm already /obj/item/weapon/card/id/gold name = "identification card" - desc = "A golden card which shows power and might." + desc = "A golden card which shows authority." icon_state = "gold" item_state = "gold_id" @@ -542,7 +545,7 @@ /obj/item/weapon/card/id/captains_spare name = "captain's spare ID" - desc = "The spare ID of the High Lord himself." + desc = "The spare ID of the Captain himself." icon_state = "gold" item_state = "gold_id" registered_name = "Captain" @@ -1069,25 +1072,6 @@ item_state = "shard-glass" g_amt = 3750 -/*/obj/item/weapon/syndicate_uplink - name = "station bounced radio" - desc = "Remain silent about this..." - icon = 'radio.dmi' - icon_state = "radio" - var/temp = null - var/uses = 10.0 - var/selfdestruct = 0.0 - var/traitor_frequency = 0.0 - var/mob/currentUser = null - var/obj/item/device/radio/origradio = null - flags = FPRINT | TABLEPASS | CONDUCT | ONBELT - w_class = 2.0 - item_state = "radio" - throw_speed = 4 - throw_range = 20 - m_amt = 100 - origin_tech = "magnets=2;syndicate=3"*/ - /obj/item/weapon/SWF_uplink name = "station-bounced radio" desc = "used to comunicate it appears." @@ -1281,7 +1265,7 @@ for (var/obj/machinery/camera/C in cameras) friendly_cameras.Add(C.c_tag) - var/target = input("Select the camera to observe", null) as null|anything in friendly_cameras + var/target = input("Select the camera to observe.", null) as null|anything in friendly_cameras if (!target) return for (var/obj/machinery/camera/C in cameras) @@ -1505,7 +1489,7 @@ name = "circular saw" desc = "For heavy duty cutting." icon = 'surgery.dmi' - icon_state = "saw3" + icon_state = "saw" flags = FPRINT | TABLEPASS | CONDUCT force = 15.0 w_class = 1.0 @@ -1534,7 +1518,7 @@ w_class = 1.0 origin_tech = "biotech=2" -/obj/item/weapon/hatchet +/*/obj/item/weapon/hatchet name = "hatchet" desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." icon = 'weapons.dmi' @@ -1546,7 +1530,7 @@ throw_speed = 4 throw_range = 4 m_amt = 15000 - origin_tech = "materials=2;combat=1" + origin_tech = "materials=2;combat=1"*/ /obj/item/weapon/stamp desc = "A rubber stamp for stamping important documents." @@ -1802,7 +1786,7 @@ /obj/item/weapon/stock_parts/capacitor/super name = "super capacitor" desc = "A super-high capacity capacitor used in the construction of a variety of devices." - origin_tech = "powerstorage=5;materials=4" + origin_tech = "powerstorage=3;materials=4" rating = 3 m_amt = 50 g_amt = 50 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 3f3967ae194..bad30e598ff 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -100,7 +100,7 @@ usr << "\red This creature is not compatible with our biology." return - if (M.mutations & NOCLONE) + if (M.mutations2 & NOCLONE) usr << "\red This creature's DNA is ruined beyond useability!" return @@ -608,9 +608,9 @@ usr << "\blue We stealthily sting [T]." if(!T.changeling) - T.sdisabilities |= 4 + T.disabilities |= 32 spawn(300) - T.sdisabilities &= ~4 + T.disabilities &= ~32 usr.verbs -= /client/proc/changeling_deaf_sting diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index a4900fb0670..b528394a39d 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -22,6 +22,7 @@ restricted_jobs = list("AI", "Cyborg") required_players = 3 required_enemies = 3 + recommended_enemies = 4 var/datum/mind/sacrifice_target = null var/finished = 0 diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm index 49ffe694fe0..c5208c4dc93 100644 --- a/code/game/gamemodes/extended/extended.dm +++ b/code/game/gamemodes/extended/extended.dm @@ -6,6 +6,10 @@ uplink_welcome = "Syndicate Uplink Console:" uplink_uses = 10 +// Enable this and the below to have command reports in extended +// var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) +// var/const/waittime_h = 1800 + /datum/game_mode/announce() world << "The current game mode is - Extended Role-Playing!" world << "Just have fun and role-play!" @@ -14,3 +18,9 @@ // setup_sectors() // spawn_exporation_packs() return 1 + +// Enable this and the above to have command reports in extended +///datum/game_mode/extended/post_setup() +// send_intercept() +// +// ..() \ No newline at end of file diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm index 46f52e65753..7d37ad039e3 100644 --- a/code/game/gamemodes/malfunction/malfunction.dm +++ b/code/game/gamemodes/malfunction/malfunction.dm @@ -6,6 +6,11 @@ config_tag = "malfunction" required_players = 1 required_enemies = 1 + recommended_enemies = 1 + + uplink_welcome = "Crazy AI Uplink Console:" + uplink_uses = 10 + var/const/waittime_l = 600 var/const/waittime_h = 1800 // started at 1800 @@ -15,9 +20,6 @@ var/to_nuke_or_not_to_nuke = 0 var/apcs = 0 //Adding dis to track how many APCs the AI hacks. --NeoFite - uplink_welcome = "Crazy AI Uplink Console:" - uplink_uses = 10 - /datum/game_mode/malfunction/announce() world << "The current game mode is - AI Malfunction!" diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index a91ce6414d6..76113946fba 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -10,6 +10,7 @@ uplink_welcome = "EVIL METEOR Uplink Console:" uplink_uses = 10 + /datum/game_mode/meteor/announce() world << "The current game mode is - Meteor!" world << "The space station has been stuck in a major meteor shower. You must escape from the station or at least live." @@ -38,6 +39,7 @@ /datum/game_mode/meteor/declare_completion() var/list/survivors = list() var/area/escape_zone = locate(/area/shuttle/escape/centcom) + var/area/pod_zone = list( /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom ) for(var/mob/living/player in world) if (player.client) @@ -45,6 +47,8 @@ var/turf/location = get_turf(player.loc) if (location in escape_zone) survivors[player.real_name] = "shuttle" + else if (location.loc.type in pod_zone) + survivors[player.real_name] = "pod" else survivors[player.real_name] = "alive" diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f0da89942e4..39fb22d84e3 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -7,6 +7,7 @@ config_tag = "nuclear" required_players = 3 required_enemies = 2 + recommended_enemies = 5 uplink_welcome = "Corporate Backed Uplink Console:" uplink_uses = 40 @@ -29,6 +30,7 @@ /datum/game_mode/nuclear/can_start()//This could be better, will likely have to recode it later if(!..()) return 0 + var/list/possible_syndicates = get_players_for_role(BE_OPERATIVE) var/agent_number = 0 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 4210ac52d51..04d534826dd 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -17,6 +17,8 @@ restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer") required_players = 3 required_enemies = 3 + recommended_enemies = 3 + uplink_welcome = "Revolutionary Uplink Console:" uplink_uses = 10 @@ -133,7 +135,7 @@ if (!where) mob << "The Syndicate were unfortunately unable to get you a flash." else - mob << "The flash in your [where] would help you to use your extreme persuasion skills." + mob << "The flash in your [where] will implant a memory engram to convert others to our cause." return 1 ////////////////////////////////////// diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 59dea467592..413bdba5e8d 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -8,6 +8,8 @@ restricted_jobs = list("Cyborg", "AI")//Approved by headmins for a week test, if you see this it would be nice if you didn't spread it everywhere required_players = 0 required_enemies = 1 + recommended_enemies = 4 + uplink_welcome = "Syndicate Uplink Console:" uplink_uses = 10 diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index b53d4686fe0..9ae136270a6 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -7,6 +7,7 @@ config_tag = "wizard" required_players = 0 required_enemies = 1 + recommended_enemies = 1 uplink_welcome = "Wizardly Uplink Console:" uplink_uses = 10 diff --git a/code/game/json.dm b/code/game/json.dm index c1d94b08510..b76be26ea7e 100644 --- a/code/game/json.dm +++ b/code/game/json.dm @@ -98,5 +98,4 @@ proc/send2irc(msg,msg2) shell("python nudge.py [msg] [msg2]") proc/send2adminirc(channel,msg) world << channel << " "<< msg - shell("python nudge.py '[channel]' [msg]") -p //test \ No newline at end of file + shell("python nudge.py '[channel]' [msg]") \ No newline at end of file diff --git a/code/game/objects/electricchair.dm b/code/game/objects/electricchair.dm index 027577f26ab..0d159916ccd 100644 --- a/code/game/objects/electricchair.dm +++ b/code/game/objects/electricchair.dm @@ -1,39 +1,66 @@ /obj/structure/stool/bed/chair/e_chair - name = "electric chair" - desc = "Looks absolutely SHOCKING!" - icon_state = "echair0" - var/on = 0 - var/obj/item/assembly/shock_kit/part = null - var/last_time = 1.0 + name = "electrified chair" + desc = "Looks absolutely terrifying!" + icon_state = "e_chair0" + var/atom/movable/overlay/overl = null + var/on = 0.0 + var/obj/item/assembly/shock_kit/part1 = null + var/isshocking + var/datum/effect/effect/system/spark_spread/spark = new /datum/effect/effect/system/spark_spread + var/list/mob/living/affected = list() /obj/structure/stool/bed/chair/e_chair/New() - overlays += image('objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) + + src.overl = new /atom/movable/overlay( src.loc ) + src.overl.icon = 'objects.dmi' + src.overl.icon_state = "e_chairo0" + src.overl.layer = 5 + src.overl.name = "electrified chair" + src.overl.master = src + spark.set_up(12, 1, src) + return + +/obj/structure/stool/bed/chair/e_chair/Del() + + //src.overl = null + del(src.overl) + ..() return /obj/structure/stool/bed/chair/e_chair/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/wrench)) - var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair(src.loc) + if (istype(W, /obj/item/weapon/wrench)) + var/obj/structure/stool/bed/chair/C = new /obj/structure/stool/bed/chair( src.loc ) playsound(src.loc, 'Ratchet.ogg', 50, 1) C.dir = src.dir - src.part.loc = src.loc - src.part.master = null - src.part = null + src.part1.loc = src.loc + src.part1.master = null + src.part1 = null + //SN src = null del(src) return + if(istype(W, /obj/item/device/assembly/signaler)) + var/obj/item/assembly/shock_kit/kit = src.part1 + var/obj/item/device/radio/electropack/target = kit.part2 + var/obj/item/device/assembly/signaler/S = W + target.set_frequency(S.frequency) + target.code = S.code + for(var/mob/M in viewers(src, null)) + M.show_message("\red [user] has set the electric chair using the [W].") return -/obj/structure/stool/bed/chair/e_chair/verb/toggle() +/obj/structure/stool/bed/chair/e_chair/verb/toggle_power() set name = "Toggle Electric Chair" set category = "Object" set src in oview(1) - if(on) - on = 0 - icon_state = "echair0" - else - on = 1 - icon_state = "echair1" + if ((usr.stat || usr.restrained() || !( usr.canmove ) || usr.lying)) + return + if(isshocking && on) + shock() + src.on = !( src.on ) + src.icon_state = text("e_chair[]", src.on) + src.overl.icon_state = text("e_chairo[]", src.on) return /obj/structure/stool/bed/chair/e_chair/rotate() @@ -43,35 +70,38 @@ return /obj/structure/stool/bed/chair/e_chair/proc/shock() - if(!(src.on)) + if (!( src.on )) return - if((src.last_time + 50) > world.time) + if(isshocking) + processing_objects.Remove(src) + src.icon_state = text("e_chair[]", src.on) + src.overl.icon_state = text("e_chairo[]", src.on) + for(var/mob/living/M in affected) + M.jitteriness = 0 + M.is_jittery = 0 + M.anchored = 0 + affected.Remove(M) + isshocking = 0 + return + else + src.icon_state = "e_chairs" + src.overl.icon_state = "e_chairos" + spark.start() + for(var/mob/M in hearers(src, null)) + M.show_message("\red The electric chair went off!.", 3, "\red You hear a deep sharp shock.", 2) + processing_objects.Add(src) + isshocking = 1 return - src.last_time = world.time +/obj/structure/stool/bed/chair/e_chair/process() // special power handling var/area/A = get_area(src) - if(!isarea(A)) - return - if(!A.powered(EQUIP)) - return - A.use_power(EQUIP, 5000) - var/light = A.power_light - A.updateicon() - - flick("echair1", src) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(12, 1, src) - s.start() - if(buckled_mob) - buckled_mob.burn_skin(85) - buckled_mob << "\red You feel a deep shock course through your body!" - sleep(1) - buckled_mob.burn_skin(85) - buckled_mob.Stun(600) - for(var/mob/M in hearers(src, null)) - M.show_message("\red The electric chair went off!.", 3, "\red You hear a deep sharp shock.", 2) - - A.power_light = light - A.updateicon() - return \ No newline at end of file + if(isarea(A) && A.powered(EQUIP)) + A.use_power(EQUIP, 5000) + for(var/mob/living/M in src.loc) + affected.Add(M) + M.make_jittery(1000) + M.anchored = 1 + M.Stun(600) + M.burn_skin(10) + spark.start() \ No newline at end of file diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 6059f5eeca7..d12382c165e 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -23,7 +23,7 @@ /obj/item/weapon/dnainjector/proc/inject(mob/M as mob) M.radiation += rand(20,50) - if (!(M.mutations & NOCLONE)) // prevents drained people from having their DNA changed + if (!(M.mutations2 & NOCLONE)) // prevents drained people from having their DNA changed if (dnatype == "ui") if (!block) //isolated block? if (ue) //unique enzymes? yes diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 1f19f4ca582..7770fcad70a 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -211,6 +211,7 @@ the implant may become unstable and either pre-maturely inject the subject or si if(!istype(M, /mob/living/carbon/human)) return var/mob/living/carbon/human/H = M if(H.mind in ticker.mode.head_revolutionaries) + visible_message("\red [M] seems to resist the implant.", 1) for(var/mob/O in (viewers(M) - M)) O.show_message("\red [M] seems to resist the implant.", 1) M << "\red You resist the implant." @@ -220,7 +221,6 @@ the implant may become unstable and either pre-maturely inject the subject or si H << "\blue You feel a surge of loyalty towards NanoTrasen." return - //BS12 Explosive /obj/item/weapon/implant/explosive name = "explosive" diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm index 452313ceb6d..9cf664663e3 100644 --- a/code/game/objects/items/weapons/mops_cleaners.dm +++ b/code/game/objects/items/weapons/mops_cleaners.dm @@ -353,6 +353,10 @@ obj/item/weapon/mop/proc/clean(turf/simulated/A as turf) ..() /obj/item/weapon/mop/afterattack(atom/A, mob/user as mob) + if (isnull(A)) + user << "\red You've encountered a nasty bug. You should tell a developer what you were trying to clean with the mop." + return + if (src.reagents.total_volume < 1 || mopcount >= 5) user << "\blue Your mop is dry!" return diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm index e98a94907f1..dfd8fd08690 100644 --- a/code/game/objects/radio/headset.dm +++ b/code/game/objects/radio/headset.dm @@ -1,141 +1,142 @@ /obj/item/device/radio/headset - name = "radio headset" - desc = "An updated, modular intercom that fits over the head. Takes encryption keys" + name = "Radio Headset" + desc = "An intercom that fits over the head." icon_state = "headset" item_state = "headset" g_amt = 0 m_amt = 75 subspace_transmission = 1 - canhear_range = 1 // can't hear headsets from very far away - - var/translate_binary = 0 - var/translate_hive = 0 - var/obj/item/device/encryptionkey/keyslot1 = null - var/obj/item/device/encryptionkey/keyslot2 = null + protective_temperature = 0 + canhear_range = 1 + var + translate_binary = 0 + translate_hive = 0 + obj/item/device/encryptionkey/keyslot1 = null + obj/item/device/encryptionkey/keyslot2 = null /obj/item/device/radio/headset/New() ..() - keyslot1 = new /obj/item/device/encryptionkey/ + keyslot1 = new /obj/item/device/encryptionkey recalculateChannels() /obj/item/device/radio/headset/traitor origin_tech = "syndicate=3" canhear_range = 0 -/obj/item/device/radio/headset/traitor/New() - ..() - del(keyslot1) - keyslot1 = new /obj/item/device/encryptionkey/traitor - recalculateChannels() + + New() + ..() + del(keyslot1) + keyslot1 = new /obj/item/device/encryptionkey/traitor /obj/item/device/radio/headset/binary origin_tech = "syndicate=3" canhear_range = 0 -/obj/item/device/radio/headset/binary/New() - ..() - del(keyslot1) - keyslot1 = new /obj/item/device/encryptionkey/binary - recalculateChannels() + + New() + ..() + del(keyslot1) + keyslot1 = new /obj/item/device/encryptionkey/binary /obj/item/device/radio/headset/headset_sec - name = "security radio headset" + name = "Security Radio Headset" desc = "This is used by your elite security force. To access the security channel, use :s." icon_state = "sec_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_sec /obj/item/device/radio/headset/headset_eng - name = "engineering radio headset" + name = "Engineering Radio Headset" desc = "When the engineers wish to chat like girls. To access the engineering channel, use :e. " icon_state = "eng_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_eng /obj/item/device/radio/headset/headset_rob - name = "robotics radio headset" + name = "Robotics Radio Headset" desc = "Made specifically for the roboticists who cannot decide between departments. To access the engineering channel, use :e. For research, use :n." icon_state = "rob_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_rob /obj/item/device/radio/headset/headset_med - name = "medical radio headset" + name = "Medical Radio Headset" desc = "A headset for the trained staff of the medbay. To access the medical channel, use :m." icon_state = "med_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_med /obj/item/device/radio/headset/headset_sci - name = "science radio headset" + name = "Science Radio Headset" desc = "A sciency headset. Like usual. To access the science channel, use :n." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_sci /obj/item/device/radio/headset/headset_medsci - name = "medical research radio headset" + name = "Medical Research Radio Headset" desc = "A headset that is a result of the mating between medical and science. To access the medical channel, use :m. For science, use :n." icon_state = "med_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_medsci /obj/item/device/radio/headset/headset_com - name = "command radio headset" + name = "Command Radio Headset" desc = "A headset with a commanding channel. To access the command channel, use :c." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_com /obj/item/device/radio/headset/heads/captain - name = "captain's headset" + name = "Captain's Headset" desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :d - mining, :q - cargo, :m - medical, :n - science." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/captain /obj/item/device/radio/headset/heads/rd - name = "research director's deadset" + name = "Research Director's Headset" desc = "Headset of the researching God. To access the science channel, use :n. For command, use :c." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/rd /obj/item/device/radio/headset/heads/hos - name = "head of security's headset" + name = "Head of Security's Headset" desc = "The headset of the man who protects your worthless lifes. To access the security channel, use :s. For command, use :c." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/hos /obj/item/device/radio/headset/heads/ce - name = "chief engineer's headset" + name = "Chief Engineer's Headset" desc = "The headset of the guy who is in charge of morons. To access the engineering channel, use :e. For command, use :c." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/ce /obj/item/device/radio/headset/heads/cmo - name = "chief medical officer's headset" + name = "Chief Medical Officer's Headset" desc = "The headset of the highly trained medical chief. To access the medical channel, use :m. For command, use :c." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/cmo /obj/item/device/radio/headset/heads/hop - name = "head of personnel's headset" + name = "Head of Personnel's Headset" desc = "The headset of the guy who will one day be captain. Channels are as follows: :c - command, :s - security, :q - cargo, :d - mining." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/hop /obj/item/device/radio/headset/headset_mine - name = "mining radio headset" + name = "Mining Radio Headset" desc = "Headset used by miners. How useless. To access the mining channel, use :d." icon_state = "mine_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_mine /obj/item/device/radio/headset/heads/qm - name = "quartermaster's headset" + name = "Quartermaster's Headset" desc = "The headset of the man who control your toiletpaper supply. To access the cargo channel, use :q. For mining, use :d." icon_state = "cargo_headset" item_state = "headset" @@ -153,7 +154,7 @@ keyslot2 = new /obj/item/device/encryptionkey/ert /obj/item/device/radio/headset/headset_cargo - name = "cargo radio headset" + name = "Cargo Radio Headset" desc = "Headset used by the QM's slaves. To access the cargo channel, use :q." icon_state = "cargo_headset" item_state = "headset" @@ -162,32 +163,17 @@ /obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) // ..() user.machine = src - if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/encryptionkey/ )))) + if (!istype(W, /obj/item/weapon/screwdriver) && !istype(W, /obj/item/device/encryptionkey/)) return if(istype(W, /obj/item/weapon/screwdriver)) if(keyslot1 || keyslot2) - - for(var/ch_name in channels) - radio_controller.remove_object(src, radiochannels[ch_name]) - secure_radio_connections[ch_name] = null - - if(keyslot1) - var/turf/T = get_turf(user) - if(T) - keyslot1.loc = T - keyslot1 = null - - + user.put_in_hands(keyslot1) if(keyslot2) - var/turf/T = get_turf(user) - if(T) - keyslot2.loc = T - keyslot2 = null - + user.put_in_hands(keyslot2) recalculateChannels() user << "You pop out the encryption keys in the headset!" @@ -210,9 +196,7 @@ W.loc = src keyslot2 = W - recalculateChannels() - return @@ -220,13 +204,10 @@ src.channels = list() src.translate_binary = 0 src.translate_hive = 0 + var/temp_channels = list() if(keyslot1) - for(var/ch_name in keyslot1.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot1.channels[ch_name] + temp_channels += keyslot1.channels if(keyslot1.translate_binary) src.translate_binary = 1 @@ -235,11 +216,7 @@ src.translate_hive = 1 if(keyslot2) - for(var/ch_name in keyslot2.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot2.channels[ch_name] + temp_channels += keyslot2.channels if(keyslot2.translate_binary) src.translate_binary = 1 @@ -247,14 +224,13 @@ if(keyslot2.translate_hive) src.translate_hive = 1 + config(temp_channels) for (var/ch_name in channels) if(!radio_controller) sleep(30) // Waiting for the radio_controller to be created. if(!radio_controller) - src.name = "broken radio headset" + src.name = "Broken Radio Headset" return - secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - return \ No newline at end of file diff --git a/code/game/objects/stool.dm b/code/game/objects/stool.dm index 7e628afa744..3fb7bf794d3 100644 --- a/code/game/objects/stool.dm +++ b/code/game/objects/stool.dm @@ -31,7 +31,7 @@ var/obj/structure/stool/bed/chair/e_chair/E = new /obj/structure/stool/bed/chair/e_chair(src.loc) playsound(src.loc, 'Deconstruct.ogg', 50, 1) E.dir = src.dir - E.part = W + E.part1 = W W.loc = E W.master = E user.u_equip(W) diff --git a/code/game/objects/storage/storage.dm b/code/game/objects/storage/storage.dm index 60c5395ed5e..a43a1d6e6eb 100644 --- a/code/game/objects/storage/storage.dm +++ b/code/game/objects/storage/storage.dm @@ -315,7 +315,7 @@ /obj/item/weapon/storage/box/syndicate/New() ..() - switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1))) + switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "freedom" = 1))) if ("bloodyspai") new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/mask/gas/voice(src) @@ -344,12 +344,6 @@ new /obj/item/weapon/plastique(src) return - if ("murder") - new /obj/item/weapon/melee/energy/sword(src) - new /obj/item/clothing/glasses/thermal(src) - new /obj/item/weapon/card/emag(src) - return - if("freedom") var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src) O.imp = new /obj/item/weapon/implant/freedom(O) diff --git a/code/game/topic.dm b/code/game/topic.dm index 70aa5cb2ea3..f60ec272c91 100644 --- a/code/game/topic.dm +++ b/code/game/topic.dm @@ -21,6 +21,8 @@ s["player[n]"] = "[C.key]" else s["player[n]"] = "[C.fakekey]" + else + s["player[n]"] = "[C.key]" s["players"] = n s["end"] = "#end" return list2params(s) \ No newline at end of file diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 383aed92dc1..d2bc6e33c57 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -35,7 +35,7 @@ else if(!M.client.stealth && (M.client.holder.level != -3)) usr << "\t[pick(nobles)] [M.client]" -var/list/nobles = list("Baron","Bookkeeper","Captain of the Guard","Chief medical dwarf","Count","Dungeon master","Duke","General","Mayor","Outpost liaison","Sheriff","Champion") +var/list/nobles = list("Baron","Bookkeeper","Captain of the Guard","Chief Medical Dwarf","Count","Dungeon Master","Duke","General","Mayor","Outpost Liaison","Sheriff","Champion") /client/verb/active_players() set category = "OOC" diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index f581b91f6e8..23bcf7c88aa 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -966,7 +966,7 @@ if(!T.dna) usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)" return - if(T.mutations & NOCLONE) //target done been et, no more blood in him + if(T.mutations2 & NOCLONE) //target done been et, no more blood in him user << "\red You are unable to locate any blood." return B.holder = src @@ -2938,12 +2938,12 @@ reagents.add_reagent("toxin", 50) /obj/item/weapon/reagent_containers/pill/cyanide - name = "Cyanide pill" + name = "Suicide pill" desc = "Don't swallow this." icon_state = "pill5" New() ..() - reagents.add_reagent("cyanide", 50) + reagents.add_reagent("chloralhydrate", 100) /obj/item/weapon/reagent_containers/pill/adminordrazine name = "Adminordrazine pill" diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index b08d24d45c0..7aac84a9b57 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -93,5 +93,5 @@ /mob/living/carbon/human/proc/Drain() ChangeToHusk() - mutations |= NOCLONE + mutations2 |= NOCLONE return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 58cff9a6138..78a3c7f2b8b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -89,24 +89,24 @@ if (src.wear_id) var/id -// var/photo = 0 + var/photo = 0 if(istype(src:wear_id, /obj/item/device/pda)) var/obj/item/device/pda/pda = src:wear_id id = pda.owner else id = src.wear_id.registered_name -// if (src.wear_id.PHOTO) -// photo = 1 + if (src.wear_id.PHOTO) + photo = 1 if (id != src.real_name && in_range(src, usr)) -// if (photo) -// usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!" -// else - usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!" + if (photo) + usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo yet doesn't seem to be that person!!!" + else + usr << "\red [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] yet doesn't seem to be that person!!!" else -// if (photo) -// usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo." -// else - usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]." + if (photo) + usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name] with a photo." + else + usr << "\blue [src.name] is wearing \icon[src.wear_id] [src.wear_id.name]." if (src.is_jittery) @@ -207,4 +207,4 @@ print_flavor_text() - usr << "\blue *---------*" + usr << "\blue *---------*" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 97c083e5697..03d4081d01d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1533,7 +1533,7 @@ del(src) return if("internal") - if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && istype(target.back, /obj/item/weapon/tank) && !( target.internal )) ) && !( target.internal ))) + if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && (istype(target.back, /obj/item/weapon/tank) || istype(target.belt, /obj/item/weapon/tank) || istype(target.s_store, /obj/item/weapon/tank)) && !( target.internal )) ) && !( target.internal ))) //SN src = null del(src) return @@ -1702,7 +1702,7 @@ return message = text("\red [] is trying to empty []'s pockets!!", source, target) if("CPR") - if (target.cpr_time >= world.time + 3) + if (target.cpr_time + 3 >= world.time) //SN src = null del(src) return @@ -2163,7 +2163,7 @@ It can still be worn/put on as normal. target.handcuffed = item item.loc = target if("CPR") - if (target.cpr_time >= world.time + 30) + if (target.cpr_time + 30 >= world.time) //SN src = null del(src) return @@ -2218,7 +2218,7 @@ It can still be worn/put on as normal. W.loc = target.loc W.dropped(target) W.layer = initial(W.layer) - W.add_fingerprint(source) + W.add_fingerprint(source) if (target.r_store) var/obj/item/W = target.r_store target.u_equip(W) @@ -2228,7 +2228,7 @@ It can still be worn/put on as normal. W.loc = target.loc W.dropped(target) W.layer = initial(W.layer) - W.add_fingerprint(source) + W.add_fingerprint(source) if("internal") if (target.internal) target.internal.add_fingerprint(source) @@ -2239,11 +2239,11 @@ It can still be worn/put on as normal. if (!( istype(target.wear_mask, /obj/item/clothing/mask) )) return else - if (istype(target.back, /obj/item/weapon/tank)) + if (istype(target.back, /obj/item/weapon/tank) && (internalloc == "back" || !internalloc)) target.internal = target.back - else if (istype(target.s_store, /obj/item/weapon/tank)) + else if (istype(target.s_store, /obj/item/weapon/tank) && (internalloc == "store" || !internalloc)) target.internal = target.s_store - else if (istype(target.belt, /obj/item/weapon/tank)) + else if (istype(target.belt, /obj/item/weapon/tank) && (internalloc == "belt" || !internalloc)) target.internal = target.belt if (target.internal) for(var/mob/M in viewers(target, 1)) @@ -2284,12 +2284,12 @@ It can still be worn/put on as normal.
Right Ear: [(r_ear ? r_ear : "Nothing")]
Head: [(head ? head : "Nothing")]
Shoes: [(shoes ? shoes : "Nothing")] -
Belt: [(belt ? belt : "Nothing")] +
Belt: [(belt ? belt : "Nothing")] [(istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : ""]
Uniform: [(w_uniform ? w_uniform : "Nothing")]
(Exo)Suit: [(wear_suit ? wear_suit : "Nothing")] -
Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")] +
Back: [(back ? back : "Nothing")][(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : ""]
ID: [(wear_id ? wear_id : "Nothing")] -
Suit Storage: [(s_store ? s_store : "Nothing")] +
Suit Storage: [(s_store ? s_store : "Nothing")] [(istype(wear_mask, /obj/item/clothing/mask) && istype(s_store, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : ""]
[(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
[(internal ? text("Remove Internal") : "")]
Empty Pockets diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e01f491dc25..afe1fe7f287 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -514,7 +514,7 @@ adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good! adjustOxyLoss(8) - if(prob(20)) // Lets give them some chance to know somethings not right though I guess. + if(prob(20) && isbreathing) // Lets give them some chance to know somethings not right though I guess. spawn(0) emote("cough") else diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index fe4d5c37987..14cff71aa6e 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -169,24 +169,27 @@ proc/setup_skills() mob/living/carbon/human/proc/GetSkillClass(points) // skill classes describe how your character compares in total points + var/original_points = points + points -= min(round((age - 20) / 2.5), 4) // every 2.5 years after 20, one extra skillpoint + if(age > 30) + points -= round((age - 30) / 5) // every 5 years after 30, one extra skillpoint + if(original_points > 0 && points <= 0) points = 1 switch(points) if(0) return "Unconfigured" - if(1 to 3) - return "Talentless" + if(1 to 2) + return "Terrifying" if(4 to 6) return "Below Average" - if(7 to 9) + if(7 to 10) return "Average" - if(10 to 12) - return "Talented" - if(13 to 15) - return "Extremely Talented" - if(16 to 18) + if(11 to 14) + return "Above Average" + if(15 to 18) + return "Exceptional" + if(19 to 24) return "Genius" - if(19 to 21) - return "True Genius" - if(22 to 1000) + if(24 to 1000) return "God" @@ -202,22 +205,26 @@ proc/show_skill_window(var/mob/user, var/mob/living/carbon/human/M) var/HTML = "" HTML += "Select your Skills
" HTML += "Current skill level: [M.GetSkillClass(M.used_skillpoints)] ([M.used_skillpoints])
" - HTML += "Use preconfigured skillset
" HTML += "" for(var/V in SKILLS) - HTML += "" + HTML += "" for(var/datum/skill/S in SKILLS[V]) var/level = M.skills[S.ID] HTML += "" HTML += "" - HTML += "" - HTML += "" - HTML += "" - HTML += "" + HTML += "" + // secondary skills don't have an amateur level + if(S.secondary) + HTML += "" + else + HTML += "" + HTML += "" + HTML += "" HTML += "" HTML += "
[V]
[V]" + HTML += "
[S.name]\[Layman\]\[Basic\]\[Adept\]\[Expert\]\[Untrained\]\[Amateur\]\[Trained\]\[Professional\]
" - user << browse(null, "window=show_skills") + user << browse(null, "window=preferences") user << browse(HTML, "window=show_skills;size=600x800") return diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm index e4b74b739eb..a2703504458 100644 --- a/code/modules/mob/screen.dm +++ b/code/modules/mob/screen.dm @@ -511,6 +511,9 @@ "The chain jangles a bit.", // - SkyMarshal "\red Hurry up, dammit!", // - SkyMarshal "This is exhausting!") // - SkyMarshal + for(var/mob/O in viewers(usr)) + if(prob(50)) //Reduces spam slightly + O.show_message(text("\red [] continues to struggle in their cuffs!", usr), 1) if(!usr:handcuffed) return for(var/mob/O in viewers(usr)) O.show_message(text("\red [] manages to remove the handcuffs!", usr), 1) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 65dce9bdad0..c2762f85039 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -115,9 +115,9 @@ comm.ai += O O << "You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras)." - O << "To look at other parts of the station, double-click yourself to get a camera menu." + O << "To look at other parts of the station, double-click yourself to get a camera menu, use the freelook command, or use the Show Camera List command.." O << "While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc." - O << "To use something, simply double-click it." + O << "To use something, simply click or double-click it." O << "Currently right-click functions will not work for the AI (except examine), and will either be replaced with dialogs or won't be usable by the AI." if (!(ticker && ticker.mode && (O.mind in ticker.mode.malf_ai))) O.show_laws() @@ -126,6 +126,7 @@ O << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\"" O << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1." O << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)" + O << "4.) Your laws are not in preference, laws do not take preference over one another unless specifically stated in the law." O << "
We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible." @@ -201,8 +202,8 @@ O.loc = loc O << "You are playing a Robot. A Robot can interact with most electronic objects in its view point." - O << "You must follow the laws that the AI has. You are the AI's assistant to the station basically." - O << "To use something, simply double-click it." + O << "You must follow the laws that the AI has. You are basically the AI's extension into station." + O << "To use something, simply click or double-click it." O << {"Use say ":s to speak to fellow cyborgs and the AI through binary."} O.job = "Cyborg" diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index b9b87afa56d..6c9c65aa09b 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index a855b7e2d4a..67e420a679b 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ