Merge branch 'master' of https://github.com/Baystation12/Baystation12 into bs12_with_tgport

This commit is contained in:
Cael_Aislinn
2012-10-27 20:44:54 +10:00
8 changed files with 937 additions and 894 deletions

View File

@@ -14,6 +14,7 @@
var/mineralAmt = 0
var/spread = 0 //will the seam spread?
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
var/artifactChance = 0.3 //percent chance to spawn a xenoarchaelogical artifact
var/last_act = 0
/turf/simulated/mineral/Del()
@@ -70,8 +71,8 @@
/turf/simulated/mineral/random
name = "Mineral deposit"
var/mineralAmtList = list("Uranium" = 5, "Iron" = 5, "Diamond" = 5, "Gold" = 5, "Silver" = 5, "Plasma" = 5/*, "Adamantine" = 5*/)
var/mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 50, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25/*, "Adamantine" =5*/)//Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralAmtList = list("Uranium" = 5, "Iron" = 5, "Diamond" = 5, "Gold" = 5, "Silver" = 5, "Plasma" = 5, "Archaeo" = 3/*, "Adamantine" = 5*/)
var/mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 50, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25, "Archaeo" = 5/*, "Adamantine" =5*/)//Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit
/turf/simulated/mineral/random/New()
@@ -94,16 +95,21 @@
M = new/turf/simulated/mineral/silver(src)
if("Plasma")
M = new/turf/simulated/mineral/plasma(src)
if("Archaeo")
M = new/turf/simulated/mineral/archaeo(src)
/*if("Adamantine")
M = new/turf/simulated/mineral/adamantine(src)*/
if(M)
src = M
M.levelupdate()
else if (prob(artifactChance))
//spawn a rare, xeno-arch artifact here
new/obj/machinery/artifact(src)
return
/turf/simulated/mineral/random/high_chance
mineralChance = 25
mineralSpawnChanceList = list("Uranium" = 10, "Iron" = 30, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Plasma" = 25)
mineralSpawnChanceList = list("Uranium" = 10, "Iron" = 30, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Plasma" = 25, "Archaeo" = 2)
/turf/simulated/mineral/random/Del()
return
@@ -163,6 +169,15 @@
spread = 1
/turf/simulated/mineral/archaeo
name = "Strange rock formation"
icon_state = "rock_Archaeo"
mineralName = "Archaeo"
mineralAmt = 3
spreadChance = 25
spread = 1
/turf/simulated/mineral/clown
name = "Bananium deposit"
icon_state = "rock_Clown"
@@ -231,6 +246,7 @@
return
/turf/simulated/mineral/proc/gets_drilled()
var/destroyed = 0 //used for breaking strange rocks
if ((src.mineralName != "") && (src.mineralAmt > 0) && (src.mineralAmt < 11))
var/i
for (i=0;i<mineralAmt;i++)
@@ -246,9 +262,21 @@
new /obj/item/weapon/ore/plasma(src)
if (src.mineralName == "Diamond")
new /obj/item/weapon/ore/diamond(src)
if (src.mineralName == "Archaeo")
//spawn strange rocks here
//if(prob(10) || delicate)
if(prob(50)) //Don't have delicate tools (hand pick/excavation tool) yet, temporarily change to 50% instead of 10% -Mij
new /obj/item/weapon/ore/strangerock(src)
else
destroyed = 1
if (src.mineralName == "Clown")
new /obj/item/weapon/ore/clown(src)
if (prob(src.artifactChance))
//spawn a rare, xeno-archaelogical artifact here
new /obj/machinery/artifact(src)
ReplaceWithFloor()
if(destroyed) //Display message about being a terrible miner
usr << "\red You destroy some of the rocks!"
return
/*

View File

@@ -59,6 +59,15 @@
desc = "Completely useless"
icon_state = "slag"
/obj/item/weapon/ore/strangerock //see artifact_archaeo.dm in modules/research for more info
name = "Strange rock"
desc = "Seems to have some unusal strata evident throughout it."
icon_state = "strange"
var/obj/inside
var/method // 0 = fire, 1+ = acid
origin_tech = "materials=5"
//unacidable = 1 //This can prevent acid from gooey grey massing
/obj/item/weapon/ore/New()
pixel_x = rand(0,16)-8
pixel_y = rand(0,8)-8

View File

@@ -125,7 +125,6 @@
var/amt_plasma = 0
var/amt_uranium = 0
var/amt_clown = 0
var/amt_archaeo = 0
for (var/obj/item/weapon/ore/C in contents)
if (istype(C,/obj/item/weapon/ore/diamond))
amt_diamond++;
@@ -143,8 +142,6 @@
amt_uranium++;
else if (istype(C,/obj/item/weapon/ore/clown))
amt_clown++;
else if (istype(C,/obj/item/weapon/ore/strangerock))
amt_archaeo++;
var/dat = text("<b>The contents of the ore box reveal...</b><br>")
if (amt_gold)
@@ -163,8 +160,6 @@
dat += text("Uranium ore: [amt_uranium]<br>")
if (amt_clown)
dat += text("Bananium ore: [amt_clown]<br>")
if (amt_archaeo)
dat += text("Strange rocks: [amt_archaeo]<br>")
dat += text("<br><br><A href='?src=\ref[src];removeall=1'>Empty box</A>")
user << browse("[dat]", "window=orebox")

View File

@@ -3,9 +3,9 @@
/obj/structure/ore_box
icon = 'icons/obj/mining.dmi'
icon_state = "orebox"
icon_state = "orebox0"
name = "Ore Box"
desc = "It's heavy"
desc = "A heavy box used for storing ore."
density = 1
/obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -29,6 +29,7 @@
var/amt_uranium = 0
var/amt_clown = 0
for (var/obj/item/weapon/ore/C in contents)
if (istype(C,/obj/item/weapon/ore/diamond))
amt_diamond++;

View File

@@ -1,362 +1,362 @@
//original code and idea from Alfie275 (luna) and ISaidNo (goon) - with thanks
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// samples
/obj/item/weapon/rocksliver
name = "rock sliver"
desc = "It looks extremely delicate."
icon = 'mining.dmi'
icon_state = "sliver0" //0-4
//item_state = "electronic"
var/source_rock = "/turf/simulated/mineral/archaeo"
item_state = ""
var/datum/geosample/geological_data
/obj/item/weapon/rocksliver/New()
icon_state = "sliver[rand(0,4)]"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// strange rocks
/obj/item/weapon/ore/strangerock
var/datum/geosample/geological_data
var/source_rock = "/turf/simulated/mineral"
var/method = 0
var/obj/inside
origin_tech = "materials=5"
/obj/item/weapon/ore/strangerock/New()
..()
//var/datum/reagents/r = new/datum/reagents(50)
//src.reagents = r
if(rand(3))
method = 0
else
method = 1
inside = pick(150;"", 50;"/obj/item/weapon/crystal", 25;"/obj/item/weapon/talkingcrystal", "/obj/item/weapon/fossil/base")
/obj/item/weapon/ore/strangerock/bullet_act(var/obj/item/projectile/P)
/obj/item/weapon/ore/strangerock/ex_act(var/severity)
src.visible_message("The [src] crumbles away, leaving some dust and gravel behind.")
/obj/item/weapon/ore/strangerock/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool/))
var/obj/item/weapon/weldingtool/w = W
if(w.isOn() && (w.get_fuel() > 3))
if(!src.method)
if(inside)
var/obj/A = new src.inside(get_turf(src))
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue The rock burns away revealing a [A.name].",1)
else
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue The rock burns away into nothing.",1)
del src
else
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue A few sparks fly off the rock, but otherwise nothing else happens.",1)
w.remove_fuel(4)
else if(istype(W,/obj/item/device/core_sampler/))
var/obj/item/device/core_sampler/S = W
if(S.filled_bag)
user << "\red The core sampler is full!"
else if(S.num_stored_bags < 1)
user << "\red The core sampler is out of sample bags!"
else
S.filled_bag = new /obj/item/weapon/storage/samplebag(S)
S.icon_state = "sampler1"
for(var/i=0, i<7, i++)
var/obj/item/weapon/rocksliver/R = new /obj/item/weapon/rocksliver(S.filled_bag)
R.source_rock = src.source_rock
R.geological_data = src.geological_data
user << "\blue You take a core sample of the [src]."
/*
/obj/item/weapon/ore/strangerock/acid_act(var/datum/reagent/R)
if(src.method)
if(inside)
var/obj/A = new src.inside(get_turf(src))
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The rock fizzes away revealing a [A.name].",1)
else
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The rock fizzes away into nothing.",1)
del src
else
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1)
return 1
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// crystals
/obj/item/weapon/crystal
name = "Crystal"
icon = 'mining.dmi'
icon_state = "crystal"
/obj/item/weapon/crystal/bullet_act(var/obj/item/projectile/P)
if(istype(P,/obj/item/projectile/beam/emitter))
switch(rand(0,3))
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 1
A.yo = 20
A.xo = 0
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 2
A.yo = -20
A.xo = 0
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 4
A.yo = 0
A.xo = 20
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 8
A.yo = 0
A.xo = -20
else
..()
/obj/item/weapon/talkingcrystal
name = "Crystal"
icon = 'mining.dmi'
icon_state = "crystal2"
var/list/list/words = list()
var/lastsaid
/obj/item/weapon/talkingcrystal/New()
spawn(100)
process()
/obj/item/weapon/talkingcrystal/bullet_act(var/obj/item/projectile/P)
if(istype(P,/obj/item/projectile/beam))
switch(rand(0,3))
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 20
A.xo = 0
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = -20
A.xo = 0
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 0
A.xo = 20
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 0
A.xo = -20
var/word = pick("pain","hurt","masochism","sadist","rage","repressed","ouch","evil","void","kill","destroy")
SaySomething(word)
else
..()
/obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source)
var/list/seperate = list()
if(findtext(msg,"(("))
return
else if(findtext(msg,"))"))
return
else if(findtext(msg," ")==0)
return
else
/*var/l = lentext(msg)
if(findtext(msg," ",l,l+1)==0)
msg+=" "*/
seperate = stringsplit(msg, " ")
var/addressing_crystal = 0
if("crystal" in seperate || "gem" in seperate)
addressing_crystal = 1
for(var/Xa = 1,Xa<seperate.len,Xa++)
var/next = Xa + 1
if(words.len > 20 + rand(10,20))
words.Remove(words[1])
if(!words["[lowertext(seperate[Xa])]"])
words["[lowertext(seperate[Xa])]"] = list()
var/list/w = words["[lowertext(seperate[Xa])]"]
if(w)
w.Add("[lowertext(seperate[next])]")
//world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]"
for(var/mob/O in viewers(src))
O.show_message("\blue The crystal hums for bit then stops...", 1)
if(!rand(0, 5 - addressing_crystal * 3))
spawn(2) SaySomething(pick(seperate))
/obj/item/weapon/talkingcrystal/proc/debug()
//set src in view()
for(var/v in words)
world << "[uppertext(v)]"
var/list/d = words["[v]"]
for(var/X in d)
world << "[X]"
/obj/item/weapon/talkingcrystal/proc/SaySomething(var/word = null)
var/msg
var/limit = rand(max(5,words.len/2))+3
var/text
if(!word)
text = "[pick(words)]"
else
text = pick(stringsplit(word, " "))
if(lentext(text)==1)
text=uppertext(text)
else
var/cap = copytext(text,1,2)
cap = uppertext(cap)
cap += copytext(text,2,lentext(text)+1)
text=cap
var/q = 0
msg+=text
if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are")
q=1
text=lowertext(text)
for(var/ya,ya <= limit,ya++)
if(words.Find("[text]"))
var/list/w = words["[text]"]
text=pick(w)
else
text = "[pick(words)]"
msg+=" [text]"
if(q)
msg+="?"
else
if(rand(0,10))
msg+="."
else
msg+="!"
var/list/listening = viewers(src)
for(var/mob/M in world)
if (!M.client)
continue //skip monkeys and leavers
if (istype(M, /mob/new_player))
continue
if(M.stat == 2 && M.client.ghost_ears)
listening|=M
for(var/mob/M in listening)
M << "<b>The crystal</b> reverberates, \blue\"[msg]\""
lastsaid = world.timeofday + rand(300,800)
/obj/item/weapon/talkingcrystal/process()
if(prob(25) && world.timeofday >= lastsaid && words.len >= 1)
SaySomething()
spawn(100)
process()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// fossils
/obj/item/weapon/fossil
name = "Fossil"
icon = 'fossil.dmi'
icon_state = "bone"
desc = "It's a fossil."
/obj/item/weapon/fossil/base/New()
spawn(0)
var/list/l = list("/obj/item/weapon/fossil/bone"=8,"/obj/item/weapon/fossil/skull"=2,
"/obj/item/weapon/fossil/skull/horned"=2,"/obj/item/weapon/fossil/shell"=1)
var/t = pickweight(l)
new t(src.loc)
del src
/obj/item/weapon/fossil/bone
name = "Fossilised bone"
icon_state = "bone"
desc = "It's a fossilised bone."
/obj/item/weapon/fossil/shell
name = "Fossilised shell"
icon_state = "shell"
desc = "It's a fossilised shell."
/obj/item/weapon/fossil/skull/horned
icon_state = "hskull"
desc = "It's a fossilised, horned skull."
/obj/item/weapon/fossil/skull
name = "Fossilised skull"
icon_state = "skull"
desc = "It's a fossilised skull."
/obj/item/weapon/fossil/skull/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/fossil/bone))
var/obj/o = new /obj/skeleton(get_turf(src))
var/a = new /obj/item/weapon/fossil/bone
var/b = new src.type
o.contents.Add(a)
o.contents.Add(b)
del W
del src
/obj/skeleton
name = "Incomplete skeleton"
icon = 'fossil.dmi'
icon_state = "uskel"
desc = "Incomplete skeleton."
var/bnum = 1
var/breq
var/bstate = 0
/obj/skeleton/New()
src.breq = rand(6)+3
src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
/obj/skeleton/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/fossil/bone))
if(!bstate)
bnum++
src.contents.Add(new/obj/item/weapon/fossil/bone)
del W
if(bnum==breq)
usr = user
icon_state = "skel"
var/creaturename = input("Input a name for your discovery:","Name your discovery","Spaceosaurus")
src.bstate = 1
src.density = 1
src.name = "[creaturename] skeleton"
if(src.contents.Find(/obj/item/weapon/fossil/skull/horned))
src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull, the plaque reads [creaturename]."
else
src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull, the plaque reads [creaturename]."
else
src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
user << "Looks like it could use [src.breq-src.bnum] more bones."
else
..()
else
..()
//original code and idea from Alfie275 (luna) and ISaidNo (goon) - with thanks
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// samples
/obj/item/weapon/rocksliver
name = "rock sliver"
desc = "It looks extremely delicate."
icon = 'mining.dmi'
icon_state = "sliver0" //0-4
//item_state = "electronic"
var/source_rock = "/turf/simulated/mineral/archaeo"
item_state = ""
var/datum/geosample/geological_data
/obj/item/weapon/rocksliver/New()
icon_state = "sliver[rand(0,4)]"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// strange rocks
/obj/item/weapon/ore/strangerock
var/datum/geosample/geological_data
var/source_rock = "/turf/simulated/mineral"
/obj/item/weapon/ore/strangerock/New()
..()
//var/datum/reagents/r = new/datum/reagents(50)
//src.reagents = r
if(rand(3))
method = 0 // 0 = fire, 1+ = acid
else
method = 0 //currently always fire
// method = 1 //removed due to acid melting strange rocks to gooey grey -Mij
inside = pick(150;"", 50;"/obj/item/weapon/crystal", 25;"/obj/item/weapon/talkingcrystal", "/obj/item/weapon/fossil/base")
/obj/item/weapon/ore/strangerock/bullet_act(var/obj/item/projectile/P)
/obj/item/weapon/ore/strangerock/ex_act(var/severity)
src.visible_message("The [src] crumbles away, leaving some dust and gravel behind.")
/obj/item/weapon/ore/strangerock/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool/))
var/obj/item/weapon/weldingtool/w = W
if(w.isOn() && (w.get_fuel() > 3))
if(!src.method) //0 = fire, 1+ = acid
if(inside)
var/obj/A = new src.inside(get_turf(src))
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue The rock burns away revealing a [A.name].",1)
else
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue The rock burns away into nothing.",1)
del src
else
for(var/mob/M in viewers(world.view, user))
M.show_message("\blue A few sparks fly off the rock, but otherwise nothing else happens.",1)
w.remove_fuel(4)
else if(istype(W,/obj/item/device/core_sampler/))
var/obj/item/device/core_sampler/S = W
if(S.filled_bag)
user << "\red The core sampler is full!"
else if(S.num_stored_bags < 1)
user << "\red The core sampler is out of sample bags!"
else
S.filled_bag = new /obj/item/weapon/storage/samplebag(S)
S.icon_state = "sampler1"
for(var/i=0, i<7, i++)
var/obj/item/weapon/rocksliver/R = new /obj/item/weapon/rocksliver(S.filled_bag)
R.source_rock = src.source_rock
R.geological_data = src.geological_data
user << "\blue You take a core sample of the [src]."
/*Code does not work, likely due to removal/change of acid_act proc
//Strange rocks currently melt to gooey grey w/ acid application (see reactions)
//will fix when I get a chance to fiddle with it -Mij
/obj/item/weapon/ore/strangerock/acid_act(var/datum/reagent/R)
if(src.method)
if(inside)
var/obj/A = new src.inside(get_turf(src))
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The rock fizzes away revealing a [A.name].",1)
else
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The rock fizzes away into nothing.",1)
del src
else
for(var/mob/M in viewers(world.view, get_turf(src)))
M.show_message("\blue The acid splashes harmlessly off the rock, nothing else interesting happens.",1)
return 1
*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// crystals
/obj/item/weapon/crystal
name = "Crystal"
icon = 'mining.dmi'
icon_state = "crystal"
/obj/item/weapon/crystal/bullet_act(var/obj/item/projectile/P)
if(istype(P,/obj/item/projectile/beam/emitter))
switch(rand(0,3))
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 1
A.yo = 20
A.xo = 0
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 2
A.yo = -20
A.xo = 0
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 4
A.yo = 0
A.xo = 20
if(0)
var/obj/item/projectile/beam/emitter/A = new /obj/item/projectile/beam/emitter( src.loc )
A.dir = 8
A.yo = 0
A.xo = -20
else
..()
/obj/item/weapon/talkingcrystal
name = "Crystal"
icon = 'mining.dmi'
icon_state = "crystal2"
var/list/list/words = list()
var/lastsaid
/obj/item/weapon/talkingcrystal/New()
spawn(100)
process()
/obj/item/weapon/talkingcrystal/bullet_act(var/obj/item/projectile/P)
if(istype(P,/obj/item/projectile/beam))
switch(rand(0,3))
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 20
A.xo = 0
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = -20
A.xo = 0
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 0
A.xo = 20
if(0)
var/obj/item/projectile/beam/A = new /obj/item/projectile/beam( src.loc )
A.dir = pick(alldirs)
A.yo = 0
A.xo = -20
var/word = pick("pain","hurt","masochism","sadist","rage","repressed","ouch","evil","void","kill","destroy")
SaySomething(word)
else
..()
/obj/item/weapon/talkingcrystal/proc/catchMessage(var/msg, var/mob/source)
var/list/seperate = list()
if(findtext(msg,"(("))
return
else if(findtext(msg,"))"))
return
else if(findtext(msg," ")==0)
return
else
/*var/l = lentext(msg)
if(findtext(msg," ",l,l+1)==0)
msg+=" "*/
seperate = stringsplit(msg, " ")
var/addressing_crystal = 0
if("crystal" in seperate || "gem" in seperate)
addressing_crystal = 1
for(var/Xa = 1,Xa<seperate.len,Xa++)
var/next = Xa + 1
if(words.len > 20 + rand(10,20))
words.Remove(words[1])
if(!words["[lowertext(seperate[Xa])]"])
words["[lowertext(seperate[Xa])]"] = list()
var/list/w = words["[lowertext(seperate[Xa])]"]
if(w)
w.Add("[lowertext(seperate[next])]")
//world << "Adding [lowertext(seperate[next])] to [lowertext(seperate[Xa])]"
for(var/mob/O in viewers(src))
O.show_message("\blue The crystal hums for bit then stops...", 1)
if(!rand(0, 5 - addressing_crystal * 3))
spawn(2) SaySomething(pick(seperate))
/obj/item/weapon/talkingcrystal/proc/debug()
//set src in view()
for(var/v in words)
world << "[uppertext(v)]"
var/list/d = words["[v]"]
for(var/X in d)
world << "[X]"
/obj/item/weapon/talkingcrystal/proc/SaySomething(var/word = null)
var/msg
var/limit = rand(max(5,words.len/2))+3
var/text
if(!word)
text = "[pick(words)]"
else
text = pick(stringsplit(word, " "))
if(lentext(text)==1)
text=uppertext(text)
else
var/cap = copytext(text,1,2)
cap = uppertext(cap)
cap += copytext(text,2,lentext(text)+1)
text=cap
var/q = 0
msg+=text
if(msg=="What" | msg == "Who" | msg == "How" | msg == "Why" | msg == "Are")
q=1
text=lowertext(text)
for(var/ya,ya <= limit,ya++)
if(words.Find("[text]"))
var/list/w = words["[text]"]
text=pick(w)
else
text = "[pick(words)]"
msg+=" [text]"
if(q)
msg+="?"
else
if(rand(0,10))
msg+="."
else
msg+="!"
var/list/listening = viewers(src)
for(var/mob/M in world)
if (!M.client)
continue //skip monkeys and leavers
if (istype(M, /mob/new_player))
continue
if(M.stat == 2 && M.client.ghost_ears)
listening|=M
for(var/mob/M in listening)
M << "<b>The crystal</b> reverberates, \blue\"[msg]\""
lastsaid = world.timeofday + rand(300,800)
/obj/item/weapon/talkingcrystal/process()
if(prob(25) && world.timeofday >= lastsaid && words.len >= 1)
SaySomething()
spawn(100)
process()
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// fossils
/obj/item/weapon/fossil
name = "Fossil"
icon = 'fossil.dmi'
icon_state = "bone"
desc = "It's a fossil."
/obj/item/weapon/fossil/base/New()
spawn(0)
var/list/l = list("/obj/item/weapon/fossil/bone"=8,"/obj/item/weapon/fossil/skull"=2,
"/obj/item/weapon/fossil/skull/horned"=2,"/obj/item/weapon/fossil/shell"=1)
var/t = pickweight(l)
new t(src.loc)
del src
/obj/item/weapon/fossil/bone
name = "Fossilised bone"
icon_state = "bone"
desc = "It's a fossilised bone."
/obj/item/weapon/fossil/shell
name = "Fossilised shell"
icon_state = "shell"
desc = "It's a fossilised shell."
/obj/item/weapon/fossil/skull/horned
icon_state = "hskull"
desc = "It's a fossilised, horned skull."
/obj/item/weapon/fossil/skull
name = "Fossilised skull"
icon_state = "skull"
desc = "It's a fossilised skull."
/obj/item/weapon/fossil/skull/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/fossil/bone))
var/obj/o = new /obj/skeleton(get_turf(src))
var/a = new /obj/item/weapon/fossil/bone
var/b = new src.type
o.contents.Add(a)
o.contents.Add(b)
del W
del src
/obj/skeleton
name = "Incomplete skeleton"
icon = 'fossil.dmi'
icon_state = "uskel"
desc = "Incomplete skeleton."
var/bnum = 1
var/breq
var/bstate = 0
/obj/skeleton/New()
src.breq = rand(6)+3
src.desc = "An incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
/obj/skeleton/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/fossil/bone))
if(!bstate)
bnum++
src.contents.Add(new/obj/item/weapon/fossil/bone)
del W
if(bnum==breq)
usr = user
icon_state = "skel"
var/creaturename = input("Input a name for your discovery:","Name your discovery","Spaceosaurus")
src.bstate = 1
src.density = 1
src.name = "[creaturename] skeleton"
if(src.contents.Find(/obj/item/weapon/fossil/skull/horned))
src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull, the plaque reads [creaturename]."
else
src.desc = "A creature made of [src.contents.len-1] assorted bones and a skull, the plaque reads [creaturename]."
else
src.desc = "Incomplete skeleton, looks like it could use [src.breq-src.bnum] more bones."
user << "Looks like it could use [src.breq-src.bnum] more bones."
else
..()
else
..()