Merge pull request #996 from Giacomand/blob_userability

Blob usability changes and tweaks
This commit is contained in:
Cheridan
2013-07-21 12:09:28 -07:00
12 changed files with 91 additions and 43 deletions
+2 -2
View File
@@ -425,7 +425,7 @@ var/list/be_special_flags = list(
"Wizard" = BE_WIZARD,
"Malf AI" = BE_MALF,
"Revolutionary" = BE_REV,
"Xenomorph" = BE_ALIEN,
"Alien Lifeform" = BE_ALIEN,
"pAI" = BE_PAI,
"Cultist" = BE_CULTIST,
"Monkey" = BE_MONKEY,
@@ -467,4 +467,4 @@ var/list/be_special_flags = list(
#define TR_KEEPIMPLANTS 16
#define TR_KEEPSE 32 // changelings shouldn't edit the DNA's SE when turning into a monkey
#define TR_DEFAULTMSG 64
#define TR_KEEPSRC 128
#define TR_KEEPSRC 128
+2
View File
@@ -417,6 +417,8 @@ Turf and target are seperate in case you want to teleport some distance from a t
var/list/sortmob = sortAtom(mob_list)
for(var/mob/living/silicon/ai/M in sortmob)
moblist.Add(M)
for(var/mob/camera/M in sortmob)
moblist.Add(M)
for(var/mob/living/silicon/pai/M in sortmob)
moblist.Add(M)
for(var/mob/living/silicon/robot/M in sortmob)
+9 -1
View File
@@ -1110,9 +1110,12 @@ datum/mind
fail |= !ticker.mode.equip_revolutionary(current)
/mob/proc/sync_mind()
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client
//Initialisation procs
/mob/living/proc/mind_initialize()
/mob/proc/mind_initialize()
if(mind)
mind.key = key
@@ -1180,6 +1183,11 @@ datum/mind
mind.assigned_role = "pAI"
mind.special_role = ""
//BLOB
/mob/camera/overmind/mind_initialize()
..()
mind.special_role = "Blob"
//Animals
/mob/living/simple_animal/mind_initialize()
..()
+38 -23
View File
@@ -22,7 +22,6 @@ var/list/blob_nodes = list()
var/cores_to_spawn = 1
var/players_per_core = 30
var/blob_count = 0
var/blobwincount = 500
var/list/infected_crew = list()
@@ -69,6 +68,34 @@ var/list/blob_nodes = list()
blob.current << "<b>If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover.</b>"
return
/datum/game_mode/blob/proc/show_message(var/message)
for(var/datum/mind/blob in infected_crew)
blob.current << message
/datum/game_mode/blob/proc/burst_blobs()
for(var/datum/mind/blob in infected_crew)
var/client/blob_client = null
var/turf/location = null
if(iscarbon(blob.current))
var/mob/living/carbon/C = blob.current
if(directory[ckey(blob.key)])
blob_client = directory[ckey(blob.key)]
location = get_turf(C)
if(location.z != 1 || istype(location, /turf/space))
location = null
C.gib()
if(blob_client && location)
var/obj/effect/blob/core/core = new(location, 200, blob_client, 2)
if(core.overmind && core.overmind.mind)
core.overmind.mind.name = blob.name
infected_crew -= blob
infected_crew += core.overmind.mind
/datum/game_mode/blob/post_setup()
for(var/datum/mind/blob in infected_crew)
@@ -91,42 +118,30 @@ var/list/blob_nodes = list()
spawn(0)
sleep(rand(waittime_l, waittime_h))
var/wait_time = rand(waittime_l, waittime_h)
sleep(wait_time)
send_intercept(0)
sleep(100)
sleep(rand(waittime_l, waittime_h))
show_message("<span class='alert'>You feel tired and bloated.</span>")
for(var/datum/mind/blob in infected_crew)
blob.current << "<span class='alert'>You feel like you are about to burst.</span>"
sleep(wait_time)
sleep(rand(waittime_l, waittime_h))
show_message("<span class='alert'>You feel like you are about to burst.</span>")
for(var/datum/mind/blob in infected_crew)
sleep(wait_time / 2)
var/client/blob_client = null
var/turf/location = null
if(iscarbon(blob.current))
var/mob/living/carbon/C = blob.current
if(directory[ckey(blob.key)])
blob_client = directory[ckey(blob.key)]
location = get_turf(C)
if(location.z != 1 || istype(location, /turf/space))
location = null
C.gib()
if(blob_client && location)
new /obj/effect/blob/core(location, 200, blob_client, 2)
burst_blobs()
// Stage 0
sleep(40)
stage(0)
// Stage 1
sleep(4000)
sleep(2000)
stage(1)
..()
-9
View File
@@ -84,15 +84,6 @@
B.key = C.key
B.blob_core = src
src.overmind = B
B << "<span class='notice'>You are the overmind!</span>"
B << "You are the overmind and can control the blob by placing new blob pieces such as..."
B << "<b>Normal Blob</b> will expand your reach and allow you to upgrade into special blobs that perform certain functions."
B << "<b>Shield Blob</b> is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires."
B << "<b>Resource Blob</b> is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all."
B << "<b>Node Blob</b> is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate."
B << "<b>Factory Blob</b> is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores."
return 1
return 0
@@ -59,6 +59,11 @@
blob_act()
return
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(istype(mover, /obj/effect/blob))
return 1
return ..()
New(loc, var/obj/effect/blob/factory/linked_node)
if(istype(linked_node))
factory = linked_node
+1
View File
@@ -23,6 +23,7 @@
Life()
for(var/i = 1; i < 8; i += i)
Pulse(5, i)
health = min(initial(health), health + 1)
update_icon()
if(health <= 0)
+13
View File
@@ -21,6 +21,19 @@
real_name = new_name
..()
/mob/camera/blob/Login()
..()
sync_mind()
src << "<span class='notice'>You are the overmind!</span>"
src << "You are the overmind and can control the blob by placing new blob pieces such as..."
src << "<b>Normal Blob</b> will expand your reach and allow you to upgrade into special blobs that perform certain functions."
src << "<b>Shield Blob</b> is a strong and expensive blob which can take more damage. It is fireproof and can block air, use this to protect yourself from station fires."
src << "<b>Resource Blob</b> is a blob which will collect more resources for you, try to build these earlier to get a strong income. It will benefit from being near your core or multiple nodes, by having an increased resource rate; put it alone and it won't create resources at all."
src << "<b>Node Blob</b> is a blob which will grow, like the core. Unlike the core it won't give you a small income but it can power resource and factory blobs to increase their rate."
src << "<b>Factory Blob</b> is a blob which will spawn blob spores which will attack nearby food. Putting this nearby nodes and your core will increase the spawn rate; put it alone and it will not spawn any spores."
mob/camera/blob/Life()
hud_used.blobpwrdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font color='#82ed00'>[src.blob_points]</font></div>"
hud_used.blobhealthdisplay.maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'> <font color='#e36600'>[blob_core.health]</font></div>"
+2 -2
View File
@@ -153,7 +153,7 @@
/obj/effect/blob/normal
icon_state = "blob"
luminosity = 0
health = 20
health = 21
Delete()
src.loc = null
@@ -166,4 +166,4 @@
return
if(health <= 15)
icon_state = "blob_damaged"
return
return
+14
View File
@@ -476,6 +476,20 @@
dat += "<tr><td><i>Traitor not found!</i></td></tr>"
dat += "</table>"
if(istype(ticker.mode, /datum/game_mode/blob))
var/datum/game_mode/blob/mode = ticker.mode
dat += "<br><table cellspacing=5><tr><td><B>Blob</B></td><td></td><td></td></tr>"
dat += "<tr><td><i>Progress: [blobs.len]/[mode.blobwincount]</i></td></tr>"
for(var/datum/mind/blob in mode.infected_crew)
var/mob/M = blob.current
if(M)
dat += "<tr><td><a href='?_src_=holder;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='?priv_msg=[M.ckey]'>PM</A></td>"
else
dat += "<tr><td><i>Blob not found!</i></td></tr>"
dat += "</table>"
dat += "</body></html>"
usr << browse(dat, "window=roundstatus;size=400x500")
else
+4 -4
View File
@@ -10,7 +10,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"wizard" = IS_MODE_COMPILED("wizard"), // 3
"malf AI" = IS_MODE_COMPILED("malfunction"), // 4
"revolutionary" = IS_MODE_COMPILED("revolution"), // 5
"alien candidate" = 1, //always show // 6
"alien lifeform" = 1, //always show // 6
"pAI candidate" = 1, // -- TLE // 7
"cultist" = IS_MODE_COMPILED("cult"), // 8
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
@@ -77,7 +77,7 @@ datum/preferences
// OOC Metadata:
var/metadata = ""
var/unlock_content = 0
/datum/preferences/New(client/C)
@@ -212,11 +212,11 @@ datum/preferences
if(unlock_content || (user.client.holder && (user.client.holder.rights & R_ADMIN)))
dat += "<b>OOC:</b> <span style='border: 1px solid #161616; background-color: [ooccolor];'>&nbsp;&nbsp;&nbsp;</span> <a href='?_src_=prefs;preference=ooccolor;task=input'>Change</a><br>"
if(unlock_content)
dat += "<b>BYOND Membership Publicity:</b> <a href='?_src_=prefs;preference=publicity'>[(toggles & MEMBER_PUBLIC) ? "Public" : "Hidden"]</a><br>"
dat += "<b>Ghost Form:</b> <a href='?_src_=prefs;task=input;preference=ghostform'>[ghost_form]</a><br>"
dat += "</td><td width='300px' height='300px' valign='top'>"
+1 -2
View File
@@ -1,8 +1,7 @@
/mob/living/Login()
..()
//Mind updates
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client
sync_mind()
mind.show_memory(src, 0)
//Round specific stuff like hud updates