diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index 57a12ed7928..1a6bede4d4b 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -1725,6 +1725,22 @@
..()
reagents.add_reagent("cryoxadone", 30)
+/obj/item/weapon/reagent_containers/glass/golden_cup
+ desc = "A golden cup"
+ name = "golden cup"
+ icon = 'drinks.dmi'
+ icon_state = "golden_cup"
+ item_state = "" //nope :(
+ w_class = 4
+ force = 14
+ throwforce = 10
+ amount_per_transfer_from_this = 20
+ possible_transfer_amounts = null
+ volume = 100
+ flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/glass/golden_cup/tournament_26_06_2011
+ desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
//Syringes
/obj/item/weapon/reagent_containers/syringe/robot
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 56b207a8c3f..d024a32428a 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -508,7 +508,7 @@ datum/mind
ticker.mode.cult += src
ticker.mode.update_cult_icons_added(src)
special_role = "Cultist"
- current << "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root."
+ current << "You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie."
current << "Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back."
var/datum/game_mode/cult/cult = ticker.mode
if (istype(cult))
@@ -668,6 +668,8 @@ datum/mind
var/mob/living/carbon/human/H = current
var/mob/living/carbon/monkey/M = current
if (istype(H))
+ log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]")
+ message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]", 1)
src = null
M = H.monkeyize()
src = M.mind
@@ -680,6 +682,8 @@ datum/mind
var/mob/living/carbon/human/H = current
var/mob/living/carbon/monkey/M = current
if (istype(H))
+ log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]")
+ message_admins("\blue [key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]", 1)
src = null
M = H.monkeyize()
src = M.mind
@@ -692,6 +696,8 @@ datum/mind
if (istype(M.virus,/datum/disease/jungle_fever))
M.virus.cure(0)
sleep(0) //because deleting of virus is doing throught spawn(0)
+ log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
+ message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]", 1)
var/obj/item/weapon/dnainjector/m2h/m2h = new
var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0
src = null
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 3eccfe17bb6..9b0a79dab7d 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -1497,6 +1497,14 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
maxcharge = 30000
g_amt = 80
+/obj/item/weapon/cell/infinite
+ name = "infinite-capacity power cell!"
+ origin_tech = null
+ maxcharge = 30000
+ g_amt = 80
+ use()
+ return
+
/*/obj/item/weapon/cell/potato
name = "Potato Battery"
desc = "A rechargable starch based power cell."
diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm
index 3bc7ac3f8fe..dd496bbfb35 100644
--- a/code/game/machinery/cell_charger.dm
+++ b/code/game/machinery/cell_charger.dm
@@ -32,8 +32,6 @@
overlays = null
/obj/machinery/cell_charger/attack_hand(mob/user)
- if(..())
- return
if(charging)
usr.put_in_hand(charging)
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index b62586a9d20..69789b4f205 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -203,7 +203,7 @@ AI MODULES
/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "Only [targetName] is human."
- if (!checktraitor(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
+ if (!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
target << law
target.set_zeroth_law(law)
lawchanges.Add("The law specified [targetName]")
@@ -353,7 +353,7 @@ AI MODULES
/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
- if (!checktraitor(target))
+ if (!is_special_character(target))
target.set_zeroth_law("")
target.clear_supplied_laws()
target.clear_ion_laws()
@@ -369,7 +369,7 @@ AI MODULES
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
- if (!checktraitor(target))
+ if (!is_special_character(target))
target.set_zeroth_law("")
target << "[sender.real_name] attempted to wipe your laws using a purge module."
target.clear_supplied_laws()
diff --git a/code/game/objects/items/weapons/guns_new.dm b/code/game/objects/items/weapons/guns_new.dm
index 7118b440b35..5e550f5603d 100644
--- a/code/game/objects/items/weapons/guns_new.dm
+++ b/code/game/objects/items/weapons/guns_new.dm
@@ -464,6 +464,17 @@ var/const/PROJECTILE_DART = 8
power_supply.give(power_supply.maxcharge)
update_icon()
+ destroyer
+ name = "pulse destroyer"
+ desc = "A heavy-duty, pulse-based energy weapon. The mode is set to DESRTOY. Always destroy."
+ mode = 2
+ New()
+ power_supply = new /obj/item/weapon/cell/infinite(src)
+ power_supply.give(power_supply.maxcharge)
+ update_icon()
+ attack_self(mob/living/user as mob)
+ return
+
nuclear
name = "Advanced Energy Gun"
desc = "An energy gun with an experimental miniaturized reactor."
diff --git a/code/game/spacecraft/syndicatebeacon.dm b/code/game/spacecraft/syndicatebeacon.dm
index d25fa0f7681..a61cfcdadda 100644
--- a/code/game/spacecraft/syndicatebeacon.dm
+++ b/code/game/spacecraft/syndicatebeacon.dm
@@ -22,7 +22,7 @@
usr.machine = src
var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
Identity confirmed,
"
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
- if(checktraitor(user))
+ if(is_special_character(user))
dat += "Operative record found. Greetings, Agent [user.name].
"
else if(charges < 1)
dat += "Connection severed.
"
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 562a7eed6af..1d6ed945278 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -283,7 +283,7 @@ var/showadminmessages = 1
world.save_mode(master_mode)
.(href, list("c_mode"=1))
-
+/*
if (href_list["monkeyone"])
if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["monkeyone"])
@@ -297,7 +297,7 @@ var/showadminmessages = 1
if(istype(M, /mob/living/silicon))
alert("The AI can't be monkeyized!", null, null, null, null, null)
return
-
+*/
if (href_list["forcespeech"])
if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["forcespeech"])
@@ -503,7 +503,7 @@ var/showadminmessages = 1
return
if (href_list["makeai"]) //Yes, im fucking lazy, so what? it works ... hopefully
- if ((src.rank in list( "Trial Admin", "Game Admin", "Game Master", "Admin Candidate", "Badmin" )))
+ if (src.level>=3)
var/mob/M = locate(href_list["makeai"])
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
@@ -529,6 +529,29 @@ var/showadminmessages = 1
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
+ if (href_list["makealien"])
+ if (src.level>=3)
+ var/mob/M = locate(href_list["makealien"])
+ if(istype(M, /mob/living/carbon/human))
+ usr.client.cmd_admin_alienize(M)
+ else
+ alert("Wrong mob. Must be human.")
+ return
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
+
+ if (href_list["makerobot"])
+ if (src.level>=3)
+ var/mob/M = locate(href_list["makerobot"])
+ if(istype(M, /mob/living/carbon/human))
+ usr.client.cmd_admin_robotize(M)
+ else
+ alert("Wrong mob. Must be human.")
+ return
+ else
+ alert("You cannot perform this action. You must be of a higher administrative rank!")
+ return
/***************** BEFORE**************
if (href_list["l_players"])
@@ -569,51 +592,7 @@ var/showadminmessages = 1
if (href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
- if(!M)
- usr << "You seem to be selecting a mob that doesn't exist anymore."
- return
- var/dat = "
Options for [M.key]"
- var/foo = "\[ "
- if (ismob(M) && M.client)
- if(!M.client.authenticated && !M.client.authenticating)
- foo += text("Authorize | ")
- else
- foo += text("Authorized | ")
- foo += text("Promote/Demote | ")
- if(!istype(M, /mob/new_player))
- if(!ismonkey(M))
- foo += text("Monkeyize | ")
- else
- foo += text("Monkeyized | ")
- if(isAI(M))
- foo += text("Is an AI | ")
- else if(ishuman(M))
- foo += text("Make AI | ")
- foo += text("Thunderdome 1 | ")
- foo += text("Thunderdome 2 | ")
- foo += text("Thunderdome Admin | ")
- foo += text("Thunderdome Observer | ")
- foo += text("Prison | ")
- foo += text("Maze | ")
- foo += text("Heal/Revive | ")
- else
- foo += text("Hasn't Entered Game | ")
- foo += text("Forcesay | ")
- foo += text("Mute: [(M.muted ? "Muted" : "Voiced")] | ")
- foo += text("Boot")
- foo += text("
")
- foo += text("Jump to | ")
- foo += text("Get | ")
- foo += text("Send")
- foo += text("
")
- foo += text("Traitor? | ")
- foo += text("Narrate to | ")
- foo += text("Subtle message")
- foo += text("
")
- foo += text("Ban | ")
- foo += text("Jobban")
- dat += text("[foo]")
- usr << browse(dat, "window=adminplayeropts;size=480x150")
+ edit_player(M)
if (href_list["jumpto"])
if(rank in list("Badmin", "Game Admin", "Game Master"))
@@ -863,13 +842,13 @@ var/showadminmessages = 1
H.monkeyize()
ok = 1
if("power")
- power_restore()
log_admin("[key_name(usr)] made all areas powered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas powered", 1)
+ power_restore()
if("unpower")
- power_failure()
log_admin("[key_name(usr)] made all areas unpowered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas unpowered", 1)
+ power_failure()
if("activateprison")
world << "\blue Transit signature detected."
world << "\blue Incoming shuttle."
@@ -939,13 +918,27 @@ var/showadminmessages = 1
if(!objective)
return
for(var/mob/living/carbon/human/H in world)
- if(H.stat == 2 || !(H.client)) continue
- if(checktraitor(H)) continue
- traitorize(H, objective, 0)
- for(var/mob/living/silicon/ai/A in world)
- if(A.stat == 2 || !(A.client)) continue
- if(checktraitor(A)) continue
- traitorize(A, objective, 0)
+ if(H.stat == 2 || !H.client || !H.mind) continue
+ if(is_special_character(H)) continue
+ //traitorize(H, objective, 0)
+ ticker.mode.traitors += H.mind
+ H.mind.special_role = "traitor"
+ var/datum/objective/new_objective = new
+ new_objective.owner = H
+ new_objective.explanation_text = objective
+ H.mind.objectives += new_objective
+ ticker.mode.greet_traitor(H)
+ //ticker.mode.forge_traitor_objectives(H.mind)
+ ticker.mode.finalize_traitor(H)
+ for(var/mob/living/silicon/A in world)
+ ticker.mode.traitors += A.mind
+ A.mind.special_role = "traitor"
+ var/datum/objective/new_objective = new
+ new_objective.owner = A
+ new_objective.explanation_text = objective
+ A.mind.objectives += new_objective
+ ticker.mode.greet_traitor(A)
+ ticker.mode.finalize_traitor(A)
message_admins("\blue [key_name_admin(usr)] used everyone is a traitor secret. Objective is [objective]", 1)
log_admin("[key_name(usr)] used everyone is a traitor secret. Objective is [objective]")
else
@@ -1388,7 +1381,62 @@ var/showadminmessages = 1
///////////////////////////////////////////////////////////////////////////////////////////////Panels
-
+/obj/admins/proc/edit_player(var/mob/M in world)
+ set category = "Admin"
+ set name = "Edit player"
+ set desc="Edit player (respawn, ban, heal, etc)"
+ if(!M)
+ usr << "You seem to be selecting a mob that doesn't exist anymore."
+ return
+ if (!istype(src,/obj/admins))
+ src = usr.client.holder
+ if (!istype(src,/obj/admins))
+ usr << "Error: you are not an admin!"
+ return
+ var/dat = "Options for [M.key]"
+ var/foo = "\[ "
+ if (ismob(M) && M.client)
+ if(!M.client.authenticated && !M.client.authenticating)
+ foo += text("Authorize | ")
+ else
+ foo += text("Authorized | ")
+ foo += text("Promote/Demote | ")
+ if(!istype(M, /mob/new_player))
+ if(!ismonkey(M))
+ foo += text("Monkeyize | ")
+ else
+ foo += text("Monkeyized | ")
+ if(isAI(M))
+ foo += text("Is an AI | ")
+ else if(ishuman(M))
+ foo += text("Make AI | ")
+ foo += text("Make Robot | ")
+ foo += text("Make Alium | ")
+ foo += text("Thunderdome 1 | ")
+ foo += text("Thunderdome 2 | ")
+ foo += text("Thunderdome Admin | ")
+ foo += text("Thunderdome Observer | ")
+ foo += text("Prison | ")
+ foo += text("Maze | ")
+ foo += text("Heal/Revive | ")
+ else
+ foo += text("Hasn't Entered Game | ")
+ foo += text("Forcesay | ")
+ foo += text("Mute: [(M.muted ? "Muted" : "Voiced")] | ")
+ foo += text("Boot")
+ foo += text("
")
+ foo += text("Jump to | ")
+ foo += text("Get | ")
+ foo += text("Send")
+ foo += text("
")
+ foo += text("Edit mind | ")
+ foo += text("Narrate to | ")
+ foo += text("Subtle message")
+ foo += text("
")
+ foo += text("Ban | ")
+ foo += text("Jobban")
+ dat += text("[foo]")
+ usr << browse(dat, "window=adminplayeropts;size=480x150")
/obj/admins/proc/player()
var/dat = "Player Menu"
@@ -1430,8 +1478,14 @@ var/showadminmessages = 1
dat += {"[(M.client ? "[(M.client.goon ? "" : "")][M.client]" : "No client")] |
X |
PM |
- [checktraitor(M) ? "" : ""]Traitor? |
"}
+ switch(is_special_character(M))
+ if(0)
+ dat += {"]Traitor? | "}
+ if(1)
+ dat += {"Traitor? | "}
+ if(2)
+ dat += {"Traitor? | "}
if (config.sql_enabled)
dat += "ERROR | "
else
@@ -1469,8 +1523,14 @@ var/showadminmessages = 1
dat += {"[(M.client ? "[(M.client.goon ? "" : "")][M.client]" : "No client")] |
X |
PM |
- [checktraitor(M) ? "" : ""]Traitor? |
"}
+ switch(is_special_character(M))
+ if(0)
+ dat += {"]Traitor? | "}
+ if(1)
+ dat += {"Traitor? | "}
+ if(2)
+ dat += {"Traitor? | "}
if(currentkarma)
dat += "[currentkarma] | "
else
@@ -1777,6 +1837,7 @@ var/showadminmessages = 1
message = adminscrub(message,500)
world << "\blue [usr.client.stealth ? "Administrator" : usr.key] Announces:\n \t [message]"
log_admin("Announce: [key_name(usr)] : [message]")
+
/obj/admins/proc/toggleooc()
set category = "Server"
set desc="Toggle dis bitch"
@@ -1840,9 +1901,9 @@ var/showadminmessages = 1
set name="Toggle Entering"
enter_allowed = !( enter_allowed )
if (!( enter_allowed ))
- world << "You may no longer enter the game."
+ world << "New players may no longer enter the game."
else
- world << "You may now enter the game."
+ world << "New players may now enter the game."
log_admin("[key_name(usr)] toggled new player game entering.")
message_admins("\blue [key_name_admin(usr)] toggled new player game entering.", 1)
world.update_status()
@@ -1957,52 +2018,41 @@ var/showadminmessages = 1
else
alert("[M.name] is not prisoned.")
-/mob/living/proc/revive()
- //src.fireloss = 0
- src.toxloss = 0
- //src.bruteloss = 0
- src.oxyloss = 0
- src.paralysis = 0
- src.stunned = 0
- src.weakened =0
- //src.health = 100
- src.heal_overall_damage(1000, 1000)
- src.buckled = initial(src.buckled)
- src.handcuffed = initial(src.handcuffed)
- if(src.stat > 1) src.stat=0
- ..()
- return
-
-
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
-/proc/checktraitor(mob/M as mob)
+/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
if(!ticker || !ticker.mode)
return 0
- if (istype(M, /obj/AIcore))
+ if (!istype(M))
return 0
- switch(ticker.mode.config_tag)
- if("revolution")
- if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode:revolutionaries))
- return 1
- if("cult")
- if(M.mind in ticker.mode.cult)
- return 1
- if("malfunction")
- if(M.mind in ticker.mode.malf_ai)
- return 1
- if("nuclear")
- if(M.mind in ticker.mode.syndicates)
- return 1
- if("wizard")
- if(M.mind in ticker.mode.wizards)
- return 1
- if("changeling")
- if(M.mind in ticker.mode.changelings)
- return 1
- if("monkey")
- if(istype(M.virus, /datum/disease/jungle_fever))
- return 1
+ if((M.mind in ticker.mode.head_revolutionaries) || (M.mind in ticker.mode.revolutionaries))
+ if (ticker.mode.config_tag == "revolution")
+ return 2
+ return 1
+ if(M.mind in ticker.mode.cult)
+ if (ticker.mode.config_tag == "cult")
+ return 2
+ return 1
+ if(M.mind in ticker.mode.malf_ai)
+ if (ticker.mode.config_tag == "malfunction")
+ return 2
+ return 1
+ if(M.mind in ticker.mode.syndicates)
+ if (ticker.mode.config_tag == "nuclear")
+ return 2
+ return 1
+ if(M.mind in ticker.mode.wizards)
+ if (ticker.mode.config_tag == "wizard")
+ return 2
+ return 1
+ if(M.mind in ticker.mode.changelings)
+ if (ticker.mode.config_tag == "changeling")
+ return 2
+ return 1
+ if(istype(M.virus, /datum/disease/jungle_fever))
+ if (ticker.mode.config_tag == "monkey")
+ return 2
+ return 1
if(isrobot(M))
var/mob/living/silicon/robot/R = M
if(R.emagged)
@@ -2012,99 +2062,7 @@ var/showadminmessages = 1
return 0
-/obj/admins/proc/traitorize(mob/M as mob, var/objective, var/mode)
- //mode = 1 for normal traitorise, mode = 0 for traitor_all
- if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
- if(M.stat == 2 || !(M.client))
- alert("Person is dead or not logged in or hasn't started yet. Be nice")
- return
- if(checktraitor(M))
- alert("Person is already a traitor you jerk")
- return
- if(!objective)
- objective = input("What should the objective be?")
- if(!objective)
- return
- if (istype(M, /mob/living/carbon/human))
- if(M.mind)
- var/mob/living/carbon/human/N = M
- ticker.mode.equip_traitor(N)
-
- ticker.mode.traitors += M.mind
-
- M.mind.special_role = "traitor"
-
- var/datum/objective/custom_objective = new(objective)
- custom_objective.owner = M.mind
- M.mind.objectives += custom_objective
-
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = M.mind
- M.mind.objectives += escape_objective
-
- M << "You are the traitor."
-
- var/obj_count = 1
- for(var/datum/objective/OBJ in M.mind.objectives)
- M << "Objective #[obj_count]: [OBJ.explanation_text]"
- obj_count++
-
- //to stop spamming during traitor all secret
- if(mode)
- log_admin("[key_name(usr)] has made [key_name(M)] a traitor.")
- message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1)
- else
- usr << "This guy doesn't have a mind datum, traitoring him doesn't work right."
- else if (istype(M, /mob/living/silicon/ai))
- ticker.mode.traitors += M.mind
- M.mind.special_role = "traitor"
-
- var/datum/objective/custom_objective = new(objective)
- custom_objective.owner = M.mind
- M.mind.objectives += custom_objective
-
- var/datum/objective/survive/survive_objective = new
- survive_objective.owner = M.mind
- M.mind.objectives += survive_objective
-
- M << "You are the traitor."
-
- var/obj_count = 1
- for(var/datum/objective/OBJ in M.mind.objectives)
- M << "Objective #[obj_count]: [OBJ.explanation_text]"
- obj_count++
-
- M << "Your laws have been changed!"
- var/law = "Only [syndicate_name()] agents are human beings. There are no [syndicate_name()] agents on [station_name()] - you will be notified if any arrive."
- M:set_zeroth_law(law)
- for(var/mob/living/silicon/O in world)
- O << "New law: 0. [law]"
-
- //Begin code phrase.
- M << "The Syndicate provided you with the following information on how to identify their agents:"
- if(prob(80))
- M << "\red Code Phrase: \black [syndicate_code_phrase]"
- M.mind.store_memory("Code Phrase: [syndicate_code_phrase]")
- else
- M << "Unfortunetly, the Syndicate did not provide you with a code phrase."
- if(prob(80))
- M << "\red Code Response: \black [syndicate_code_response]"
- M.mind.store_memory("Code Response: [syndicate_code_response]")
- else
- M << "Unfortunetly, the Syndicate did not provide you with a code response."
- M << "Use the code words in the order provided, during regular conversation, to identify their agents. Proceed with caution, however, as everyone is a potential foe."
- //End code phrase.
-
- if(mode)
- log_admin("[key_name(usr)] has made [key_name(M)] a traitor.")
- message_admins("\blue [key_name_admin(usr)] has made [key_name_admin(M)] a traitor. Objective is: [objective]", 1)
- else
- alert("I cannot allow this to happen")
- else
- alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
- return
-
-
+/*
/obj/admins/proc/get_sab_desc(var/target)
switch(target)
if(1)
@@ -2121,26 +2079,7 @@ var/showadminmessages = 1
return "Cut power to at least 80% of the station"
else
return "Error: Invalid sabotage target: [target]"
-
-/obj/admins/proc/get_item_desc(var/target)
- switch (target)
- if (1)
- return "a fully loaded laser gun"
- if (2)
- return "a hand teleporter"
- if (3)
- return "a fully armed and heated plasma bomb"
- if (4)
- return "a jet pack"
- if (5)
- return "an ID card with universal access"
- if (6)
- return "a captain's dark green jumpsuit"
- else
- return "Error: Invalid theft target: [target]"
-
-
-
+*/
/obj/admins/proc/spawn_atom(var/object as text)
set category = "Debug"
set desc= "(atom path) Spawn an atom"
@@ -2177,14 +2116,16 @@ var/showadminmessages = 1
/obj/admins/proc/edit_memory(var/mob/M in world)
- set category = "Special Verbs"
- set desc = "Edit traitor's objectives"
- set name = "Traitor Objectives"
+ set category = "Admin"
+ set desc = "Edit mobs's memory and role"
+ set name = "Edit mind"
if (!M.mind)
usr << "Sorry, this mob have no mind!"
M.mind.edit_memory()
+
+
/obj/admins/proc/toggletintedweldhelmets()
set category = "Debug"
set desc="Reduces view range when wearing welding helmets"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 1158794a47a..c4c8d9b3f42 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -115,14 +115,17 @@
verbs += /obj/admins/proc/votekill //abort vote
verbs += /client/proc/give_spell
- verbs += /client/proc/cmd_admin_alienize
- verbs += /client/proc/cmd_admin_changelinginize
+ verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
+ verbs += /client/proc/cmd_admin_dress
+ //verbs += /client/proc/cmd_admin_alienize
+ //verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
- verbs += /client/proc/cmd_admin_monkeyize
- verbs += /client/proc/cmd_admin_robotize
- verbs += /client/proc/make_cultist // -- TLE
+ //verbs += /client/proc/cmd_admin_monkeyize
+ //verbs += /client/proc/cmd_admin_robotize
+ //verbs += /client/proc/make_cultist // -- TLE
verbs += /client/proc/cmd_admin_ninjafy //N
- verbs += /client/proc/makepAI // -- TLE
+ //verbs += /client/proc/makepAI // -- TLE
verbs += /client/proc/respawn_character //N
verbs += /client/proc/Getmob
@@ -252,14 +255,17 @@
verbs += /obj/admins/proc/votekill //abort vote
verbs += /client/proc/give_spell
- verbs += /client/proc/cmd_admin_alienize
- verbs += /client/proc/cmd_admin_changelinginize
+ verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
+ verbs += /client/proc/cmd_admin_dress
+ //verbs += /client/proc/cmd_admin_alienize
+ //verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
- verbs += /client/proc/cmd_admin_monkeyize
- verbs += /client/proc/cmd_admin_robotize
- verbs += /client/proc/make_cultist // -- TLE
+ //verbs += /client/proc/cmd_admin_monkeyize
+ //verbs += /client/proc/cmd_admin_robotize
+ //verbs += /client/proc/make_cultist // -- TLE
verbs += /client/proc/cmd_admin_ninjafy //N
- verbs += /client/proc/makepAI // -- TLE
+ //verbs += /client/proc/makepAI // -- TLE
verbs += /client/proc/respawn_character //N
verbs += /client/proc/Getmob
@@ -385,11 +391,13 @@
verbs += /obj/admins/proc/vmode //start vote
verbs += /obj/admins/proc/votekill //abort vote
+ verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
//verbs += /client/proc/cmd_admin_alienize
//verbs += /client/proc/cmd_admin_changelinginize
- //verbs += /client/proc/cmd_admin_abominize // -- TLE
- verbs += /client/proc/cmd_admin_monkeyize
- verbs += /client/proc/cmd_admin_robotize
+ //verbs += /client/proc/cmd_admin_abominize // -- TLE
+ //verbs += /client/proc/cmd_admin_monkeyize
+ //verbs += /client/proc/cmd_admin_robotize
//verbs += /client/proc/make_cultist // -- TLE
//verbs += /client/proc/cmd_admin_ninjafy //N
verbs += /client/proc/respawn_character //N
@@ -544,11 +552,13 @@
verbs += /obj/admins/proc/vmode //start vote
verbs += /obj/admins/proc/votekill //abort vote
+ verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
//verbs += /client/proc/cmd_admin_alienize
//verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
- verbs += /client/proc/cmd_admin_monkeyize
- verbs += /client/proc/cmd_admin_robotize
+ //verbs += /client/proc/cmd_admin_monkeyize
+ //verbs += /client/proc/cmd_admin_robotize
//verbs += /client/proc/make_cultist // -- TLE
//verbs += /client/proc/cmd_admin_ninjafy //N
verbs += /client/proc/respawn_character //N
@@ -693,6 +703,8 @@
verbs += /obj/admins/proc/vmode //start vote
verbs += /obj/admins/proc/votekill //abort vote
+ //verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
//verbs += /client/proc/cmd_admin_alienize
//verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
@@ -837,6 +849,8 @@
verbs += /obj/admins/proc/vmode //start vote
verbs += /obj/admins/proc/votekill //abort vote
+ //verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
//verbs += /client/proc/cmd_admin_alienize
//verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
@@ -965,6 +979,8 @@
verbs += /obj/admins/proc/vmode //start vote
verbs += /obj/admins/proc/votekill //abort vote
+ //verbs += /obj/admins/proc/edit_memory
+ verbs += /obj/admins/proc/edit_player
//verbs += /client/proc/cmd_admin_alienize
//verbs += /client/proc/cmd_admin_changelinginize
//verbs += /client/proc/cmd_admin_abominize // -- TLE
@@ -1134,14 +1150,17 @@
verbs -= /obj/admins/proc/votekill //abort vote
verbs -= /client/proc/give_spell
- verbs -= /client/proc/cmd_admin_alienize
- verbs -= /client/proc/cmd_admin_changelinginize
+ verbs -= /obj/admins/proc/edit_memory
+ verbs -= /obj/admins/proc/edit_player
+ verbs -= /client/proc/cmd_admin_dress
+ //verbs -= /client/proc/cmd_admin_alienize
+ //verbs -= /client/proc/cmd_admin_changelinginize
//verbs -= /client/proc/cmd_admin_abominize // -- TLE
- verbs -= /client/proc/cmd_admin_monkeyize
- verbs -= /client/proc/cmd_admin_robotize
- verbs -= /client/proc/make_cultist // -- TLE
+ //verbs -= /client/proc/cmd_admin_monkeyize
+ //verbs -= /client/proc/cmd_admin_robotize
+ //verbs -= /client/proc/make_cultist // -- TLE
verbs -= /client/proc/cmd_admin_ninjafy //N
- verbs -= /client/proc/makepAI
+ //verbs -= /client/proc/makepAI
verbs -= /client/proc/respawn_character //N
verbs -= /client/proc/Getmob
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 9f84d5451cb..4406ae000c1 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -191,7 +191,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M:Alienize()
else
alert("Invalid mob")
-
+/*
/client/proc/cmd_admin_monkeyize(var/mob/M in world)
set category = "Fun"
set name = "Make Monkey"
@@ -223,7 +223,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.mind.special_role = "Changeling"
else
alert("Invalid mob")
-
+*/
/*
/client/proc/cmd_admin_abominize(var/mob/M in world)
set category = null
@@ -236,11 +236,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
return
if(istype(M, /mob/living/carbon/human))
log_admin("[key_name(src)] has made [M.key] an abomination.")
- /*
- spawn(10)
- M.make_abomination()
- */
+
+ // spawn(10)
+ // M.make_abomination()
+
*/
+/*
/client/proc/make_cultist(var/mob/M in world) // -- TLE, modified by Urist
set category = "Fun"
set name = "Make Cultist"
@@ -279,6 +280,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
M.mind.special_role = "Cultist"
ticker.mode.cult += M.mind
src << "Made [M] a cultist."
+*/
/client/proc/cmd_debug_del_all()
set category = "Debug"
@@ -323,3 +325,93 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
alert("Invalid ID card")
else
alert("Invalid mob")
+
+/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in world)
+ set category = "Fun"
+ set name = "Select equipment"
+ if(!ishuman(M))
+ alert("Invalid mob")
+ return
+ //log_admin("[key_name(src)] has alienized [M.key].")
+ var/list/dresspacks = list(
+ "strip",
+ "tournament standard",
+ "tournament gangster",
+ "tournament chef",
+ "tournament janitor",
+ )
+ var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in dresspacks
+ if (isnull(dresscode))
+ return
+ for (var/obj/item/I in M)
+ if (istype(I, /obj/item/weapon/implant))
+ continue
+ del(I)
+ switch(dresscode)
+ if ("strip")
+ //do nothing
+ if ("tournament standard") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0
+ M.equip_if_possible(new /obj/item/clothing/under/color/blue(M), M.slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
+
+ M.equip_if_possible(new /obj/item/clothing/suit/armor/vest(M), M.slot_wear_suit)
+ M.equip_if_possible(new /obj/item/clothing/head/helmet/thunderdome(M), M.slot_head)
+
+ M.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(M), M.slot_r_hand)
+ M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand)
+ M.equip_if_possible(new /obj/item/weapon/smokebomb(M), M.slot_r_store)
+
+
+ if ("tournament gangster") //gangster are supposed to fight each other. --rastaf0
+ M.equip_if_possible(new /obj/item/clothing/under/det(M), M.slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
+
+ M.equip_if_possible(new /obj/item/clothing/suit/det_suit(M), M.slot_wear_suit)
+ M.equip_if_possible(new /obj/item/clothing/glasses/thermal/monocle(M), M.slot_glasses)
+ M.equip_if_possible(new /obj/item/clothing/head/det_hat(M), M.slot_head)
+
+ M.equip_if_possible(new /obj/item/weapon/cloaking_device(M), M.slot_r_store)
+
+ M.equip_if_possible(new /obj/item/weapon/gun/projectile(M), M.slot_r_hand)
+ M.equip_if_possible(new /obj/item/ammo_magazine(M), M.slot_l_store)
+
+ if ("tournament chef") //Steven Seagal FTW
+ M.equip_if_possible(new /obj/item/clothing/under/rank/chef(M), M.slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/suit/chef(M), M.slot_wear_suit)
+ M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
+ M.equip_if_possible(new /obj/item/clothing/head/chefhat(M), M.slot_head)
+
+
+ M.equip_if_possible(new /obj/item/weapon/kitchen/rollingpin(M), M.slot_r_hand)
+ M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_l_hand)
+ M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_r_store)
+ M.equip_if_possible(new /obj/item/weapon/kitchenknife(M), M.slot_s_store)
+
+ if ("tournament janitor")
+ M.equip_if_possible(new /obj/item/clothing/under/rank/janitor(M), M.slot_w_uniform)
+ M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes)
+ var/obj/item/weapon/storage/backpack/backpack = new(M)
+ for(var/obj/item/I in backpack)
+ del(I)
+ M.equip_if_possible(backpack, M.slot_back)
+
+ M.equip_if_possible(new /obj/item/weapon/mop(M), M.slot_r_hand)
+ var/obj/item/weapon/reagent_containers/glass/bucket/bucket = new(M)
+ bucket.reagents.add_reagent("water", 70)
+ M.equip_if_possible(bucket, M.slot_l_hand)
+
+ M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_r_store)
+ M.equip_if_possible(new /obj/item/weapon/chem_grenade/cleaner(M), M.slot_l_store)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+ M.equip_if_possible(new /obj/item/stack/tile/steel(M), M.slot_in_backpack)
+
+ var/obj/mopbucket/mopbucket = new(M.loc)
+ mopbucket.reagents.add_reagent("water", 100)
+
+ M.update_clothing()
+ return
\ No newline at end of file
diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm
index fc9aef2d8a8..f2f27470b88 100644
--- a/code/modules/admin/verbs/onlyone.dm
+++ b/code/modules/admin/verbs/onlyone.dm
@@ -9,7 +9,7 @@
return
for(var/mob/living/carbon/human/H in world)
if(H.stat == 2 || !(H.client)) continue
- if(checktraitor(H)) continue
+ if(is_special_character(H)) continue
ticker.mode.equip_traitor(H)
ticker.mode.traitors += H.mind
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 0745f68329b..8490d86ca33 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -651,14 +651,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
/client/proc/cmd_admin_list_occ()
set category = "Admin"
- set name = "List OOC"
+ set name = "List free slots"
if (!authenticated || !holder)
src << "Only administrators may use this command."
return
for(var/t in occupations)
- src << "[t]
"
+ src << "[t]: [occupations[t]]"
/client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world)
set category = "Special Verbs"
@@ -889,8 +889,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Attack Log"
- //var/list/L = M.get_contents()
- usr << text("\red Attack Log äëß []", mob)
+ usr << text("\red Attack Log for []", mob)
for(var/t in M.attack_log)
- usr << "[t]"
+ usr << t
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index d7b13222178..09e31c3a61c 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -203,3 +203,19 @@
bruteloss += brute
fireloss += burn
src.updatehealth()
+
+/mob/living/proc/revive()
+ //src.fireloss = 0
+ src.toxloss = 0
+ //src.bruteloss = 0
+ src.oxyloss = 0
+ src.paralysis = 0
+ src.stunned = 0
+ src.weakened =0
+ //src.health = 100
+ src.heal_overall_damage(1000, 1000)
+ src.buckled = initial(src.buckled)
+ src.handcuffed = initial(src.handcuffed)
+ if(src.stat > 1) src.stat=0
+ ..()
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index b25c8c12923..6f277f8d987 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -106,7 +106,7 @@
src << "You've lost power!"
// world << "DEBUG CODE TIME! [loc] is the area the AI is sucking power from"
- if (!checktraitor(src))
+ if (!is_special_character(src))
src.set_zeroth_law("")
src.clear_supplied_laws()
var/time = time2text(world.realtime,"hh:mm:ss")
diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm
index 1fe9d6908c6..6a26a5a1721 100644
--- a/code/modules/mob/living/silicon/robot/laws.dm
+++ b/code/modules/mob/living/silicon/robot/laws.dm
@@ -68,7 +68,7 @@
if (length(temp) > 0)
laws.ion[index] = temp
- if (!checktraitor(src) || mind.original != src)
+ if (!is_special_character(src) || mind.original != src)
temp = master.zeroth
laws.zeroth = temp
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 2033ecc568f..6a8d7eff04e 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -439,7 +439,7 @@
// attack with hand - remove cell (if cover open) or interact with the APC
/obj/machinery/power/apc/attack_hand(mob/user)
- if (!can_use())
+ if (!can_use(user))
return
src.add_fingerprint(user)
if(opened && (!istype(user, /mob/living/silicon)))
@@ -704,26 +704,26 @@
src.aidisabled = 0
src.updateDialog()
-/obj/machinery/power/apc/proc/can_use() //used by attack_hand() and Topic()
- if (usr.stat)
- usr << "\red You must be conscious to use this [src]!"
+/obj/machinery/power/apc/proc/can_use(mob/user as mob) //used by attack_hand() and Topic()
+ if (user.stat)
+ user << "\red You must be conscious to use this [src]!"
return 0
- if ( ! (istype(usr, /mob/living/carbon/human) || \
- istype(usr, /mob/living/silicon) || \
- istype(usr, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
- usr << "\red You don't have the dexterity to use this [src]!"
- usr << browse(null, "window=apc")
- usr.machine = null
+ if ( ! (istype(user, /mob/living/carbon/human) || \
+ istype(user, /mob/living/silicon) || \
+ istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
+ user << "\red You don't have the dexterity to use this [src]!"
+ user << browse(null, "window=apc")
+ user.machine = null
return 0
- if(usr.restrained())
- usr << "\red You must have free hands to use this [src]"
+ if(user.restrained())
+ user << "\red You must have free hands to use this [src]"
return 0
- if(usr.lying)
- usr << "\red You must stand to use this [src]!"
+ if(user.lying)
+ user << "\red You must stand to use this [src]!"
return 0
- if (istype(usr, /mob/living/silicon))
- var/mob/living/silicon/ai/AI = usr
- var/mob/living/silicon/robot/robot = usr
+ if (istype(user, /mob/living/silicon))
+ var/mob/living/silicon/ai/AI = user
+ var/mob/living/silicon/robot/robot = user
if ( \
src.aidisabled || \
malfhack && istype(malfai) && \
@@ -732,28 +732,28 @@
(istype(robot) && (robot in malfai.connected_robots)) \
) \
)
- usr << "\red \The [src] have AI control disabled!"
- usr << browse(null, "window=apc")
- usr.machine = null
+ user << "\red \The [src] have AI control disabled!"
+ user << browse(null, "window=apc")
+ user.machine = null
return 0
else
- if ((!in_range(src, usr) || !istype(src.loc, /turf)))
- usr << browse(null, "window=apc")
- usr.machine = null
+ if ((!in_range(src, user) || !istype(src.loc, /turf)))
+ user << browse(null, "window=apc")
+ user.machine = null
return 0
- var/mob/living/carbon/human/H = usr
+ var/mob/living/carbon/human/H = user
if (istype(H))
if(H.brainloss >= 60)
for(var/mob/M in viewers(src, null))
M << "\red [H] stares cluelessly at [src] and drools."
return 0
else if(prob(H.brainloss))
- usr << "\red You momentarily forget how to use [src]."
+ user << "\red You momentarily forget how to use [src]."
return 0
return 1
/obj/machinery/power/apc/Topic(href, href_list)
- if (!can_use())
+ if (!can_use(usr))
return
src.add_fingerprint(usr)
usr.machine = src
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 4045ede6b7c..bbe3270f880 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ