mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
#Beta: added code phrases for traitors which consist of the code phrase and the code response (which consist of a sequence of words). They are meant to flow into a regular conversation in the sequence provided. There is also a small chance that a traitor may not know either phrase or response, or both.
For an example, let's say the phrase is: culture, wine, admit. The response is: massive, tired, doctor's delight. A traitor may begin a conversation with something like: "A man of culture always drinks wine, I must admit. What do you think?" The response to that: "When I am massively tired, I drink doctor's delight. Otherwise, I abstain." The example is best referenced in the Bar, or any place where drinks are available. With enough creativity and linguistical acumen, it may be used elsewhere. The point here is to make conversation seem as natural as possible while providing traitors a means to recognize each other. The words do no have to be exact, either. Quarter Master may be QM and the Captain may be Cap'n. Traitors should still recognize what is being communicated--or not. #Deactivated AI cores are no longer mobs. This is mostly cosmetic. You cannot gib a deactivated AI since it will be an object, not a mob. It will also not announce arrivals since it's an object, not a mob (this is an improvement, in my opinion). #Some code tweaks to AIs. They will now auto-start with a random name instead of their default-chosen name (which is still changeable). #Intelicards should no longer constantly refresh the window when they are being wiped. #Added new mech sprite. #Resin walls should no longer delete the person inside when killed in certain ways. Hulks will easily break free from resin if placed inside. #Ninjas can now download the AI onto spiderOS, provided Drain is on. SpiderOS works with AI cores, AI cards, and restoration terminals. Make sure Drain is on when you click on either the object (core/terminal) or the suit (aicard). AIs with law zero may get to have some fun, depending on circumstances. #Toggle Drain renamed to Toggle Interaction. It now serves as general trigger for special ninja interactions. #Added energy net power to ninjas. Prototype for HerpA and whatever he may want to do with it but it's pretty much finished. The energy net can be destroyed by the person trapped (or others) and will teleport them to the prison after 30 seconds. #Ninjas can now slice cameras apart per request. #Added a few more type checking procs (isliving, islarva, isobserver, ishivemainframe). #Mobs that are anchored will no longer be able to move (AIs will still move as normal). You will also not be able to grab them. #Incorporeal Move now works properly for regular mobs once more. #Marauders from CentCom can now launch directly from their bay. Start the shuttle and wait on a mass driver. On that note, mechs can now go through portals and launch through mass drivers. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1558 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
opacity = 1
|
||||
anchored = 1
|
||||
var/health = 50
|
||||
var/affecting = null
|
||||
var/mob/living/affecting = null
|
||||
|
||||
/obj/alien/weeds
|
||||
name = "weeds"
|
||||
|
||||
@@ -1,29 +1,8 @@
|
||||
// Resin walls improved. /N
|
||||
|
||||
/*/obj/alien/resin/ex_act(severity)
|
||||
world << "[severity] - [health]"
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.health -= 10
|
||||
if(2.0)
|
||||
src.health -= 5
|
||||
if(3.0)
|
||||
src.health -= 1
|
||||
if(src.health < 1)
|
||||
del(src)
|
||||
return*/
|
||||
/*
|
||||
/obj/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
for(var/mob/M in viewers(src, null))
|
||||
M.show_message(text("\red <B>[src] is struck with [src]!</B>"), 1)
|
||||
src.health -= 2
|
||||
if(src.health <= 0)
|
||||
del(src)
|
||||
*/
|
||||
|
||||
/obj/alien/resin/proc/healthcheck()
|
||||
if(health <=0)
|
||||
src.density = 0
|
||||
density = 0
|
||||
if(affecting)
|
||||
var/mob/living/carbon/M = affecting
|
||||
contents.Remove(affecting)
|
||||
@@ -31,7 +10,7 @@
|
||||
M.verbs += /mob/living/carbon/human/verb/suicide
|
||||
else
|
||||
M.verbs += /mob/living/carbon/monkey/verb/suicide
|
||||
M.loc = src.loc
|
||||
M.loc = loc
|
||||
M.paralysis += 10
|
||||
for(var/mob/O in viewers(src, 3))
|
||||
O.show_message(text("A body appeared from the dead resin!"), 1, text("You hear faint moaning somewhere about you."), 2)
|
||||
@@ -67,12 +46,11 @@
|
||||
return
|
||||
|
||||
/obj/alien/resin/blob_act()
|
||||
density = 0
|
||||
del(src)
|
||||
health-=50
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/alien/resin/meteorhit()
|
||||
//*****RM
|
||||
//world << "glass at [x],[y],[z] Mhit"
|
||||
health-=50
|
||||
healthcheck()
|
||||
return
|
||||
@@ -87,7 +65,7 @@
|
||||
else
|
||||
tforce = AM:throwforce
|
||||
playsound(src.loc, 'attackblob.ogg', 100, 1)
|
||||
src.health = max(0, health - tforce)
|
||||
health = max(0, health - tforce)
|
||||
healthcheck()
|
||||
..()
|
||||
return
|
||||
@@ -95,37 +73,27 @@
|
||||
/obj/alien/resin/attack_hand()
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You easily destroy the resin wall.")
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] destroys the resin wall!", usr)
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] destroys the resin wall!", usr), 1)
|
||||
health-=50
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/alien/resin/attack_paw()
|
||||
if ((usr.mutations & HULK))
|
||||
usr << text("\blue You easily destroy the resin wall.")
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] destroys the resin wall!", usr)
|
||||
health-=50
|
||||
healthcheck()
|
||||
return
|
||||
return attack_hand()
|
||||
|
||||
/obj/alien/resin/attack_alien()
|
||||
if (istype(usr, /mob/living/carbon/alien/larva))//Safety check for larva. /N
|
||||
if (islarva(usr))//Safety check for larva. /N
|
||||
return
|
||||
usr << text("\green You claw at the resin wall.")
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] claws at the resin wall!", usr)
|
||||
playsound(src.loc, 'attackblob.ogg', 100, 1)
|
||||
src.health -= rand(10, 20)
|
||||
if(src.health <= 0)
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] claws at the resin!", usr), 1)
|
||||
playsound(loc, 'attackblob.ogg', 100, 1)
|
||||
health -= rand(10, 20)
|
||||
if(health <= 0)
|
||||
usr << text("\green You slice the resin wall to pieces.")
|
||||
for(var/mob/O in oviewers())
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\red [] slices the resin wall apart!", usr)
|
||||
for(var/mob/O in oviewers(src))
|
||||
O.show_message(text("\red [] slices the resin wall apart!", usr), 1)
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
@@ -138,7 +106,7 @@
|
||||
if(G.state<2)
|
||||
user << "\red You need a better grip to do that!"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.loc = src
|
||||
G.affecting.paralysis = 10
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
@@ -152,12 +120,9 @@
|
||||
return
|
||||
|
||||
var/aforce = W.force
|
||||
src.health = max(0, src.health - aforce)
|
||||
health = max(0, health - aforce)
|
||||
playsound(src.loc, 'attackblob.ogg', 100, 1)
|
||||
if (src.health <= 0)
|
||||
src.density = 0
|
||||
del(src)
|
||||
return
|
||||
healthcheck()
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -174,6 +139,9 @@
|
||||
contents.Add(affecting)
|
||||
|
||||
while(!isnull(M)&&!isnull(src))//While M and wall exist
|
||||
if(prob(90)&& M.mutations & HULK)//If they're the Hulk, they're getting out.
|
||||
M << "You smash your way to freedom!"
|
||||
break
|
||||
if(prob(30))//Let's people know that someone is trapped in the resin wall.
|
||||
M << "\green You feel a strange sense of calm as a flesh-like substance seems to completely envelop you."
|
||||
for(var/mob/O in viewers(src, 3))
|
||||
|
||||
@@ -10,85 +10,34 @@
|
||||
|
||||
|
||||
attack(mob/living/silicon/ai/M as mob, mob/user as mob)
|
||||
if (src.flush)
|
||||
if(!istype(M, /mob/living/silicon/ai))//If target is not an AI.
|
||||
return ..()
|
||||
|
||||
if (flush)//Here to prevent being unable to attack with card when wiping an AI.
|
||||
user << "<b>Transfer failed</b>: Cannot transfer while wipe in progress."
|
||||
return
|
||||
|
||||
if(!istype(M, /mob/living/silicon/ai))
|
||||
return ..()
|
||||
|
||||
if(src.contents.len > 0)
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
|
||||
// Already have an AI
|
||||
if(M.real_name != "Inactive AI")
|
||||
user << "<b>Transfer failed</b>: Existing AI found on this terminal. Remove existing AI to install a new one."
|
||||
return
|
||||
|
||||
else
|
||||
M.name = A.name
|
||||
M.real_name = A.real_name
|
||||
if(A.mind)
|
||||
A.mind.transfer_to(M)
|
||||
A.mind.original = M
|
||||
M.control_disabled = 0
|
||||
M.laws_object = A.laws_object
|
||||
M.oxyloss = A.oxyloss
|
||||
M.fireloss = A.fireloss
|
||||
M.bruteloss = A.bruteloss
|
||||
M.toxloss = A.toxloss
|
||||
if (!A.stat)
|
||||
M.stat = A.stat
|
||||
M.updatehealth()
|
||||
M << "You have been uploaded to a stationary terminal. Remote device connection restored."
|
||||
user << "<b>Transfer succesful</b>: [M.name] ([rand(1000,9999)].exe) installed and executed succesfully. Local copy has been removed."
|
||||
del(A)
|
||||
if (!M.stat)
|
||||
M.icon_state = "ai"
|
||||
else
|
||||
M.icon_state = "ai-crash"
|
||||
src.icon_state = "aicard"
|
||||
src.name = "inteliCard"
|
||||
src.overlays = null
|
||||
return
|
||||
if(contents.len > 0)//If there is an AI on card.
|
||||
user << "<b>Transfer failed</b>: Existing AI found on this terminal. Remove existing AI to install a new one."
|
||||
else
|
||||
if (M.real_name != "Inactive AI")
|
||||
if (ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if (M.mind == malfai)
|
||||
user << "This AI's download interface has been disabled."
|
||||
return
|
||||
var/mob/living/silicon/ai/O = new /mob/living/silicon/ai( src )
|
||||
O.invisibility = 0
|
||||
O.canmove = 0
|
||||
O.name = M.name
|
||||
O.real_name = M.real_name
|
||||
O.anchored = 1
|
||||
O.aiRestorePowerRoutine = 0
|
||||
O.control_disabled = 1 // Can't control things remotely if you're stuck in a card!
|
||||
O.laws_object = M.laws_object
|
||||
O.stat = M.stat
|
||||
O.oxyloss = M.oxyloss
|
||||
O.fireloss = M.fireloss
|
||||
O.bruteloss = M.bruteloss
|
||||
O.toxloss = M.toxloss
|
||||
O.updatehealth()
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(O)
|
||||
M.mind.original = O
|
||||
src.name = "inteliCard - [M.name]"
|
||||
M.name = "Inactive AI"
|
||||
M.real_name = "Inactive AI"
|
||||
M.icon_state = "ai-empty"
|
||||
if (O.stat == 2)
|
||||
src.icon_state = "aicard-404"
|
||||
else
|
||||
src.icon_state = "aicard-full"
|
||||
O << "You have been downloaded to a mobile storage device. Remote device connection severed."
|
||||
user << "<b>Transfer succeeded</b>: [O.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
||||
if (ticker.mode.name == "AI malfunction")
|
||||
var/datum/game_mode/malfunction/malf = ticker.mode
|
||||
for (var/datum/mind/malfai in malf.malf_ai)
|
||||
if (M.mind == malfai)
|
||||
user << "This AI's download interface has been disabled."//Do ho ho ho~
|
||||
return
|
||||
new /obj/AIcore/deactivated(M.loc)//Spawns a deactivated terminal at AI location.
|
||||
M.aiRestorePowerRoutine = 0//So the AI initially has power.
|
||||
M.control_disabled = 1//Can't control things remotely if you're stuck in a card!
|
||||
M.loc = src//Throw AI into the card.
|
||||
name = "inteliCard - [M.name]"
|
||||
if (M.stat == 2)
|
||||
src.icon_state = "aicard-404"
|
||||
else
|
||||
user << "There isn't an AI on this terminal."
|
||||
src.icon_state = "aicard-full"
|
||||
M << "You have been downloaded to a mobile storage device. Remote device connection severed."
|
||||
user << "<b>Transfer succeeded</b>: [M.name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory."
|
||||
return
|
||||
|
||||
attack(mob/living/silicon/decoy/M as mob, mob/user as mob)
|
||||
if (!istype (M, /mob/living/silicon/decoy))
|
||||
@@ -97,37 +46,6 @@
|
||||
M.death()
|
||||
user << "<b>ERROR ERROR ERROR</b>"
|
||||
|
||||
Topic(href, href_list)
|
||||
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=aicard")
|
||||
usr.machine = null
|
||||
|
||||
if (href_list["wipe"])
|
||||
var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
src.flush = 1
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
A.suiciding = 1
|
||||
A << "Your core files are being wiped!"
|
||||
while (A.stat != 2)
|
||||
A.oxyloss += 2
|
||||
A.updatehealth()
|
||||
src.attack_self(usr)
|
||||
sleep(10)
|
||||
src.flush = 0
|
||||
|
||||
if (href_list["wireless"])
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
A.control_disabled = !A.control_disabled
|
||||
A << "The intelicard's wireless port has been [A.control_disabled ? "disabled" : "enabled"]!"
|
||||
if (A.control_disabled)
|
||||
src.overlays -= image('pda.dmi', "aicard-on")
|
||||
else
|
||||
src.overlays += image('pda.dmi', "aicard-on")
|
||||
src.attack_self(usr)
|
||||
|
||||
|
||||
attack_self(mob/user)
|
||||
if (!in_range(src, user))
|
||||
return
|
||||
@@ -165,15 +83,45 @@
|
||||
dat += "<b>AI nonfunctional</b>"
|
||||
else
|
||||
if (!src.flush)
|
||||
dat += {"<A href='byond://?src=\ref[src];wipe=1'>Wipe AI</A>"}
|
||||
dat += {"<A href='byond://?src=\ref[src];choice=Wipe'>Wipe AI</A>"}
|
||||
else
|
||||
dat += "<b>Wipe in progress</b>"
|
||||
dat += {" <A href='byond://?src=\ref[src];wireless=1'>[A.control_disabled ? "Enable" : "Disable"] Wireless Activity</A>"}
|
||||
dat += {"<a href='byond://?src=\ref[src];close=1'> Close</a>"}
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Wireless'>[A.control_disabled ? "Enable" : "Disable"] Wireless Activity</a>"}
|
||||
dat += "<br>"
|
||||
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
|
||||
user << browse(dat, "window=aicard")
|
||||
onclose(user, "aicard")
|
||||
return
|
||||
|
||||
Topic(href, href_list)
|
||||
switch(href_list["choice"])
|
||||
if ("Close")
|
||||
usr << browse(null, "window=aicard")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
if ("Wipe")
|
||||
var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
flush = 1
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
A.suiciding = 1
|
||||
A << "Your core files are being wiped!"
|
||||
while (A.stat != 2)
|
||||
A.oxyloss += 2
|
||||
A.updatehealth()
|
||||
sleep(10)
|
||||
flush = 0
|
||||
|
||||
if ("Wireless")
|
||||
for(var/mob/living/silicon/ai/A in src)
|
||||
A.control_disabled = !A.control_disabled
|
||||
A << "The intelicard's wireless port has been [A.control_disabled ? "disabled" : "enabled"]!"
|
||||
if (A.control_disabled)
|
||||
overlays -= image('pda.dmi', "aicard-on")
|
||||
else
|
||||
overlays += image('pda.dmi', "aicard-on")
|
||||
attack_self(usr)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -21,11 +21,11 @@
|
||||
/obj/portal/proc/teleport(atom/movable/M as mob|obj)
|
||||
if(istype(M, /obj/effects)) //sparks don't teleport
|
||||
return
|
||||
if (M.anchored)
|
||||
if (M.anchored&&istype(M, /obj/mecha))
|
||||
return
|
||||
if (src.icon_state == "portal1")
|
||||
if (icon_state == "portal1")
|
||||
return
|
||||
if (!( src.target ))
|
||||
if (!( target ))
|
||||
del(src)
|
||||
return
|
||||
if (istype(M, /atom/movable))
|
||||
@@ -33,5 +33,5 @@
|
||||
src.icon_state = "portal1"
|
||||
do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0)
|
||||
else
|
||||
do_teleport(M, src.target, 1) ///You will appear adjacent to the beacon
|
||||
do_teleport(M, target, 1) ///You will appear adjacent to the beacon
|
||||
|
||||
|
||||
Reference in New Issue
Block a user