Merge branch 'master' into dev

This commit is contained in:
Mloc-Argent
2013-08-13 22:20:39 +01:00
37 changed files with 443 additions and 302 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(!epicenter) return
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
+11 -10
View File
@@ -490,7 +490,7 @@ its easier to just keep the beam vertical.
var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblClickNew() proc is being tested)
/*/atom/proc/DblClickNew()
/atom/proc/DblClickNew()
if(!usr) return
// TODO DOOHL: Intergrate params to new proc. Saved for another time because var/valid_place is a fucking brainfuck
@@ -792,7 +792,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
if (in_range)
if ( !animal.restrained() )
attack_animal(animal)*/
attack_animal(animal)
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
if(!usr) return
@@ -943,9 +943,9 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
// ------- ( CAN USE ITEM OR HAS 1 SECOND USE DELAY ) AND NOT CLICKING ON SCREEN -------
if (usr.last_click + usr.click_delay < world.time)
usr.last_click = world.time
usr.click_delay = 0
if (usr.next_move < world.time)
usr.prev_move = usr.next_move
usr.next_move = world.time + 10
else
// ------- ALREADY USED ONE ITEM WITH USE DELAY IN THE PREVIOUS SECOND -------
return
@@ -1109,9 +1109,10 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
// ------- ITEM INACESSIBLE OR CLICKING ON SCREEN -------
if (istype(src, /obj/screen))
// ------- IT'S THE HUD YOU'RE CLICKING ON -------
usr.delay_click(2)
if (usr.last_click + usr.click_delay < world.time)
usr.last_click = world.time
usr.prev_move = usr.next_move
usr:lastDblClick = world.time + 2
if (usr.next_move < world.time)
usr.next_move = world.time + 2
else
return
@@ -1143,7 +1144,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
src.hand_al(usr, usr.hand)
else
// ------- YOU ARE CLICKING ON AN OBJECT THAT'S INACCESSIBLE TO YOU AND IS NOT YOUR HUD -------
if((LASER in usr:mutations) && usr:a_intent == "hurt" && usr.last_click + usr.click_delay < world.time)
if((LASER in usr:mutations) && usr:a_intent == "hurt" && world.time >= usr.next_move)
// ------- YOU HAVE THE LASER MUTATION, YOUR INTENT SET TO HURT AND IT'S BEEN MORE THAN A DECISECOND SINCE YOU LAS TATTACKED -------
var/turf/T = get_turf(usr)
@@ -1168,7 +1169,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
spawn( 1 )
A.process()
usr.delay_click(6)
usr.next_move = world.time + 6
return
/atom/proc/ShiftClick(var/mob/M as mob)
+1 -15
View File
@@ -271,21 +271,7 @@ var/list/sacrificed = list()
usr << "\red You require a restless spirit which clings to this world. Beckon their prescence with the sacred chants of Nar-Sie."
return fizzle()
for(var/datum/organ/external/affecting in corpse_to_raise.organs)
affecting.heal_damage(1000, 1000)
corpse_to_raise.setToxLoss(0)
corpse_to_raise.setOxyLoss(0)
corpse_to_raise.SetParalysis(0)
corpse_to_raise.SetStunned(0)
corpse_to_raise.SetWeakened(0)
corpse_to_raise.radiation = 0
// corpse_to_raise.buckled = null
// if(corpse_to_raise.handcuffed)
// del(corpse_to_raise.handcuffed)
// corpse_to_raise.update_inv_handcuffed(0)
corpse_to_raise.stat = CONSCIOUS
corpse_to_raise.updatehealth()
corpse_to_raise.UpdateDamageIcon()
corpse_to_raise.revive()
corpse_to_raise.key = ghost.key //the corpse will keep its old mind! but a new player takes ownership of it (they are essentially possessed)
//This means, should that player leave the body, the original may re-enter
+2
View File
@@ -102,6 +102,8 @@ var/global/vox_kills = 0 //Used to check the Inviolate.
vox.age = rand(12,20)
vox.dna.mutantrace = "vox"
vox.set_species("Vox")
vox.languages = list() // Removing language from chargen.
vox.flavor_text = ""
vox.add_language("Vox-pidgin")
vox.h_style = "Short Vox Quills"
vox.flavor_text = ""
+4 -5
View File
@@ -74,17 +74,16 @@ Growing it to term with nothing injected will grab a ghost from the observers. *
ghost = source
else // If no sample was injected or revival is not allowed, we grab an interested observer.
for(var/mob/dead/observer/O in player_list)
if(O.client)
var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No")
if(O.client && O.client.prefs.be_special & BE_PLANT)
var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No", "Never for this round.")
if(response == "Yes")
candidates += O
else if(response == "Never for this round")
O.client.prefs.be_special ^= BE_PLANT
if(!do_after(user, 100))
return
if(!src || !user)
return
if(candidates.len)
ghost = pick(candidates)
+4 -4
View File
@@ -19,10 +19,10 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
epicenter = get_turf(epicenter)
if(!epicenter) return
playsound(epicenter, 'sound/effects/explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) )
var/close = range(world.view+round(devastation_range,1), epicenter)
// to all distanced mobs play a different sound
for(var/mob/M in world) if(M.z == epicenter.z) if(!(M in close))
@@ -30,7 +30,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
if(M.ear_deaf <= 0 || !M.ear_deaf) if(!istype(M.loc,/turf/space))
M << 'explosionfar.ogg'
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
@@ -85,4 +85,4 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in range(range, epicenter))
tile.ex_act(2)
tile.ex_act(2)
+4 -4
View File
@@ -131,7 +131,8 @@
else
if(isliving(src.loc))
return
user.delay_click(2)
user.lastDblClick = world.time + 2
user.next_move = world.time + 2
src.pickup(user)
add_fingerprint(user)
user.put_in_active_hand(src)
@@ -165,7 +166,8 @@
if(istype(src.loc, /mob/living))
return
src.pickup(user)
user.delay_click(2)
user.lastDblClick = world.time + 2
user.next_move = world.time + 2
user.put_in_active_hand(src)
return
@@ -227,8 +229,6 @@
log_attack("<font color='red'>[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(src.damtype)])</font>" )
msg_admin_attack("ATTACK: [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") //BS12 EDIT ALG
user.delay_click(10)
//spawn(1800) // this wont work right
// M.lastattacker = null
/////////////////////////
+192 -197
View File
@@ -288,7 +288,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
return 0
var/mob/M = loc
if(!M.canmove)
if(M.stat || M.restrained() || M.paralysis || M.stunned || M.weakened)
return 0
if((src in M.contents) || ( istype(loc, /turf) && in_range(src, M) ))
return 1
@@ -306,7 +306,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location)
var/mob/M = usr
if((!istype(over_object, /obj/screen)) && !M.restrained() && !M.stat && can_use())
if((!istype(over_object, /obj/screen)) && can_use())
return attack_self(M)
return
@@ -520,231 +520,226 @@ var/global/list/obj/item/device/pda/PDAs = list()
//if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) )
if(can_use()) //Why reinvent the wheel? There's a proc that does exactly that.
if ( !(U.stat || U.restrained()) )
add_fingerprint(U)
U.set_machine(src)
add_fingerprint(U)
U.set_machine(src)
switch(href_list["choice"])
switch(href_list["choice"])
//BASIC FUNCTIONS===================================
if("Close")//Self explanatory
U.unset_machine()
U << browse(null, "window=pda")
return
if("Refresh")//Refresh, goes to the end of the proc.
if("Return")//Return
if(mode<=9)
if("Close")//Self explanatory
U.unset_machine()
U << browse(null, "window=pda")
return
if("Refresh")//Refresh, goes to the end of the proc.
if("Return")//Return
if(mode<=9)
mode = 0
else
mode = round(mode/10)
if(mode==4)//Fix for cartridges. Redirects to hub.
mode = 0
else
mode = round(mode/10)
if(mode==4)//Fix for cartridges. Redirects to hub.
mode = 0
else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
cartridge.mode = mode
cartridge.unlock()
if ("Authenticate")//Checks for ID
id_check(U, 1)
if("UpdateInfo")
ownjob = id.assignment
name = "PDA-[owner] ([ownjob])"
if("Eject")//Ejects the cart, only done from hub.
if (!isnull(cartridge))
var/turf/T = loc
if(ismob(T))
T = T.loc
cartridge.loc = T
scanmode = 0
if (cartridge.radio)
cartridge.radio.hostpda = null
cartridge = null
else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu.
cartridge.mode = mode
cartridge.unlock()
if ("Authenticate")//Checks for ID
id_check(U, 1)
if("UpdateInfo")
ownjob = id.assignment
name = "PDA-[owner] ([ownjob])"
if("Eject")//Ejects the cart, only done from hub.
if (!isnull(cartridge))
var/turf/T = loc
if(ismob(T))
T = T.loc
cartridge.loc = T
scanmode = 0
if (cartridge.radio)
cartridge.radio.hostpda = null
cartridge = null
//MENU FUNCTIONS===================================
if("0")//Hub
mode = 0
if("1")//Notes
mode = 1
if("2")//Messenger
mode = 2
if("21")//Read messeges
mode = 21
if("3")//Atmos scan
mode = 3
if("4")//Redirects to hub
mode = 0
if("chatroom") // chatroom hub
mode = 5
if("41") //Manifest
mode = 41
if("0")//Hub
mode = 0
if("1")//Notes
mode = 1
if("2")//Messenger
mode = 2
if("21")//Read messeges
mode = 21
if("3")//Atmos scan
mode = 3
if("4")//Redirects to hub
mode = 0
if("chatroom") // chatroom hub
mode = 5
if("41") //Manifest
mode = 41
//MAIN FUNCTIONS===================================
if("Light")
if(fon)
fon = 0
if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
else SetLuminosity(0)
else
fon = 1
if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
else SetLuminosity(f_lum)
if("Medical Scan")
if(scanmode == 1)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_medical))
scanmode = 1
if("Reagent Scan")
if(scanmode == 3)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
scanmode = 3
if("Halogen Counter")
if(scanmode == 4)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_engine))
scanmode = 4
if("Honk")
if ( !(last_honk && world.time < last_honk + 20) )
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
last_honk = world.time
if("Gas Scan")
if(scanmode == 5)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_atmos))
scanmode = 5
if("Light")
if(fon)
fon = 0
if(src in U.contents) U.SetLuminosity(U.luminosity - f_lum)
else SetLuminosity(0)
else
fon = 1
if(src in U.contents) U.SetLuminosity(U.luminosity + f_lum)
else SetLuminosity(f_lum)
if("Medical Scan")
if(scanmode == 1)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_medical))
scanmode = 1
if("Reagent Scan")
if(scanmode == 3)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_reagent_scanner))
scanmode = 3
if("Halogen Counter")
if(scanmode == 4)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_engine))
scanmode = 4
if("Honk")
if ( !(last_honk && world.time < last_honk + 20) )
playsound(loc, 'sound/items/bikehorn.ogg', 50, 1)
last_honk = world.time
if("Gas Scan")
if(scanmode == 5)
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_atmos))
scanmode = 5
//MESSENGER/NOTE FUNCTIONS===================================
if ("Edit")
var/n = input(U, "Please enter message", name, notehtml) as message
if (in_range(src, U) && loc == U)
n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
if (mode == 1)
note = replacetext(n, "\n", "<BR>")
notehtml = n
else
U << browse(null, "window=pda")
return
if("Toggle Messenger")
toff = !toff
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
silent = !silent
if("Clear")//Clears messages
tnote = null
if("Ringtone")
var/t = input(U, "Please enter new ringtone", name, ttone) as text
if (in_range(src, U) && loc == U)
if (t)
if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
U << "The PDA softly beeps."
U << browse(null, "window=pda")
else
t = copytext(sanitize(t), 1, 20)
ttone = t
else
U << browse(null, "window=pda")
return
if("Message")
var/obj/item/device/pda/P = locate(href_list["target"])
src.create_message(U, P)
if ("Edit")
var/n = input(U, "Please enter message", name, notehtml) as message
if (in_range(src, U) && loc == U)
n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN)
if (mode == 1)
note = replacetext(n, "\n", "<BR>")
notehtml = n
else
U << browse(null, "window=pda")
return
if("Toggle Messenger")
toff = !toff
if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status
silent = !silent
if("Clear")//Clears messages
tnote = null
if("Ringtone")
var/t = input(U, "Please enter new ringtone", name, ttone) as text
if (in_range(src, U) && loc == U)
if (t)
if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code)))
U << "The PDA softly beeps."
U << browse(null, "window=pda")
else
t = copytext(sanitize(t), 1, 20)
ttone = t
else
U << browse(null, "window=pda")
return
if("Message")
var/obj/item/device/pda/P = locate(href_list["target"])
src.create_message(U, P)
if("Send Honk")//Honk virus
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
if(!isnull(P))
if (!P.toff && cartridge:honk_charges > 0)
cartridge:honk_charges--
U.show_message("\blue Virus sent!", 1)
P.honkamt = (rand(15,20))
else
U << "PDA not found."
if("Send Honk")//Honk virus
if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch.
var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess.
if(!isnull(P))
if (!P.toff && cartridge:honk_charges > 0)
cartridge:honk_charges--
U.show_message("\blue Virus sent!", 1)
P.honkamt = (rand(15,20))
else
U << browse(null, "window=pda")
return
if("Send Silence")//Silent virus
if(istype(cartridge, /obj/item/weapon/cartridge/mime))
var/obj/item/device/pda/P = locate(href_list["target"])
if(!isnull(P))
if (!P.toff && cartridge:mime_charges > 0)
cartridge:mime_charges--
U.show_message("\blue Virus sent!", 1)
P.silent = 1
P.ttone = "silence"
else
U << "PDA not found."
U << "PDA not found."
else
U << browse(null, "window=pda")
return
if("Send Silence")//Silent virus
if(istype(cartridge, /obj/item/weapon/cartridge/mime))
var/obj/item/device/pda/P = locate(href_list["target"])
if(!isnull(P))
if (!P.toff && cartridge:mime_charges > 0)
cartridge:mime_charges--
U.show_message("\blue Virus sent!", 1)
P.silent = 1
P.ttone = "silence"
else
U << browse(null, "window=pda")
return
U << "PDA not found."
else
U << browse(null, "window=pda")
return
//SYNDICATE FUNCTIONS===================================
if("Toggle Door")
if(cartridge && cartridge.access_remote_door)
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == cartridge.remote_door_id)
if(M.density)
M.open()
else
M.close()
if("Toggle Door")
if(cartridge && cartridge.access_remote_door)
for(var/obj/machinery/door/poddoor/M in world)
if(M.id == cartridge.remote_door_id)
if(M.density)
M.open()
else
M.close()
if("Detonate")//Detonate PDA
if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
var/obj/item/device/pda/P = locate(href_list["target"])
if(!isnull(P))
if (!P.toff && cartridge:shock_charges > 0)
cartridge:shock_charges--
if("Detonate")//Detonate PDA
if(istype(cartridge, /obj/item/weapon/cartridge/syndicate))
var/obj/item/device/pda/P = locate(href_list["target"])
if(!isnull(P))
if (!P.toff && cartridge:shock_charges > 0)
cartridge:shock_charges--
var/difficulty = 0
var/difficulty = 0
if(P.cartridge)
difficulty += P.cartridge.access_medical
difficulty += P.cartridge.access_security
difficulty += P.cartridge.access_engine
difficulty += P.cartridge.access_clown
difficulty += P.cartridge.access_janitor
else
difficulty += 2
if(P.cartridge)
difficulty += P.cartridge.access_medical
difficulty += P.cartridge.access_security
difficulty += P.cartridge.access_engine
difficulty += P.cartridge.access_clown
difficulty += P.cartridge.access_janitor
else
difficulty += 2
if(prob(difficulty * 12) || (P.hidden_uplink))
U.show_message("\red An error flashes on your [src].", 1)
else if (prob(difficulty * 3))
U.show_message("\red Energy feeds back into your [src]!", 1)
U << browse(null, "window=pda")
explode()
else
U.show_message("\blue Success!", 1)
P.explode()
else
U << "PDA not found."
if(prob(difficulty * 12) || (P.hidden_uplink))
U.show_message("\red An error flashes on your [src].", 1)
else if (prob(difficulty * 3))
U.show_message("\red Energy feeds back into your [src]!", 1)
U << browse(null, "window=pda")
explode()
else
U.show_message("\blue Success!", 1)
P.explode()
else
U.unset_machine()
U << browse(null, "window=pda")
return
U << "PDA not found."
else
U.unset_machine()
U << browse(null, "window=pda")
return
//pAI FUNCTIONS===================================
if("pai")
switch(href_list["option"])
if("1") // Configure pAI device
pai.attack_self(U)
if("2") // Eject pAI device
var/turf/T = get_turf_or_move(src.loc)
if(T)
pai.loc = T
if("pai")
switch(href_list["option"])
if("1") // Configure pAI device
pai.attack_self(U)
if("2") // Eject pAI device
var/turf/T = get_turf_or_move(src.loc)
if(T)
pai.loc = T
//LINK FUNCTIONS===================================
else//Cartridge menu linking
mode = text2num(href_list["choice"])
cartridge.mode = mode
cartridge.unlock()
else//If can't interact.
U.unset_machine()
U << browse(null, "window=pda")
return
else//Cartridge menu linking
mode = text2num(href_list["choice"])
cartridge.mode = mode
cartridge.unlock()
else//If not in range or not using the pda.
U.unset_machine()
U << browse(null, "window=pda")
@@ -866,7 +861,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(issilicon(usr))
return
if ( !(usr.stat || usr.restrained()) )
if ( can_use(usr) )
if(id)
remove_id()
else
@@ -883,7 +878,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(issilicon(usr))
return
if ( !(usr.stat || usr.restrained()) )
if ( can_use(usr) )
var/obj/item/weapon/pen/O = locate() in src
if(O)
if (istype(loc, /mob))
@@ -943,7 +938,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
else
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if(((src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
if(!(user.stat || user.restrained()) )//If they can still act.
if( can_use(user) )//If they can still act.
id_check(user, 2)
user << "<span class='notice'>You put the ID into \the [src]'s slot.</span>"
updateSelfDialog()//Update self dialog on success.
@@ -30,6 +30,7 @@
R.uneq_all()
R.hands.icon_state = "nomod"
R.icon_state = "robot"
R.base_icon = "robot"
del(R.module)
R.module = null
R.camera.network.Remove(list("Medical","MINE"))
@@ -14,6 +14,7 @@
m_amt = 90
attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed")
var/max_water = 50
var/last_use = 1.0
var/safety = 1
var/sprite_name = "fire_extinguisher"
@@ -66,6 +67,11 @@
usr << "\red \The [src] is empty."
return
if (world.time < src.last_use + 20)
return
src.last_use = world.time
playsound(src.loc, 'sound/effects/extinguish.ogg', 75, 1, -3)
var/direction = get_dir(src,target)
@@ -159,9 +159,14 @@ Implant Specifics:<BR>"}
return
if(istype(imp_in, /mob/))
var/mob/T = imp_in
message_admins("Explosive implant triggered in [T] ([T.key]). (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</a>) ")
log_game("Explosive implant triggered in [T] ([T.key]).")
T.gib()
explosion(get_turf(imp_in), 1, 3, 4, 6, 3)
var/turf/t = get_turf(imp_in)
if(t)
t.hotspot_expose(3500,125)
@@ -455,8 +460,8 @@ the implant may become unstable and either pre-maturely inject the subject or si
implanted(mob/source as mob)
src.activation_emote = input("Choose activation emote:") in list("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
if (source.mind)
source.mind.store_memory("Freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
source << "The implanted freedom implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
source.mind.store_memory("Compressed matter implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate.", 0, 0)
source << "The implanted compressed matter implant can be activated by using the [src.activation_emote] emote, <B>say *[src.activation_emote]</B> to attempt to activate."
return 1
islegal()
@@ -464,4 +469,4 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/cortical
name = "cortical stack"
desc = "A fist-sized mass of biocircuits and chips."
desc = "A fist-sized mass of biocircuits and chips."
-6
View File
@@ -35,7 +35,6 @@
user.visible_message("<span class='warning'>[user] kicks [src].</span>", \
"<span class='warning'>You kick [src].</span>", \
"You hear twisting metal.")
user.delay_click(10)
if(shock(user, 70))
return
@@ -52,7 +51,6 @@
user.visible_message("<span class='warning'>[user] mangles [src].</span>", \
"<span class='warning'>You mangle [src].</span>", \
"You hear twisting metal.")
user.delay_click(10)
if(!shock(user, 70))
health -= 5
@@ -66,7 +64,6 @@
user.visible_message("<span class='warning'>[user] smashes against [src].</span>", \
"<span class='warning'>You smash against [src].</span>", \
"You hear twisting metal.")
user.delay_click(10)
health -= rand(2,3)
healthcheck()
@@ -79,7 +76,6 @@
M.visible_message("<span class='warning'>[M] smashes against [src].</span>", \
"<span class='warning'>You smash against [src].</span>", \
"You hear twisting metal.")
M.delay_click(10)
health -= M.melee_damage_upper
healthcheck()
@@ -164,10 +160,8 @@
else if(istype(W, /obj/item/weapon/shard))
health -= W.force * 0.1
user.delay_click(10)
else if(!shock(user, 70))
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
user.delay_click(10)
switch(W.damtype)
if("fire")
health -= W.force
-7
View File
@@ -104,19 +104,16 @@
new /obj/item/weapon/shard(loc)
if(reinf) new /obj/item/stack/rods(loc)
del(src)
usr.delay_click(10)
else if (usr.a_intent == "hurt")
playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
"\red You bang against the [src.name]!", \
"You hear a banging sound.")
usr.delay_click(5)
else
playsound(src.loc, 'glassknock.ogg', 80, 1)
usr.visible_message("[usr.name] knocks on the [src.name].", \
"You knock on the [src.name].", \
"You hear a knocking sound.")
usr.delay_click(5)
return
@@ -131,11 +128,9 @@
new /obj/item/weapon/shard(loc)
if(reinf) new /obj/item/stack/rods(loc)
del(src)
user.delay_click(10)
else //for nicer text~
user.visible_message("<span class='danger'>[user] smashes into [src]!</span>")
playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
user.delay_click(10)
/obj/structure/window/attack_alien(mob/user as mob)
@@ -163,7 +158,6 @@
var/mob/living/M = G.affecting
var/state = G.state
del(W) //gotta delete it here because if window breaks, it won't get deleted
user.delay_click(10)
switch (state)
if(1)
M.apply_damage(7)
@@ -203,7 +197,6 @@
else
if(W.damtype == BRUTE || W.damtype == BURN)
hit(W.force)
user.delay_click(10)
if(health <= 7)
anchored = 0
update_nearby_icons()
+3
View File
@@ -470,12 +470,15 @@
dat += "</table>"
if(ticker.mode.raiders.len > 0)
dat += "<br><table cellspacing=5><tr><td><B>Raiders</B></td><td></td><td></td></tr>"
for(var/datum/mind/raider in ticker.mode.raiders)
var/mob/M = raider.current
if(M)
dat += "<tr><td><a href='?src=\ref[src];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='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>"
dat += "<td><A HREF='?src=\ref[src];traitor=\ref[M]'>Show Objective</A></td></tr>"
dat += "</table>"
/*
if(ticker.mode.ninjas.len > 0)
dat += "<br><table cellspacing=5><tr><td><B>Ninjas</B></td><td></td><td></td></tr>"
+6 -10
View File
@@ -2029,17 +2029,13 @@
if("virus")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","V")
var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose")
if(answer=="Random")
viral_outbreak()
message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1)
else if(answer == "Choose")
var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat")
var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses
viral_outbreak(V)
message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1)
var/answer = alert("Do you want this to be a greater disease or a lesser one?",,"Greater","Lesser")
if(answer=="Lesser")
virus2_lesser_infection()
message_admins("[key_name_admin(usr)] has triggered a lesser virus outbreak.", 1)
else
AdminCreateVirus(usr)
virus2_greater_infection()
message_admins("[key_name_admin(usr)] has triggered a greater virus outbreak.", 1)
if("retardify")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","RET")
+1 -2
View File
@@ -62,7 +62,7 @@
*/
/client/proc/fix_next_move()
/* set category = "Debug"
set category = "Debug"
set name = "Unfreeze Everyone"
var/largest_move_time = 0
var/largest_click_time = 0
@@ -90,7 +90,6 @@
message_admins("[key_name_admin(largest_click_mob)] had the largest click delay with [largest_click_time] frames / [largest_click_time/10] seconds!", 1)
message_admins("world.time = [world.time]", 1)
feedback_add_details("admin_verb","UFE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
*/
return
/client/proc/radio_report()
+2 -1
View File
@@ -16,6 +16,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
"ninja" = "true", // 10
"vox raider" = IS_MODE_COMPILED("heist"), // 11
"diona" = 1, // 12
)
var/const/MAX_SAVE_SLOTS = 10
@@ -806,7 +807,7 @@ datum/preferences
if(config.usealienwhitelist) //If we're using the whitelist, make sure to check it!
for(var/S in whitelisted_species)
if(is_alien_whitelisted(user,S))
if(is_alien_whitelisted(user,S) || (S == "Unathi" && is_alien_whitelisted(user,"Soghun")))
new_species += S
whitelisted = 1
if(!whitelisted)
@@ -1030,6 +1030,7 @@
if (!O.amputated)
O.status &= ~ORGAN_DESTROYED
O.wounds.Cut()
O.heal_damage(1000,1000,1,1)
var/datum/organ/external/head/h = organs_by_name["head"]
h.disfigured = 0
@@ -1049,6 +1050,10 @@
for (var/datum/disease/virus in viruses)
virus.cure()
for (var/ID in virus2)
var/datum/disease2/disease/V = virus2[ID]
V.cure(src)
..()
/mob/living/carbon/human/proc/is_lung_ruptured()
@@ -1116,9 +1121,9 @@ mob/living/carbon/human/yank_out_object()
set desc = "Remove an embedded item at the cost of bleeding and pain."
set src in view(1)
if(!isliving(usr) || usr.last_click + usr.click_delay > world.time)
if(!isliving(usr) || usr.next_move > world.time)
return
usr.delay_click(20)
usr.next_move = world.time + 20
if(usr.stat == 1)
usr << "You are unconcious and cannot do that!"
@@ -1353,4 +1358,4 @@ mob/living/carbon/human/yank_out_object()
else
src << "You do not have enough chemicals stored to reproduce."
return
return
+109 -7
View File
@@ -38,11 +38,11 @@
attacktext = "nips"
friendly = "prods"
wander = 0
pass_flags = PASSTABLE
var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin.
var/mob/living/carbon/human/host // Human host for the brain worm.
var/truename // Name used for brainworm-speak.
var/bonded // Var for full bonding with the host brain.
var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
var/controlling // Used in human death check.
@@ -110,6 +110,21 @@
src << "You drop words into [host]'s mind: \"[message]\""
host << "Your own thoughts speak: \"[message]\""
/mob/living/simple_animal/borer/Stat()
..()
statpanel("Status")
if(emergency_shuttle)
if(emergency_shuttle.online && emergency_shuttle.location < 2)
var/timeleft = emergency_shuttle.timeleft()
if (timeleft)
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
if (client.statpanel == "Status")
stat("Chemicals", chemicals)
// VERBS!
/mob/living/simple_animal/borer/proc/borer_speak(var/message)
if(!message)
return
@@ -135,7 +150,7 @@
spawn(300+(host.brainloss*5))
if(!host || !src) return
if(!host || !src || controlling) return
else
src << "\red <B>You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system.</B>"
@@ -149,7 +164,31 @@
host.verbs += /mob/living/carbon/human/proc/punish_host
host.verbs += /mob/living/carbon/human/proc/spawn_larvae
mob/living/simple_animal/borer/verb/release_host()
/mob/living/simple_animal/borer/verb/secrete_chemicals()
set category = "Alien"
set name = "Secrete Chemicals"
set desc = "Push some chemicals into your host's bloodstream."
if(!host)
src << "You are not inside a host body."
return
if(stat)
src << "You cannot secrete chemicals in your current state."
if(chemicals < 50)
src << "You don't have enough chemicals!"
var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine")
if(chemicals < 50 || !host || controlling || !src || stat) //Sanity check.
return
src << "\red <B>You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream.</B>"
host.reagents.add_reagent(chem, 15)
chemicals -= 50
/mob/living/simple_animal/borer/verb/release_host()
set category = "Alien"
set name = "Release Host"
set desc = "Slither out of your host."
@@ -165,7 +204,6 @@ mob/living/simple_animal/borer/verb/release_host()
if(!host || !src) return
src << "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."
bonded = 0
if(!host.stat)
host << "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."
@@ -193,6 +231,12 @@ mob/living/simple_animal/borer/proc/detatch()
src.loc = get_turf(host)
controlling = 0
reset_view(null)
machine = null
host.reset_view(null)
host.machine = null
host.verbs -= /mob/living/carbon/human/proc/release_control
host.verbs -= /mob/living/carbon/human/proc/punish_host
host.verbs -= /mob/living/carbon/human/proc/spawn_larvae
@@ -220,7 +264,7 @@ mob/living/simple_animal/borer/proc/detatch()
return
var/list/choices = list()
for(var/mob/living/C in view(1,src))
for(var/mob/living/carbon/human/C in view(1,src))
if(istype(C,/mob/living/carbon/human) && C.stat != 2)
choices += C
@@ -230,6 +274,7 @@ mob/living/simple_animal/borer/proc/detatch()
if(M.has_brain_worms())
src << "You cannot infest someone who is already infested!"
return
M << "Something slimy begins probing at the opening of your ear canal..."
src << "You slither up [M] and begin probing at their ear canal..."
@@ -257,7 +302,6 @@ mob/living/simple_animal/borer/proc/detatch()
var/datum/organ/external/head = M.get_organ("head")
head.implants += src
src.loc = M
bonded = 0
host_brain.name = M.name
host_brain.real_name = M.real_name
@@ -265,4 +309,62 @@ mob/living/simple_animal/borer/proc/detatch()
return
else
src << "They are no longer in range!"
return
return
/mob/living/simple_animal/borer/verb/ventcrawl()
set name = "Crawl through Vent"
set desc = "Enter an air vent and crawl through the pipe system."
set category = "Alien"
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
// return
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
var/welded = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
if(!v.welded)
vent_found = v
break
else
welded = 1
if(vent_found)
if(vent_found.network&&vent_found.network.normal_members.len)
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in vent_found.network.normal_members)
if(temp_vent.loc == loc)
continue
vents.Add(temp_vent)
var/list/choices = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/vent in vents)
if(vent.loc.z != loc.z)
continue
var/atom/a = get_turf(vent)
choices.Add(a.loc)
var/turf/startloc = loc
var/obj/selection = input("Select a destination.", "Duct System") in choices
var/selection_position = choices.Find(selection)
if(loc==startloc)
var/obj/target_vent = vents[selection_position]
if(target_vent)
loc = target_vent.loc
else
src << "\blue You need to remain still while entering a vent."
else
src << "\blue This vent is not connected to anything."
else if(welded)
src << "\red That vent is welded."
else
src << "\blue You must be standing on or beside an air vent to enter it."
return
//copy paste from alien/larva, if that func is updated please update this one alsoghost
/mob/living/simple_animal/borer/verb/hide()
set name = "Hide"
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
set category = "Alien"
if (layer != TURF_LAYER+0.2)
layer = TURF_LAYER+0.2
src << text("\blue You are now hiding.")
else
layer = MOB_LAYER
src << text("\blue You have stopped hiding.")
+1 -1
View File
@@ -33,7 +33,7 @@
if(hud_used) del(hud_used) //remove the hud objects
hud_used = new /datum/hud(src)
last_click = world.time
next_move = 1
sight |= SEE_SELF
..()
+8 -3
View File
@@ -607,6 +607,11 @@ var/list/slot_equipment_priority = list( \
src.pulling = AM
AM.pulledby = src
//Attempted fix for people flying away through space when cuffed and dragged.
if(ismob(AM))
var/mob/pulled = AM
pulled.inertia_dir = 0
/mob/proc/can_use_hands()
return
@@ -900,9 +905,9 @@ mob/verb/yank_out_object()
set desc = "Remove an embedded item at the cost of bleeding and pain."
set src in view(1)
if(!isliving(usr) || usr.last_click + usr.click_delay > world.time)
if(!isliving(usr) || usr.next_move > world.time)
return
usr.delay_click(20)
usr.next_move = world.time + 20
if(usr.stat == 1)
usr << "You are unconcious and cannot do that!"
@@ -955,4 +960,4 @@ mob/verb/yank_out_object()
pinned -= O
if(!pinned.len)
anchored = 0
return 1
return 1
+2 -2
View File
@@ -54,8 +54,8 @@
var/sdisabilities = 0 //Carbon
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
var/last_click = null
var/click_delay = 0
var/next_move = null
var/prev_move = null
var/monkeyizing = null //Carbon
var/other = 0.0
var/hand = null
+3 -3
View File
@@ -128,7 +128,7 @@
return
if(killing)
return
if (assailant.last_click + assailant.click_delay > world.time)
if (assailant.next_move > world.time)
return
if ((!( assailant.canmove ) || assailant.lying))
//SN src = null
@@ -140,7 +140,7 @@
if (!( killing ))
assailant.visible_message("\red [assailant] has temporarily tightened \his grip on [affecting]!")
//Foreach goto(97)
assailant.delay_click(10)
assailant.next_move = world.time + 10
//affecting.stunned = max(2, affecting.stunned)
//affecting.paralysis = max(1, affecting.paralysis)
affecting.losebreath = min(affecting.losebreath + 1, 3)
@@ -235,7 +235,7 @@
assailant.attack_log += text("\[[time_stamp()]\] <font color='red'>Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
log_attack("<font color='red'>[assailant.name] ([assailant.ckey]) Strangled (kill intent) [affecting.name] ([affecting.ckey])</font>")
assailant.delay_click(10)
assailant.next_move = world.time + 10
affecting.losebreath += 1
else
assailant.visible_message("\red [assailant] was unable to tighten \his grip on [affecting]'s neck!")
-4
View File
@@ -454,7 +454,3 @@ var/list/intents = list("help","disarm","grab","hurt")
hud_used.action_intent.icon_state = "harm"
else
hud_used.action_intent.icon_state = "help"
/mob/proc/delay_click(var/delay)
src.click_delay = max(src.click_delay, delay)
return src.click_delay
+1 -1
View File
@@ -351,7 +351,7 @@
if(client.prefs.species)
chosen_species = all_species[client.prefs.species]
if(chosen_species)
if(is_alien_whitelisted(src, client.prefs.species) || !config.usealienwhitelist || !(chosen_species.flags & WHITELISTED))
if(is_alien_whitelisted(src, client.prefs.species) || (client.prefs.species == "Unathi" && is_alien_whitelisted(src, "Soghun")) || !config.usealienwhitelist || !(chosen_species.flags & WHITELISTED))
new_character.set_species(client.prefs.species)
if(chosen_species.language)
new_character.add_language(chosen_species.language)
+10 -6
View File
@@ -600,9 +600,9 @@
set name = "Resist"
set category = "IC"
if(!isliving(usr) || usr.last_click + usr.click_delay > world.time)
if(!isliving(usr) || usr.next_move > world.time)
return
usr.delay_click(20)
usr.next_move = world.time + 20
var/mob/living/L = usr
@@ -631,6 +631,10 @@
H.name = "host brain"
H.real_name = "host brain"
verbs -= /mob/living/carbon/human/proc/release_control
verbs -= /mob/living/carbon/human/proc/punish_host
verbs -= /mob/living/carbon/human/proc/spawn_larvae
return
//resisting grabs (as if it helps anyone...)
@@ -666,7 +670,7 @@
if(iscarbon(L))
var/mob/living/carbon/C = L
if( C.handcuffed )
C.delay_click(100)
C.next_move = world.time + 100
C.last_special = world.time + 100
C << "\red You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"
for(var/mob/O in viewers(L))
@@ -700,7 +704,7 @@
// breakout_time++ //Harder to get out of welded lockers than locked lockers
//okay, so the closet is either welded or locked... resist!!!
usr.delay_click(100)
usr.next_move = world.time + 100
L.last_special = world.time + 100
L << "\red You lean on the back of \the [C] and start pushing the door open. (this will take about [breakout_time] minutes)"
for(var/mob/O in viewers(usr.loc))
@@ -753,7 +757,7 @@
else if(iscarbon(L))
var/mob/living/carbon/CM = L
if(CM.handcuffed && CM.canmove && (CM.last_special <= world.time))
CM.delay_click(100)
CM.next_move = world.time + 100
CM.last_special = world.time + 100
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your handcuffs. (This will take around 5 seconds and you need to stand still)"
@@ -791,7 +795,7 @@
CM.handcuffed = null
CM.update_inv_handcuffed()
else if(CM.legcuffed && CM.canmove && (CM.last_special <= world.time))
CM.delay_click(100)
CM.next_move = world.time + 100
CM.last_special = world.time + 100
if(isalienadult(CM) || (HULK in usr.mutations))//Don't want to do a lot of logic gating here.
usr << "\red You attempt to break your legcuffs. (This will take around 5 seconds and you need to stand still)"
+1 -1
View File
@@ -131,7 +131,7 @@
in_chamber.loc = get_turf(user)
in_chamber.starting = get_turf(user)
in_chamber.shot_from = src
usr.delay_click(4)
user.next_move = world.time + 4
in_chamber.silenced = silenced
in_chamber.current = curloc
in_chamber.yo = targloc.y - curloc.y
+4 -2
View File
@@ -1019,7 +1019,7 @@ datum
required_other = 1
on_reaction(var/datum/reagents/holder)
var/blocked = list(/mob/living/simple_animal/hostile,
/*var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/pirate/ranged,
/mob/living/simple_animal/hostile/russian,
@@ -1051,7 +1051,9 @@ datum
C.loc = get_turf_loc(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
step(C, pick(NORTH,SOUTH,EAST,WEST))*/
for(var/mob/O in viewers(get_turf_loc(holder.my_atom), null))
O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
//Silver
slimebork
@@ -68,11 +68,17 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
..()
if(reagents.total_volume <= 0)
/*if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
flags &= ~OPENCONTAINER
*/
update_icon()
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attackby(obj/item/I as obj, mob/user as mob)
..()
update_icon() //Allows the autoinjector to be reset.
return
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
if(reagents.total_volume > 0)
icon_state = "[initial(icon_state)]1"
+4 -1
View File
@@ -184,7 +184,10 @@
//Handle possessive brain borers.
if(istype(obj,/mob/living/simple_animal/borer))
target.release_control()
var/mob/living/simple_animal/borer/worm = obj
if(worm.controlling)
target.release_control()
worm.detatch()
obj.loc = get_turf(target)
if(istype(obj,/obj/item/weapon/implant))
+24
View File
@@ -162,3 +162,27 @@ var/global/list/virusDB = list()
v.fields["spread type"] = spreadtype
virusDB["[uniqueID]"] = v
return 1
proc/virus2_lesser_infection()
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
candidates += G
if(!candidates.len) return
candidates = shuffle(candidates)
infect_mob_random_lesser(candidates[1])
proc/virus2_greater_infection()
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
candidates += G
if(!candidates.len) return
candidates = shuffle(candidates)
infect_mob_random_greater(candidates[1])
+3 -1
View File
@@ -641,6 +641,7 @@ var/list/TAGGERLOCATIONS = list("Disposals",
#define BE_MONKEY 512
#define BE_NINJA 1024
#define BE_RAIDER 2048
#define BE_PLANT 4096
var/list/be_special_flags = list(
"Traitor" = BE_TRAITOR,
@@ -654,7 +655,8 @@ var/list/be_special_flags = list(
"Cultist" = BE_CULTIST,
"Monkey" = BE_MONKEY,
"Ninja" = BE_NINJA,
"Raider" = BE_RAIDER
"Raider" = BE_RAIDER,
"Diona" = BE_PLANT
)
#define AGE_MIN 17 //youngest a character can be
+9
View File
@@ -57,7 +57,16 @@ Stuff which is in development and not yet visible to players or just code relate
(ie. code improvements for expandability, etc.) should not be listed here. They
should be listed in the changelog upon commit though. Thanks. -->
<div class="commit sansserif">
<h2 class="date">August 8th, 2013</h2>
<h3 class="author">Erthilo updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Raise Dead rune now properly heals and revives dead corpse.</li>
<li class="bugfix">Admin-only rejuvenate verb now heals all organs, limbs, and diseases.</li>
<li class="bugfix">Cyborg sprites now correctly reset with reset boards. This means cyborg appearances can now be changed without admin intervention.</li>
</ul>
</div>
<div class="commit sansserif">
<h2 class="date">2013/08/4</h2>
<h3 class="author">Chinsky updated:</h3>
<ul class="changes bgimages16">
Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

+2
View File
@@ -2,3 +2,5 @@
#Maps must be the full path to them
#Maps should be 255x255 or smaller and be bounded. Falling off the edge of the map will result in undefined behavior.
#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START
#maps/RandomZLevels/awaymission.dmm
+1 -1
View File
@@ -2288,7 +2288,7 @@
"aRZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aSa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"aSb" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aSc" = (/obj/machinery/door/airlock/maintenance,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aSc" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aSd" = (/obj/machinery/vending/dinnerware,/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Kitchen"; dir = 2},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aSe" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aSf" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)