mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-07-14 16:46:28 +01:00
Glamour Experimentation (#17003)
* Glamour Experimentation Added a new stable glamour crafting material that can be used to craft various items. Added a new unstable glamour item, that has a few risky effects when used and picked up without protection. Added a new particle smasher recipe to turn unstable glamour into stable glamour. Added new items to the lleill transmute ability. Added new glamour bow and arrow items. * Fixed a bit of phrasing * Consolidates TF procs Changed TF procs and belly transfer procs to be called from one location rather than being repeated in various different procs across the code. * forgot to include * Fixed size change effect * timer instead of spawn * Added new glamour turfs for whitespace maps.
This commit is contained in:
@@ -107,12 +107,15 @@
|
||||
"Transparent Glamour" = /obj/item/potion_material/glamour_transparent,
|
||||
"Shrinking Glamour" = /obj/item/potion_material/glamour_shrinking,
|
||||
"Twinkling Glamour" = /obj/item/potion_material/glamour_twinkling,
|
||||
"Unstable Glamour" = /obj/item/glamour_unstable,
|
||||
"Glamour Shard" = /obj/item/potion_material/glamour_shard,
|
||||
"Glamour Cell" = /obj/item/capture_crystal/glamour,
|
||||
"Face of Glamour" = /obj/item/glamour_face,
|
||||
"Speaking Glamour" = /obj/item/universal_translator/glamour,
|
||||
"Glamour Bubble" = /obj/item/clothing/mask/gas/glamour,
|
||||
"Pocket of Glamour" = /obj/item/clothing/under/permit/glamour
|
||||
"Pocket of Glamour" = /obj/item/clothing/under/permit/glamour,
|
||||
"glamour arrow" = /obj/item/arrow/standard/glamour,
|
||||
"glamour bow" = /obj/item/gun/launcher/crossbow/bow/glamour
|
||||
)
|
||||
|
||||
var/energy_cost = 50
|
||||
|
||||
@@ -286,5 +286,167 @@
|
||||
icon = 'icons/obj/glamour.dmi'
|
||||
icon_state = "pocket"
|
||||
|
||||
//Glamour Floor
|
||||
//Glamour Wall
|
||||
//Unstable Glamour
|
||||
|
||||
/obj/item/glamour_unstable
|
||||
name = "unstable glamour"
|
||||
desc = "A bright white glowing object that appears to move about on its own."
|
||||
icon = 'icons/obj/glamour.dmi'
|
||||
icon_state = "unstable"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_BLUESPACE = 7, TECH_MATERIAL = 2)
|
||||
var/tele_range = 4
|
||||
var/tf_type = /mob/living/simple_mob/animal/passive/mouse
|
||||
var/tf_possible_types = list(
|
||||
"mouse" = /mob/living/simple_mob/animal/passive/mouse,
|
||||
"rat" = /mob/living/simple_mob/animal/passive/mouse/rat,
|
||||
"giant rat" = /mob/living/simple_mob/vore/aggressive/rat,
|
||||
"dust jumper" = /mob/living/simple_mob/vore/alienanimals/dustjumper,
|
||||
"woof" = /mob/living/simple_mob/vore/woof,
|
||||
"corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
|
||||
"cat" = /mob/living/simple_mob/animal/passive/cat,
|
||||
"chicken" = /mob/living/simple_mob/animal/passive/chicken,
|
||||
"cow" = /mob/living/simple_mob/animal/passive/cow,
|
||||
"lizard" = /mob/living/simple_mob/animal/passive/lizard,
|
||||
"rabbit" = /mob/living/simple_mob/vore/rabbit,
|
||||
"fox" = /mob/living/simple_mob/animal/passive/fox,
|
||||
"fennec" = /mob/living/simple_mob/vore/fennec,
|
||||
"cute fennec" = /mob/living/simple_mob/animal/passive/fennec,
|
||||
"fennix" = /mob/living/simple_mob/vore/fennix,
|
||||
"red panda" = /mob/living/simple_mob/vore/redpanda,
|
||||
"opossum" = /mob/living/simple_mob/animal/passive/opossum,
|
||||
"horse" = /mob/living/simple_mob/vore/horse,
|
||||
"goose" = /mob/living/simple_mob/animal/space/goose,
|
||||
"sheep" = /mob/living/simple_mob/vore/sheep,
|
||||
"space bumblebee" = /mob/living/simple_mob/vore/bee,
|
||||
"space bear" = /mob/living/simple_mob/animal/space/bear,
|
||||
"voracious lizard" = /mob/living/simple_mob/vore/aggressive/dino,
|
||||
"giant frog" = /mob/living/simple_mob/vore/aggressive/frog,
|
||||
"jelly blob" = /mob/living/simple_mob/vore/jelly,
|
||||
"wolf" = /mob/living/simple_mob/vore/wolf,
|
||||
"direwolf" = /mob/living/simple_mob/vore/wolf/direwolf,
|
||||
"great wolf" = /mob/living/simple_mob/vore/greatwolf,
|
||||
"sect queen" = /mob/living/simple_mob/vore/sect_queen,
|
||||
"sect drone" = /mob/living/simple_mob/vore/sect_drone,
|
||||
"panther" = /mob/living/simple_mob/vore/aggressive/panther,
|
||||
"giant snake" = /mob/living/simple_mob/vore/aggressive/giant_snake,
|
||||
"deathclaw" = /mob/living/simple_mob/vore/aggressive/deathclaw,
|
||||
"otie" = /mob/living/simple_mob/vore/otie,
|
||||
"mutated otie" =/mob/living/simple_mob/vore/otie/feral,
|
||||
"red otie" = /mob/living/simple_mob/vore/otie/red,
|
||||
"defanged xenomorph" = /mob/living/simple_mob/vore/xeno_defanged,
|
||||
"catslug" = /mob/living/simple_mob/vore/alienanimals/catslug,
|
||||
"monkey" = /mob/living/carbon/human/monkey,
|
||||
"wolpin" = /mob/living/carbon/human/wolpin,
|
||||
"sparra" = /mob/living/carbon/human/sparram,
|
||||
"saru" = /mob/living/carbon/human/sergallingm,
|
||||
"sobaka" = /mob/living/carbon/human/sharkm,
|
||||
"farwa" = /mob/living/carbon/human/farwa,
|
||||
"neaera" = /mob/living/carbon/human/neaera,
|
||||
"stok" = /mob/living/carbon/human/stok,
|
||||
"weretiger" = /mob/living/simple_mob/vore/weretiger,
|
||||
"dragon" = /mob/living/simple_mob/vore/bigdragon/friendly,
|
||||
"leopardmander" = /mob/living/simple_mob/vore/leopardmander
|
||||
)
|
||||
|
||||
/obj/item/glamour_unstable/attack_self(mob/user)
|
||||
var/mob/living/M = user
|
||||
if(!istype(M))
|
||||
return
|
||||
user.visible_message(span_warning("[user] triggers \the [src]!"), span_danger("You trigger \the [src]!"))
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(5, 1, get_turf(src))
|
||||
s.start()
|
||||
var/effect_choice = rand(1,4)
|
||||
switch(effect_choice)
|
||||
if(1) //teleport
|
||||
blink_mob(M)
|
||||
if(2) //mob_tf, uses polymorph potion code
|
||||
if(!M.allow_spontaneous_tf)
|
||||
M.AdjustWeakened(50)
|
||||
else
|
||||
mob_tf(M)
|
||||
if(3)
|
||||
size_change(M)
|
||||
if(4)
|
||||
M.apply_effect(200, IRRADIATE)
|
||||
|
||||
/obj/item/glamour_unstable/proc/blink_mob(mob/living/L)
|
||||
var/starting_loc = (get_turf(src))
|
||||
var/list/target_loc = list()
|
||||
for(var/turf/simulated/floor/T in range(tele_range, starting_loc)) //Only appear on floors
|
||||
if(!istype(T))
|
||||
continue
|
||||
if(T == starting_loc)
|
||||
continue
|
||||
target_loc |= T
|
||||
|
||||
if(target_loc.len)
|
||||
var/final_loc = pick(target_loc)
|
||||
do_teleport(L, final_loc, asoundin = 'sound/effects/phasein.ogg')
|
||||
|
||||
/obj/item/glamour_unstable/proc/mob_tf(mob/living/target)
|
||||
var/mob/living/M = target
|
||||
if(!istype(M))
|
||||
return
|
||||
if(M.tf_mob_holder)
|
||||
var/mob/living/ourmob = M.tf_mob_holder
|
||||
if(ourmob.ai_holder)
|
||||
var/datum/ai_holder/our_AI = ourmob.ai_holder
|
||||
our_AI.set_stance(STANCE_IDLE)
|
||||
M.tf_mob_holder = null
|
||||
ourmob.ckey = M.ckey
|
||||
var/turf/get_dat_turf = get_turf(target)
|
||||
ourmob.loc = get_dat_turf
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
ourmob.mob_belly_transfer(M)
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
for(var/obj/item/W in M)
|
||||
if(istype(W, /obj/item/implant/backup) || istype(W, /obj/item/nif))
|
||||
continue
|
||||
M.drop_from_inventory(W)
|
||||
|
||||
qdel(target)
|
||||
return
|
||||
else
|
||||
if(M.stat == DEAD) //We can let it undo the TF, because the person will be dead, but otherwise things get weird.
|
||||
return
|
||||
var/mob/living/new_mob = spawn_mob(M)
|
||||
new_mob.faction = M.faction
|
||||
|
||||
new_mob.mob_tf(M)
|
||||
|
||||
|
||||
/obj/item/glamour_unstable/proc/spawn_mob(var/mob/living/target)
|
||||
var/choice = pick(tf_possible_types)
|
||||
tf_type = tf_possible_types[choice]
|
||||
if(!ispath(tf_type))
|
||||
return
|
||||
var/new_mob = new tf_type(get_turf(target))
|
||||
return new_mob
|
||||
|
||||
/obj/item/glamour_unstable/proc/size_change(mob/living/L)
|
||||
var/new_size = (rand(25,200))/100
|
||||
L.resize(new_size, ignore_prefs = FALSE)
|
||||
|
||||
/obj/item/glamour_unstable/attack_hand(mob/user)
|
||||
. = ..()
|
||||
|
||||
var/mob/living/M = user
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(istype(G) && ((G.flags & THICKMATERIAL && prob(70)) || istype(G, /obj/item/clothing/gloves/gauntlets)))
|
||||
return
|
||||
|
||||
if((H.species.name == SPECIES_HANNER) || (H.species.name == SPECIES_LLEILL))
|
||||
return
|
||||
|
||||
attack_self(H)
|
||||
|
||||
@@ -223,12 +223,7 @@
|
||||
ourmob.forceMove(get_dat_turf)
|
||||
ourmob.vore_selected = M.vore_selected
|
||||
M.vore_selected = null
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = ourmob
|
||||
B.forceMove(ourmob)
|
||||
B.owner = ourmob
|
||||
M.vore_organs -= B
|
||||
ourmob.vore_organs += B
|
||||
ourmob.mob_belly_transfer(M)
|
||||
|
||||
ourmob.Life(1)
|
||||
if(ishuman(M))
|
||||
@@ -245,51 +240,9 @@
|
||||
var/mob/living/new_mob = spawn_mob(M)
|
||||
new_mob.faction = M.faction
|
||||
|
||||
if(new_mob && isliving(new_mob))
|
||||
for(var/obj/belly/B as anything in new_mob.vore_organs)
|
||||
new_mob.vore_organs -= B
|
||||
qdel(B)
|
||||
new_mob.vore_organs = list()
|
||||
new_mob.name = M.name
|
||||
new_mob.real_name = M.real_name
|
||||
for(var/lang in M.languages)
|
||||
new_mob.languages |= lang
|
||||
M.copy_vore_prefs_to_mob(new_mob)
|
||||
new_mob.vore_selected = M.vore_selected
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.gender = H.gender
|
||||
N.identifying_gender = H.identifying_gender
|
||||
else
|
||||
new_mob.gender = H.gender
|
||||
else
|
||||
new_mob.gender = M.gender
|
||||
if(ishuman(new_mob))
|
||||
var/mob/living/carbon/human/N = new_mob
|
||||
N.identifying_gender = M.gender
|
||||
new_mob.mob_tf(M)
|
||||
|
||||
for(var/obj/belly/B as anything in M.vore_organs)
|
||||
B.loc = new_mob
|
||||
B.forceMove(new_mob)
|
||||
B.owner = new_mob
|
||||
M.vore_organs -= B
|
||||
new_mob.vore_organs += B
|
||||
|
||||
new_mob.ckey = M.ckey
|
||||
if(M.ai_holder && new_mob.ai_holder)
|
||||
var/datum/ai_holder/old_AI = M.ai_holder
|
||||
old_AI.set_stance(STANCE_SLEEP)
|
||||
var/datum/ai_holder/new_AI = new_mob.ai_holder
|
||||
new_AI.hostile = old_AI.hostile
|
||||
new_AI.retaliate = old_AI.retaliate
|
||||
M.loc = new_mob
|
||||
M.forceMove(new_mob)
|
||||
new_mob.tf_mob_holder = M
|
||||
|
||||
spawn(30 SECONDS)
|
||||
new_mob.revert_mob_tf() //TF them back after 30 seconds, basically takes them out of the fight for a short time.
|
||||
addtimer(CALLBACK(new_mob, TYPE_PROC_REF(/mob/living, revert_mob_tf)), 30 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/item/projectile/beam/mouselaser/ddraig/spawn_mob(var/mob/living/target)
|
||||
var/list/tf_list = list(/mob/living/simple_mob/animal/passive/mouse,
|
||||
|
||||
Reference in New Issue
Block a user