VS: Virgo specific smites

This commit is contained in:
Arokha Sieyes
2018-05-23 22:44:10 -04:00
parent 0d594bba22
commit 3d522eb02f
6 changed files with 230 additions and 1 deletions

View File

@@ -0,0 +1,3 @@
#define SMITE_SHADEKIN_ATTACK "Shadekin (Attack)"
#define SMITE_SHADEKIN_NOMF "Shadekin (Devour)"
#define SMITE_REDSPACE_ABDUCT "Redspace Abduction"

View File

@@ -31,7 +31,7 @@
return 1
if(get_dist(src,T0) > 1)
return 0
if(T0.z != z) return 0 //VOREStation Add
if(T0.x == x || T0.y == y)
// Check for border blockages
return T0.ClickCross(get_dir(T0,src), border_only = 1) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target)

View File

@@ -3,3 +3,15 @@
oxygen = MOLES_O2STANDARD
nitrogen = MOLES_N2STANDARD
initialized = TRUE // Don't call init on unsimulated turfs (at least not yet)
//VOREStation Add
/turf/unsimulated/fake_space
name = "\proper space"
icon = 'icons/turf/space.dmi'
icon_state = "0"
dynamic_lighting = FALSE
/turf/unsimulated/fake_space/New()
..()
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
//VOREStation Add End

View File

@@ -135,6 +135,7 @@ var/list/admin_verbs_fun = list(
/client/proc/roll_dices,
/datum/admins/proc/call_supply_drop,
/datum/admins/proc/call_drop_pod,
/client/proc/smite_vr, //VOREStation Add,
/client/proc/smite
)

View File

@@ -0,0 +1,211 @@
/client/proc/smite_vr(var/mob/living/carbon/human/target in player_list)
set name = "Smite (Vore)"
set desc = "Abuse a player with various 'special Vore-brand treatments' from a list."
set category = "Fun"
if(!check_rights(R_ADMIN|R_FUN))
return
if(!istype(target))
return
var/list/smite_types = list(SMITE_SHADEKIN_ATTACK,SMITE_SHADEKIN_NOMF,SMITE_REDSPACE_ABDUCT)
var/smite_choice = input("Select the type of SMITE for [target]","SMITE Type Choice") as null|anything in smite_types
if(!smite_choice)
return
log_and_message_admins("[key_name(src)] has used SMITE (Vore) ([smite_choice]) on [key_name(target)].")
feedback_add_details("admin_verb","SMITEV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
switch(smite_choice)
if(SMITE_SHADEKIN_ATTACK)
var/turf/Tt = get_turf(target) //Turf for target
if(target.loc != Tt)
return //Too hard to attack someone in something
var/turf/Ts //Turf for shadekin
//Try to find nondense turf
for(var/direction in cardinal)
var/turf/T = get_step(target,direction)
if(T && !T.density)
Ts = T //Found shadekin spawn turf
if(!Ts)
return //Didn't find shadekin spawn turf
var/mob/living/simple_animal/shadekin/red/shadekin = new(Ts)
//Abuse of shadekin
shadekin.real_name = shadekin.name
shadekin.init_vore()
shadekin.ability_flags |= 0x1
shadekin.specific_targets = TRUE //Don't attack others
shadekin.phase_shift()
shadekin.target_mob = target
shadekin.stance = STANCE_ATTACK
shadekin.Life()
//Remove when done
spawn(10 SECONDS)
if(shadekin)
shadekin.death()
if(SMITE_SHADEKIN_NOMF)
var/list/kin_types = list(
"Red Eyes (Dark)" = /mob/living/simple_animal/shadekin/red/dark,
"Red Eyes (Light)" = /mob/living/simple_animal/shadekin/red/white,
"Red Eyes (Brown)" = /mob/living/simple_animal/shadekin/red/brown,
"Blue Eyes (Dark)" = /mob/living/simple_animal/shadekin/blue/dark,
"Blue Eyes (Light)" = /mob/living/simple_animal/shadekin/blue/white,
"Blue Eyes (Brown)" = /mob/living/simple_animal/shadekin/blue/brown,
"Purple Eyes (Dark)" = /mob/living/simple_animal/shadekin/purple/dark,
"Purple Eyes (Light)" = /mob/living/simple_animal/shadekin/purple/white,
"Purple Eyes (Brown)" = /mob/living/simple_animal/shadekin/purple/brown,
"Yellow Eyes (Dark)" = /mob/living/simple_animal/shadekin/yellow/dark,
"Yellow Eyes (Light)" = /mob/living/simple_animal/shadekin/yellow/white,
"Yellow Eyes (Brown)" = /mob/living/simple_animal/shadekin/yellow/brown,
"Green Eyes (Dark)" = /mob/living/simple_animal/shadekin/green/dark,
"Green Eyes (Light)" = /mob/living/simple_animal/shadekin/green/white,
"Green Eyes (Brown)" = /mob/living/simple_animal/shadekin/green/brown,
"Orange Eyes (Dark)" = /mob/living/simple_animal/shadekin/orange/dark,
"Orange Eyes (Light)" = /mob/living/simple_animal/shadekin/orange/white,
"Orange Eyes (Brown)" = /mob/living/simple_animal/shadekin/orange/brown,
"Rivyr (Unique)" = /mob/living/simple_animal/shadekin/blue/rivyr)
var/kin_type = input("Select the type of shadekin for [target] nomf","Shadekin Type Choice") as null|anything in kin_types
if(!kin_type || !target)
return
kin_type = kin_types[kin_type]
var/myself = alert("Control the shadekin yourself or delete pred and prey after?","Control Shadekin?","Control","Cancel","Delete")
if(myself == "Cancel" || !target)
return
var/turf/Tt = get_turf(target)
if(target.loc != Tt)
return //Can't nom when not exposed
//Begin abuse
target.transforming = TRUE //Cheap hack to stop them from moving
var/mob/living/simple_animal/shadekin/shadekin = new kin_type(Tt)
shadekin.real_name = shadekin.name
shadekin.init_vore()
shadekin.can_be_drop_pred = TRUE
shadekin.ai_inactive = TRUE
shadekin.dir = SOUTH
shadekin.ability_flags |= 0x1
shadekin.phase_shift() //Homf
shadekin.energy = initial(shadekin.energy)
//For fun
sleep(1 SECOND)
shadekin.dir = WEST
sleep(1 SECOND)
shadekin.dir = EAST
sleep(1 SECOND)
shadekin.dir = SOUTH
sleep(1 SECOND)
shadekin.audible_message("<b>[shadekin]</b> belches loudly!")
sleep(2 SECONDS)
shadekin.phase_shift()
target.transforming = FALSE //Undo cheap hack
if(myself == "Control") //Put admin in mob
shadekin.ckey = ckey
else //Permakin'd
to_chat(target,"<span class='danger'>You're carried off into The Dark by the [shadekin]. Who knows if you'll find your way back?</span>")
target.ghostize()
qdel(target)
qdel(shadekin)
if(SMITE_REDSPACE_ABDUCT)
redspace_abduction(target, src)
else
return //Injection? Don't print any messages.
var/redspace_abduction_z
/area/redspace_abduction
name = "Another Time And Place"
requires_power = FALSE
dynamic_lighting = FALSE
/proc/redspace_abduction(mob/living/target, user)
if(redspace_abduction_z < 0)
to_chat(user,"<span class='warning'>The abduction z-level is already being created. Please wait.</span>")
return
if(!redspace_abduction_z)
redspace_abduction_z = -1
to_chat(user,"<span class='warning'>This is the first use of the verb this shift, it will take a minute to configure the abduction z-level. It will be z[world.maxz+1].</span>")
var/z = ++world.maxz
for(var/x = 1 to world.maxx)
for(var/y = 1 to world.maxy)
var/turf/T = locate(x,y,z)
new /area/redspace_abduction(T)
T.ChangeTurf(/turf/unsimulated/fake_space)
CHECK_TICK
redspace_abduction_z = z
if(!target || !user)
return
var/size_of_square = 26
var/halfbox = round(size_of_square*0.5)
target.transforming = TRUE
to_chat(target,"<span class='danger'>You feel a strange tug, deep inside. You're frozen in momentarily...</span>")
to_chat(user,"<span class='notice'>Beginning vis_contents copy to abduction site, player mob is frozen.</span>")
sleep(1 SECOND)
//Lower left corner of a working box
var/llc_x = max(0,halfbox-target.x) + min(target.x+halfbox, world.maxx) - size_of_square
var/llc_y = max(0,halfbox-target.y) + min(target.y+halfbox, world.maxy) - size_of_square
//Copy them all
for(var/x = llc_x to llc_x+size_of_square)
for(var/y = llc_y to llc_y+size_of_square)
var/turf/T_src = locate(x,y,target.z)
var/turf/T_dest = locate(x,y,redspace_abduction_z)
T_dest.vis_contents.Cut()
T_dest.vis_contents += T_src
T_dest.density = T_src.density
T_dest.opacity = T_src.opacity
CHECK_TICK
//Feather the edges
for(var/x = llc_x to llc_x+1) //Left
for(var/y = llc_y to llc_y+size_of_square)
if(prob(50))
var/turf/T = locate(x,y,redspace_abduction_z)
T.density = FALSE
T.opacity = FALSE
T.vis_contents.Cut()
for(var/x = llc_x+size_of_square-1 to llc_x+size_of_square) //Right
for(var/y = llc_y to llc_y+size_of_square)
if(prob(50))
var/turf/T = locate(x,y,redspace_abduction_z)
T.density = FALSE
T.opacity = FALSE
T.vis_contents.Cut()
for(var/x = llc_x to llc_x+size_of_square) //Top
for(var/y = llc_y+size_of_square-1 to llc_y+size_of_square)
if(prob(50))
var/turf/T = locate(x,y,redspace_abduction_z)
T.density = FALSE
T.opacity = FALSE
T.vis_contents.Cut()
for(var/x = llc_x to llc_x+size_of_square) //Bottom
for(var/y = llc_y to llc_y+1)
if(prob(50))
var/turf/T = locate(x,y,redspace_abduction_z)
T.density = FALSE
T.opacity = FALSE
T.vis_contents.Cut()
target.forceMove(locate(target.x,target.y,redspace_abduction_z))
to_chat(target,"<span class='danger'>The tug relaxes, but everything around you looks... slightly off.</span>")
to_chat(user,"<span class='notice'>The mob has been moved. ([admin_jump_link(target,usr.client.holder)])</span>")
target.transforming = FALSE

View File

@@ -26,6 +26,7 @@
#include "code\__defines\_planes+layers_vr.dm"
#include "code\__defines\_tick.dm"
#include "code\__defines\admin.dm"
#include "code\__defines\admin_vr.dm"
#include "code\__defines\appearance.dm"
#include "code\__defines\atmos.dm"
#include "code\__defines\belly_modes_vr.dm"
@@ -1382,6 +1383,7 @@
#include "code\modules\admin\verbs\SDQL_2.dm"
#include "code\modules\admin\verbs\SDQL_2_parser.dm"
#include "code\modules\admin\verbs\smite.dm"
#include "code\modules\admin\verbs\smite_vr.dm"
#include "code\modules\admin\verbs\striketeam.dm"
#include "code\modules\admin\verbs\ticklag.dm"
#include "code\modules\admin\verbs\tripAI.dm"