diff --git a/baystation12.dme b/baystation12.dme index e4c8cc0ca79..9953cacd6e1 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -520,7 +520,7 @@ #include "code\game\machinery\computer\id.dm" #include "code\game\machinery\computer\lockdown.dm" #include "code\game\machinery\computer\medical.dm" -#include "code\game\machinery\computer\operating.dm" +#include "code\game\machinery\computer\Operating.dm" #include "code\game\machinery\computer\power.dm" #include "code\game\machinery\computer\robot.dm" #include "code\game\machinery\computer\security.dm" @@ -1009,6 +1009,7 @@ #include "code\modules\projectiles\guns\projectile\shotgun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" +#include "code\modules\projectiles\projectile\change.dm" #include "code\modules\projectiles\projectile\energy.dm" #include "code\modules\projectiles\projectile\special.dm" #include "code\modules\recycling\conveyor2.dm" diff --git a/code/WorkInProgress/Tastyfish/livestock.dm b/code/WorkInProgress/Tastyfish/livestock.dm index f13e5b52918..a88c4f50e9d 100644 --- a/code/WorkInProgress/Tastyfish/livestock.dm +++ b/code/WorkInProgress/Tastyfish/livestock.dm @@ -103,7 +103,7 @@ // Cow /mob/living/simple_animal/livestock/cow - name = "cow" + name = "\improper Cow" icon_state = "cow" icon_living = "cow" icon_dead = "cow_d" @@ -137,7 +137,7 @@ // Chicken /mob/living/simple_animal/livestock/chicken - name = "chicken" + name = "\improper Chicken" icon_state = "chick" icon_living = "chick" icon_dead = "chick_d" @@ -163,7 +163,7 @@ desc = "Tasty!" /obj/structure/closet/critter - desc = "A critter crate." + desc = "\improper Critter crate." name = "Critter Crate" icon = 'storage.dmi' icon_state = "critter" @@ -172,7 +172,7 @@ icon_closed = "critter" /datum/supply_packs/chicken - name = "Chicken crate" + name = "\improper Chicken crate" contains = list("/mob/living/simple_animal/livestock/chicken", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 10 @@ -181,7 +181,7 @@ group = "Hydroponics" /datum/supply_packs/cow - name = "Cow crate" + name = "\improper Cow crate" contains = list("/mob/living/simple_animal/livestock/cow", "/obj/item/weapon/reagent_containers/food/snacks/grown/corn") cost = 50 diff --git a/code/game/events/Events/PowerOffline.dm b/code/game/events/Events/PowerOffline.dm index f71d9b4096e..92f4c9e643f 100644 --- a/code/game/events/Events/PowerOffline.dm +++ b/code/game/events/Events/PowerOffline.dm @@ -1,8 +1,10 @@ /datum/event/power_offline + var/list/protected_areas = list(/area/ai_monitored/storage/eva, /area/engine, /area/toxins/xenobiology, /area/turret_protected/ai) + Announce() for(var/obj/machinery/power/apc/a in world) if(!a.crit && a.z == 1) - if(istype(a.area, /area/engine) || istype(a.area, /area/toxins/xenobiology) || istype(a.area, /area/turret_protected/ai)) + if(a.area in protected_areas) continue a.eventoff = 1 a.update() diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 26139859a8a..dcc30eceecc 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -6,7 +6,8 @@ density = 1 var/deployable = 0.0 var/extended = 0.0 - var/timeleft = 60.0 + var/timeleft = 1200 + var/time_actual = 0 var/timing = 0.0 var/r_code = "ADMIN" var/code = "" @@ -22,8 +23,7 @@ /obj/machinery/nuclearbomb/process() if (src.timing) - src.timeleft-- - if (src.timeleft <= 0) + if((time_actual <= world.timeofday) && ((world.timeofday + (time_actual - world.timeofday)) <= 864000) ) explode() for(var/mob/M in viewers(1, src)) if ((M.client && M.machine == src)) @@ -35,18 +35,23 @@ /obj/machinery/nuclearbomb/attack_hand(mob/user as mob) if (src.extended) + var/time_left = time2text(time_actual-world.timeofday, "mm:ss") + if(world.timeofday + (time_actual - world.timeofday) >= 864000) + time_left = time2text(time_actual-(864000 - world.timeofday), "mm:ss") + if(!timing) + time_left = time2text(timeleft, "mm:ss") user.machine = src var/dat = text("Nuclear Fission Explosive
\nAuth. Disk: []
", src, (src.auth ? "++++++++++" : "----------")) if (src.auth) if (src.yes_code) - dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src, src, src, src.timeleft, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) + dat += text("\nStatus: []-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: --- [] +++
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.timing ? "Func/Set" : "Functional"), (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), src, src, src, src, time_left, src, src, src, (src.safety ? "On" : "Off"), src, (src.anchored ? "Engaged" : "Off"), src) else - dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S2-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\n[] Safety: Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else if (src.timing) - dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Set-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) else - dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), src.timeleft, (src.timing ? "On" : "Off"), src.timeleft, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) + dat += text("\nStatus: Auth. S1-[]
\nTimer: []
\n
\nTimer: [] Toggle
\nTime: - - [] + +
\n
\nSafety: [] Toggle
\nAnchor: [] Toggle
\n", (src.safety ? "Safe" : "Engaged"), time_left, (src.timing ? "On" : "Off"), time_left, (src.safety ? "On" : "Off"), (src.anchored ? "Engaged" : "Off")) var/message = "AUTH" if (src.auth) message = text("[]", src.code) @@ -111,17 +116,22 @@ if (src.yes_code) if (href_list["time"]) var/time = text2num(href_list["time"]) - src.timeleft += time - src.timeleft = min(max(round(src.timeleft), 5), 600) + timeleft = min(max(time + (timeleft/10), 120), 900) * 10 if (href_list["timer"]) - if (src.timing == -1.0) + if (timing == -1.0) return - src.timing = !( src.timing ) - if (src.timing) + timing = !( timing ) + if (timing) + time_actual = world.timeofday + timeleft + if(time_actual >= 864000) + time_actual -= 864000 src.icon_state = "nuclearbomb2" if(!src.safety) bomb_set = 1//There can still be issues with this reseting when there are multiple bombs. Not a big deal tho for Nuke/N else + timeleft = time_actual - world.timeofday + if(timeleft < 0) + timeleft += 864000 src.icon_state = "nuclearbomb1" bomb_set = 0 if (href_list["safety"]) @@ -153,6 +163,7 @@ /obj/machinery/nuclearbomb/proc/explode() if (src.safety) src.timing = 0 + timeleft = 0 return src.timing = -1.0 src.yes_code = 0 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index ccc8bfb2d3b..bfb5c85678b 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -18,6 +18,9 @@ obj/machinery/recharger if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow)) user << "Your gun's recharge port was removed to make room for a miniaturized reactor." return + if (istype(G, /obj/item/weapon/gun/energy/staff)) + user << "It's a wooden staff, not a gun!" + return user.drop_item() G.loc = src src.charging = G diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 31753036f56..c3ac2943d8c 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -394,7 +394,7 @@ var var/J = job var/rendered = "[part_a][N][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][N] ([J]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -405,7 +405,7 @@ var var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_normal) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][realname] ([job]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -419,7 +419,7 @@ var rendered = "[part_a][vname][part_b][M.voice_message][part_c]" for (var/mob/R in heard_voice) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname] ([job]) [part_b][vmessage]][part_c]", 2) else R.show_message(rendered, 2) @@ -435,7 +435,7 @@ var var/rendered = "[part_a][vname][part_b][quotedmsg][part_c]" for (var/mob/R in heard_garbled) - if(istype(R, /mob/living/silicon/ai)) + if(istype(R, /mob/living/silicon/ai) && job != "Automated Announcement") R.show_message("[part_a][vname][part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 8e33bebe72e..22bac2a5936 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -83,10 +83,11 @@ areaindex[tmpname] = 1 L[tmpname] = I - var/desc = input("Please select a location to lock in.", "Locking Computer") in L - src.locked = L[desc] - for(var/mob/O in hearers(src, null)) - O.show_message("\blue Locked In", 2) + var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null + if(desc) + src.locked = L[desc] + for(var/mob/O in hearers(src, null)) + O.show_message("\blue Locked In", 2) src.add_fingerprint(usr) return diff --git a/code/game/specops_shuttle.dm b/code/game/specops_shuttle.dm index 18838470a1a..b2d73d36ac4 100644 --- a/code/game/specops_shuttle.dm +++ b/code/game/specops_shuttle.dm @@ -232,7 +232,7 @@ var/specops_shuttle_timeleft = 0 if(specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return 0 for(var/obj/machinery/computer/specops_shuttle/S in world) - if(world.time <= S.specops_shuttle_timereset) + if(world.timeofday <= S.specops_shuttle_timereset) return 0 return 1 @@ -286,10 +286,10 @@ var/specops_shuttle_timeleft = 0 if (!specops_can_move()) usr << "\blue Central Command will not allow the Special Operations shuttle to return yet." - if(world.time <= specops_shuttle_timereset) - if (((world.time - specops_shuttle_timereset)/10) > 60) - usr << "\blue [-((world.time - specops_shuttle_timereset)/10)/60] minutes remain!" - usr << "\blue [-(world.time - specops_shuttle_timereset)/10] seconds remain!" + if(world.timeofday <= specops_shuttle_timereset) + if (((world.timeofday - specops_shuttle_timereset)/10) > 60) + usr << "\blue [-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!" + usr << "\blue [-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!" return usr << "\blue The Special Operations shuttle will arrive at Central Command in [(SPECOPS_MOVETIME/10)] seconds." diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4cb7a48f3ea..8ba9a6c4bcf 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -258,11 +258,16 @@ if ((M.client && M.client.holder && (M.client.holder.level >= src.level))) alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) return - M << "\red You have been kicked from the server" - log_admin("[key_name(usr)] booted [key_name(M)].") - message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) - //M.client = null - del(M.client) + switch(alert("Are you sure?", ,"Yes", "NO, WAIT.. DAMMIT! NOT THAT BUTTON!")) + if("Yes") + if(ismob(M)) + M << "\red You have been kicked from the server" + log_admin("[key_name(usr)] booted [key_name(M)].") + message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) + //M.client = null + del(M.client) + else + src << "Looks like someone already beat you." if (href_list["removejobban"]) if ((src.rank in list("Game Admin", "Game Master" ))) @@ -1759,6 +1764,36 @@ C.files.RefreshResearch() owner:rnd_check_designs() + #define AUTOBANTIME 10 + if(href_list["warn"]) + var/mob/M = locate(href_list["warn"]) + if (ismob(M)) + var/client/user + if(istype(usr, /client)) + user = usr + else if(istype(usr, /mob)) + user = usr.client + + if(!user.holder) + src << "Only administrators may use this command." + return + if(M.client && M.client.holder && (M.client.holder.level >= user.holder.level)) + alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) + return + if(!M.client.warned) + M << "\red You have been warned by an administrator. This is the only warning you will recieve." + M.client.warned = 1 + message_admins("\blue [user.ckey] warned [M.ckey].") + else + AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME) + M << "\redYou have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\"." + M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes." + log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + message_admins("\blue [user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.") + feedback_inc("ban_warn",1) + + del(M.client) ///////////////////////////////////////////////////////////////////////////////////////////////Panels diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index c317f9f7073..3ccc5ff58b1 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -11,6 +11,7 @@ for(var/mob/M in mobs) if(M.ckey) var/color = "#e6e6e6" + i++ if(i%2 == 0) color = "#f2f2f2" var/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])") @@ -19,26 +20,32 @@ dat += "[M.name] \[[real]\]
[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])" // Adds current name if(isobserver(M)) dat += "Ghost" - if(isalien(M)) + else if(isalien(M)) dat += "Alien" - if(islarva(M)) + else if(islarva(M)) dat += "Alien larva" - if(ishuman(M)) + else if(istajaran(M)) + dat += "Tajaran" + else if(ishuman(M)) dat += "[M.job]" - if(ismetroid(M)) + else if(ismetroid(M)) dat += "Metroid" - if(ismonkey(M)) + else if(ismonkey(M)) dat += "Monkey" - if(isAI(M)) + else if(isAI(M)) dat += "AI" - if(ispAI(M)) + else if(ispAI(M)) dat += "pAI" - if(isrobot(M)) + else if(isrobot(M)) dat += "Cyborg" - if(isanimal(M)) + else if(isanimal(M)) dat += "Animal" - if(iscorgi(M)) + else if(iscorgi(M)) dat += "Corgi" + else if(istype(M,/mob/new_player)) + dat += "New Player" + else + dat += "ERROR" if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job. var/mob/living/carbon/human/H = M @@ -81,13 +88,14 @@ "} dat += {"[player_has_info(M.ckey) ? "Info" : "N/A"] - Boot | Ban | Jobban -
[muting]
- PP | + PM | + PP | VV | SM | JMP | - CA + CA +
[muting]
+ Warn | Boot | Ban | Jobban "} switch(is_special_character(M)) @@ -100,7 +108,7 @@ dat += "" - usr << browse(dat, "window=players;size=905x480") + usr << browse(dat, "window=players;size=905x600") //The old one /obj/admins/proc/player_panel_old() diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 568f291e2d2..87230391edb 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -557,8 +557,8 @@ /obj/item/weapon/gun/rapidsyringe name = "rapid syringe gun" icon = 'gun.dmi' - icon_state = "syringegun" - item_state = "syringegun" + icon_state = "rapidsyringegun" + item_state = "rapidsyringegun" w_class = 3.0 throw_speed = 4 throw_range = 10 diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 45c7d5781eb..c3b345a278c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -19,3 +19,35 @@ origin_tech = "combat=5;materials=4;powerstorage=3" charge_cost = 100 projectile_type = "/obj/item/projectile/energy/declone" + +obj/item/weapon/gun/energy/staff + name = "staff of change" + desc = "an artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" + icon = 'gun.dmi' + icon_state = "staff" + item_state = "staff" + fire_sound = 'emitter.ogg' + charge_cost = 200 + projectile_type = "/obj/item/projectile/change" + origin_tech = null + var/charge_tick = 0 + + + New() + ..() + processing_objects.Add(src) + + + Del() + processing_objects.Remove(src) + ..() + + + process() + charge_tick++ + if(charge_tick < 4) return 0 + charge_tick = 0 + if(!power_supply) return 0 + power_supply.give(200) + update_icon() + return 1 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm new file mode 100644 index 00000000000..ac3f03eeda3 --- /dev/null +++ b/code/modules/projectiles/projectile/change.dm @@ -0,0 +1,152 @@ +/obj/item/projectile/change + name = "bolt of change" + icon_state = "ice_1" + damage = 0 + damage_type = BURN + nodamage = 1 + flag = "energy" + + on_hit(var/atom/change) + wabbajack(change) + + + /*Bump(atom/change) + if(istype(change, /mob/living)) + wabbajack(change) + else + del(src)*/ + + + +/obj/item/projectile/change/proc/wabbajack (mob/M as mob in world) + if(istype(M, /mob/living)) + for(var/obj/item/W in M) + M.drop_from_slot(W) + var/randomize = pick("monkey","robot","metroid","alien") + switch(randomize) + if("monkey") + if (M.monkeyizing) + return + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( M.loc ) + + O.name = "monkey" + if (M.client) + M.client.mob = O + if(M.mind) + M.mind.transfer_to(O) + O.a_intent = "hurt" + O << "You are now a monkey." + del(M) + return O + if("robot") + if (M.monkeyizing) + return + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + if(M.client) + M.client.screen -= M.hud_used.contents + M.client.screen -= M.hud_used.adding + M.client.screen -= M.hud_used.mon_blo + M.client.screen -= list( M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) + M.client.screen -= list( M.zone_sel, M.oxygen, M.throw_icon, M.i_select, M.m_select, M.toxin, M.internals, M.fire, M.hands, M.healths, M.pullin, M.blind, M.flash, M.rest, M.sleep, M.mach ) + + var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( M.loc ) + O.cell = new(O) + O.cell.maxcharge = 7500 + O.cell.charge = 7500 + O.gender = M.gender + O.invisibility = 0 + O.name = "Cyborg" + O.real_name = "Cyborg" + O.lastKnownIP = M.client.address ? M.client.address : null + if (M.mind) + M.mind.transfer_to(O) + if (M.mind.assigned_role == "Cyborg") + M.mind.original = O + else if (M.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") + else + M.mind = new /datum/mind( ) + M.mind.key = M.key + M.mind.current = O + M.mind.original = O + M.mind.transfer_to(O) + + if(!(O.mind in ticker.minds)) + ticker.minds += O.mind//Adds them to regular mind list. + + 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 << {"Use say ":s to speak to fellow cyborgs and the AI through binary."} + + O.job = "Cyborg" + + O.mmi = new /obj/item/device/mmi(O) + O.mmi.transfer_identity(M)//Does not transfer key/client. + del(M) + return O + if("metroid") + if (M.monkeyizing) + return + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + if(prob(50)) + var/mob/living/carbon/metroid/adult/new_metroid = new /mob/living/carbon/metroid/adult (M.loc) + if (M.client) + M.client.mob = new_metroid + if(M.mind) + M.mind.transfer_to(new_metroid) + + new_metroid.a_intent = "hurt" + new_metroid << "You are now an adult Metroid." + del(M) + return new_metroid + else + var/mob/living/carbon/metroid/new_metroid = new /mob/living/carbon/metroid (M.loc) + if (M.client) + M.client.mob = new_metroid + if(M.mind) + M.mind.transfer_to(new_metroid) + new_metroid.a_intent = "hurt" + new_metroid << "You are now a baby Metroid." + del(M) + return new_metroid + if("alien") + if (M.monkeyizing) + return + M.update_clothing() + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/alien_caste = pick("Hunter","Sentinel","Drone") + var/mob/living/carbon/alien/humanoid/new_xeno + switch(alien_caste) + if("Hunter") + new_xeno = new /mob/living/carbon/alien/humanoid/hunter (M.loc) + if("Sentinel") + new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (M.loc) + if("Drone") + new_xeno = new /mob/living/carbon/alien/humanoid/drone (M.loc) + if (M.client) + M.client.mob = new_xeno + if(M.mind) + M.mind.transfer_to(new_xeno) + new_xeno.a_intent = "hurt" + new_xeno << "You are now an alien." + del(M) + return new_xeno + return + diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 052c237146d..ae20b7ca630 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -23,8 +23,6 @@ explosion(target, -1, 0, 2) return 1 - - /obj/item/projectile/temp name = "freeze beam" icon_state = "ice_2" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index aaa19ce3694..cf605048c7e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -439,8 +439,10 @@ del(H) CanPass(atom/movable/mover, turf/target, height=0, air_group=0) - if (istype(mover,/obj/item) && !istype(mover,/obj/item/weapon/dummy)) + if (istype(mover,/obj/item)) var/obj/item/I = mover + if(!mover.throwing) + return ..() if(prob(75)) I.loc = src for(var/mob/M in viewers(src)) @@ -450,7 +452,7 @@ M.show_message("\the [I] bounces off of \the [src]'s rim!", 3) return 0 else - return ..(mover, target, height, air_group) + return ..() //The toilet does not need to pressurized but can only handle small items. //You can also choke people by dunking them into the toilet. diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 1371eb3bb06..2a4d79e7205 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ