mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Adds loadout capture crystals!
This commit is contained in:
@@ -657,7 +657,9 @@ var/global/datum/controller/occupations/job_master
|
|||||||
var/fail_deadly = FALSE
|
var/fail_deadly = FALSE
|
||||||
var/obj/belly/vore_spawn_gut
|
var/obj/belly/vore_spawn_gut
|
||||||
var/mob/living/prey_to_nomph
|
var/mob/living/prey_to_nomph
|
||||||
var/obj/item/item_to_be
|
var/obj/item/item_to_be //CHOMPEdit - Item TF spawning
|
||||||
|
var/mob/living/item_carrier //CHOMPEdit - Capture crystal spawning
|
||||||
|
var/vorgans = FALSE //CHOMPEdit - capture crystal simplemob spawning
|
||||||
|
|
||||||
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
|
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
|
||||||
|
|
||||||
@@ -810,13 +812,22 @@ var/global/datum/controller/occupations/job_master
|
|||||||
continue
|
continue
|
||||||
carriers += null
|
carriers += null
|
||||||
|
|
||||||
items += I
|
if(istype(I, /obj/item/capture_crystal))
|
||||||
if(I.name == initial(I.name))
|
if(carrier)
|
||||||
|
items += I
|
||||||
|
var/obj/item/capture_crystal/cryst = I
|
||||||
|
if(cryst.spawn_mob_type)
|
||||||
|
item_names += "\a [cryst.spawn_mob_name] inside of [carrier]'s [I.name] ([I.loc.name])"
|
||||||
|
else
|
||||||
|
item_names += "Inside of [carrier]'s [I.name] ([I.loc.name])"
|
||||||
|
else if(I.name == initial(I.name))
|
||||||
|
items += I
|
||||||
if(carrier)
|
if(carrier)
|
||||||
item_names += "[carrier]'s [I.name] ([I.loc.name])"
|
item_names += "[carrier]'s [I.name] ([I.loc.name])"
|
||||||
else
|
else
|
||||||
item_names += "[I.name] ([I.loc.name])"
|
item_names += "[I.name] ([I.loc.name])"
|
||||||
else
|
else
|
||||||
|
items += I
|
||||||
if(carrier)
|
if(carrier)
|
||||||
item_names += "[carrier]'s [I.name] (\a [initial(I.name)] at [I.loc.name])"
|
item_names += "[carrier]'s [I.name] (\a [initial(I.name)] at [I.loc.name])"
|
||||||
else
|
else
|
||||||
@@ -853,6 +864,7 @@ var/global/datum/controller/occupations/job_master
|
|||||||
return
|
return
|
||||||
log_and_message_admins("[key_name(C)] has item spawned onto [key_name(carrier)]")
|
log_and_message_admins("[key_name(C)] has item spawned onto [key_name(carrier)]")
|
||||||
item_to_be = item
|
item_to_be = item
|
||||||
|
item_carrier = carrier
|
||||||
if(backup)
|
if(backup)
|
||||||
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
||||||
else
|
else
|
||||||
@@ -863,6 +875,12 @@ var/global/datum/controller/occupations/job_master
|
|||||||
item_to_be = item
|
item_to_be = item
|
||||||
if(backup)
|
if(backup)
|
||||||
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
|
||||||
|
if(istype(item, /obj/item/capture_crystal))
|
||||||
|
var/obj/item/capture_crystal/cryst = item
|
||||||
|
if(cryst.spawn_mob_type)
|
||||||
|
var/confirm = alert(C, "Do you want to spawn with your slot's vore organs and prefs?", "Confirm", "No", "Yes")
|
||||||
|
if(confirm == "Yes")
|
||||||
|
vorgans = TRUE
|
||||||
else
|
else
|
||||||
to_chat(C, "<span class='warning'>No items were available to accept you.</span>")
|
to_chat(C, "<span class='warning'>No items were available to accept you.</span>")
|
||||||
return
|
return
|
||||||
@@ -879,13 +897,15 @@ var/global/datum/controller/occupations/job_master
|
|||||||
spawnpos = spawntypes[C.prefs.spawnpoint]
|
spawnpos = spawntypes[C.prefs.spawnpoint]
|
||||||
|
|
||||||
//We will return a list key'd by "turf" and "msg"
|
//We will return a list key'd by "turf" and "msg"
|
||||||
. = list("turf","msg", "voreny", "prey", "itemtf") //CHOMPEdit - Item TF spawnpoints
|
. = list("turf","msg", "voreny", "prey", "itemtf", "vorgans", "carrier") //CHOMPEdit - Item TF spawnpoints, spawn as mob
|
||||||
if(vore_spawn_gut)
|
if(vore_spawn_gut)
|
||||||
.["voreny"] = vore_spawn_gut
|
.["voreny"] = vore_spawn_gut
|
||||||
if(prey_to_nomph)
|
if(prey_to_nomph)
|
||||||
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
|
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
|
||||||
//CHOMPEdit Start - Item TF spawnpoints
|
//CHOMPEdit Start - Item TF spawnpoints
|
||||||
if(item_to_be)
|
if(item_to_be)
|
||||||
|
.["carrier"] = item_carrier
|
||||||
|
.["vorgans"] = vorgans
|
||||||
.["itemtf"] = item_to_be
|
.["itemtf"] = item_to_be
|
||||||
//CHOMPEdit End
|
//CHOMPEdit End
|
||||||
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
|
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
|
||||||
|
|||||||
@@ -39,3 +39,27 @@ var/datum/gear_tweak/item_tf_spawn/gear_tweak_item_tf_spawn = new()
|
|||||||
else if(metadata["state"] == "Only Specific Players")
|
else if(metadata["state"] == "Only Specific Players")
|
||||||
I.item_tf_spawnpoint_set()
|
I.item_tf_spawnpoint_set()
|
||||||
I.ckeys_allowed_itemspawn = metadata["valid"]
|
I.ckeys_allowed_itemspawn = metadata["valid"]
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker
|
||||||
|
var/list/simplemob_list
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker/New(var/list/valid_simplemobs)
|
||||||
|
src.simplemob_list = valid_simplemobs
|
||||||
|
..()
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker/get_contents(var/metadata)
|
||||||
|
return "Type: [metadata]"
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker/get_default()
|
||||||
|
return simplemob_list[1]
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker/get_metadata(var/user, var/metadata)
|
||||||
|
return tgui_input_list(user, "Choose a type.", "Character Preference", simplemob_list, metadata)
|
||||||
|
|
||||||
|
/datum/gear_tweak/simplemob_picker/tweak_item(var/obj/item/capture_crystal/I, var/metadata)
|
||||||
|
if(!(metadata in simplemob_list))
|
||||||
|
return
|
||||||
|
if(!istype(I))
|
||||||
|
return
|
||||||
|
I.spawn_mob_type = simplemob_list[metadata]
|
||||||
|
I.spawn_mob_name = metadata
|
||||||
|
|||||||
@@ -15,4 +15,41 @@
|
|||||||
for(var/implant in typesof(/obj/item/weapon/implant/reagent_generator/egg))
|
for(var/implant in typesof(/obj/item/weapon/implant/reagent_generator/egg))
|
||||||
var/obj/item/weapon/implant/reagent_generator/egg/implant_type = implant
|
var/obj/item/weapon/implant/reagent_generator/egg/implant_type = implant
|
||||||
implants[initial(implant_type.name)] = implant_type
|
implants[initial(implant_type.name)] = implant_type
|
||||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(implants))
|
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(implants))
|
||||||
|
|
||||||
|
/datum/gear/utility/capture_crystal_crew
|
||||||
|
display_name = "Capture Crystal (crew)"
|
||||||
|
description = "A capture crystal already containing someone! (Item TF will need to be enabled for someone to join into this crystal)"
|
||||||
|
path = /obj/item/capture_crystal/loadout
|
||||||
|
cost = 2
|
||||||
|
|
||||||
|
/datum/gear/utility/capture_crystal_simplemob
|
||||||
|
display_name = "Capture Crystal (pet)"
|
||||||
|
description = "A capture crystal already containing a pet! (Item TF will need to be enabled for someone to join into this crystal)"
|
||||||
|
path = /obj/item/capture_crystal/loadout
|
||||||
|
cost = 2
|
||||||
|
|
||||||
|
/datum/gear/utility/capture_crystal_simplemob/New()
|
||||||
|
..()
|
||||||
|
var/list/mob_types = list(
|
||||||
|
"mouse" = /mob/living/simple_mob/animal/passive/mouse,
|
||||||
|
"rat" = /mob/living/simple_mob/animal/passive/mouse/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
|
||||||
|
)
|
||||||
|
gear_tweaks += new/datum/gear_tweak/simplemob_picker(mob_types)
|
||||||
|
|||||||
@@ -440,6 +440,32 @@
|
|||||||
spawning = 1
|
spawning = 1
|
||||||
close_spawn_windows()
|
close_spawn_windows()
|
||||||
|
|
||||||
|
//CHOMPEdit start - join as mob in crystal...
|
||||||
|
var/obj/item/itemtf = join_props["itemtf"]
|
||||||
|
if(itemtf && istype(itemtf, /obj/item/capture_crystal))
|
||||||
|
var/obj/item/capture_crystal/cryst = itemtf
|
||||||
|
if(cryst.spawn_mob_type)
|
||||||
|
// We want to be a spawned mob instead of a person aaaaa
|
||||||
|
var/mob/living/carrier = join_props["carrier"]
|
||||||
|
var/vorgans = join_props["vorgans"]
|
||||||
|
cryst.bound_mob = new cryst.spawn_mob_type(cryst)
|
||||||
|
cryst.spawn_mob_type = null
|
||||||
|
cryst.bound_mob.ai_holder_type = /datum/ai_holder/simple_mob/inert
|
||||||
|
cryst.bound_mob.key = src.key
|
||||||
|
log_and_message_admins("[key_name_admin(src)] joined [cryst.bound_mob] inside a capture crystal [ADMIN_FLW(cryst.bound_mob)]")
|
||||||
|
if(vorgans)
|
||||||
|
cryst.bound_mob.copy_from_prefs_vr()
|
||||||
|
if(istype(carrier))
|
||||||
|
cryst.capture(cryst.bound_mob, carrier)
|
||||||
|
else
|
||||||
|
//Something went wrong, but lets try to do as much as we can.
|
||||||
|
cryst.bound_mob.capture_caught = TRUE
|
||||||
|
cryst.persist_storable = FALSE
|
||||||
|
cryst.update_icon()
|
||||||
|
qdel(src)
|
||||||
|
return
|
||||||
|
//CHOMPEdit end
|
||||||
|
|
||||||
job_master.AssignRole(src, rank, 1)
|
job_master.AssignRole(src, rank, 1)
|
||||||
|
|
||||||
var/mob/living/character = create_character(T) //creates the human and transfers vars and mind
|
var/mob/living/character = create_character(T) //creates the human and transfers vars and mind
|
||||||
@@ -503,8 +529,14 @@
|
|||||||
var/gut = join_props["voreny"]
|
var/gut = join_props["voreny"]
|
||||||
var/mob/living/prey = join_props["prey"]
|
var/mob/living/prey = join_props["prey"]
|
||||||
//CHOMPEdit Start - Item TF
|
//CHOMPEdit Start - Item TF
|
||||||
var/obj/item/itemtf = join_props["itemtf"]
|
if(itemtf && istype(itemtf, /obj/item/capture_crystal))
|
||||||
if(itemtf)
|
//We want to be in the crystal, not actually possessing the crystal.
|
||||||
|
var/obj/item/capture_crystal/cryst = itemtf
|
||||||
|
var/mob/living/carrier = join_props["carrier"]
|
||||||
|
cryst.capture(character, carrier)
|
||||||
|
character.forceMove(cryst)
|
||||||
|
cryst.update_icon()
|
||||||
|
else if(itemtf)
|
||||||
itemtf.inhabit_item(character, itemtf.name, character)
|
itemtf.inhabit_item(character, itemtf.name, character)
|
||||||
var/mob/living/possessed_voice = itemtf.possessed_voice
|
var/mob/living/possessed_voice = itemtf.possessed_voice
|
||||||
itemtf.trash_eatable = character.devourable
|
itemtf.trash_eatable = character.devourable
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
/obj/item/capture_crystal
|
||||||
|
var/spawn_mob_name = "A mob"
|
||||||
|
|
||||||
|
/obj/item/capture_crystal/loadout
|
||||||
|
active = TRUE
|
||||||
|
|
||||||
|
/obj/item/capture_crystal/loadout/attack(mob/living/M, mob/living/user)
|
||||||
|
if(!bound_mob && M != user)
|
||||||
|
to_chat(user, "<span class='notice'>\The [src] emits an unpleasant tone...</span>")
|
||||||
|
playsound(src, 'sound/effects/capture-crystal-negative.ogg', 75, 1, -1)
|
||||||
|
return
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/item/capture_crystal/loadout/attack_self(mob/living/user)
|
||||||
|
if(!bound_mob)
|
||||||
|
to_chat(user, "<span class='notice'>\The [src] emits an unpleasant tone... It is not ready yet.</span>")
|
||||||
|
playsound(src, 'sound/effects/capture-crystal-problem.ogg', 75, 1, -1)
|
||||||
|
return
|
||||||
|
. = ..()
|
||||||
|
|
||||||
|
/obj/item/capture_crystal/loadout/capture_chance()
|
||||||
|
return 0
|
||||||
@@ -4533,7 +4533,6 @@
|
|||||||
#include "modular_chomp\code\datums\components\gargoyle.dm"
|
#include "modular_chomp\code\datums\components\gargoyle.dm"
|
||||||
#include "modular_chomp\code\datums\outfits\jobs\noncrew.dm"
|
#include "modular_chomp\code\datums\outfits\jobs\noncrew.dm"
|
||||||
#include "modular_chomp\code\datums\supplypacks\medical.dm"
|
#include "modular_chomp\code\datums\supplypacks\medical.dm"
|
||||||
#include "modular_chomp\code\datums\underwear\socks.dm"
|
|
||||||
#include "modular_chomp\code\game\dna\dna2.dm"
|
#include "modular_chomp\code\game\dna\dna2.dm"
|
||||||
#include "modular_chomp\code\game\jobs\job\department.dm"
|
#include "modular_chomp\code\game\jobs\job\department.dm"
|
||||||
#include "modular_chomp\code\game\jobs\job\noncrew.dm"
|
#include "modular_chomp\code\game\jobs\job\noncrew.dm"
|
||||||
@@ -4542,6 +4541,7 @@
|
|||||||
#include "modular_chomp\code\game\machinery\autolathe_armory.dm"
|
#include "modular_chomp\code\game\machinery\autolathe_armory.dm"
|
||||||
#include "modular_chomp\code\game\objects\items.dm"
|
#include "modular_chomp\code\game\objects\items.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm"
|
#include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm"
|
||||||
#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"
|
#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"
|
||||||
#include "modular_chomp\code\game\objects\structures\gargoyle.dm"
|
#include "modular_chomp\code\game\objects\structures\gargoyle.dm"
|
||||||
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
|
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user