mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 19:22:56 +00:00
Given that the mind datum is where traitors store their objectives (and how assassination targets are tracked), I have gone to some effort to ensure that, much like people currently in the thunderdome, people that are borgs still get counted as being dead. Also, borgs cannot succeed at hijack/escape objectives. If you find this to not be the case, PLEASE REPORT IT. Borging a changeling now ends the round, much like cremating/gibbing them does. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@962 316c924e-a436-60f5-8080-3fe189b3f50e
268 lines
7.6 KiB
Plaintext
268 lines
7.6 KiB
Plaintext
/mob/living/carbon/human/proc/monkeyize()
|
|
if (src.monkeyizing)
|
|
return
|
|
for(var/obj/item/weapon/W in src)
|
|
src.u_equip(W)
|
|
if (src.client)
|
|
src.client.screen -= W
|
|
if (W)
|
|
W.loc = src.loc
|
|
W.dropped(src)
|
|
W.layer = initial(W.layer)
|
|
src.update_clothing()
|
|
src.monkeyizing = 1
|
|
src.canmove = 0
|
|
src.icon = null
|
|
src.invisibility = 101
|
|
for(var/t in src.organs)
|
|
//src.organs[text("[]", t)] = null
|
|
del(src.organs[text("[]", t)])
|
|
var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc )
|
|
animation.icon_state = "blank"
|
|
animation.icon = 'mob.dmi'
|
|
animation.master = src
|
|
flick("h2monkey", animation)
|
|
sleep(48)
|
|
//animation = null
|
|
del(animation)
|
|
var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey( src.loc )
|
|
|
|
O.name = "monkey"
|
|
O.dna = src.dna
|
|
src.dna = null
|
|
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
|
O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
|
if (src.client)
|
|
src.client.mob = O
|
|
O.loc = src.loc
|
|
O.a_intent = "hurt"
|
|
O << "<B>You are now a monkey.</B>"
|
|
|
|
del(src)
|
|
return
|
|
|
|
/mob/new_player/AIize()
|
|
src.spawning = 1
|
|
..()
|
|
return
|
|
|
|
/mob/living/carbon/AIize()
|
|
if (src.monkeyizing)
|
|
return
|
|
for(var/obj/item/weapon/W in src)
|
|
src.u_equip(W)
|
|
if (src.client)
|
|
src.client.screen -= W
|
|
if (W)
|
|
W.loc = src.loc
|
|
W.dropped(src)
|
|
W.layer = initial(W.layer)
|
|
del(W)
|
|
src.update_clothing()
|
|
src.monkeyizing = 1
|
|
src.canmove = 0
|
|
src.icon = null
|
|
src.invisibility = 101
|
|
for(var/t in src.organs)
|
|
del(src.organs[text("[]", t)])
|
|
|
|
|
|
..()
|
|
|
|
|
|
/mob/proc/AIize()
|
|
src.client.screen.len = null
|
|
var/mob/living/silicon/ai/O = new /mob/living/silicon/ai( src.loc )
|
|
O.icon_state = "ai"
|
|
O.invisibility = 0
|
|
O.canmove = 0
|
|
O.name = src.name
|
|
O.real_name = src.real_name
|
|
O.anchored = 1
|
|
O.aiRestorePowerRoutine = 0
|
|
O.lastKnownIP = src.client.address
|
|
|
|
mind.transfer_to(O)
|
|
O.mind.original = O
|
|
|
|
var/obj/loc_landmark
|
|
for(var/obj/landmark/start/sloc in world)
|
|
if (sloc.name != "AI")
|
|
continue
|
|
if (locate(/mob) in sloc.loc)
|
|
continue
|
|
loc_landmark = sloc
|
|
if (!loc_landmark)
|
|
for(var/obj/landmark/tripai in world)
|
|
if (tripai.name == "tripai")
|
|
if(locate(/mob) in tripai.loc)
|
|
continue
|
|
loc_landmark = tripai
|
|
if (!loc_landmark)
|
|
O << "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone."
|
|
for(var/obj/landmark/start/sloc in world)
|
|
if (sloc.name == "AI")
|
|
loc_landmark = sloc
|
|
|
|
O.loc = loc_landmark.loc
|
|
for (var/obj/item/device/radio/intercom/comm in O.loc)
|
|
comm.ai += O
|
|
|
|
O << "<B>You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras).</B>"
|
|
O << "<B>To look at other parts of the station, double-click yourself to get a camera menu.</B>"
|
|
O << "<B>While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc.</B>"
|
|
O << "To use something, simply 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."
|
|
|
|
|
|
O.laws_object = new /datum/ai_laws/asimov
|
|
O.show_laws()
|
|
O << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
|
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle
|
|
O.verbs += /mob/living/silicon/ai/proc/show_laws_verb
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_camera_track
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_alerts
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_camera_list
|
|
O.verbs += /mob/living/silicon/ai/proc/lockdown
|
|
O.verbs += /mob/living/silicon/ai/proc/disablelockdown
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_statuschange
|
|
O.verbs += /mob/living/silicon/ai/proc/ai_roster
|
|
|
|
// O.verbs += /mob/living/silicon/ai/proc/ai_cancel_call
|
|
O.job = "AI"
|
|
|
|
spawn(0)
|
|
ainame(O)
|
|
/* var/randomname = pick(ai_names)
|
|
var/newname = input(O,"You are the AI. Would you like to change your name to something else?", "Name change",randomname)
|
|
|
|
if (length(newname) == 0)
|
|
newname = randomname
|
|
|
|
if (newname)
|
|
if (length(newname) >= 26)
|
|
newname = copytext(newname, 1, 26)
|
|
newname = dd_replacetext(newname, ">", "'")
|
|
O.real_name = newname
|
|
O.name = newname
|
|
*/
|
|
world << text("<b>[O.real_name] is the AI!</b>")
|
|
|
|
spawn(50)
|
|
world << sound('newAI.ogg')
|
|
|
|
|
|
del(src)
|
|
|
|
return O
|
|
|
|
//human -> robot
|
|
/mob/living/carbon/human/proc/Robotize()
|
|
if (src.monkeyizing)
|
|
return
|
|
for(var/obj/item/weapon/W in src)
|
|
src.u_equip(W)
|
|
if (src.client)
|
|
src.client.screen -= W
|
|
if (W)
|
|
W.loc = src.loc
|
|
W.dropped(src)
|
|
W.layer = initial(W.layer)
|
|
del(W)
|
|
src.update_clothing()
|
|
src.monkeyizing = 1
|
|
src.canmove = 0
|
|
src.icon = null
|
|
src.invisibility = 101
|
|
for(var/t in src.organs)
|
|
del(src.organs[text("[t]")])
|
|
//src.client.screen -= main_hud1.contents
|
|
src.client.screen -= src.hud_used.contents
|
|
src.client.screen -= src.hud_used.adding
|
|
src.client.screen -= src.hud_used.mon_blo
|
|
src.client.screen -= list( src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
|
|
src.client.screen -= list( src.zone_sel, src.oxygen, src.throw_icon, src.i_select, src.m_select, src.toxin, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
|
|
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot( src.loc )
|
|
|
|
// cyborgs produced by Robotize get an automatic power cell
|
|
O.cell = new(O)
|
|
O.cell.maxcharge = 7500
|
|
O.cell.charge = 1500
|
|
|
|
|
|
O.gender = src.gender
|
|
O.invisibility = 0
|
|
O.name = "Cyborg"
|
|
O.real_name = "Cyborg"
|
|
O.lastKnownIP = src.client.address
|
|
if (src.client)
|
|
src.client.mob = O
|
|
O.loc = src.loc
|
|
O << "<B>You are playing a Robot. A Robot can interact with most electronic objects in its view point.</B>"
|
|
O << "<B>You must follow the laws that the AI has. You are the AI's assistant to the station basically.</B>"
|
|
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"
|
|
|
|
|
|
|
|
del(src)
|
|
return O
|
|
|
|
//human -> alien
|
|
/mob/living/carbon/human/proc/Alienize()
|
|
if (src.monkeyizing)
|
|
return
|
|
for(var/obj/item/weapon/W in src)
|
|
src.u_equip(W)
|
|
if (src.client)
|
|
src.client.screen -= W
|
|
if (W)
|
|
W.loc = src.loc
|
|
W.dropped(src)
|
|
W.layer = initial(W.layer)
|
|
src.update_clothing()
|
|
src.monkeyizing = 1
|
|
src.canmove = 0
|
|
src.icon = null
|
|
src.invisibility = 101
|
|
for(var/t in src.organs)
|
|
del(src.organs[t])
|
|
// var/atom/movable/overlay/animation = new /atom/movable/overlay( src.loc )
|
|
// animation.icon_state = "blank"
|
|
// animation.icon = 'mob.dmi'
|
|
// animation.master = src
|
|
// flick("h2alien", animation)
|
|
// sleep(48)
|
|
// del(animation)
|
|
|
|
var/CASTE = pick("Hunter","Sentinel","Drone")
|
|
var/mob/O
|
|
switch(CASTE)
|
|
if("Hunter")
|
|
O = new /mob/living/carbon/alien/humanoid/hunter (src.loc)
|
|
if("Sentinel")
|
|
O = new /mob/living/carbon/alien/humanoid/sentinel (src.loc)
|
|
if("Drone")
|
|
O = new /mob/living/carbon/alien/humanoid/drone (src.loc)
|
|
|
|
O.dna = src.dna
|
|
src.dna = null
|
|
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
|
O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
|
|
|
O.mind = new//Mind initialize stuff.
|
|
O.mind.current = O
|
|
O.mind.assigned_role = "Alien"
|
|
O.mind.special_role = CASTE
|
|
O.mind.key = src.key
|
|
if(src.client)
|
|
src.client.mob = O
|
|
|
|
|
|
O.loc = src.loc
|
|
O << "<B>You are now an alien.</B>"
|
|
del(src)
|
|
return |