mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -74,17 +74,16 @@ Growing it to term with nothing injected will grab a ghost from the observers. *
|
|||||||
ghost = source
|
ghost = source
|
||||||
else // If no sample was injected or revival is not allowed, we grab an interested observer.
|
else // If no sample was injected or revival is not allowed, we grab an interested observer.
|
||||||
for(var/mob/dead/observer/O in player_list)
|
for(var/mob/dead/observer/O in player_list)
|
||||||
if(O.client)
|
if(O.client && O.client.prefs.be_special & BE_PLANT)
|
||||||
var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No")
|
var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No", "Never for this round.")
|
||||||
if(response == "Yes")
|
if(response == "Yes")
|
||||||
candidates += O
|
candidates += O
|
||||||
|
else if(response == "Never for this round")
|
||||||
|
O.client.prefs.be_special ^= BE_PLANT
|
||||||
|
|
||||||
if(!do_after(user, 100))
|
if(!do_after(user, 100))
|
||||||
return
|
return
|
||||||
|
|
||||||
if(!src || !user)
|
|
||||||
return
|
|
||||||
|
|
||||||
if(candidates.len)
|
if(candidates.len)
|
||||||
ghost = pick(candidates)
|
ghost = pick(candidates)
|
||||||
|
|
||||||
|
|||||||
@@ -470,12 +470,15 @@
|
|||||||
dat += "</table>"
|
dat += "</table>"
|
||||||
|
|
||||||
if(ticker.mode.raiders.len > 0)
|
if(ticker.mode.raiders.len > 0)
|
||||||
|
dat += "<br><table cellspacing=5><tr><td><B>Raiders</B></td><td></td><td></td></tr>"
|
||||||
for(var/datum/mind/raider in ticker.mode.raiders)
|
for(var/datum/mind/raider in ticker.mode.raiders)
|
||||||
var/mob/M = raider.current
|
var/mob/M = raider.current
|
||||||
if(M)
|
if(M)
|
||||||
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
dat += "<tr><td><a href='?src=\ref[src];adminplayeropts=\ref[M]'>[M.real_name]</a>[M.client ? "" : " <i>(logged out)</i>"][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>"
|
||||||
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>"
|
dat += "<td><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>"
|
||||||
dat += "<td><A HREF='?src=\ref[src];traitor=\ref[M]'>Show Objective</A></td></tr>"
|
dat += "<td><A HREF='?src=\ref[src];traitor=\ref[M]'>Show Objective</A></td></tr>"
|
||||||
|
dat += "</table>"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if(ticker.mode.ninjas.len > 0)
|
if(ticker.mode.ninjas.len > 0)
|
||||||
dat += "<br><table cellspacing=5><tr><td><B>Ninjas</B></td><td></td><td></td></tr>"
|
dat += "<br><table cellspacing=5><tr><td><B>Ninjas</B></td><td></td><td></td></tr>"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
|||||||
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
||||||
"ninja" = "true", // 10
|
"ninja" = "true", // 10
|
||||||
"vox raider" = IS_MODE_COMPILED("heist"), // 11
|
"vox raider" = IS_MODE_COMPILED("heist"), // 11
|
||||||
|
"diona" = 1, // 12
|
||||||
)
|
)
|
||||||
|
|
||||||
var/const/MAX_SAVE_SLOTS = 10
|
var/const/MAX_SAVE_SLOTS = 10
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
attacktext = "nips"
|
attacktext = "nips"
|
||||||
friendly = "prods"
|
friendly = "prods"
|
||||||
wander = 0
|
wander = 0
|
||||||
|
pass_flags = PASSTABLE
|
||||||
|
|
||||||
var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin.
|
var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin.
|
||||||
var/mob/living/carbon/human/host // Human host for the brain worm.
|
var/mob/living/carbon/human/host // Human host for the brain worm.
|
||||||
@@ -109,6 +110,21 @@
|
|||||||
src << "You drop words into [host]'s mind: \"[message]\""
|
src << "You drop words into [host]'s mind: \"[message]\""
|
||||||
host << "Your own thoughts speak: \"[message]\""
|
host << "Your own thoughts speak: \"[message]\""
|
||||||
|
|
||||||
|
/mob/living/simple_animal/borer/Stat()
|
||||||
|
..()
|
||||||
|
statpanel("Status")
|
||||||
|
|
||||||
|
if(emergency_shuttle)
|
||||||
|
if(emergency_shuttle.online && emergency_shuttle.location < 2)
|
||||||
|
var/timeleft = emergency_shuttle.timeleft()
|
||||||
|
if (timeleft)
|
||||||
|
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
|
||||||
|
|
||||||
|
if (client.statpanel == "Status")
|
||||||
|
stat("Chemicals", chemicals)
|
||||||
|
|
||||||
|
// VERBS!
|
||||||
|
|
||||||
/mob/living/simple_animal/borer/proc/borer_speak(var/message)
|
/mob/living/simple_animal/borer/proc/borer_speak(var/message)
|
||||||
if(!message)
|
if(!message)
|
||||||
return
|
return
|
||||||
@@ -148,7 +164,31 @@
|
|||||||
host.verbs += /mob/living/carbon/human/proc/punish_host
|
host.verbs += /mob/living/carbon/human/proc/punish_host
|
||||||
host.verbs += /mob/living/carbon/human/proc/spawn_larvae
|
host.verbs += /mob/living/carbon/human/proc/spawn_larvae
|
||||||
|
|
||||||
mob/living/simple_animal/borer/verb/release_host()
|
/mob/living/simple_animal/borer/verb/secrete_chemicals()
|
||||||
|
set category = "Alien"
|
||||||
|
set name = "Secrete Chemicals"
|
||||||
|
set desc = "Push some chemicals into your host's bloodstream."
|
||||||
|
|
||||||
|
if(!host)
|
||||||
|
src << "You are not inside a host body."
|
||||||
|
return
|
||||||
|
|
||||||
|
if(stat)
|
||||||
|
src << "You cannot secrete chemicals in your current state."
|
||||||
|
|
||||||
|
if(chemicals < 50)
|
||||||
|
src << "You don't have enough chemicals!"
|
||||||
|
|
||||||
|
var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine")
|
||||||
|
|
||||||
|
if(chemicals < 50 || !host || controlling || !src || stat) //Sanity check.
|
||||||
|
return
|
||||||
|
|
||||||
|
src << "\red <B>You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.</B>"
|
||||||
|
host.reagents.add_reagent(chem, 15)
|
||||||
|
chemicals -= 50
|
||||||
|
|
||||||
|
/mob/living/simple_animal/borer/verb/release_host()
|
||||||
set category = "Alien"
|
set category = "Alien"
|
||||||
set name = "Release Host"
|
set name = "Release Host"
|
||||||
set desc = "Slither out of your host."
|
set desc = "Slither out of your host."
|
||||||
@@ -269,4 +309,62 @@ mob/living/simple_animal/borer/proc/detatch()
|
|||||||
return
|
return
|
||||||
else
|
else
|
||||||
src << "They are no longer in range!"
|
src << "They are no longer in range!"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
/mob/living/simple_animal/borer/verb/ventcrawl()
|
||||||
|
set name = "Crawl through Vent"
|
||||||
|
set desc = "Enter an air vent and crawl through the pipe system."
|
||||||
|
set category = "Alien"
|
||||||
|
|
||||||
|
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
|
||||||
|
// return
|
||||||
|
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
|
||||||
|
var/welded = 0
|
||||||
|
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
|
||||||
|
if(!v.welded)
|
||||||
|
vent_found = v
|
||||||
|
break
|
||||||
|
else
|
||||||
|
welded = 1
|
||||||
|
if(vent_found)
|
||||||
|
if(vent_found.network&&vent_found.network.normal_members.len)
|
||||||
|
var/list/vents = list()
|
||||||
|
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
|
||||||
|
if(temp_vent.loc == loc)
|
||||||
|
continue
|
||||||
|
vents.Add(temp_vent)
|
||||||
|
var/list/choices = list()
|
||||||
|
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
|
||||||
|
if(vent.loc.z != loc.z)
|
||||||
|
continue
|
||||||
|
var/atom/a = get_turf(vent)
|
||||||
|
choices.Add(a.loc)
|
||||||
|
var/turf/startloc = loc
|
||||||
|
var/obj/selection = input("Select a destination.", "Duct System") in choices
|
||||||
|
var/selection_position = choices.Find(selection)
|
||||||
|
if(loc==startloc)
|
||||||
|
var/obj/target_vent = vents[selection_position]
|
||||||
|
if(target_vent)
|
||||||
|
loc = target_vent.loc
|
||||||
|
else
|
||||||
|
src << "\blue You need to remain still while entering a vent."
|
||||||
|
else
|
||||||
|
src << "\blue This vent is not connected to anything."
|
||||||
|
else if(welded)
|
||||||
|
src << "\red That vent is welded."
|
||||||
|
else
|
||||||
|
src << "\blue You must be standing on or beside an air vent to enter it."
|
||||||
|
return
|
||||||
|
|
||||||
|
//copy paste from alien/larva, if that func is updated please update this one alsoghost
|
||||||
|
/mob/living/simple_animal/borer/verb/hide()
|
||||||
|
set name = "Hide"
|
||||||
|
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
|
||||||
|
set category = "Alien"
|
||||||
|
|
||||||
|
if (layer != TURF_LAYER+0.2)
|
||||||
|
layer = TURF_LAYER+0.2
|
||||||
|
src << text("\blue You are now hiding.")
|
||||||
|
else
|
||||||
|
layer = MOB_LAYER
|
||||||
|
src << text("\blue You have stopped hiding.")
|
||||||
@@ -641,6 +641,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
|
|||||||
#define BE_MONKEY 512
|
#define BE_MONKEY 512
|
||||||
#define BE_NINJA 1024
|
#define BE_NINJA 1024
|
||||||
#define BE_RAIDER 2048
|
#define BE_RAIDER 2048
|
||||||
|
#define BE_PLANT 4096
|
||||||
|
|
||||||
var/list/be_special_flags = list(
|
var/list/be_special_flags = list(
|
||||||
"Traitor" = BE_TRAITOR,
|
"Traitor" = BE_TRAITOR,
|
||||||
@@ -654,7 +655,8 @@ var/list/be_special_flags = list(
|
|||||||
"Cultist" = BE_CULTIST,
|
"Cultist" = BE_CULTIST,
|
||||||
"Monkey" = BE_MONKEY,
|
"Monkey" = BE_MONKEY,
|
||||||
"Ninja" = BE_NINJA,
|
"Ninja" = BE_NINJA,
|
||||||
"Raider" = BE_RAIDER
|
"Raider" = BE_RAIDER,
|
||||||
|
"Diona" = BE_PLANT
|
||||||
)
|
)
|
||||||
|
|
||||||
#define AGE_MIN 17 //youngest a character can be
|
#define AGE_MIN 17 //youngest a character can be
|
||||||
|
|||||||
Reference in New Issue
Block a user