mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Event stuff, but also Squeak component (#7285)
This commit is contained in:
@@ -22,4 +22,13 @@
|
|||||||
#define RCD_FRAME "Frame" // Build a Machine or Computer frame
|
#define RCD_FRAME "Frame" // Build a Machine or Computer frame
|
||||||
#define RCD_WALLFRAME "WallFrame" // Build a selection of wall frames
|
#define RCD_WALLFRAME "WallFrame" // Build a selection of wall frames
|
||||||
#define RCD_CONVEYOR "Conveyor" // Build direction conveyors
|
#define RCD_CONVEYOR "Conveyor" // Build direction conveyors
|
||||||
#define RCD_TURRET "Turret" // Build turrets when emagged
|
#define RCD_TURRET "Turret" // Build turrets when emagged
|
||||||
|
|
||||||
|
|
||||||
|
#define VANTAG_VORE_YE "vantag_vore_ye"
|
||||||
|
#define VANTAG_VORE_YD "vantag_vore_yd"
|
||||||
|
#define VANTAG_VORE_YA "vantag_vore_ya"
|
||||||
|
#define VANTAG_VORE_D "vantag_vore_d"
|
||||||
|
#define VANTAG_VORE_DE "vantag_vore_de"
|
||||||
|
#define VANTAG_VORE_DD "vantag_vore_dd"
|
||||||
|
#define VANTAG_VORE_DA "vantag_vore_da"
|
||||||
@@ -881,3 +881,21 @@ var/global/list/json_cache = list()
|
|||||||
else
|
else
|
||||||
used_key_list[input_key] = 1
|
used_key_list[input_key] = 1
|
||||||
return input_key
|
return input_key
|
||||||
|
|
||||||
|
//CHOMPAdd start
|
||||||
|
/proc/pick_weight(list/list_to_pick)
|
||||||
|
var/total = 0
|
||||||
|
var/item
|
||||||
|
for(item in list_to_pick)
|
||||||
|
if(!list_to_pick[item])
|
||||||
|
list_to_pick[item] = 0
|
||||||
|
total += list_to_pick[item]
|
||||||
|
|
||||||
|
total = rand(1, total)
|
||||||
|
for(item in list_to_pick)
|
||||||
|
total -= list_to_pick[item]
|
||||||
|
if(total <= 0 && list_to_pick[item])
|
||||||
|
return item
|
||||||
|
|
||||||
|
return null
|
||||||
|
//CHOMPAdd end
|
||||||
@@ -34,11 +34,20 @@ var/global/list/player_sizes_list = list(
|
|||||||
"Tiny" = RESIZE_TINY)
|
"Tiny" = RESIZE_TINY)
|
||||||
|
|
||||||
//stores vantag settings indexed by name
|
//stores vantag settings indexed by name
|
||||||
|
//CHOMPEdit start - expanding the vore hud list
|
||||||
var/global/list/vantag_choices_list = list(
|
var/global/list/vantag_choices_list = list(
|
||||||
VANTAG_NONE = "No Involvement",
|
VANTAG_NONE = "No Involvement",
|
||||||
VANTAG_VORE = "Be Prey",
|
VANTAG_VORE = "Be Prey (Any)",
|
||||||
|
VANTAG_VORE_YE = "Be Prey (Endo)",
|
||||||
|
VANTAG_VORE_YD = "Be Prey (Digestion)",
|
||||||
|
VANTAG_VORE_YA = "Be Prey (Absorption)",
|
||||||
|
VANTAG_VORE_D = "Be Pred (Any)",
|
||||||
|
VANTAG_VORE_DE = "Be Pred (Endo)",
|
||||||
|
VANTAG_VORE_DD = "Be Pred (Digestion)",
|
||||||
|
VANTAG_VORE_DA = "Be Pred (Absorption)",
|
||||||
VANTAG_KIDNAP = "Be Kidnapped",
|
VANTAG_KIDNAP = "Be Kidnapped",
|
||||||
VANTAG_KILL = "Be Killed")
|
VANTAG_KILL = "Be Killed")
|
||||||
|
//CHOMPEdit end
|
||||||
|
|
||||||
//Blacklist to exclude items from object ingestion. Digestion blacklist located in digest_act_vr.dm
|
//Blacklist to exclude items from object ingestion. Digestion blacklist located in digest_act_vr.dm
|
||||||
var/global/list/item_vore_blacklist = list(
|
var/global/list/item_vore_blacklist = list(
|
||||||
|
|||||||
@@ -208,6 +208,13 @@
|
|||||||
|
|
||||||
signal_enabled = TRUE
|
signal_enabled = TRUE
|
||||||
|
|
||||||
|
//CHOMPAdd start
|
||||||
|
/// Registers multiple signals to the same proc.
|
||||||
|
/datum/proc/RegisterSignals(datum/target, list/signal_types, proctype, override = FALSE)
|
||||||
|
for (var/signal_type in signal_types)
|
||||||
|
RegisterSignal(target, signal_type, proctype, override)
|
||||||
|
//CHOMPAdd end
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop listening to a given signal from target
|
* Stop listening to a given signal from target
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -238,7 +238,7 @@
|
|||||||
for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update.
|
for (var/datum/light_source/light as anything in light_sources) // Cycle through the light sources on this atom and tell them to update.
|
||||||
light.source_atom.update_light()
|
light.source_atom.update_light()
|
||||||
|
|
||||||
SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction)
|
//SEND_SIGNAL(src, COMSIG_MOVABLE_MOVED, old_loc, direction) CHOMPEdit - Why was this comsig here twice?
|
||||||
|
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
/obj/item/device/radio/headset/casino
|
|
||||||
name = "radio headset"
|
|
||||||
desc = "An updated, modular intercom that fits over the head with extra comfortable for the hardworking casino luxury crew. Has encryption key for scamm-... Kind casino staff channel."
|
|
||||||
icon = 'icons/obj/casino_ch.dmi'
|
|
||||||
icon_state = "headset"
|
|
||||||
origin_tech = list(TECH_ILLEGAL = 2)
|
|
||||||
ks1type = /obj/item/device/encryptionkey/raider
|
|
||||||
@@ -217,12 +217,8 @@
|
|||||||
/obj/item/weapon/melee/shock_maul/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
/obj/item/weapon/melee/shock_maul/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
|
||||||
if(!proximity) return
|
if(!proximity) return
|
||||||
..()
|
..()
|
||||||
|
//CHOMPEdit start - maul changes
|
||||||
if(A && wielded && status)
|
if(A && wielded && status)
|
||||||
deductcharge()
|
|
||||||
status = 0
|
|
||||||
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
|
|
||||||
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
|
|
||||||
update_held_icon()
|
|
||||||
if(istype(A,/obj/structure/window))
|
if(istype(A,/obj/structure/window))
|
||||||
var/obj/structure/window/W = A
|
var/obj/structure/window/W = A
|
||||||
visible_message("<span class='warning'>\The [W] crumples under the force of the impact!</span>")
|
visible_message("<span class='warning'>\The [W] crumples under the force of the impact!</span>")
|
||||||
@@ -232,7 +228,22 @@
|
|||||||
B.dismantle()
|
B.dismantle()
|
||||||
else if(istype(A,/obj/structure/grille))
|
else if(istype(A,/obj/structure/grille))
|
||||||
qdel(A)
|
qdel(A)
|
||||||
|
else if(istype(A, /turf/simulated/wall))
|
||||||
|
var/turf/simulated/wall/W = A
|
||||||
|
if(W.density)
|
||||||
|
W.take_damage(force*3) //One hit for regular walls, 3 hits for r_wall
|
||||||
|
else if(istype(A, /obj/structure/girder))
|
||||||
|
var/obj/structure/girder/G = A
|
||||||
|
G.dismantle()
|
||||||
|
else
|
||||||
|
return ..() //Don't do anything if we don't resolve anything on our target
|
||||||
|
deductcharge()
|
||||||
|
status = 0
|
||||||
|
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
|
||||||
|
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
|
||||||
|
update_held_icon()
|
||||||
powercheck(hitcost)
|
powercheck(hitcost)
|
||||||
|
//CHOMPEdit end
|
||||||
|
|
||||||
/obj/item/weapon/melee/shock_maul/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
/obj/item/weapon/melee/shock_maul/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Involves cooperating with other ai_holders.
|
// Involves cooperating with other ai_holders.
|
||||||
/datum/ai_holder
|
/datum/ai_holder
|
||||||
var/cooperative = FALSE // If true, asks allies to help when fighting something.
|
var/cooperative = FALSE // If true, asks allies to help when fighting something.
|
||||||
var/call_distance = 14 // How far away calls for help will go for.
|
var/call_distance = 5 //CHOMPEdit - 14 is way too egreigous // How far away calls for help will go for.
|
||||||
var/last_helpask_time = 0 // world.time when a mob asked for help.
|
var/last_helpask_time = 0 // world.time when a mob asked for help.
|
||||||
var/list/faction_friends = list() // List of all mobs inside the faction with ai_holders that have cooperate on, to call for help without using range().
|
var/list/faction_friends = list() // List of all mobs inside the faction with ai_holders that have cooperate on, to call for help without using range().
|
||||||
// Note that this is only used for sending calls out. Receiving calls doesn't care about this list, only if the mob is in the faction.
|
// Note that this is only used for sending calls out. Receiving calls doesn't care about this list, only if the mob is in the faction.
|
||||||
|
|||||||
@@ -1,16 +1,23 @@
|
|||||||
/obj/effect/step_trigger/message
|
/obj/effect/step_trigger/message
|
||||||
var/message //the message to give to the mob
|
var/message //the message to give to the mob
|
||||||
var/once = 1
|
var/once = 1
|
||||||
|
var/list/mobs = list() //CHOMPEdit - mobs we've sent our message to
|
||||||
|
|
||||||
/obj/effect/step_trigger/message/Trigger(mob/M as mob)
|
/obj/effect/step_trigger/message/Trigger(mob/M as mob)
|
||||||
|
//CHOMPEdit start - tweaked message trigger to be more sane
|
||||||
if(M.client)
|
if(M.client)
|
||||||
to_chat(M, "<span class='info'>[message]</span>")
|
|
||||||
if(once)
|
if(once)
|
||||||
qdel(src)
|
if(M in mobs)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
mobs += M
|
||||||
|
to_chat(M, "[message]")
|
||||||
|
//CHOMPEdit end
|
||||||
|
|
||||||
/obj/effect/step_trigger/teleport_fancy
|
/obj/effect/step_trigger/teleport_fancy
|
||||||
var/locationx
|
var/locationx
|
||||||
var/locationy
|
var/locationy
|
||||||
|
var/locationz //CHOMPEdit - Why wasn't there a z for this
|
||||||
var/uses = 1 //0 for infinite uses
|
var/uses = 1 //0 for infinite uses
|
||||||
var/entersparks = 0
|
var/entersparks = 0
|
||||||
var/exitsparks = 0
|
var/exitsparks = 0
|
||||||
@@ -18,8 +25,10 @@
|
|||||||
var/exitsmoke = 0
|
var/exitsmoke = 0
|
||||||
|
|
||||||
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
|
/obj/effect/step_trigger/teleport_fancy/Trigger(mob/M as mob)
|
||||||
var/dest = locate(locationx, locationy, z)
|
if(!locationz)
|
||||||
M.Move(dest)
|
locationz = src.z //CHOMPEdit - Safety net to not break existing teleport triggers
|
||||||
|
var/dest = locate(locationx, locationy, locationz) //CHOMPEdit - added locationz
|
||||||
|
M.forceMove(dest) //CHOMPEdit - Teleports should be forceMove, not Move
|
||||||
|
|
||||||
if(entersparks)
|
if(entersparks)
|
||||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||||
|
|||||||
@@ -92,9 +92,10 @@
|
|||||||
icon_state = "clown"
|
icon_state = "clown"
|
||||||
slowdown = SHOES_SLOWDOWN+0.5
|
slowdown = SHOES_SLOWDOWN+0.5
|
||||||
force = 0
|
force = 0
|
||||||
var/footstep = 1 //used for squeeks whilst walking
|
//CHOMPRemove - removed built in squeak sounds
|
||||||
species_restricted = null
|
species_restricted = null
|
||||||
|
|
||||||
|
/* CHOMPEdit - Replaced with squeak component
|
||||||
/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running)
|
/obj/item/clothing/shoes/clown_shoes/handle_movement(var/turf/walking, var/running)
|
||||||
if(running)
|
if(running)
|
||||||
if(footstep >= 2)
|
if(footstep >= 2)
|
||||||
@@ -104,6 +105,7 @@
|
|||||||
footstep++
|
footstep++
|
||||||
else
|
else
|
||||||
playsound(src, "clownstep", 20, 1)
|
playsound(src, "clownstep", 20, 1)
|
||||||
|
*/
|
||||||
|
|
||||||
/obj/item/clothing/shoes/cult
|
/obj/item/clothing/shoes/cult
|
||||||
name = "boots"
|
name = "boots"
|
||||||
@@ -249,40 +251,6 @@
|
|||||||
icon_state = "sneakersred"
|
icon_state = "sneakersred"
|
||||||
item_state = "sneakersred"
|
item_state = "sneakersred"
|
||||||
|
|
||||||
// CHOMPedit start - Mech boots with hijacked clown shoes code.
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/mech_shoes
|
|
||||||
name = "mech shoes"
|
|
||||||
desc = "Thud thud."
|
|
||||||
icon_state = "nothing"
|
|
||||||
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0) // Same as loadout jackboots.
|
|
||||||
siemens_coefficient = 0.7 // Same as loadout jackboots.
|
|
||||||
force = 2
|
|
||||||
var/footstep = 1 // Used for thuds while walking.
|
|
||||||
species_restricted = null
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/mech_shoes/handle_movement(var/turf/walking, var/running)
|
|
||||||
if(running)
|
|
||||||
if(footstep >= 2)
|
|
||||||
footstep = 0
|
|
||||||
playsound(src, "mechstep", 15, 1) // Hopefully this won't be too annoying.
|
|
||||||
else
|
|
||||||
footstep++
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/mech_shoes/light
|
|
||||||
name = "light mech shoes"
|
|
||||||
desc = "Thud thud, but quieter."
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/mech_shoes/light/handle_movement(var/turf/walking, var/running)
|
|
||||||
if(running)
|
|
||||||
if(footstep >= 2)
|
|
||||||
footstep = 0
|
|
||||||
playsound(src, "powerloaderstep", 15, 1) // Hopefully this won't be too annoying.
|
|
||||||
else
|
|
||||||
footstep++
|
|
||||||
|
|
||||||
// CHOMPedit end.
|
|
||||||
|
|
||||||
/obj/item/clothing/shoes/ballet
|
/obj/item/clothing/shoes/ballet
|
||||||
name = "pointe shoes"
|
name = "pointe shoes"
|
||||||
desc = "These shoes feature long lace straps and flattened off toes. Great for the most elegant of dances!"
|
desc = "These shoes feature long lace straps and flattened off toes. Great for the most elegant of dances!"
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
if (istype(W, /obj/item/weapon/melee/shock_maul))
|
if (istype(W, /obj/item/weapon/melee/shock_maul))
|
||||||
var/obj/item/weapon/melee/shock_maul/S = W
|
var/obj/item/weapon/melee/shock_maul/S = W
|
||||||
if(!S.wielded || !S.status)
|
if(!S.wielded || !S.status)
|
||||||
to_chat(user, "<span class='warning'>\The [src] must be wielded in two hands and powered on to be used for mining!</span>")
|
to_chat(user, "<span class='warning'>\The [W] must be wielded in two hands and powered on to be used to mine this!</span>") //CHOMPEdit - fix improper name
|
||||||
return
|
return
|
||||||
to_chat(user, "<span class='notice'>You pulverize \the [src]!</span>")
|
to_chat(user, "<span class='notice'>You pulverize \the [src]!</span>")
|
||||||
for(var/i=0;i<(rand(mindrop,upperdrop));i++)
|
for(var/i=0;i<(rand(mindrop,upperdrop));i++)
|
||||||
|
|||||||
@@ -455,8 +455,8 @@ var/list/mining_overlay_cache = list()
|
|||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/weapon/melee/shock_maul/S = W
|
var/obj/item/weapon/melee/shock_maul/S = W
|
||||||
if(!S.wielded || !S.status) //if we're not wielded OR not powered up, do nothing
|
if(!S.wielded) //CHOMPEdit - slight maul buff
|
||||||
to_chat(user, "<span class='warning'>\The [src] must be wielded in two hands and powered on to be used for mining!</span>")
|
to_chat(user, "<span class='warning'>\The [W] must be wielded in two hands to be used for mining!</span>") //CHOMPEdit - fixed improper name
|
||||||
return
|
return
|
||||||
|
|
||||||
var/newDepth = excavation_level + S.excavation_amount // Used commonly below
|
var/newDepth = excavation_level + S.excavation_amount // Used commonly below
|
||||||
@@ -470,6 +470,9 @@ var/list/mining_overlay_cache = list()
|
|||||||
wreckfinds(S.destroy_artefacts)
|
wreckfinds(S.destroy_artefacts)
|
||||||
|
|
||||||
to_chat(user, "<span class='notice'>You smash through \the [src][fail_message].</span>")
|
to_chat(user, "<span class='notice'>You smash through \the [src][fail_message].</span>")
|
||||||
|
//CHOMPEdit start - Moved the maul sounds up here and made it not cost energy to mine
|
||||||
|
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
|
||||||
|
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
|
||||||
|
|
||||||
if(newDepth >= 200) // This means the rock is mined out fully
|
if(newDepth >= 200) // This means the rock is mined out fully
|
||||||
if(S.destroy_artefacts)
|
if(S.destroy_artefacts)
|
||||||
@@ -488,12 +491,7 @@ var/list/mining_overlay_cache = list()
|
|||||||
var/obj/item/weapon/ore/O = new(src)
|
var/obj/item/weapon/ore/O = new(src)
|
||||||
geologic_data.UpdateNearbyArtifactInfo(src)
|
geologic_data.UpdateNearbyArtifactInfo(src)
|
||||||
O.geologic_data = geologic_data
|
O.geologic_data = geologic_data
|
||||||
|
//CHOMPEdit end
|
||||||
user.visible_message("<span class='warning'>\The [src] discharges with a thunderous, hair-raising crackle!</span>")
|
|
||||||
playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
|
|
||||||
S.deductcharge()
|
|
||||||
S.status = 0
|
|
||||||
S.update_held_icon()
|
|
||||||
|
|
||||||
if (istype(W, /obj/item/weapon/pickaxe))
|
if (istype(W, /obj/item/weapon/pickaxe))
|
||||||
if(!istype(user.loc, /turf))
|
if(!istype(user.loc, /turf))
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ emp_act
|
|||||||
return null
|
return null
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/atom/damage_source = null, var/mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||||
for(var/obj/item/shield in list(l_hand, r_hand, wear_suit))
|
for(var/obj/item/shield in list(l_hand, r_hand, wear_suit, l_ear, r_ear)) //CHOMPEdit - included ears for the headset/event item
|
||||||
if(!shield) continue
|
if(!shield) continue
|
||||||
. = shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text)
|
. = shield.handle_shield(src, damage, damage_source, attacker, def_zone, attack_text)
|
||||||
if(.) return
|
if(.) return
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
var/static/icon/ingame_hud_vr = icon('icons/mob/hud_vr.dmi')
|
var/static/icon/ingame_hud_vr = icon('modular_chomp/icons/mob/hud_vore.dmi') //CHOMPEdit - expanded vore huds
|
||||||
var/static/icon/ingame_hud_med_vr = icon('icons/mob/hud_med_vr.dmi')
|
var/static/icon/ingame_hud_med_vr = icon('icons/mob/hud_med_vr.dmi')
|
||||||
|
|
||||||
/mob/living/carbon/human/make_hud_overlays()
|
/mob/living/carbon/human/make_hud_overlays()
|
||||||
|
|||||||
@@ -256,17 +256,12 @@
|
|||||||
|
|
||||||
// Handle footstep sounds
|
// Handle footstep sounds
|
||||||
/mob/living/carbon/human/handle_footstep(var/turf/T)
|
/mob/living/carbon/human/handle_footstep(var/turf/T)
|
||||||
if(!istype(T))
|
if(!istype(T) || is_incorporeal() || !config.footstep_volume || !T.footstep_sounds || !T.footstep_sounds.len)
|
||||||
return
|
return //CHOMPEdit - Condensed some return checks
|
||||||
if(is_incorporeal())
|
|
||||||
return
|
|
||||||
if(!config.footstep_volume || !T.footstep_sounds || !T.footstep_sounds.len)
|
|
||||||
return
|
|
||||||
// Future Upgrades - Multi species support
|
// Future Upgrades - Multi species support
|
||||||
var/list/footstep_sounds = T.footstep_sounds["human"]
|
var/list/footstep_sounds = T.footstep_sounds["human"]
|
||||||
if(!footstep_sounds)
|
if(!footstep_sounds)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/S = pick(footstep_sounds)
|
var/S = pick(footstep_sounds)
|
||||||
GLOB.step_taken_shift_roundstat++
|
GLOB.step_taken_shift_roundstat++
|
||||||
if(!S) return
|
if(!S) return
|
||||||
@@ -274,11 +269,13 @@
|
|||||||
// Play every 20 steps while walking, for the sneak
|
// Play every 20 steps while walking, for the sneak
|
||||||
if(m_intent == "walk" && step_count++ % 20 != 0)
|
if(m_intent == "walk" && step_count++ % 20 != 0)
|
||||||
check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
|
check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
|
||||||
return
|
|
||||||
|
|
||||||
// Play every other step while running
|
// Play every other step while running
|
||||||
if(m_intent == "run" && step_count++ % 2 != 0)
|
if(m_intent == "run" && step_count++ % 2 != 0)
|
||||||
check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
|
check_vorefootstep(m_intent, T) //CHOMPstation edit: sloshing reagent belly walk system
|
||||||
|
if(shoes && loc == T && has_gravity(loc) && !flying)
|
||||||
|
if(SEND_SIGNAL(shoes, COMSIG_SHOES_STEP_ACTION, m_intent)) //CHOMPEdit - Shoe step comsig
|
||||||
|
return
|
||||||
|
if(step_count % 2 == 0) //CHOMPAdd, since I removed the returns up above, need this to track each odd step.
|
||||||
return
|
return
|
||||||
|
|
||||||
var/volume = config.footstep_volume
|
var/volume = config.footstep_volume
|
||||||
|
|||||||
180
modular_chomp/code/datums/components/squeak.dm
Normal file
180
modular_chomp/code/datums/components/squeak.dm
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
//You know, with some intelligent coding.. you could add onto this code to handle the turf based footstep sounds, and be away with those turf lists all together
|
||||||
|
//Partial squeak port from tg. Commented out stuff we don't have.
|
||||||
|
/datum/component/squeak
|
||||||
|
var/static/list/default_squeak_sounds = list('sound/items/bikehorn.ogg'=1, 'sound/voice/quack.ogg'=1)
|
||||||
|
var/list/override_squeak_sounds
|
||||||
|
var/mob/holder
|
||||||
|
|
||||||
|
var/squeak_chance = 100
|
||||||
|
var/volume = 30
|
||||||
|
|
||||||
|
// This is so shoes don't squeak every step
|
||||||
|
var/steps = 0
|
||||||
|
var/step_delay = 1
|
||||||
|
|
||||||
|
// This is to stop squeak spam from inhand usage
|
||||||
|
var/last_use = 0
|
||||||
|
var/use_delay = 20
|
||||||
|
|
||||||
|
///extra-range for this component's sound
|
||||||
|
var/sound_extra_range = -1
|
||||||
|
/*
|
||||||
|
///when sounds start falling off for the squeak
|
||||||
|
var/sound_falloff_distance = 1
|
||||||
|
///sound exponent for squeak. Defaults to 10 as squeaking is loud and annoying enough.
|
||||||
|
var/sound_falloff_exponent = 10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Disposals stuff we don't have
|
||||||
|
///what we set connect_loc to if parent is an item
|
||||||
|
var/static/list/item_connections = list(
|
||||||
|
COMSIG_ATOM_ENTERED = PROC_REF(play_squeak_crossed),
|
||||||
|
)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override, extrarange)
|
||||||
|
if(!isatom(parent))
|
||||||
|
return COMPONENT_INCOMPATIBLE
|
||||||
|
RegisterSignals(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK), PROC_REF(play_squeak))
|
||||||
|
if(ismovable(parent))
|
||||||
|
RegisterSignals(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT, COMSIG_PROJECTILE_BEFORE_FIRE), PROC_REF(play_squeak))
|
||||||
|
|
||||||
|
//Disposals stuff we don't have
|
||||||
|
//AddComponent(/datum/component/connect_loc_behalf, parent, item_connections)
|
||||||
|
//RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposing_react))
|
||||||
|
if(isitem(parent))
|
||||||
|
//RegisterSignals(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_ATOM, COMSIG_ITEM_HIT_REACT), PROC_REF(play_squeak))
|
||||||
|
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SELF, PROC_REF(use_squeak))
|
||||||
|
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equip))
|
||||||
|
RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(on_drop))
|
||||||
|
if(istype(parent, /obj/item/clothing/shoes))
|
||||||
|
RegisterSignal(parent, COMSIG_SHOES_STEP_ACTION, PROC_REF(step_squeak))
|
||||||
|
else if(isstructure(parent))
|
||||||
|
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(use_squeak))
|
||||||
|
else if(ismob(parent) || ismecha(parent))
|
||||||
|
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(step_squeak))
|
||||||
|
/*
|
||||||
|
if(istype(parent, /obj/item/organ/internal/liver))
|
||||||
|
// Liver squeaking is depending on them functioning like a clown's liver
|
||||||
|
RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_COMEDY_METABOLISM), PROC_REF(on_comedy_metabolism_removal))
|
||||||
|
*/
|
||||||
|
|
||||||
|
override_squeak_sounds = custom_sounds
|
||||||
|
if(chance_override)
|
||||||
|
squeak_chance = chance_override
|
||||||
|
if(volume_override)
|
||||||
|
volume = volume_override
|
||||||
|
if(isnum(step_delay_override))
|
||||||
|
step_delay = step_delay_override
|
||||||
|
if(isnum(use_delay_override))
|
||||||
|
use_delay = use_delay_override
|
||||||
|
if(isnum(extrarange))
|
||||||
|
sound_extra_range = extrarange
|
||||||
|
/*
|
||||||
|
if(isnum(falloff_exponent))
|
||||||
|
sound_falloff_exponent = falloff_exponent
|
||||||
|
if(isnum(fallof_distance))
|
||||||
|
sound_falloff_distance = fallof_distance
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
/datum/component/squeak/UnregisterFromParent()
|
||||||
|
. = ..()
|
||||||
|
qdel(GetComponent(/datum/component/connect_loc_behalf))
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/play_squeak(var/volume_mod = 1)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
if(prob(squeak_chance))
|
||||||
|
if(!override_squeak_sounds)
|
||||||
|
playsound(parent, pick_weight(default_squeak_sounds), volume * volume_mod, TRUE, sound_extra_range)
|
||||||
|
else
|
||||||
|
playsound(parent, pick_weight(override_squeak_sounds), volume * volume_mod, TRUE, sound_extra_range)
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/step_squeak(obj/item/clothing/shoes/source, var/running)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
/*
|
||||||
|
var/mob/living/carbon/human/owner = source.loc
|
||||||
|
if(CHECK_MOVE_LOOP_FLAGS(owner, MOVEMENT_LOOP_OUTSIDE_CONTROL))
|
||||||
|
return
|
||||||
|
*/
|
||||||
|
if(running == "walk")
|
||||||
|
running = 0.25
|
||||||
|
else
|
||||||
|
running = 1
|
||||||
|
if(steps > step_delay)
|
||||||
|
play_squeak(running)
|
||||||
|
steps = 0
|
||||||
|
else
|
||||||
|
steps++
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/play_squeak_crossed(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
/* We don't have abstract items yet
|
||||||
|
if(isitem(arrived))
|
||||||
|
var/obj/item/I = arrived
|
||||||
|
if(I.item_flags & ABSTRACT)
|
||||||
|
return
|
||||||
|
//Annoyingly, our flight code doesn't set the movement_type, nor do we have a define for it. So I'm not adding it yet.
|
||||||
|
//if(arrived.movement_type & (FLYING|FLOATING) || !arrived.has_gravity())
|
||||||
|
*/
|
||||||
|
if(!arrived.has_gravity())
|
||||||
|
return
|
||||||
|
if(ismob(arrived) && !arrived.density) // Prevents 10 overlapping mice from making an unholy sound while moving
|
||||||
|
return
|
||||||
|
var/atom/current_parent = parent
|
||||||
|
if(isturf(current_parent?.loc))
|
||||||
|
play_squeak()
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/use_squeak()
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
if(last_use + use_delay < world.time)
|
||||||
|
last_use = world.time
|
||||||
|
play_squeak()
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/on_equip(datum/source, mob/equipper, slot)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
holder = equipper
|
||||||
|
//RegisterSignal(holder, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposing_react), override=TRUE)
|
||||||
|
RegisterSignal(holder, COMSIG_PARENT_QDELETING, PROC_REF(holder_deleted), override=TRUE)
|
||||||
|
//override for the preqdeleted is necessary because putting parent in hands sends the signal that this proc is registered towards,
|
||||||
|
//so putting an object in hands and then equipping the item on a clothing slot (without dropping it first)
|
||||||
|
//will always runtime without override = TRUE
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/on_drop(datum/source, mob/user)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
//UnregisterSignal(user, COMSIG_MOVABLE_DISPOSING)
|
||||||
|
UnregisterSignal(user, COMSIG_PARENT_QDELETING)
|
||||||
|
holder = null
|
||||||
|
|
||||||
|
///just gets rid of the reference to holder in the case that theyre qdeleted
|
||||||
|
/datum/component/squeak/proc/holder_deleted(datum/source, datum/possible_holder)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
if(possible_holder == holder)
|
||||||
|
holder = null
|
||||||
|
|
||||||
|
/* We don't have comsigs set up for these
|
||||||
|
// Disposal pipes related shits
|
||||||
|
/datum/component/squeak/proc/disposing_react(datum/source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_source)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
//We don't need to worry about unregistering this signal as it will happen for us automaticaly when the holder is qdeleted
|
||||||
|
RegisterSignal(disposal_holder, COMSIG_ATOM_DIR_CHANGE, PROC_REF(holder_dir_change))
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/holder_dir_change(datum/source, old_dir, new_dir)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
//If the dir changes it means we're going through a bend in the pipes, let's pretend we bumped the wall
|
||||||
|
if(old_dir != new_dir)
|
||||||
|
play_squeak()
|
||||||
|
|
||||||
|
/datum/component/squeak/proc/on_comedy_metabolism_removal(datum/source, trait)
|
||||||
|
SIGNAL_HANDLER
|
||||||
|
|
||||||
|
qdel(src)
|
||||||
|
*/
|
||||||
103
modular_chomp/code/game/objects/effects/step_triggers.dm
Normal file
103
modular_chomp/code/game/objects/effects/step_triggers.dm
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
var/static/list/mapped_autostrips = list()
|
||||||
|
var/static/list/mapped_autostrips_mob = list()
|
||||||
|
|
||||||
|
/*
|
||||||
|
This should actually be refactored if it ever needs to be used again into just being
|
||||||
|
an event controller with more graceful solutions.
|
||||||
|
Creating lockers was not graceful, in practice, and creates clutter, for example.
|
||||||
|
Repurpose this idea into a self contained machine in the future that stores and auto-equips someones gear.
|
||||||
|
|
||||||
|
But for now, for what it's been used for, it works.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Admin tool to automatically strip a human victim of all their equipment and genetics powers, and store them in a closet.
|
||||||
|
//Equips Vox/Zaddat survival gear, and a few basic pieces of clothing
|
||||||
|
/obj/effect/step_trigger/autostrip
|
||||||
|
name = "Autostrip trigger. Set the targetid to match the effect/autostriptarget"
|
||||||
|
var/targetid = "Default"
|
||||||
|
var/obj/effect/autostriptarget/target
|
||||||
|
var/obj/effect/autostriptarget/mob/Mtarget
|
||||||
|
var/remove_implants = 0 //Havn't bothered to implement this yet
|
||||||
|
var/remove_mutations = 0
|
||||||
|
|
||||||
|
/obj/effect/step_trigger/autostrip/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
initMappedLink()
|
||||||
|
|
||||||
|
/obj/effect/step_trigger/autostrip/Trigger(mob/living/carbon/human/H as mob)
|
||||||
|
if(!istype(H))
|
||||||
|
return
|
||||||
|
if(!target)
|
||||||
|
if(!initMappedLink())
|
||||||
|
return
|
||||||
|
if(Mtarget)
|
||||||
|
H.forceMove(Mtarget.loc)
|
||||||
|
var/obj/locker = new /obj/structure/closet/secure_closet/mind(target.loc, mind_target = H.mind)
|
||||||
|
for(var/obj/item/W in H)
|
||||||
|
if(istype(W, /obj/item/weapon/implant/backup) || istype(W, /obj/item/device/nif))
|
||||||
|
continue //VOREStation Edit
|
||||||
|
if(H.drop_from_inventory(W))
|
||||||
|
W.forceMove(locker)
|
||||||
|
|
||||||
|
if(remove_mutations)
|
||||||
|
var/needs_update = H.mutations.len > 0
|
||||||
|
for(var/entry in H.mutations)
|
||||||
|
var/mut
|
||||||
|
switch(entry)
|
||||||
|
if(TK)
|
||||||
|
mut = TELEBLOCK
|
||||||
|
if(XRAY)
|
||||||
|
mut = XRAYBLOCK
|
||||||
|
if(HULK)
|
||||||
|
mut = HULKBLOCK
|
||||||
|
if(mRemotetalk)
|
||||||
|
mut = REMOTETALKBLOCK
|
||||||
|
if(COLD_RESISTANCE)
|
||||||
|
mut = FIREBLOCK
|
||||||
|
if(mut)
|
||||||
|
new /obj/item/weapon/dnainjector/safe(locker, block_type = mut)
|
||||||
|
H.dna.SetSEState(mut,0)
|
||||||
|
H.mutations = list()
|
||||||
|
H.disabilities = 0
|
||||||
|
H.sdisabilities = 0
|
||||||
|
if(needs_update)
|
||||||
|
domutcheck(H,null,MUTCHK_FORCED)
|
||||||
|
H.update_mutations()
|
||||||
|
if(H.species.name == SPECIES_VOX || SPECIES_ZADDAT) //Species that 'actually' require survival gear to live. The rest don't.
|
||||||
|
H.species.equip_survival_gear(H)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(H), slot_w_uniform)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H),slot_l_ear)
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/permit(H), slot_l_hand)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/effect/step_trigger/autostrip/proc/initMappedLink()
|
||||||
|
. = FALSE
|
||||||
|
target = mapped_autostrips[targetid]
|
||||||
|
Mtarget = mapped_autostrips_mob[targetid]
|
||||||
|
if(target)
|
||||||
|
. = TRUE
|
||||||
|
|
||||||
|
/obj/effect/autostriptarget
|
||||||
|
name = "Autostrip target. Link me via targetid to an autostrip trigger."
|
||||||
|
icon = 'icons/mob/screen1.dmi'
|
||||||
|
icon_state = "no_item1"
|
||||||
|
var/targetid = "Default"
|
||||||
|
unacidable = 1
|
||||||
|
layer = 99
|
||||||
|
anchored = 1
|
||||||
|
invisibility = 99
|
||||||
|
|
||||||
|
|
||||||
|
/obj/effect/autostriptarget/Initialize(mapload)
|
||||||
|
. = ..()
|
||||||
|
if(targetid)
|
||||||
|
mapped_autostrips[targetid] = src
|
||||||
|
|
||||||
|
/obj/effect/autostriptarget/mob
|
||||||
|
name = "Autostrip target to send mobs to."
|
||||||
|
|
||||||
|
/obj/effect/autostriptarget/mob/Initialize(mapload)
|
||||||
|
if(targetid)
|
||||||
|
mapped_autostrips_mob[targetid] = src
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
/obj/item/device/radio/headset/casino
|
||||||
|
name = "radio headset"
|
||||||
|
desc = "An updated, modular intercom that fits over the head with extra comfortable for the hardworking casino luxury crew. Has encryption key for scamm-... Kind casino staff channel."
|
||||||
|
icon = 'icons/obj/casino_ch.dmi'
|
||||||
|
icon_state = "headset"
|
||||||
|
origin_tech = list(TECH_ILLEGAL = 2)
|
||||||
|
ks1type = /obj/item/device/encryptionkey/raider
|
||||||
|
|
||||||
|
//Badmin piece of clothing that applies a few effects to a mob, used specifically for events with "hunters"
|
||||||
|
//This just helps me equip the hunters a little easier
|
||||||
|
/obj/item/device/radio/headset/event
|
||||||
|
name = "totally normal headset"
|
||||||
|
desc = "A headset with numerous toolkits appended to it, applying a wide variety of effects to its wearer set as per its manufacturer."
|
||||||
|
icon_state = "cent_headset_alt"
|
||||||
|
item_state = "headset"
|
||||||
|
var/mob/living/carbon/human/wearer
|
||||||
|
var/effect_icon = 'modular_chomp/icons/effects/effects.dmi' //Cosmetic Effect that will be applied to the mob as an overlay
|
||||||
|
var/effect_icon_state = "arrow2"
|
||||||
|
var/image/effect_overlay = null //Reference to an overlay so we can remove it on unequip
|
||||||
|
var/overlay_offset_y = 32
|
||||||
|
//Spells that will be added on equip
|
||||||
|
var/list/spells = list("/spell/targeted/unrestricted/mend", "/spell/targeted/unrestricted/plasmastun")
|
||||||
|
var/list/remove_spells = list() //Reference to spells that'll get removed
|
||||||
|
var/slowdown_to_set = 0.5
|
||||||
|
var/item_slowdown_reset = 0 //Vars to copy and reset later
|
||||||
|
var/slowdown_reset = 0
|
||||||
|
light_range = 6
|
||||||
|
light_power = 0 //Set this to 0 if you don't want a light
|
||||||
|
light_color = "#ffaaaa"
|
||||||
|
var/tele_threshold = 50
|
||||||
|
var/telex = 16
|
||||||
|
var/teley = 16
|
||||||
|
var/telez = 0 //Set this in-round if you want a return point with fake health
|
||||||
|
|
||||||
|
/obj/item/device/radio/headset/event/equipped(var/mob/living/carbon/human/H)
|
||||||
|
if(H && ((H.l_ear == src) || (H.r_ear == src)))
|
||||||
|
wearer = H
|
||||||
|
if(light_power)
|
||||||
|
set_light(light_range,light_power,light_color,1)
|
||||||
|
if(effect_icon)
|
||||||
|
effect_overlay = image(effect_icon, effect_icon_state, pixel_y = overlay_offset_y*H.size_multiplier)
|
||||||
|
effect_overlay.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
|
||||||
|
effect_overlay.plane = PLANE_LIGHTING_ABOVE
|
||||||
|
effect_overlay.layer = MOB_LAYER
|
||||||
|
H.add_overlay(effect_overlay)
|
||||||
|
if(spells.len)
|
||||||
|
for(var/thing in spells)
|
||||||
|
var/spell/SP = new thing(H)
|
||||||
|
H.add_spell(SP)
|
||||||
|
remove_spells += SP
|
||||||
|
if(slowdown_to_set != 0)
|
||||||
|
slowdown_reset = H.species.slowdown
|
||||||
|
item_slowdown_reset = H.species.item_slowdown_mod
|
||||||
|
H.species.slowdown = slowdown_to_set
|
||||||
|
H.species.item_slowdown_mod = 0
|
||||||
|
|
||||||
|
/obj/item/device/radio/headset/event/dropped(var/mob/living/carbon/human/H)
|
||||||
|
..()
|
||||||
|
if(wearer)
|
||||||
|
wearer = null
|
||||||
|
if(light_power)
|
||||||
|
light_on = 0
|
||||||
|
if(effect_icon)
|
||||||
|
H.cut_overlay(effect_overlay)
|
||||||
|
if(remove_spells.len)
|
||||||
|
for(var/spell/SP in remove_spells)
|
||||||
|
H.remove_spell(SP)
|
||||||
|
qdel(SP)
|
||||||
|
if(slowdown_to_set != 0)
|
||||||
|
H.species.slowdown = slowdown_reset
|
||||||
|
H.species.item_slowdown_mod = item_slowdown_reset
|
||||||
|
|
||||||
|
/obj/item/device/radio/headset/event/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||||
|
if(!telez)
|
||||||
|
return FALSE
|
||||||
|
tele_threshold -= damage
|
||||||
|
if(tele_threshold <= 0)
|
||||||
|
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||||
|
spark_system.set_up(5, 0, user.loc)
|
||||||
|
spark_system.start()
|
||||||
|
playsound(src, "sparks", 50, 1)
|
||||||
|
user.visible_message("<span class='danger'>[user] is abruptly flung somewhere else in response to the damage!</span>")
|
||||||
|
do_teleport(user, locate(telex,teley,telez), local = 0, bohsafe = 1)
|
||||||
|
tele_threshold = initial(tele_threshold)
|
||||||
|
return TRUE
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
//Same as regular injector, but without the radiation
|
||||||
|
//Using for events, set the block to the desired gene
|
||||||
|
//Note, genetics code is incredibly scuffed, sometimes blocks just won't activate unless you do it multiple times????
|
||||||
|
/obj/item/weapon/dnainjector/safe
|
||||||
|
desc = "A slightly safer DNA injector"
|
||||||
|
datatype = DNA2_BUF_SE
|
||||||
|
value = 0xFFF
|
||||||
|
|
||||||
|
/obj/item/weapon/dnainjector/safe/New(var/block_type)
|
||||||
|
block = block_type
|
||||||
|
..()
|
||||||
|
|
||||||
|
/obj/item/weapon/dnainjector/safe/inject(mob/M as mob, mob/user as mob)
|
||||||
|
/*
|
||||||
|
if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
|
||||||
|
if (buf.types & DNA2_BUF_UI)
|
||||||
|
if (!block) //isolated block?
|
||||||
|
M.UpdateAppearance(buf.dna.UI.Copy())
|
||||||
|
if (buf.types & DNA2_BUF_UE) //unique enzymes? yes
|
||||||
|
M.real_name = buf.dna.real_name
|
||||||
|
M.name = buf.dna.real_name
|
||||||
|
uses--
|
||||||
|
else
|
||||||
|
M.dna.SetUIValue(block,src.GetValue())
|
||||||
|
M.UpdateAppearance()
|
||||||
|
uses--
|
||||||
|
if (buf.types & DNA2_BUF_SE)
|
||||||
|
if (!block) //isolated block?
|
||||||
|
M.dna.SE = buf.dna.SE.Copy()
|
||||||
|
M.dna.UpdateSE()
|
||||||
|
else
|
||||||
|
M.dna.SetSEValue(block,src.GetValue())
|
||||||
|
domutcheck(M, null, block!=null)
|
||||||
|
uses--
|
||||||
|
if(prob(5))
|
||||||
|
trigger_side_effect(M)
|
||||||
|
*/
|
||||||
|
M.dna.SetSEState(block,1)
|
||||||
|
domutcheck(M,null,MUTCHK_FORCED)
|
||||||
|
M.update_mutations()
|
||||||
|
|
||||||
|
spawn(0)//this prevents the collapse of space-time continuum
|
||||||
|
if (user)
|
||||||
|
user.drop_from_inventory(src)
|
||||||
|
qdel(src)
|
||||||
|
return uses
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
/obj/item/weapon/melee/shock_maul/harmless
|
||||||
|
name = "rubber concussion maul"
|
||||||
|
desc = "A variant of the concussion maul that staggers and weakens victims. Despite their screams, does no real damage."
|
||||||
|
damtype = HALLOSS
|
||||||
|
launch_force = 0
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/obj/structure/closet/secure_closet/mind
|
||||||
|
name = "mind secured locker"
|
||||||
|
var/datum/mind/owner
|
||||||
|
var/self_del = 1
|
||||||
|
anchored = 0
|
||||||
|
|
||||||
|
/obj/structure/closet/secure_closet/mind/New(var/datum/mind/mind_target, var/del_self = 1)
|
||||||
|
.=..()
|
||||||
|
self_del = del_self
|
||||||
|
if(mind_target)
|
||||||
|
owner = mind_target
|
||||||
|
name = "Owned by [owner.name]"
|
||||||
|
if(owner.current)
|
||||||
|
var/icon/I = get_flat_icon(owner.current, dir=SOUTH, no_anim=TRUE)
|
||||||
|
var/image/IM = image(I, pixel_x = (32 - I.Width()))
|
||||||
|
//icon2base64(get_flat_icon(owner.current,dir=SOUTH,no_anim=TRUE))
|
||||||
|
/*
|
||||||
|
I.appearance_flags |= (RESET_COLOR|PIXEL_SCALE)
|
||||||
|
I.plane = MOB_PLANE
|
||||||
|
I.layer = MOB_LAYER
|
||||||
|
*/
|
||||||
|
add_overlay(IM)
|
||||||
|
qdel(I)
|
||||||
|
|
||||||
|
/obj/structure/closet/secure_closet/mind/allowed(mob/user)
|
||||||
|
if(user.mind == owner)
|
||||||
|
return TRUE
|
||||||
|
else
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
/obj/structure/closet/secure_closet/mind/open()
|
||||||
|
.=..()
|
||||||
|
if(self_del)
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/structure/closet/secure_closet/mind/LateInitialize()
|
||||||
|
if(ispath(closet_appearance))
|
||||||
|
closet_appearance = GLOB.closet_appearances[closet_appearance]
|
||||||
|
if(istype(closet_appearance))
|
||||||
|
icon = closet_appearance.icon
|
||||||
|
color = null
|
||||||
|
update_icon()
|
||||||
@@ -216,3 +216,14 @@
|
|||||||
B.digest_brute = 20
|
B.digest_brute = 20
|
||||||
B.special_entrance_sound = 'sound/machines/blender.ogg'
|
B.special_entrance_sound = 'sound/machines/blender.ogg'
|
||||||
B.recycling = TRUE
|
B.recycling = TRUE
|
||||||
|
|
||||||
|
/obj/structure/toilet/item/Initialize(mapload)
|
||||||
|
..()
|
||||||
|
return INITIALIZE_HINT_LATELOAD
|
||||||
|
|
||||||
|
/obj/structure/toilet/item/LateInitialize()
|
||||||
|
if(istype(loc, /mob/living)) return
|
||||||
|
var/obj/item/I
|
||||||
|
for(I in loc)
|
||||||
|
if(I.density || I.anchored || I == src) continue
|
||||||
|
I.forceMove(src)
|
||||||
31
modular_chomp/code/modules/clothing/shoes/miscellaneous.dm
Normal file
31
modular_chomp/code/modules/clothing/shoes/miscellaneous.dm
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/obj/item/clothing/shoes/mech_shoes
|
||||||
|
name = "mech shoes"
|
||||||
|
desc = "Thud thud."
|
||||||
|
icon_state = "nothing"
|
||||||
|
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0) // Same as loadout jackboots.
|
||||||
|
siemens_coefficient = 0.7 // Same as loadout jackboots.
|
||||||
|
force = 2
|
||||||
|
species_restricted = null
|
||||||
|
var/list/squeak_sound = list("mechstep"=1) //Squeak sound list. Necessary so our subtypes can have different sounds loaded into their component
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/mech_shoes/Initialize(mapload)
|
||||||
|
.=..()
|
||||||
|
LoadComponent(/datum/component/squeak, squeak_sound, 15*step_volume_mod)
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/mech_shoes/light
|
||||||
|
name = "light mech shoes"
|
||||||
|
desc = "Thud thud, but quieter."
|
||||||
|
squeak_sound = list("powerloaderstep"=1)
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/mech_shoes/heavy
|
||||||
|
name = "heavy mech shoes"
|
||||||
|
desc = "Thud thud, but heavy."
|
||||||
|
squeak_sound = list('modular_chomp/sound/mob/footstep_large.ogg'=1,'modular_chomp/sound/mob/footstep_large2.ogg'=1)
|
||||||
|
step_volume_mod = 4
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/clown_shoes
|
||||||
|
var/list/squeak_sound = list("clownstep"=1)
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/clown_shoes/Initialize(mapload)
|
||||||
|
.=..()
|
||||||
|
LoadComponent(/datum/component/squeak, squeak_sound, 20*step_volume_mod)
|
||||||
30
modular_chomp/code/modules/paperwork/pen.dm
Normal file
30
modular_chomp/code/modules/paperwork/pen.dm
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
//Adminspawn item for hunters who're doing kidnaps during events
|
||||||
|
/obj/item/weapon/pen/autostun
|
||||||
|
desc = "A well made and expensive fountain pen. This one has gold accents."
|
||||||
|
icon_state = "blueg_fountain"
|
||||||
|
var/stun_duration = 10
|
||||||
|
|
||||||
|
/obj/item/weapon/pen/autostun/attack(mob/living/M as mob, mob/user as mob)
|
||||||
|
|
||||||
|
if(!istype(M))
|
||||||
|
return
|
||||||
|
M.Stun(stun_duration)
|
||||||
|
|
||||||
|
/obj/item/weapon/pen/autostun/paralyse
|
||||||
|
desc = "A well made and expensive fountain pen. This one has gold accents."
|
||||||
|
|
||||||
|
/obj/item/weapon/pen/autostun/paralyse/attack(mob/living/M as mob, mob/user as mob)
|
||||||
|
|
||||||
|
if(!istype(M))
|
||||||
|
return
|
||||||
|
M.Paralyse(stun_duration)
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/weapon/pen/autostun/weaken
|
||||||
|
desc = "A well made and expensive fountain pen. This one has gold accents."
|
||||||
|
|
||||||
|
/obj/item/weapon/pen/autostun/weaken/attack(mob/living/M as mob, mob/user as mob)
|
||||||
|
|
||||||
|
if(!istype(M))
|
||||||
|
return
|
||||||
|
M.Weaken(stun_duration)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/obj/item/weapon/gun/energy/taser/disabler/slow
|
||||||
|
name = "plasma snare device"
|
||||||
|
desc = "A modified disabler adjusted to impulse a target with a restrictive slowdown."
|
||||||
|
icon_state = "disabler"
|
||||||
|
projectile_type = /obj/item/projectile/energy/plasmastun/slow
|
||||||
|
charge_cost = 480
|
||||||
|
self_recharge = 1
|
||||||
|
recharge_time = 3
|
||||||
|
|
||||||
|
/obj/item/projectile/energy/plasmastun/slow
|
||||||
|
name = "plasma pulse"
|
||||||
|
icon_state = "plasma_stun"
|
||||||
|
fire_sound = 'sound/weapons/weaponsounds_laserstrong.ogg'
|
||||||
|
armor_penetration = 10
|
||||||
|
range = 9
|
||||||
|
damage = 0
|
||||||
|
agony = 0
|
||||||
|
vacuum_traversal = 1
|
||||||
|
hud_state = "plasma_rifle_blast"
|
||||||
|
|
||||||
|
/obj/item/projectile/energy/plasmastun/slow/on_hit(var/atom/target)
|
||||||
|
if(isliving(target))
|
||||||
|
var/mob/living/L = target
|
||||||
|
L.add_modifier(/datum/modifier/entangled, 10 SECONDS)
|
||||||
169
modular_chomp/code/modules/spells/spells.dm
Normal file
169
modular_chomp/code/modules/spells/spells.dm
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
//This is pretty much just copied from construct_spells but adjusted so anyone can use them
|
||||||
|
|
||||||
|
/spell/targeted/unrestricted
|
||||||
|
name = "Base Unrestricted Spell"
|
||||||
|
desc = "If you see this, you should probably remind coders to refactor spell code."
|
||||||
|
|
||||||
|
range = -1
|
||||||
|
school = "evocation"
|
||||||
|
charge_type = Sp_RECHARGE
|
||||||
|
invocation_type = SpI_NONE
|
||||||
|
|
||||||
|
spell_flags = INCLUDEUSER
|
||||||
|
|
||||||
|
hud_state = "const_rune"
|
||||||
|
smoke_amt = 0
|
||||||
|
|
||||||
|
charge_max = 10
|
||||||
|
|
||||||
|
var/obj/item/weapon/spell/unrestricted/spell_obj = null //This is the var that determines what Technomancer-style spell is put into their hands.
|
||||||
|
|
||||||
|
/spell/targeted/unrestricted/cast(list/targets, mob/living/user)
|
||||||
|
user.place_spell_in_hand(spell_obj)
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted
|
||||||
|
name = "a spell"
|
||||||
|
desc = "Remind the devs to refactor spell code."
|
||||||
|
icon = 'icons/obj/spells.dmi'
|
||||||
|
icon_state = "generic"
|
||||||
|
item_icons = list(
|
||||||
|
slot_l_hand_str = 'icons/mob/items/lefthand_spells.dmi',
|
||||||
|
slot_r_hand_str = 'icons/mob/items/righthand_spells.dmi',
|
||||||
|
)
|
||||||
|
throwforce = 0
|
||||||
|
force = 0
|
||||||
|
show_examine = FALSE
|
||||||
|
owner = null
|
||||||
|
core = null
|
||||||
|
cast_methods = null // Controls how the spell is casted.
|
||||||
|
aspect = ASPECT_UNHOLY // Not used for everything we do
|
||||||
|
toggled = 0 // Mainly used for overlays.
|
||||||
|
cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
|
||||||
|
cast_sound = null // Sound file played when this is used.
|
||||||
|
var/last_castcheck = null // The last time this spell was cast.
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/New()
|
||||||
|
if(isliving(loc))
|
||||||
|
owner = loc
|
||||||
|
if(!owner)
|
||||||
|
qdel(src)
|
||||||
|
update_icon()
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/run_checks()
|
||||||
|
if(owner)
|
||||||
|
if(world.time >= (last_castcheck + cooldown)) //Are they a cultist or a construct, and has the cooldown time passed?
|
||||||
|
last_castcheck = world.time
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/pay_energy(var/amount)
|
||||||
|
if(owner)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||||
|
if(!run_checks())
|
||||||
|
return
|
||||||
|
if(!proximity_flag)
|
||||||
|
if(cast_methods & CAST_RANGED)
|
||||||
|
on_ranged_cast(target, user)
|
||||||
|
else
|
||||||
|
if(istype(target, /obj/item/weapon/spell))
|
||||||
|
var/obj/item/weapon/spell/spell = target
|
||||||
|
if(spell.cast_methods & CAST_COMBINE)
|
||||||
|
spell.on_combine_cast(src, user)
|
||||||
|
return
|
||||||
|
if(cast_methods & CAST_MELEE)
|
||||||
|
on_melee_cast(target, user)
|
||||||
|
else if(cast_methods & CAST_RANGED) //Try to use a ranged method if a melee one doesn't exist.
|
||||||
|
on_ranged_cast(target, user)
|
||||||
|
if(cooldown)
|
||||||
|
var/effective_cooldown = round(cooldown, 5)
|
||||||
|
user.setClickCooldown(effective_cooldown)
|
||||||
|
flick("cooldown_[effective_cooldown]",src)
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/projectile //This makes me angry, but we need the template, and we can't use it because special check overrides on the base.
|
||||||
|
name = "construct projectile template"
|
||||||
|
icon_state = "generic"
|
||||||
|
desc = "This is a generic template that shoots projectiles. If you can read this, the game broke!"
|
||||||
|
cast_methods = CAST_RANGED
|
||||||
|
var/obj/item/projectile/spell_projectile = null
|
||||||
|
var/pre_shot_delay = 0
|
||||||
|
var/fire_sound = null
|
||||||
|
var/energy_cost_per_shot = 5
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
|
||||||
|
if(set_up(hit_atom, user))
|
||||||
|
var/obj/item/projectile/new_projectile = make_projectile(spell_projectile, user)
|
||||||
|
new_projectile.old_style_target(hit_atom)
|
||||||
|
new_projectile.firer = user //Don't shoot yourself while moving
|
||||||
|
new_projectile.fire()
|
||||||
|
log_attack("has casted [src] at \the [hit_atom].")
|
||||||
|
if(fire_sound)
|
||||||
|
playsound(src, fire_sound, 75, 1)
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/projectile/proc/make_projectile(obj/item/projectile/projectile_type, mob/living/user)
|
||||||
|
var/obj/item/projectile/P = new projectile_type(get_turf(user))
|
||||||
|
return P
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/projectile/proc/set_up(atom/hit_atom, mob/living/user)
|
||||||
|
if(spell_projectile)
|
||||||
|
if(pay_energy(energy_cost_per_shot))
|
||||||
|
if(pre_shot_delay)
|
||||||
|
var/image/target_image = image(icon = 'icons/obj/spells.dmi', loc = get_turf(hit_atom), icon_state = "target")
|
||||||
|
user << target_image
|
||||||
|
user.Stun(pre_shot_delay / 10)
|
||||||
|
sleep(pre_shot_delay)
|
||||||
|
qdel(target_image)
|
||||||
|
if(owner)
|
||||||
|
return TRUE
|
||||||
|
return FALSE // We got dropped before the firing occured.
|
||||||
|
return TRUE // No delay, no need to check.
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
//
|
||||||
|
// The actual spells
|
||||||
|
//
|
||||||
|
|
||||||
|
/spell/targeted/unrestricted/plasmastun
|
||||||
|
name = "Plasma Snare"
|
||||||
|
desc = "Fire a debillitating slowing projectile."
|
||||||
|
|
||||||
|
hud_state = "const_beam"
|
||||||
|
spell_obj = /obj/item/weapon/spell/unrestricted/projectile/plasmastun
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/projectile/plasmastun
|
||||||
|
name = "plasma snare"
|
||||||
|
icon_state = "generic"
|
||||||
|
desc = "Your hands fire a debillitating slowing projectile."
|
||||||
|
cast_methods = CAST_RANGED
|
||||||
|
spell_projectile = /obj/item/projectile/energy/plasmastun/slow
|
||||||
|
pre_shot_delay = 0
|
||||||
|
cooldown = 5
|
||||||
|
fire_sound = 'sound/weapons/weaponsounds_laserstrong.ogg'
|
||||||
|
|
||||||
|
/spell/targeted/unrestricted/mend
|
||||||
|
name = "Mend Target"
|
||||||
|
desc = "Mend a target over time."
|
||||||
|
|
||||||
|
charge_max = 100
|
||||||
|
|
||||||
|
hud_state = "const_mend"
|
||||||
|
spell_obj = /obj/item/weapon/spell/unrestricted/mend
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/mend
|
||||||
|
name = "mend target"
|
||||||
|
desc = "Mend the wounds of a target over time"
|
||||||
|
icon_state = "mend_wounds"
|
||||||
|
cast_methods = CAST_MELEE
|
||||||
|
aspect = ASPECT_UNHOLY
|
||||||
|
light_color = "#FF5C5C"
|
||||||
|
light_power = -2
|
||||||
|
light_on = TRUE
|
||||||
|
|
||||||
|
/obj/item/weapon/spell/unrestricted/mend/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
|
||||||
|
if(isliving(hit_atom))
|
||||||
|
var/mob/living/L = hit_atom
|
||||||
|
L.add_modifier(/datum/modifier/mend_occult, 150) //No need to change this, it does the job
|
||||||
|
qdel(src)
|
||||||
BIN
modular_chomp/icons/effects/effects.dmi
Normal file
BIN
modular_chomp/icons/effects/effects.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 489 B |
BIN
modular_chomp/icons/mob/hud_vore.dmi
Normal file
BIN
modular_chomp/icons/mob/hud_vore.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
@@ -2,11 +2,10 @@
|
|||||||
/area/submap
|
/area/submap
|
||||||
name = "Submap Area"
|
name = "Submap Area"
|
||||||
icon_state = "submap"
|
icon_state = "submap"
|
||||||
flags = RAD_SHIELDED
|
flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT
|
||||||
ambience = AMBIENCE_RUINS
|
ambience = AMBIENCE_RUINS
|
||||||
secret_name = TRUE
|
secret_name = TRUE
|
||||||
forbid_events = TRUE
|
forbid_events = TRUE
|
||||||
flags = AREA_FLAG_IS_NOT_PERSISTENT
|
|
||||||
|
|
||||||
/area/submap/event //To be used for Events not for regular PoIs
|
/area/submap/event //To be used for Events not for regular PoIs
|
||||||
name = "Unknown"
|
name = "Unknown"
|
||||||
|
|||||||
BIN
modular_chomp/sound/mob/footstep_large.ogg
Normal file
BIN
modular_chomp/sound/mob/footstep_large.ogg
Normal file
Binary file not shown.
BIN
modular_chomp/sound/mob/footstep_large2.ogg
Normal file
BIN
modular_chomp/sound/mob/footstep_large2.ogg
Normal file
Binary file not shown.
@@ -1319,7 +1319,6 @@
|
|||||||
#include "code\game\objects\items\devices\radio\encryptionkey.dm"
|
#include "code\game\objects\items\devices\radio\encryptionkey.dm"
|
||||||
#include "code\game\objects\items\devices\radio\encryptionkey_vr.dm"
|
#include "code\game\objects\items\devices\radio\encryptionkey_vr.dm"
|
||||||
#include "code\game\objects\items\devices\radio\headset.dm"
|
#include "code\game\objects\items\devices\radio\headset.dm"
|
||||||
#include "code\game\objects\items\devices\radio\headset_ch.dm"
|
|
||||||
#include "code\game\objects\items\devices\radio\headset_vr.dm"
|
#include "code\game\objects\items\devices\radio\headset_vr.dm"
|
||||||
#include "code\game\objects\items\devices\radio\intercom.dm"
|
#include "code\game\objects\items\devices\radio\intercom.dm"
|
||||||
#include "code\game\objects\items\devices\radio\jammer.dm"
|
#include "code\game\objects\items\devices\radio\jammer.dm"
|
||||||
@@ -4610,6 +4609,7 @@
|
|||||||
#include "modular_chomp\code\datums\browser\color_matrix_picker.dm"
|
#include "modular_chomp\code\datums\browser\color_matrix_picker.dm"
|
||||||
#include "modular_chomp\code\datums\changelog\changelog.dm"
|
#include "modular_chomp\code\datums\changelog\changelog.dm"
|
||||||
#include "modular_chomp\code\datums\components\gargoyle.dm"
|
#include "modular_chomp\code\datums\components\gargoyle.dm"
|
||||||
|
#include "modular_chomp\code\datums\components\squeak.dm"
|
||||||
#include "modular_chomp\code\datums\components\xenoqueen.dm"
|
#include "modular_chomp\code\datums\components\xenoqueen.dm"
|
||||||
#include "modular_chomp\code\datums\crafting\recipes.dm"
|
#include "modular_chomp\code\datums\crafting\recipes.dm"
|
||||||
#include "modular_chomp\code\datums\interfaces\appearance.dm"
|
#include "modular_chomp\code\datums\interfaces\appearance.dm"
|
||||||
@@ -4637,14 +4637,18 @@
|
|||||||
#include "modular_chomp\code\game\machinery\virtual_reality\vr_console.dm"
|
#include "modular_chomp\code\game\machinery\virtual_reality\vr_console.dm"
|
||||||
#include "modular_chomp\code\game\objects\items.dm"
|
#include "modular_chomp\code\game\objects\items.dm"
|
||||||
#include "modular_chomp\code\game\objects\mob_spawner.dm"
|
#include "modular_chomp\code\game\objects\mob_spawner.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\effects\step_triggers.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\holosign_creator.dm"
|
#include "modular_chomp\code\game\objects\items\holosign_creator.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\petrifier.dm"
|
#include "modular_chomp\code\game\objects\items\petrifier.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\devices\flipper.dm"
|
#include "modular_chomp\code\game\objects\items\devices\flipper.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\devices\vacpack.dm"
|
#include "modular_chomp\code\game\objects\items\devices\vacpack.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\items\devices\radio\headset.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm"
|
#include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\weapons\cigs_lighters.dm"
|
#include "modular_chomp\code\game\objects\items\weapons\cigs_lighters.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\items\weapons\dna_injector.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\weapons\RCD.dm"
|
#include "modular_chomp\code\game\objects\items\weapons\RCD.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\items\weapons\melee\shock_maul.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\weapons\storage\backpack.dm"
|
#include "modular_chomp\code\game\objects\items\weapons\storage\backpack.dm"
|
||||||
#include "modular_chomp\code\game\objects\items\weapons\storage\firstaid.dm"
|
#include "modular_chomp\code\game\objects\items\weapons\storage\firstaid.dm"
|
||||||
#include "modular_chomp\code\game\objects\random\mapping.dm"
|
#include "modular_chomp\code\game\objects\random\mapping.dm"
|
||||||
@@ -4654,6 +4658,7 @@
|
|||||||
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
|
#include "modular_chomp\code\game\objects\structures\loot_pile.dm"
|
||||||
#include "modular_chomp\code\game\objects\structures\watercloset_ch.dm"
|
#include "modular_chomp\code\game\objects\structures\watercloset_ch.dm"
|
||||||
#include "modular_chomp\code\game\objects\structures\crate_lockers\largecrate.dm"
|
#include "modular_chomp\code\game\objects\structures\crate_lockers\largecrate.dm"
|
||||||
|
#include "modular_chomp\code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
|
||||||
#include "modular_chomp\code\game\turfs\turf.dm"
|
#include "modular_chomp\code\game\turfs\turf.dm"
|
||||||
#include "modular_chomp\code\game\turfs\simulated\outdoors\desert_planet.dm"
|
#include "modular_chomp\code\game\turfs\simulated\outdoors\desert_planet.dm"
|
||||||
#include "modular_chomp\code\game\turfs\simulated\outdoors\lava_land.dm"
|
#include "modular_chomp\code\game\turfs\simulated\outdoors\lava_land.dm"
|
||||||
@@ -4677,6 +4682,7 @@
|
|||||||
#include "modular_chomp\code\modules\clothing\head\jobs.dm"
|
#include "modular_chomp\code\modules\clothing\head\jobs.dm"
|
||||||
#include "modular_chomp\code\modules\clothing\masks\hailer.dm"
|
#include "modular_chomp\code\modules\clothing\masks\hailer.dm"
|
||||||
#include "modular_chomp\code\modules\clothing\rings\rings_ch.dm"
|
#include "modular_chomp\code\modules\clothing\rings\rings_ch.dm"
|
||||||
|
#include "modular_chomp\code\modules\clothing\shoes\miscellaneous.dm"
|
||||||
#include "modular_chomp\code\modules\clothing\spacesuits\rig\.behemoth.dm"
|
#include "modular_chomp\code\modules\clothing\spacesuits\rig\.behemoth.dm"
|
||||||
#include "modular_chomp\code\modules\clothing\spacesuits\rig\clockwork_ch.dm"
|
#include "modular_chomp\code\modules\clothing\spacesuits\rig\clockwork_ch.dm"
|
||||||
#include "modular_chomp\code\modules\clothing\spacesuits\rig\other.dm"
|
#include "modular_chomp\code\modules\clothing\spacesuits\rig\other.dm"
|
||||||
@@ -4833,6 +4839,7 @@
|
|||||||
#include "modular_chomp\code\modules\organs\organ_icon.dm"
|
#include "modular_chomp\code\modules\organs\organ_icon.dm"
|
||||||
#include "modular_chomp\code\modules\overmap\dynamic_sector.dm"
|
#include "modular_chomp\code\modules\overmap\dynamic_sector.dm"
|
||||||
#include "modular_chomp\code\modules\paperwork\filingcabinet.dm"
|
#include "modular_chomp\code\modules\paperwork\filingcabinet.dm"
|
||||||
|
#include "modular_chomp\code\modules\paperwork\pen.dm"
|
||||||
#include "modular_chomp\code\modules\planet\sif.dm"
|
#include "modular_chomp\code\modules\planet\sif.dm"
|
||||||
#include "modular_chomp\code\modules\planet\smokestar\turf.dm"
|
#include "modular_chomp\code\modules\planet\smokestar\turf.dm"
|
||||||
#include "modular_chomp\code\modules\player_tips\player_tips_list.dm"
|
#include "modular_chomp\code\modules\player_tips\player_tips_list.dm"
|
||||||
@@ -4853,6 +4860,7 @@
|
|||||||
#include "modular_chomp\code\modules\projectiles\guns\special.dm"
|
#include "modular_chomp\code\modules\projectiles\guns\special.dm"
|
||||||
#include "modular_chomp\code\modules\projectiles\guns\staffs.dm"
|
#include "modular_chomp\code\modules\projectiles\guns\staffs.dm"
|
||||||
#include "modular_chomp\code\modules\projectiles\guns\energy\laser.dm"
|
#include "modular_chomp\code\modules\projectiles\guns\energy\laser.dm"
|
||||||
|
#include "modular_chomp\code\modules\projectiles\guns\energy\special.dm"
|
||||||
#include "modular_chomp\code\modules\projectiles\guns\projectile\revolver.dm"
|
#include "modular_chomp\code\modules\projectiles\guns\projectile\revolver.dm"
|
||||||
#include "modular_chomp\code\modules\projectiles\precursor\freezegun.dm"
|
#include "modular_chomp\code\modules\projectiles\precursor\freezegun.dm"
|
||||||
#include "modular_chomp\code\modules\reagents\machinery\dispenser\chem_synthesizer_ch.dm"
|
#include "modular_chomp\code\modules\reagents\machinery\dispenser\chem_synthesizer_ch.dm"
|
||||||
@@ -4873,6 +4881,7 @@
|
|||||||
#include "modular_chomp\code\modules\research\designs\weapons.dm"
|
#include "modular_chomp\code\modules\research\designs\weapons.dm"
|
||||||
#include "modular_chomp\code\modules\shieldgen\shield_capacitor.dm"
|
#include "modular_chomp\code\modules\shieldgen\shield_capacitor.dm"
|
||||||
#include "modular_chomp\code\modules\shieldgen\shield_gen.dm"
|
#include "modular_chomp\code\modules\shieldgen\shield_gen.dm"
|
||||||
|
#include "modular_chomp\code\modules\spells\spells.dm"
|
||||||
#include "modular_chomp\code\modules\tgui\feedback.dm"
|
#include "modular_chomp\code\modules\tgui\feedback.dm"
|
||||||
#include "modular_chomp\code\modules\tgui\states\ticket.dm"
|
#include "modular_chomp\code\modules\tgui\states\ticket.dm"
|
||||||
#include "modular_chomp\code\modules\tickets\procs.dm"
|
#include "modular_chomp\code\modules\tickets\procs.dm"
|
||||||
|
|||||||
Reference in New Issue
Block a user