mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
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:
12
README.txt
12
README.txt
@@ -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
|
||||
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.
|
||||
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
|
||||
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
|
||||
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.
|
||||
|
||||
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
|
||||
levels for now are Coder (a little below host) and Moderator. The format is
|
||||
own. "Game Master" is the highest level of access, and the other recommended admin
|
||||
levels for now are "Game Admin" (a little below host) and "Moderator". The format is
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
and the server should start up and be ready to join.
|
||||
|
||||
|
||||
@@ -157,8 +157,8 @@
|
||||
obj_count++
|
||||
return
|
||||
|
||||
/datum/game_mode/changeling/check_finished()
|
||||
/* var/changelings_alive = 0
|
||||
/*/datum/game_mode/changeling/check_finished()
|
||||
var/changelings_alive = 0
|
||||
for(var/datum/mind/changeling in changelings)
|
||||
if(!istype(changeling.current,/mob/living/carbon))
|
||||
continue
|
||||
@@ -176,8 +176,8 @@
|
||||
if(world.time-changelingdeathtime > TIME_TO_GET_REVIVED)
|
||||
return 1
|
||||
else
|
||||
return ..()*/
|
||||
return 0
|
||||
return ..()
|
||||
return 0*/
|
||||
|
||||
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/human/changeling_mob)
|
||||
if (!istype(changeling_mob))
|
||||
|
||||
@@ -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];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 += "********************************<BR>"
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/tracking/T in world)
|
||||
Tr = get_turf(T)
|
||||
@@ -51,6 +52,8 @@
|
||||
var/turf/mob_loc = get_turf_loc(M)
|
||||
loc_display = mob_loc.loc
|
||||
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>"
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
@@ -93,6 +96,7 @@
|
||||
else if(href_list["warn"])
|
||||
var/warning = input(usr,"Message:","Enter your message here!","")
|
||||
var/obj/item/weapon/implant/I = locate(href_list["warn"])
|
||||
if((I)&&(I.imp_in))
|
||||
var/mob/living/carbon/R = I.imp_in
|
||||
R << "\green You hear a voice in your head saying: '[warning]'"
|
||||
|
||||
|
||||
@@ -441,13 +441,11 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
del(O)
|
||||
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
|
||||
if (src.planted)
|
||||
if (S.mode == 1)
|
||||
if(!reagents.total_volume)
|
||||
if(!S.reagents.total_volume)
|
||||
user << "\red The syringe is empty."
|
||||
return
|
||||
user << "\red You inject the [src.myseed.plantname] with a chemical solution."
|
||||
|
||||
@@ -7,10 +7,14 @@
|
||||
icon_state = "candle1"
|
||||
item_state = "candle1"
|
||||
|
||||
var/wax = 100
|
||||
var/lit = 0
|
||||
var
|
||||
wax = 100
|
||||
lit = 0
|
||||
proc
|
||||
light(var/flavor_text = "\red [usr] lights the [name].")
|
||||
|
||||
/obj/item/candle/update_icon()
|
||||
|
||||
update_icon()
|
||||
var/i
|
||||
if(wax>75)
|
||||
i = 1
|
||||
@@ -19,7 +23,8 @@
|
||||
else i = 3
|
||||
icon_state = "candle[i][lit ? "_lit" : ""]"
|
||||
|
||||
/obj/item/candle/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
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.")
|
||||
@@ -31,18 +36,17 @@
|
||||
light()
|
||||
|
||||
|
||||
|
||||
/obj/item/candle/proc/light(var/flavor_text = "\red [usr] lights the [name].")
|
||||
if(!lit)
|
||||
lit = 1
|
||||
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)
|
||||
spawn()
|
||||
src.process()
|
||||
processing_items.Add(src)
|
||||
|
||||
/obj/item/candle/process()
|
||||
|
||||
process()
|
||||
if(!lit)
|
||||
return
|
||||
wax--
|
||||
@@ -52,32 +56,32 @@
|
||||
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)
|
||||
attack_self(mob/user as mob)
|
||||
if(lit)
|
||||
lit = 0
|
||||
update_icon()
|
||||
sd_SetLuminosity(0)
|
||||
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM)
|
||||
|
||||
/obj/item/candle/pickup(mob/user)
|
||||
|
||||
pickup(mob/user)
|
||||
if(lit)
|
||||
src.sd_SetLuminosity(0)
|
||||
user.sd_SetLuminosity(user.luminosity + CANDLE_LUM)
|
||||
|
||||
/obj/item/candle/dropped(mob/user)
|
||||
|
||||
dropped(mob/user)
|
||||
if(lit)
|
||||
user.sd_SetLuminosity(user.luminosity - CANDLE_LUM)
|
||||
src.sd_SetLuminosity(CANDLE_LUM)
|
||||
|
||||
|
||||
|
||||
///////////////
|
||||
//CANDLE PACK//
|
||||
///////////////
|
||||
|
||||
@@ -102,9 +102,17 @@ Implant Specifics:<BR>"}
|
||||
return dat
|
||||
|
||||
|
||||
trigger(emote, source as mob)
|
||||
if(emote == "deathgasp")
|
||||
src.activate("death")
|
||||
return
|
||||
|
||||
|
||||
activate(var/cause)
|
||||
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
|
||||
|
||||
|
||||
trigger(emote, source as mob)
|
||||
if(emote == "deathgasp")
|
||||
src.activate(10)
|
||||
return
|
||||
|
||||
|
||||
activate(var/cause)
|
||||
if((!cause) || (!src.imp_in)) return 0
|
||||
var/mob/living/carbon/R = src.imp_in
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
else
|
||||
src.name = "Glass Case"
|
||||
else if(istype(I, /obj/item/weapon/reagent_containers/syringe))
|
||||
if(!src.imp) return
|
||||
if(!src.imp.allow_reagents) return
|
||||
if(src.imp.reagents.total_volume >= 10)
|
||||
user << "\red [src] is full."
|
||||
|
||||
@@ -37,6 +37,8 @@
|
||||
src.icon_state = "implanter0"
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/loyalty
|
||||
name = "implanter-loyalty"
|
||||
|
||||
@@ -45,3 +47,14 @@
|
||||
..()
|
||||
update()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/explosive
|
||||
name = "implanter-explosive"
|
||||
|
||||
New()
|
||||
src.imp = new /obj/item/weapon/implant/explosive( src )
|
||||
..()
|
||||
update()
|
||||
return
|
||||
@@ -28,8 +28,7 @@
|
||||
M << S
|
||||
|
||||
/mob/proc/playsound_local(var/atom/source, soundin, vol as num, vary, extrarange as num)
|
||||
if(!src.client && ear_deaf > 0)
|
||||
return
|
||||
if(!src.client || ear_deaf > 0) return
|
||||
switch(soundin)
|
||||
if ("shatter") soundin = pick('Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg')
|
||||
if ("explosion") soundin = pick('Explosion1.ogg','Explosion2.ogg')
|
||||
|
||||
@@ -153,6 +153,7 @@
|
||||
verbs += /client/proc/cmd_admin_emp
|
||||
verbs += /client/proc/cmd_admin_drop_everything
|
||||
verbs += /client/proc/make_sound
|
||||
verbs += /client/proc/play_local_sound
|
||||
verbs += /client/proc/only_one
|
||||
verbs += /client/proc/send_space_ninja
|
||||
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_gib_self
|
||||
verbs -= /client/proc/restartcontroller
|
||||
verbs -= /client/proc/play_local_sound
|
||||
verbs -= /client/proc/enable_mapping_debug
|
||||
return
|
||||
|
||||
|
||||
@@ -31,20 +31,29 @@
|
||||
else
|
||||
usr << "You already used up your jukebox monies this round!"
|
||||
del(uploaded_sound)
|
||||
// else
|
||||
// usr << "Cant play Sound."
|
||||
|
||||
|
||||
//else
|
||||
// alert("Debugging is disabled")
|
||||
// return
|
||||
/client/proc/play_local_sound(S as sound)
|
||||
set category = "Fun"
|
||||
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()
|
||||
set category = "Fun"
|
||||
set name = "Cuban Pete Time"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1)
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
@@ -55,27 +64,23 @@
|
||||
CP << "Your body can't contain the rhumba beat"
|
||||
CP.gib(1)
|
||||
|
||||
|
||||
/client/proc/bananaphone()
|
||||
set category = "Fun"
|
||||
set name = "Banana Phone"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1)
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
M << 'bananaphone.ogg'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
client/proc/space_asshole()
|
||||
set category = "Fun"
|
||||
set name = "Space Asshole"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1)
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
@@ -87,32 +92,7 @@ client/proc/honk_theme()
|
||||
set name = "Honk"
|
||||
|
||||
message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1)
|
||||
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
if(M.client.midis)
|
||||
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)*/
|
||||
M << 'honk_theme.ogg'*/
|
||||
|
||||
@@ -27,9 +27,6 @@
|
||||
drop_item()
|
||||
hand = h
|
||||
//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)
|
||||
spawn(10)
|
||||
|
||||
Reference in New Issue
Block a user