The modified Changeling mode should end properly now.

Tracking implants can now be used to message the holder.
Mini Readme update.
Explosive implants will explode when the host dies.  Might try and wrap these into nuke or as a new traitor item.
Added a play local sound proc.
Fixed most of the runtimes in the latest log.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2074 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-08-30 07:29:59 +00:00
parent 7323470e8f
commit b471da4ed4
12 changed files with 136 additions and 124 deletions

View File

@@ -12,13 +12,13 @@ First-time installation should be fairly straightforward. First, you'll need
BYOND installed. You can get it from http://www.byond.com/. Once you've done BYOND installed. You can get it from http://www.byond.com/. Once you've done
that, extract the game files to wherever you want to keep them. This is a that, extract the game files to wherever you want to keep them. This is a
sourcecode-only release, so the next step is to compile the server files. sourcecode-only release, so the next step is to compile the server files.
Open goonstation.dme by double-clicking it, open the Build menu, and click Open tgstation.dme by double-clicking it, open the Build menu, and click
compile. This'll take a little while, and if everything's done right you'll get compile. This'll take a little while, and if everything's done right you'll get
a message like this: a message like this:
saving goonstation.dmb (DEBUG mode) saving tgstation.dmb (DEBUG mode)
goonstation.dmb - 0 errors, 0 warnings tgstation.dmb - 0 errors, 0 warnings
If you see any errors or warnings, something has gone wrong - possibly a corrupt If you see any errors or warnings, something has gone wrong - possibly a corrupt
download or the files extracted wrong. download or the files extracted wrong.
@@ -32,8 +32,8 @@ so they may have unknown and bizarre bugs. Extended is essentially no mode, and
isn't in the Secret rotation by default as it's just not very fun. isn't in the Secret rotation by default as it's just not very fun.
You'll also want to edit admins.txt to remove the default admins and add your You'll also want to edit admins.txt to remove the default admins and add your
own. Host is the highest level of access, and the other recommended admin own. "Game Master" is the highest level of access, and the other recommended admin
levels for now are Coder (a little below host) and Moderator. The format is levels for now are "Game Admin" (a little below host) and "Moderator". The format is
byondkey - Rank byondkey - Rank
@@ -42,7 +42,7 @@ capitalised. There are a bunch more admin ranks, but these three should be
enough for most servers, assuming you have trustworthy admins. enough for most servers, assuming you have trustworthy admins.
Finally, to start the server, run Dream Daemon and enter the path to your Finally, to start the server, run Dream Daemon and enter the path to your
compiled goonstation.dmb file. Make sure to set the port to the one you compiled tgstation.dmb file. Make sure to set the port to the one you
specified in the config.txt, and set the Security box to 'Safe'. Then press GO specified in the config.txt, and set the Security box to 'Safe'. Then press GO
and the server should start up and be ready to join. and the server should start up and be ready to join.

View File

@@ -157,8 +157,8 @@
obj_count++ obj_count++
return return
/datum/game_mode/changeling/check_finished() /*/datum/game_mode/changeling/check_finished()
/* var/changelings_alive = 0 var/changelings_alive = 0
for(var/datum/mind/changeling in changelings) for(var/datum/mind/changeling in changelings)
if(!istype(changeling.current,/mob/living/carbon)) if(!istype(changeling.current,/mob/living/carbon))
continue continue
@@ -176,8 +176,8 @@
if(world.time-changelingdeathtime > TIME_TO_GET_REVIVED) if(world.time-changelingdeathtime > TIME_TO_GET_REVIVED)
return 1 return 1
else else
return ..()*/ return ..()
return 0 return 0*/
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/human/changeling_mob) /datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/human/changeling_mob)
if (!istype(changeling_mob)) if (!istype(changeling_mob))

View File

@@ -40,6 +40,7 @@
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>" dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>" dat += "<A href='?src=\ref[src];inject5=\ref[C]'>(<font color=red>(5)</font>)</A>"
dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>" dat += "<A href='?src=\ref[src];inject10=\ref[C]'>(<font color=red>(10)</font>)</A><BR>"
dat += "********************************<BR>"
dat += "<HR>Tracking Implants<BR>" dat += "<HR>Tracking Implants<BR>"
for(var/obj/item/weapon/implant/tracking/T in world) for(var/obj/item/weapon/implant/tracking/T in world)
Tr = get_turf(T) Tr = get_turf(T)
@@ -51,6 +52,8 @@
var/turf/mob_loc = get_turf_loc(M) var/turf/mob_loc = get_turf_loc(M)
loc_display = mob_loc.loc loc_display = mob_loc.loc
dat += "ID: [T.id] | Location: [loc_display]<BR>" dat += "ID: [T.id] | Location: [loc_display]<BR>"
dat += "<A href='?src=\ref[src];warn=\ref[T]'>(<font color=red><i>Message Holder</i></font>)</A> |<BR>"
dat += "********************************<BR>"
dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>" dat += "<HR><A href='?src=\ref[src];lock=1'>Lock Console</A>"
user << browse(dat, "window=computer;size=400x500") user << browse(dat, "window=computer;size=400x500")
@@ -93,8 +96,9 @@
else if(href_list["warn"]) else if(href_list["warn"])
var/warning = input(usr,"Message:","Enter your message here!","") var/warning = input(usr,"Message:","Enter your message here!","")
var/obj/item/weapon/implant/I = locate(href_list["warn"]) var/obj/item/weapon/implant/I = locate(href_list["warn"])
var/mob/living/carbon/R = I.imp_in if((I)&&(I.imp_in))
R << "\green You hear a voice in your head saying: '[warning]'" var/mob/living/carbon/R = I.imp_in
R << "\green You hear a voice in your head saying: '[warning]'"
src.add_fingerprint(usr) src.add_fingerprint(usr)
src.updateUsrDialog() src.updateUsrDialog()

View File

@@ -441,13 +441,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
del(O) del(O)
src.updateicon() src.updateicon()
else if(istype(O, /obj/item/weapon/reagent_containers/syringe)) // Syringe stuff
else if ( istype(O, /obj/item/weapon/reagent_containers/syringe)) // Syringe stuff
var/obj/item/weapon/reagent_containers/syringe/S = O var/obj/item/weapon/reagent_containers/syringe/S = O
if (src.planted) if (src.planted)
if (S.mode == 1) if (S.mode == 1)
if(!reagents.total_volume) if(!S.reagents.total_volume)
user << "\red The syringe is empty." user << "\red The syringe is empty."
return return
user << "\red You inject the [src.myseed.plantname] with a chemical solution." user << "\red You inject the [src.myseed.plantname] with a chemical solution."

View File

@@ -7,75 +7,79 @@
icon_state = "candle1" icon_state = "candle1"
item_state = "candle1" item_state = "candle1"
var/wax = 100 var
var/lit = 0 wax = 100
/obj/item/candle/update_icon()
var/i
if(wax>75)
i = 1
else if(wax>40)
i = 2
else i = 3
icon_state = "candle[i][lit ? "_lit" : ""]"
/obj/item/candle/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
light("\red [user] casually lights the [name] with [W], what a badass.")
else if(istype(W, /obj/item/weapon/zippo) && W:lit)
light()
else if(istype(W, /obj/item/weapon/match) && W:lit)
light()
else if(istype(W, /obj/item/candle) && W:lit)
light()
/obj/item/candle/proc/light(var/flavor_text = "\red [usr] lights the [name].")
if(!lit)
lit = 1
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
sd_SetLuminosity(CANDLE_LUM)
spawn()
src.process()
/obj/item/candle/process()
if(!lit)
return
wax--
if(!wax)
new/obj/item/trash/candle(src.loc)
if(istype(src.loc, /mob))
src.dropped()
del(src)
update_icon()
if(istype(loc, /turf)) //start a fire if possible
var/turf/T = loc
T.hotspot_expose(700, 5)
spawn(60)
process()
/obj/item/candle/attack_self(mob/user as mob)
if(lit)
lit = 0 lit = 0
proc
light(var/flavor_text = "\red [usr] lights the [name].")
update_icon()
var/i
if(wax>75)
i = 1
else if(wax>40)
i = 2
else i = 3
icon_state = "candle[i][lit ? "_lit" : ""]"
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
light("\red [user] casually lights the [name] with [W], what a badass.")
else if(istype(W, /obj/item/weapon/zippo) && W:lit)
light()
else if(istype(W, /obj/item/weapon/match) && W:lit)
light()
else if(istype(W, /obj/item/candle) && W:lit)
light()
light(var/flavor_text = "\red [usr] lights the [name].")
if(!src.lit)
src.lit = 1
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
sd_SetLuminosity(CANDLE_LUM)
processing_items.Add(src)
process()
if(!lit)
return
wax--
if(!wax)
new/obj/item/trash/candle(src.loc)
if(istype(src.loc, /mob))
src.dropped()
del(src)
update_icon() update_icon()
sd_SetLuminosity(0) if(istype(loc, /turf)) //start a fire if possible
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM) var/turf/T = loc
T.hotspot_expose(700, 5)
/obj/item/candle/pickup(mob/user)
if(lit)
src.sd_SetLuminosity(0)
user.sd_SetLuminosity(user.luminosity + CANDLE_LUM)
/obj/item/candle/dropped(mob/user) attack_self(mob/user as mob)
if(lit) if(lit)
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM) lit = 0
src.sd_SetLuminosity(CANDLE_LUM) update_icon()
sd_SetLuminosity(0)
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM)
pickup(mob/user)
if(lit)
src.sd_SetLuminosity(0)
user.sd_SetLuminosity(user.luminosity + CANDLE_LUM)
dropped(mob/user)
if(lit)
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM)
src.sd_SetLuminosity(CANDLE_LUM)
/////////////// ///////////////

View File

@@ -102,9 +102,17 @@ Implant Specifics:<BR>"}
return dat return dat
trigger(emote, source as mob)
if(emote == "deathgasp")
src.activate("death")
return
activate(var/cause) activate(var/cause)
if((!cause) || (!src.imp_in)) return 0 if((!cause) || (!src.imp_in)) return 0
//explode here explosion(src, -1, 0, 1, 3, 0)//This might be a bit much, dono will have to see.
if(src.imp_in)
src.imp_in.gib()
@@ -139,6 +147,12 @@ the implant may become unstable and either pre-maturely inject the subject or si
R.my_atom = src R.my_atom = src
trigger(emote, source as mob)
if(emote == "deathgasp")
src.activate(10)
return
activate(var/cause) activate(var/cause)
if((!cause) || (!src.imp_in)) return 0 if((!cause) || (!src.imp_in)) return 0
var/mob/living/carbon/R = src.imp_in var/mob/living/carbon/R = src.imp_in

View File

@@ -34,6 +34,7 @@
else else
src.name = "Glass Case" src.name = "Glass Case"
else if(istype(I, /obj/item/weapon/reagent_containers/syringe)) else if(istype(I, /obj/item/weapon/reagent_containers/syringe))
if(!src.imp) return
if(!src.imp.allow_reagents) return if(!src.imp.allow_reagents) return
if(src.imp.reagents.total_volume >= 10) if(src.imp.reagents.total_volume >= 10)
user << "\red [src] is full." user << "\red [src] is full."

View File

@@ -37,6 +37,8 @@
src.icon_state = "implanter0" src.icon_state = "implanter0"
return return
/obj/item/weapon/implanter/loyalty /obj/item/weapon/implanter/loyalty
name = "implanter-loyalty" name = "implanter-loyalty"
@@ -44,4 +46,15 @@
src.imp = new /obj/item/weapon/implant/loyalty( src ) src.imp = new /obj/item/weapon/implant/loyalty( src )
..() ..()
update() update()
return
/obj/item/weapon/implanter/explosive
name = "implanter-explosive"
New()
src.imp = new /obj/item/weapon/implant/explosive( src )
..()
update()
return return

View File

@@ -28,8 +28,7 @@
M << S M << S
/mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, extrarange as num) /mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, extrarange as num)
if(!src.client && ear_deaf > 0) if(!src.client || ear_deaf > 0) return
return
switch(soundin) switch(soundin)
if ("shatter") soundin = pick('Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg') if ("shatter") soundin = pick('Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg')
if ("explosion") soundin = pick('Explosion1.ogg','Explosion2.ogg') if ("explosion") soundin = pick('Explosion1.ogg','Explosion2.ogg')

View File

@@ -153,6 +153,7 @@
verbs += /client/proc/cmd_admin_emp verbs += /client/proc/cmd_admin_emp
verbs += /client/proc/cmd_admin_drop_everything verbs += /client/proc/cmd_admin_drop_everything
verbs += /client/proc/make_sound verbs += /client/proc/make_sound
verbs += /client/proc/play_local_sound
verbs += /client/proc/only_one verbs += /client/proc/only_one
verbs += /client/proc/send_space_ninja verbs += /client/proc/send_space_ninja
verbs += /client/proc/restartcontroller //Can call via aproccall --I_hate_easy_things.jpg, Mport --Agouri verbs += /client/proc/restartcontroller //Can call via aproccall --I_hate_easy_things.jpg, Mport --Agouri
@@ -362,6 +363,7 @@
verbs -= /client/proc/cmd_admin_say verbs -= /client/proc/cmd_admin_say
verbs -= /client/proc/cmd_admin_gib_self verbs -= /client/proc/cmd_admin_gib_self
verbs -= /client/proc/restartcontroller verbs -= /client/proc/restartcontroller
verbs -= /client/proc/play_local_sound
verbs -= /client/proc/enable_mapping_debug verbs -= /client/proc/enable_mapping_debug
return return

View File

@@ -31,20 +31,29 @@
else else
usr << "You already used up your jukebox monies this round!" usr << "You already used up your jukebox monies this round!"
del(uploaded_sound) del(uploaded_sound)
// else
// usr << "Cant play Sound."
//else /client/proc/play_local_sound(S as sound)
// alert("Debugging is disabled") set category = "Fun"
// return set name = "Play Local Sound"
if(!src.authenticated || !src.holder)
src << "Only administrators may use this command."
return
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin")
log_admin("[key_name(src)] played a local sound [S]")
message_admins("[key_name_admin(src)] played a local sound [S]", 1)
playsound(get_turf_loc(src.mob), S, 50, 0, 0)
return
/* /*
/client/proc/cuban_pete() /client/proc/cuban_pete()
set category = "Fun" set category = "Fun"
set name = "Cuban Pete Time" set name = "Cuban Pete Time"
message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1) message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1)
for(var/mob/M in world) for(var/mob/M in world)
if(M.client) if(M.client)
if(M.client.midis) if(M.client.midis)
@@ -55,27 +64,23 @@
CP << "Your body can't contain the rhumba beat" CP << "Your body can't contain the rhumba beat"
CP.gib(1) CP.gib(1)
/client/proc/bananaphone() /client/proc/bananaphone()
set category = "Fun" set category = "Fun"
set name = "Banana Phone" set name = "Banana Phone"
message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1) message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1)
for(var/mob/M in world) for(var/mob/M in world)
if(M.client) if(M.client)
if(M.client.midis) if(M.client.midis)
M << 'bananaphone.ogg' M << 'bananaphone.ogg'
client/proc/space_asshole() client/proc/space_asshole()
set category = "Fun" set category = "Fun"
set name = "Space Asshole" set name = "Space Asshole"
message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1) message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1)
for(var/mob/M in world) for(var/mob/M in world)
if(M.client) if(M.client)
if(M.client.midis) if(M.client.midis)
@@ -87,32 +92,7 @@ client/proc/honk_theme()
set name = "Honk" set name = "Honk"
message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1) message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1)
for(var/mob/M in world) for(var/mob/M in world)
if(M.client) if(M.client)
if(M.client.midis) if(M.client.midis)
M << 'honk_theme.ogg' M << 'honk_theme.ogg'*/
*/
/*if(Debug2)
if(!src.authenticated || !src.holder)
src << "Only administrators may use this command."
return
var/sound/uploaded_sound = sound(S,0,1,0)
uploaded_sound.priority = 255
uploaded_sound.wait = 1
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin" || src.holder.rank == "Badmin")
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]", 1)
world << uploaded_sound
else
if(usr.client.canplaysound)
usr.client.canplaysound = 0
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]", 1)
world << uploaded_sound
else
usr << "You already used up your jukebox monies this round!"
del(uploaded_sound)*/

View File

@@ -27,9 +27,6 @@
drop_item() drop_item()
hand = h hand = h
//This is where the suicide assemblies checks would go //This is where the suicide assemblies checks would go
for (var/obj/item/weapon/implant/I in src)
if (I.implanted)
I.activate(10)
if (client) if (client)
spawn(10) spawn(10)