ghosts now have stat=DEAD so certain verbs don't break.

replaced canweaken and canstun variables with status_flags bitfield. Current flags are CANWEAKEN CANSTUN CANPARALYSE. Although you could add stuff like CANDAMAGE, CANBLIND, CANDEAFEN etc. to add additional flexibility to mob code and reduce on duplication.

Added humans_need_surnames as a config option. If when spawning  a human has only one name it will give them a random surname. I'd recommend leaving it on so that people can't name themselves "floor" "Unknown" etc.

totally removed autolowercasing of names (except for first letter) due to people pestering me. inb4 everyone starts CRUISECONTROLLING.

allowed a few characters like @ # etc for when the flag allow_numbers is set. So AIs can use those symbols (numbers and symbols cannot be used as the first character because of syntax.

Added alium nests. They're basically beds that only aliums can use. They are made of sticky resin which aliums secure their prey too for sexytimes.

Weed nodes are no longer dense.

Tidied up some alium verbs so that they are more structured. This will allow me to add Alt-Click neurotoxin shooting for queens and sentinels

Queens can secrete resin now to build nests/walls/membranes (doors to come!)
Drones that evolve into queens when there is already a live Queen will become princesses instead so the hive can tell them how stupid they are for splitting from the will of the hive. It also gives them a number so they can be differentiated between.

Credits to 39kk9t for fixing larva/death.dm, hissing which I forgot to do and some of the alium verbs. You're awesome <3

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3983 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-07-04 20:53:13 +00:00
parent 188b487542
commit 86effe3429
29 changed files with 263 additions and 374 deletions

View File

@@ -40,6 +40,7 @@
var/list/modes = list() // allowed modes
var/list/votable_modes = list() // votable modes
var/list/probabilities = list() // relative probability of each mode
var/humans_need_surnames = 0
var/allow_random_events = 0 // enables random events mid-round when set to 1
var/allow_ai = 1 // allow ai job
var/hostedby = null
@@ -309,6 +310,9 @@
if("tickcomp")
Tickcomp = 1
if("humans_need_surnames")
humans_need_surnames = 1
else
diary << "Unknown setting in configuration: '[name]'"

View File

@@ -4,6 +4,7 @@
icon = 'mob.dmi'
icon_state = "ghost"
layer = 4
stat = DEAD
density = 0
canmove = 0
blinded = 0

View File

@@ -16,5 +16,4 @@
var/move_delay_add = 0 // movement delay to add
canstun = 0
canweaken = 0 // aliens cannot be stunned or knocked down. Massive buff!
status_flags = CANPARALYSE

View File

@@ -22,8 +22,7 @@
// canstun and canweaken don't affect metroids because they ignore stun and weakened variables
// for the sake of cleanliness, though, here they are.
canstun = 0
canweaken = 0
status_flags = CANPARALYSE
var/amount_grown = 0// controls how long the metroid has been overfed, if 10, grows into an adult
// if adult: if 10: reproduces

View File

@@ -4,7 +4,7 @@
icon_state = "ai"
anchored = 1 // -- TLE
density = 1
canweaken = 0
status_flags = CANSTUN|CANPARALYSE
var/network = "SS13"
var/obj/machinery/camera/current = null
var/list/connected_robots = list()

View File

@@ -686,10 +686,16 @@
var/mob/living/buckled_mob
/obj/structure/stool/bed/alien
name = "Resting contraption"
name = "resting contraption"
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
icon_state = "abed"
/obj/structure/stool/bed/nest
name = "alien nest"
desc = "It's a gruesome pile of thick, sticky resin shaped like a nest."
icon = 'alien.dmi'
icon_state = "nest"
var/health = 100
/obj/structure/stool/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
name = "chair"

View File

@@ -146,46 +146,51 @@
//removes doublespaces and double apostrophes
//lowercases everything and capitalises the first letter of each word (or characters following an apostrophe)
//prevents names which are too short, have too many space, or not enough normal letters
/proc/reject_bad_name(var/t_in, var/minimum_words=2, var/allow_numbers=0, var/max_length=MAX_NAME_LEN)
/proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN)
if(length(t_in) > max_length) return //name too long
var/number_of_alphanumeric = 0
var/number_of_spaces = 0
var/last_char_group = 0
var/t_out = ""
for(var/i=1, i<=length(t_in), i++)
var/ascii_char = text2ascii(t_in,i)
switch(ascii_char)
if(65 to 90) //Uppercase letters allowed
if(65 to 90) //Uppercase Letters
t_out += ascii2text(ascii_char)
number_of_alphanumeric++
last_char_group = 4
if(97 to 122) //Lowercase Letters
if(last_char_group<2) t_out += ascii2text(ascii_char-32) //Force uppercase first character
else t_out += ascii2text(ascii_char)
number_of_alphanumeric++
last_char_group = 4
if(48 to 57) //Numbers
if(!last_char_group) continue //suppress at start of string
if(!allow_numbers) continue
t_out += ascii2text(ascii_char)
number_of_alphanumeric++
last_char_group = 3
if(39,45,46) //Common name punctuation
t_out += ascii2text(ascii_char)
last_char_group = 2
if(126,124,64,58,35,36,37,38,42,43) //Other crap that's harmless
if(!last_char_group) continue //suppress at start of string
if(!allow_numbers) continue
t_out += ascii2text(ascii_char)
last_char_group = 2
if(32) //Space
if(last_char_group <= 1) continue //suppress double-spaces and spaces at start of string
t_out += ascii2text(ascii_char)
last_char_group = 1
number_of_alphanumeric++
if(97 to 122) //Lowercase letters allowed
switch(last_char_group)
if(3,4,0) t_out += ascii2text(ascii_char-32) //Force uppercase if preceeded by space or '
else t_out += ascii2text(ascii_char)
last_char_group = 2
number_of_alphanumeric++
if(32) //Space
switch(last_char_group)
if(3,0) continue
else t_out += ascii2text(ascii_char) //so we don't get double-spaces
last_char_group = 3
number_of_spaces++
if(39,45,46) //Apostrophe for dem Oirish names like "O'Neil", dashes for double-barreled names and periods for "James T. Kirk" and AI's
switch(last_char_group)
if(4,0) continue
else t_out += ascii2text(ascii_char) //so we don't get double apostrophes or whatever
last_char_group = 4
if(48 to 57)
if(allow_numbers)
t_out += ascii2text(ascii_char) //Allow numbers (i.e. for borgs andd AIs)
number_of_alphanumeric++
last_char_group = 5
else
return
if(last_char_group == 3) number_of_spaces--
if(number_of_alphanumeric < 4) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
if(number_of_spaces > 4 || number_of_spaces < minimum_words-1) return //protects against single-word names like "Unknown" and names like "I ' M A D E R P Spaces Lul"
if(number_of_alphanumeric < 2) return //protects against tiny names like "A" and also names like "' ' ' ' ' ' ' '"
return t_out
/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN)
@@ -739,7 +744,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
if(0)
if(1 to 5) M << "<font color='red'>Invalid name. Your name should be at least 4 alphanumeric characters but under [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, 0-9, -, ' and .</font>"
else break
newname = reject_bad_name(input(M,"You are the AI. Would you like to change your name to something else?", "Name change",randomname),1,1)
newname = reject_bad_name(input(M,"You are the AI. Would you like to change your name to something else?", "Name change",randomname),1)
iterations++
if((world.time-time_passed)>300)//If more than 20 game seconds passed.

View File

@@ -49,8 +49,6 @@
name = "purple sac"
desc = "Weird purple octopus-like thing."
density = 1
/obj/effect/alien/acid
name = "acid"
desc = "Burbling corrossive stuff. I wouldn't want to touch it."

View File

@@ -0,0 +1,62 @@
//Alium nests. Essentially beds with an unbuckle delay that only aliums can buckle mobs to.
/obj/structure/stool/bed/nest/manual_unbuckle(mob/user as mob)
if(buckled_mob)
if(buckled_mob.buckled == src)
if(buckled_mob != user)
buckled_mob.visible_message(\
"<span class='notice'>[user.name] pulls [buckled_mob.name] free from the sticky nest!</span>",\
"<span class='notice'>[user.name] pulls you free from the gelatinous resin.</span>",\
"<span class='notice'>You hear squelching...</span>")
unbuckle()
else
buckled_mob.visible_message(\
"<span class='warning'>[buckled_mob.name] struggles to break free of the gelatinous resin...</span>",\
"<span class='warning'>You struggle to break free from the gelatinous resin...</span>",\
"<span class='notice'>You hear squelching...</span>")
spawn(1200)
if(buckled_mob && user.buckled == src) unbuckle()
src.add_fingerprint(user)
return
/obj/structure/stool/bed/nest/buckle_mob(mob/M as mob, mob/user as mob)
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) )
return
if(istype(M,/mob/living/carbon/alien))
return
if(!istype(user,/mob/living/carbon/alien/humanoid))
return
unbuckle()
if(M == usr)
return
else
M.visible_message(\
"<span class='notice'>[user.name] secretes a thick vile goo, securing [M.name] into [src]!</span>",\
"<span class='warning'>[user.name] drenches you in a foul-smelling resin, trapping you in the [src]!</span>",\
"<span class='notice'>You hear squelching...</span>")
M.buckled = src
M.loc = src.loc
M.dir = src.dir
M.update_canmove()
src.buckled_mob = M
src.add_fingerprint(user)
return
/obj/structure/stool/blob_act()
del(src)
/obj/structure/stool/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob)
var/aforce = W.force
health = max(0, health - aforce)
playsound(loc, 'attackblob.ogg', 100, 1)
for(var/mob/M in viewers(src, 7))
M.show_message("<span class='warning'>[user] hits [src] with [W]!</span>", 1)
healthcheck()
/obj/structure/stool/bed/nest/proc/healthcheck()
if(health <=0)
density = 0
del(src)
return

View File

@@ -19,4 +19,13 @@
client.images += activeIndicator
/mob/living/carbon/alien/IsAdvancedToolUser()
return has_fine_manipulation
return has_fine_manipulation
/mob/living/carbon/alien/Stun(amount)
if(status_flags & CANSTUN)
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
else
// add some movement delay
move_delay_add = min(move_delay_add + round(amount / 2), 10) // a maximum delay of 10
return

View File

@@ -82,43 +82,23 @@ I kind of like the right click only--the window version can get a little confusi
var/obj/effect/alien/acid/A = new(src.loc)
A.target = src
for(var/mob/M in viewers(src, null))
M.show_message(text("\green <B>[user] vomits globs of vile stuff all over [src]!</B>"), 1)
M.show_message(text("\green <B>[user] vomits globs of vile stuff all over [src]. It begins to sizzle and melt under the bubbling mess of acid!</B>"), 1)
A.tick()
/mob/living/carbon/alien/humanoid/proc/corrode_target() //Aliens only see items on the list of objects that they can actually spit on./N
set name = "Spit Corrosive Acid (200)"
/mob/living/carbon/alien/humanoid/proc/corrosive_acid(obj/O as obj in oview(1)) //If they right click to corrode, an error will flash if its an invalid target./N
set name = "Corrossive Acid (200)"
set desc = "Drench an object in acid, destroying it over time."
set category = "Alien"
if(powerc(200))//Check 1.
var/list/xeno_target
xeno_target = list("Abort Command")
for(var/obj/O in view(1))
if(!O.unacidable)
xeno_target.Add(O)
var/obj/A
A = input("Corrode which target?", "Targets", A) in xeno_target
if(!A == "Abort Command")
if(powerc(200))//Check 2.
if(A in view(1))//Check 3.
adjustToxLoss(-200)
A.acid(src)
else
src << "\green Target is too far away."
return
/mob/living/carbon/alien/humanoid/verb/corrode(obj/O as anything in oview(1)) //If they right click to corrode, an error will flash if its an invalid target./N
set name = "Corrode with Acid (200)"
set desc = "Drench an object in acid, destroying it over time."
set category = "Alien"
if(istype(O, /obj))
if(powerc(200))
if(!O.unacidable)
if(powerc(200))
if(O in oview(1))
if(O.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
src << "\green You cannot dissolve this object."
else
adjustToxLoss(-200)
O.acid()
else//So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
src << "\green You cannot destroy this object."
O.acid(src)
else
src << "\green Target is too far away."
return
/mob/living/carbon/alien/humanoid/verb/ventcrawl() // -- TLE
@@ -194,4 +174,63 @@ I kind of like the right click only--the window version can get a little confusi
src << "\green This vent is not connected to anything."
else
src << "\green You must be standing on or beside an open air vent to enter it."
return
return
/mob/living/carbon/alien/humanoid/proc/neurotoxin(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set category = "Alien"
if(powerc(50))
if(isalien(target))
src << "\green Your allies are not a valid target."
return
adjustToxLoss(-50)
src << "\green You spit neurotoxin at [target]."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "\red [src] spits neurotoxin at [target]!"
//I'm not motivated enough to revise this. Prjectile code in general needs update.
var/turf/T = loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if(!U || !T)
return
while(U && !istype(U,/turf))
U = U.loc
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(src, get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc)
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
A.process()
return
/mob/living/carbon/alien/humanoid/proc/resin() // -- TLE
set name = "Secrete Resin (100)"
set desc = "Secrete tough malleable resin."
set category = "Alien"
if(powerc(100))
var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in list("resin wall","resin membrane","resin nest") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
if(!choice || !powerc(100)) return
adjustToxLoss(-100)
src << "\green You shape a [choice]."
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[src] vomits up a thick purple substance and begins to shape it!</B>"), 1)
switch(choice)
if("resin wall")
new /obj/effect/alien/resin/wall(loc)
if("resin membrane")
new /obj/effect/alien/resin/membrane(loc)
if("resin nest")
new /obj/structure/stool/bed/nest(loc)
return

View File

@@ -5,8 +5,8 @@
if(src.name == "alien drone")
src.name = text("alien drone ([rand(1, 1000)])")
src.real_name = src.name
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs -= /mob/living/carbon/alien/humanoid/verb/ActivateHuggers
verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid)
verbs -= /mob/living/carbon/alien/humanoid/verb/ActivateHuggers //<-- pointless
//Drones use the same base as generic humanoids.
//Drone verbs
@@ -25,22 +25,4 @@
new_xeno.mind_initialize(src, "Queen")
new_xeno.key = key
del(src)
return
/mob/living/carbon/alien/humanoid/drone/verb/resinwall() // -- TLE
set name = "Shape Resin (100)"
set desc = "Produce a wall of resin that blocks entry and line of sight"
set category = "Alien"
if(powerc(100))
adjustToxLoss(-100)
var/choice = input("Choose what you wish to shape.","Resin building") as anything in list("resin wall","resin membrane") //would do it through typesof but then the player choice would have the type path and we don't want the internal workings to be exposed ICly - Urist
src << "\green You shape a [choice]."
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[src] vomits up a thick purple substance and begins to shape it!</B>"), 1)
switch(choice)
if("resin wall")
new /obj/effect/alien/resin/wall(loc)
if("resin membrane")
new /obj/effect/alien/resin/membrane(loc)
return

View File

@@ -5,7 +5,6 @@
if(name == "alien hunter")
name = text("alien hunter ([rand(1, 1000)])")
real_name = name
verbs -= /mob/living/carbon/alien/humanoid/verb/corrode
/mob/living/carbon/alien/humanoid/hunter

View File

@@ -5,7 +5,7 @@
if(name == "alien sentinel")
name = text("alien sentinel ([rand(1, 1000)])")
real_name = name
verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin)
/mob/living/carbon/alien/humanoid/sentinel
@@ -50,43 +50,3 @@
else
adjustBruteLoss(-10)
adjustFireLoss(-10)
//Sentinel verbs
/mob/living/carbon/alien/humanoid/sentinel/verb/spit(mob/target as mob in oview())
set name = "Spit Neurotoxin (50)"
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
set category = "Alien"
if(powerc(50))
if(isalien(target))
src << "\green Your allies are not a valid target."
return
adjustToxLoss(-50)
src << "\green You spit neurotoxin at [target]."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "\red [src] spits neurotoxin at [target]!"
//I'm not motivated enough to revise this. Prjectile code in general needs update.
var/turf/T = loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if(!U || !T)
return
while(U && !istype(U,/turf))
U = U.loc
if(!istype(T, /turf))
return
if (U == T)
usr.bullet_act(src, get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc)
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
A.process()
return

View File

@@ -33,6 +33,10 @@
if (!muzzled)
message = "<B>The [src.name]</B> roars."
m_type = 2
if("hiss")
if(!muzzled)
message = "<B>The [src.name]</B> hisses."
m_type = 2
if("tail")
message = "<B>The [src.name]</B> waves its tail."
m_type = 1

View File

@@ -2,13 +2,16 @@
var/datum/reagents/R = new/datum/reagents(100)
reagents = R
R.my_atom = src
//there should only be one queen
// if(src.name == "alien")
// src.name = text("alien ([rand(1, 1000)])")
src.real_name = src.name
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target
src.verbs += /mob/living/carbon/alien/humanoid/sentinel/verb/spit
src.verbs -= /mob/living/carbon/alien/humanoid/verb/ventcrawl
//there should only be one queen
for(var/mob/living/carbon/alien/humanoid/queen/Q in world)
if(Q.stat != DEAD)
name = "alien princess ([rand(1, 1000)])" //if this is too cutesy feel free to change it/remove it.
break
real_name = src.name
verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin)
verbs -= /mob/living/carbon/alien/humanoid/verb/ventcrawl
/mob/living/carbon/alien/humanoid/queen
@@ -59,7 +62,7 @@
/mob/living/carbon/alien/humanoid/queen/verb/lay_egg()
set name = "Lay Egg (200)"
set desc = "Plants an egg"
set desc = "Lay an egg to produce huggers to impregnate prey with."
set category = "Alien"
if(locate(/obj/effect/alien/egg) in get_turf(src))

View File

@@ -4,12 +4,7 @@
if(src.healths)
src.healths.icon_state = "health6"
/*
if(istype(src,/mob/living/carbon/alien/larva/metroid))
src.icon_state = "metroid_dead"
*/
else
src.icon_state = "larva_l"
src.icon_state = "larva_l"
src.stat = 2
if (!gibbed)

View File

@@ -53,7 +53,7 @@
if(IRRADIATE)
radiation += max((((effect - (effect*(getarmor(null, "rad")/100))))/(blocked+1)),0)//Rads auto check armor
if(STUTTER)
if(canstun) // stun is usually associated with stutter
if(status_flags & CANSTUN) // stun is usually associated with stutter
stuttering = max(stuttering,(effect/(blocked+1)))
if(EYE_BLUR)
eye_blurry = max(eye_blurry,(effect/(blocked+1)))

View File

@@ -28,8 +28,7 @@
nopush = 1
a_intent = "harm"
stop_automated_movement = 1
canstun = 0
canweaken = 0
status_flags = CANPARALYSE
var/energy = 0
var/max_energy = 1000

View File

@@ -31,8 +31,7 @@
nopush = 1
a_intent = "harm"
stop_automated_movement = 1
canstun = 0
canweaken = 0
status_flags = CANPARALYSE
Life()
@@ -168,8 +167,7 @@
speed = -1
a_intent = "harm"
stop_automated_movement = 1
canstun = 0
canweaken = 0
status_flags = CANPARALYSE
see_in_dark = 7
Life()
@@ -301,8 +299,7 @@
nopush = 1
a_intent = "harm"
stop_automated_movement = 1
canstun = 0
canweaken = 0
status_flags = CANPARALYSE
Life()
..()

View File

@@ -737,52 +737,51 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/Stun(amount)
if(canstun)
if(status_flags & CANSTUN)
stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun
else
if(istype(src, /mob/living/carbon/alien)) // add some movement delay
var/mob/living/carbon/alien/Alien = src
Alien.move_delay_add = min(Alien.move_delay_add + round(amount / 2), 10) // a maximum delay of 10
return
/mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned"
if(canstun)
if(status_flags & CANSTUN)
stunned = max(amount,0)
return
/mob/proc/AdjustStunned(amount)
if(canstun)
if(status_flags & CANSTUN)
stunned = max(stunned + amount,0)
return
/mob/proc/Weaken(amount)
if(canweaken)
if(status_flags & CANWEAKEN)
weakened = max(max(weakened,amount),0)
update_canmove() //updates lying, canmove and icons
return
/mob/proc/SetWeakened(amount)
if(canweaken)
if(status_flags & CANWEAKEN)
weakened = max(amount,0)
update_canmove() //updates lying, canmove and icons
return
/mob/proc/AdjustWeakened(amount)
if(canweaken)
if(status_flags & CANWEAKEN)
weakened = max(weakened + amount,0)
update_canmove() //updates lying, canmove and icons
return
/mob/proc/Paralyse(amount)
paralysis = max(max(paralysis,amount),0)
if(status_flags & CANPARALYSE)
paralysis = max(max(paralysis,amount),0)
return
/mob/proc/SetParalysis(amount)
paralysis = max(amount,0)
if(status_flags & CANPARALYSE)
paralysis = max(amount,0)
return
/mob/proc/AdjustParalysis(amount)
paralysis = max(paralysis + amount,0)
if(status_flags & CANPARALYSE)
paralysis = max(paralysis + amount,0)
return
/mob/proc/Sleeping(amount)

View File

@@ -198,8 +198,7 @@
var/UI = 'screen1_Midnight.dmi' // For changing the UI from preferences
var/canstun = 1 // determines if this mob can be stunned by things
var/canweaken = 1 // determines if this mob can be weakened/knocked down by things
var/status_flags = 255 //bitflags defining which status effects can be inflicted (replaces canweaken, canstun, etc)
var/nopush = 0 //Can they be shoved?
var/area/lastarea = null

View File

@@ -445,7 +445,7 @@ datum/preferences
switch(link_tags["real_name"])
if("input")
new_name = reject_bad_name( input(user, "Please select a name:", "Character Generation") as text|null, 2 )
new_name = reject_bad_name( input(user, "Please select a name:", "Character Generation") as text|null )
if("random")
randomize_name()
@@ -453,7 +453,7 @@ datum/preferences
if(new_name)
real_name = new_name
else
user << "<font color='red'>Invalid name. Your name should be at least 4 letters and two words but it should be under [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
user << "<font color='red'>Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .</font>"
if(link_tags["age"])
switch(link_tags["age"])
@@ -707,6 +707,15 @@ datum/preferences
proc/copy_to(mob/living/carbon/human/character, safety = 0)
if(be_random_name)
randomize_name()
if(config.humans_need_surnames)
var/firstspace = findtext(real_name, " ")
var/name_length = length(real_name)
if(!firstspace) //we need a surname
real_name += " [pick(last_names)]"
else if(firstspace == name_length)
real_name += "[pick(last_names)]"
character.real_name = real_name
character.original_name = real_name //Original name is only used in ghost chat! It is not to be edited by anything!

View File

@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 5
#define SAVEFILE_VERSION_MAX 6
#define SAVEFILE_VERSION_MIN 7
#define SAVEFILE_VERSION_MAX 7
datum/preferences/proc/savefile_path(mob/user)
return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/preferences.sav"

View File

@@ -314,7 +314,7 @@ var/list/global_mutations = list() // list of hidden mutation things
//Bluh shields
//Damage things
//Damage things //TODO: merge these down to reduce on defines >_>
#define BRUTE "brute"
#define BURN "fire"
#define TOX "tox"
@@ -330,6 +330,11 @@ var/list/global_mutations = list() // list of hidden mutation things
#define EYE_BLUR "eye_blur"
#define DROWSY "drowsy"
//Bitflags defining which status effects can be inflicted on a mob
#define CANSTUN 1
#define CANWEAKEN 2
#define CANPARALYSE 4
var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','hiss1.ogg','hiss2.ogg','hiss3.ogg','hiss4.ogg','hiss5.ogg','hiss6.ogg','Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg','Welder.ogg','Welder2.ogg','airlock.ogg','clownstep1.ogg','clownstep2.ogg')
//Security levels

View File

@@ -160,4 +160,5 @@ TICKLAG 0.9
## Defines if Tick Compensation is used. It results in a minor slowdown of movement of all mobs, but attempts to result in a level movement speed across all ticks. Recommended if tickrate is lowered.
TICKCOMP 0
## if uncommented this adds a random surname to a player's name if they only specify one name
HUMANS_NEED_SURNAMES

View File

@@ -46,6 +46,17 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit tho. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<div class="commit sansserif">
<h2 class="date">Wed 4th July 2012</h2>
<h3 class="author">39kk9t & Carn updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Added alien nests. They're basically beds made of thick sticky resin which aliums can 'stick' (buckle) people to for sexytimes</li>
<li class="tweak">Weed nodes are no longer dense.</li>
<li class="tweak">Queens can secrete resin for walls/nests/membranes</li>
<li class="bugfix">Various bugfixes</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">Saturday, June 30th</h2>
<h3 class="author">Icarus updated:</h3>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -5,203 +5,6 @@
// END_INTERNALS
// BEGIN_FILE_DIR
#define FILE_DIR .
#define FILE_DIR "code"
#define FILE_DIR "code/ATMOSPHERICS"
#define FILE_DIR "code/ATMOSPHERICS/components"
#define FILE_DIR "code/ATMOSPHERICS/components/binary_devices"
#define FILE_DIR "code/ATMOSPHERICS/components/trinary_devices"
#define FILE_DIR "code/ATMOSPHERICS/components/unary"
#define FILE_DIR "code/datums"
#define FILE_DIR "code/datums/diseases"
#define FILE_DIR "code/datums/helper_datums"
#define FILE_DIR "code/datums/spells"
#define FILE_DIR "code/defines"
#define FILE_DIR "code/defines/area"
#define FILE_DIR "code/defines/mob"
#define FILE_DIR "code/defines/mob/dead"
#define FILE_DIR "code/defines/mob/living"
#define FILE_DIR "code/defines/mob/living/carbon"
#define FILE_DIR "code/defines/mob/living/silicon"
#define FILE_DIR "code/defines/obj"
#define FILE_DIR "code/defines/procs"
#define FILE_DIR "code/defines/tanning"
#define FILE_DIR "code/FEA"
#define FILE_DIR "code/game"
#define FILE_DIR "code/game/area"
#define FILE_DIR "code/game/asteroid"
#define FILE_DIR "code/game/gamemodes"
#define FILE_DIR "code/game/gamemodes/blob"
#define FILE_DIR "code/game/gamemodes/blob/blobs"
#define FILE_DIR "code/game/gamemodes/changeling"
#define FILE_DIR "code/game/gamemodes/cult"
#define FILE_DIR "code/game/gamemodes/events"
#define FILE_DIR "code/game/gamemodes/events/holidays"
#define FILE_DIR "code/game/gamemodes/extended"
#define FILE_DIR "code/game/gamemodes/malfunction"
#define FILE_DIR "code/game/gamemodes/meteor"
#define FILE_DIR "code/game/gamemodes/nuclear"
#define FILE_DIR "code/game/gamemodes/revolution"
#define FILE_DIR "code/game/gamemodes/sandbox"
#define FILE_DIR "code/game/gamemodes/traitor"
#define FILE_DIR "code/game/gamemodes/wizard"
#define FILE_DIR "code/game/jobs"
#define FILE_DIR "code/game/jobs/job"
#define FILE_DIR "code/game/machinery"
#define FILE_DIR "code/game/machinery/atmoalter"
#define FILE_DIR "code/game/machinery/bots"
#define FILE_DIR "code/game/machinery/computer"
#define FILE_DIR "code/game/machinery/doors"
#define FILE_DIR "code/game/machinery/embedded_controller"
#define FILE_DIR "code/game/machinery/kitchen"
#define FILE_DIR "code/game/machinery/pipe"
#define FILE_DIR "code/game/machinery/telecomms"
#define FILE_DIR "code/game/magic"
#define FILE_DIR "code/game/magic/cultist"
#define FILE_DIR "code/game/mecha"
#define FILE_DIR "code/game/mecha/combat"
#define FILE_DIR "code/game/mecha/equipment"
#define FILE_DIR "code/game/mecha/equipment/tools"
#define FILE_DIR "code/game/mecha/equipment/weapons"
#define FILE_DIR "code/game/mecha/medical"
#define FILE_DIR "code/game/mecha/working"
#define FILE_DIR "code/game/objects"
#define FILE_DIR "code/game/objects/alien"
#define FILE_DIR "code/game/objects/closets"
#define FILE_DIR "code/game/objects/closets/secure"
#define FILE_DIR "code/game/objects/devices"
#define FILE_DIR "code/game/objects/devices/PDA"
#define FILE_DIR "code/game/objects/items"
#define FILE_DIR "code/game/objects/items/weapons"
#define FILE_DIR "code/game/objects/items/weapons/implants"
#define FILE_DIR "code/game/objects/radio"
#define FILE_DIR "code/game/objects/secstorage"
#define FILE_DIR "code/game/objects/stacks"
#define FILE_DIR "code/game/objects/storage"
#define FILE_DIR "code/game/objects/tanks"
#define FILE_DIR "code/game/vehicles"
#define FILE_DIR "code/game/vehicles/airtight"
#define FILE_DIR "code/game/verbs"
#define FILE_DIR "code/js"
#define FILE_DIR "code/modules"
#define FILE_DIR "code/modules/admin"
#define FILE_DIR "code/modules/admin/DB ban"
#define FILE_DIR "code/modules/admin/verbs"
#define FILE_DIR "code/modules/assembly"
#define FILE_DIR "code/modules/chemical"
#define FILE_DIR "code/modules/client"
#define FILE_DIR "code/modules/clothing"
#define FILE_DIR "code/modules/clothing/glasses"
#define FILE_DIR "code/modules/clothing/gloves"
#define FILE_DIR "code/modules/clothing/head"
#define FILE_DIR "code/modules/clothing/masks"
#define FILE_DIR "code/modules/clothing/shoes"
#define FILE_DIR "code/modules/clothing/spacesuits"
#define FILE_DIR "code/modules/clothing/suits"
#define FILE_DIR "code/modules/clothing/under"
#define FILE_DIR "code/modules/clothing/uniforms"
#define FILE_DIR "code/modules/critters"
#define FILE_DIR "code/modules/critters/hivebots"
#define FILE_DIR "code/modules/detectivework"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
#define FILE_DIR "code/modules/maps"
#define FILE_DIR "code/modules/mining"
#define FILE_DIR "code/modules/mob"
#define FILE_DIR "code/modules/mob/dead"
#define FILE_DIR "code/modules/mob/dead/observer"
#define FILE_DIR "code/modules/mob/living"
#define FILE_DIR "code/modules/mob/living/blob"
#define FILE_DIR "code/modules/mob/living/carbon"
#define FILE_DIR "code/modules/mob/living/carbon/alien"
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid"
#define FILE_DIR "code/modules/mob/living/carbon/alien/humanoid/caste"
#define FILE_DIR "code/modules/mob/living/carbon/alien/larva"
#define FILE_DIR "code/modules/mob/living/carbon/brain"
#define FILE_DIR "code/modules/mob/living/carbon/human"
#define FILE_DIR "code/modules/mob/living/carbon/metroid"
#define FILE_DIR "code/modules/mob/living/carbon/monkey"
#define FILE_DIR "code/modules/mob/living/silicon"
#define FILE_DIR "code/modules/mob/living/silicon/ai"
#define FILE_DIR "code/modules/mob/living/silicon/decoy"
#define FILE_DIR "code/modules/mob/living/silicon/pai"
#define FILE_DIR "code/modules/mob/living/silicon/robot"
#define FILE_DIR "code/modules/mob/living/simple_animal"
#define FILE_DIR "code/modules/mob/new_player"
#define FILE_DIR "code/modules/mob/organ"
#define FILE_DIR "code/modules/paperwork"
#define FILE_DIR "code/modules/power"
#define FILE_DIR "code/modules/power/antimatter"
#define FILE_DIR "code/modules/power/singularity"
#define FILE_DIR "code/modules/power/singularity/particle_accelerator"
#define FILE_DIR "code/modules/projectiles"
#define FILE_DIR "code/modules/projectiles/ammunition"
#define FILE_DIR "code/modules/projectiles/guns"
#define FILE_DIR "code/modules/projectiles/guns/energy"
#define FILE_DIR "code/modules/projectiles/guns/projectile"
#define FILE_DIR "code/modules/projectiles/projectile"
#define FILE_DIR "code/modules/recycling"
#define FILE_DIR "code/modules/research"
#define FILE_DIR "code/modules/scripting"
#define FILE_DIR "code/modules/scripting/AST"
#define FILE_DIR "code/modules/scripting/AST/Operators"
#define FILE_DIR "code/modules/scripting/Implementations"
#define FILE_DIR "code/modules/scripting/Interpreter"
#define FILE_DIR "code/modules/scripting/Parser"
#define FILE_DIR "code/modules/scripting/Scanner"
#define FILE_DIR "code/modules/security levels"
#define FILE_DIR "code/unused"
#define FILE_DIR "code/unused/beast"
#define FILE_DIR "code/unused/computer2"
#define FILE_DIR "code/unused/disease2"
#define FILE_DIR "code/unused/gamemodes"
#define FILE_DIR "code/unused/hivebot"
#define FILE_DIR "code/unused/mining"
#define FILE_DIR "code/unused/optics"
#define FILE_DIR "code/unused/pda2"
#define FILE_DIR "code/unused/powerarmor"
#define FILE_DIR "code/unused/spacecraft"
#define FILE_DIR "code/WorkInProgress"
#define FILE_DIR "code/WorkInProgress/carn"
#define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "html"
#define FILE_DIR "icons"
#define FILE_DIR "icons/48x48"
#define FILE_DIR "icons/effects"
#define FILE_DIR "icons/mecha"
#define FILE_DIR "icons/misc"
#define FILE_DIR "icons/mob"
#define FILE_DIR "icons/obj"
#define FILE_DIR "icons/obj/assemblies"
#define FILE_DIR "icons/obj/atmospherics"
#define FILE_DIR "icons/obj/clothing"
#define FILE_DIR "icons/obj/doors"
#define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf"
#define FILE_DIR "icons/unused"
#define FILE_DIR "icons/vehicles"
#define FILE_DIR "icons/vending_icons"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
#define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "Redirector"
#define FILE_DIR "sound"
#define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/effects"
#define FILE_DIR "sound/hallucinations"
#define FILE_DIR "sound/items"
#define FILE_DIR "sound/machines"
#define FILE_DIR "sound/mecha"
#define FILE_DIR "sound/misc"
#define FILE_DIR "sound/piano"
#define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons"
// END_FILE_DIR
// BEGIN_PREFERENCES
@@ -627,6 +430,7 @@
#include "code\game\objects\alien\defines.dm"
#include "code\game\objects\alien\egg.dm"
#include "code\game\objects\alien\facehugger.dm"
#include "code\game\objects\alien\nest.dm"
#include "code\game\objects\alien\resin.dm"
#include "code\game\objects\alien\weeds.dm"
#include "code\game\objects\closets\bombsuit.dm"