mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-28 23:59:40 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
/datum/supply_pack/munitions/expeditionguns
|
||||
name = "Frontier phaser (station-locked) crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/frontier/locked = 2,
|
||||
/obj/item/weapon/gun/energy/frontier/locked/basic = 2,
|
||||
/obj/item/weapon/gun/energy/frontier/locked/holdout = 1,
|
||||
)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
|
||||
@@ -142,18 +142,30 @@
|
||||
|
||||
. = buckle_mob(M, forced)
|
||||
if(.)
|
||||
var/reveal_message = list("buckled_mob" = null, "buckled_to" = null) //VORE EDIT: This being a list and messages existing for the buckle target atom.
|
||||
if(!silent)
|
||||
if(M == user)
|
||||
reveal_message["buckled_mob"] = "<span class='notice'>You come out of hiding and buckle yourself to [src].</span>" //VORE EDIT
|
||||
reveal_message["buckled_to"] = "<span class='notice'>You come out of hiding as [M.name] buckles themselves to you.</span>" //VORE EDIT
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] buckles themselves to [src].</span>",\
|
||||
"<span class='notice'>You buckle yourself to [src].</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
else
|
||||
reveal_message["buckled_mob"] = "<span class='notice'>You are revealed as you are buckled to [src].</span>" //VORE EDIT
|
||||
reveal_message["buckled_to"] = "<span class='notice'>You are revealed as [M.name] is buckled to you.</span>" //VORE EDIT
|
||||
M.visible_message(\
|
||||
"<span class='danger'>[M.name] is buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='danger'>You are buckled to [src] by [user.name]!</span>",\
|
||||
"<span class='notice'>You hear metal clanking.</span>")
|
||||
|
||||
M.reveal(silent, reveal_message["buckled_mob"]) //Reveal people so they aren't buckled to chairs from behind. //VORE EDIT, list arg instead of simple message var for buckled mob
|
||||
//Vore edit start
|
||||
var/mob/living/L = src
|
||||
if(istype(L))
|
||||
L.reveal(silent, reveal_message["buckled_to"])
|
||||
//Vore edit end
|
||||
|
||||
/atom/movable/proc/user_unbuckle_mob(mob/living/buckled_mob, mob/user)
|
||||
var/mob/living/M = unbuckle_mob(buckled_mob)
|
||||
if(M)
|
||||
@@ -193,4 +205,3 @@
|
||||
riding_datum.handle_vehicle_layer()
|
||||
riding_datum.handle_vehicle_offsets()
|
||||
//VOREStation Add End
|
||||
|
||||
@@ -1560,9 +1560,8 @@
|
||||
|
||||
/mob/living/carbon/human/proc/update_icon_special() //For things such as teshari hiding and whatnot.
|
||||
if(status_flags & HIDING) // Hiding? Carry on.
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained()) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
|
||||
reset_plane_and_layer()
|
||||
status_flags &= ~HIDING
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained() || buckled || LAZYLEN(grabbed_by) || has_buckled_mobs()) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work. //VORE EDIT: Check for has_buckled_mobs() (taur riding)
|
||||
reveal(null)
|
||||
else
|
||||
layer = HIDING_LAYER
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/mob/living/death()
|
||||
clear_fullscreens()
|
||||
reveal(TRUE) //Silently reveal the mob if they were hidden.
|
||||
//VOREStation Edit - Mob spawner stuff
|
||||
if(source_spawner)
|
||||
source_spawner.get_death_report(src)
|
||||
|
||||
@@ -1,15 +1,20 @@
|
||||
/mob/living/proc/reveal(var/silent, var/message = "<span class='warning'>You have been revealed! You are no longer hidden.</span>")
|
||||
if(status_flags & HIDING)
|
||||
status_flags &= ~HIDING
|
||||
reset_plane_and_layer()
|
||||
if(!silent && message)
|
||||
to_chat(src, message)
|
||||
|
||||
/mob/living/proc/hide()
|
||||
set name = "Hide"
|
||||
set desc = "Allows to hide beneath tables or certain items. Toggled on or off."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained() || buckled || LAZYLEN(grabbed_by) || has_buckled_mobs()) //VORE EDIT: Check for has_buckled_mobs() (taur riding)
|
||||
return
|
||||
|
||||
if(status_flags & HIDING)
|
||||
status_flags &= ~HIDING
|
||||
reset_plane_and_layer()
|
||||
to_chat(src,"<span class='notice'>You have stopped hiding.</span>")
|
||||
reveal("<span class='notice'>You have stopped hiding.</span>")
|
||||
else
|
||||
status_flags |= HIDING
|
||||
layer = HIDING_LAYER //Just above cables with their 2.44
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
// Slightly placeholder, mostly to replace ion hivebots on V4
|
||||
/mob/living/simple_animal/hostile/giant_spider/ion
|
||||
desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes and a hint of static discharge."
|
||||
tt_desc = "X Brachypelma phorus ionus"
|
||||
icon_state = "webslinger"
|
||||
icon_living = "webslinger"
|
||||
icon_dead = "webslinger_dead"
|
||||
|
||||
maxHealth = 90
|
||||
health = 90
|
||||
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 15
|
||||
|
||||
ranged = 1
|
||||
projectilesound = 'sound/weapons/taser2.ogg'
|
||||
projectiletype = /obj/item/projectile/ion/small
|
||||
firing_lines = 1
|
||||
cooperative = 1
|
||||
|
||||
poison_chance = 15
|
||||
poison_per_bite = 2
|
||||
poison_type = "psilocybin"
|
||||
@@ -14,6 +14,7 @@
|
||||
var/vore_pounce_chance = 5 // Chance of this mob knocking down an opponent
|
||||
var/vore_standing_too = 0 // Can also eat non-stunned mobs
|
||||
var/vore_ignores_undigestable = 1 // Refuse to eat mobs who are undigestable by the prefs toggle.
|
||||
var/swallowsound = null // What noise plays when you succeed in eating the mob.
|
||||
|
||||
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
|
||||
var/vore_default_flags = DM_FLAG_ITEMWEAK // Itemweak by default
|
||||
@@ -114,7 +115,9 @@
|
||||
var/old_target = target_mob
|
||||
handle_stance(STANCE_BUSY)
|
||||
. = animal_nom(target_mob)
|
||||
playsound(src, swallowsound, 50, 1)
|
||||
update_icon()
|
||||
|
||||
if(.)
|
||||
// If we succesfully ate them, lose the target
|
||||
LoseTarget()
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/mob/living/simple_animal/retaliate/hippo
|
||||
name = "hippo"
|
||||
desc = "Mostly know for the spectacular hit of the live action movie Hungry Hungry Hippos."
|
||||
tt_desc = "Hippopotamus amphibius"
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
icon_state = "hippo"
|
||||
icon_living = "hippo"
|
||||
icon_dead = "hippo_dead"
|
||||
icon_gib = "hippo_gib"
|
||||
intelligence_level = SA_ANIMAL
|
||||
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
turns_per_move = 5
|
||||
see_in_dark = 3
|
||||
stop_when_pulled = 1
|
||||
speed = 5
|
||||
armor = list(
|
||||
"melee" = 15,//They thick as fuck boi
|
||||
"bullet" = 15,
|
||||
"laser" = 15,
|
||||
"energy" = 0,
|
||||
"bomb" = 0,
|
||||
"bio" = 0,
|
||||
"rad" = 0)
|
||||
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "hits the"
|
||||
attacktext = list("bit")
|
||||
retaliate = 1
|
||||
|
||||
melee_damage_upper = 25
|
||||
melee_damage_lower = 15
|
||||
attack_sharp = 1
|
||||
|
||||
old_x = -16
|
||||
old_y = 0
|
||||
default_pixel_x = -16
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
speak_chance = 0.1
|
||||
speak = list("UUUUUUH")
|
||||
speak_emote = list("grunts","groans", "roars", "snorts")
|
||||
emote_hear = list("groan")
|
||||
emote_see = list("shakes its head")
|
||||
|
||||
meat_amount = 10 //Infinite meat!
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/retaliate/hippo //I don't know why it's in a seperate line but everyone does it so i do it
|
||||
vore_active = 1
|
||||
vore_capacity = 1
|
||||
vore_bump_chance = 15
|
||||
vore_bump_emote = "lazily wraps its tentacles around"
|
||||
vore_standing_too = 1
|
||||
vore_ignores_undigestable = 0
|
||||
vore_default_mode = DM_HOLD
|
||||
vore_digest_chance = 10
|
||||
vore_escape_chance = 20
|
||||
vore_pounce_chance = 35 //it's hippo sized it doesn't care it just eats you
|
||||
vore_stomach_name = "rumen" //First stomach of a ruminant. It's where the pre digestion bacteria stuff happens. Very warm.
|
||||
vore_stomach_flavor = "You are squeezed into the sweltering insides of the herbivore rumen."
|
||||
vore_icons = SA_ICON_LIVING
|
||||
@@ -47,6 +47,8 @@
|
||||
return
|
||||
|
||||
affecting.grabbed_by += src
|
||||
affecting.reveal("<span class='warning'>You are revealed as [assailant] grabs you.</span>")
|
||||
assailant.reveal("<span class='warning'>You reveal yourself as you grab [affecting].</span>")
|
||||
|
||||
hud = new /obj/screen/grab(src)
|
||||
hud.icon_state = "reinforce"
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
if(href_list["observe"])
|
||||
|
||||
if(alert(src,"Are you sure you wish to observe? You will have to wait 1 minute before being able to respawn!","Player Setup","Yes","No") == "Yes")
|
||||
if(alert(src,"Are you sure you wish to observe? You will have to wait 5 minute before being able to respawn!","Player Setup","Yes","No") == "Yes") //Vorestation edit
|
||||
if(!client) return 1
|
||||
|
||||
//Make a new mannequin quickly, and allow the observer to take the appearance
|
||||
|
||||
@@ -11,7 +11,9 @@
|
||||
else
|
||||
ridden.layer = initial(ridden.layer)
|
||||
else
|
||||
ridden.layer = initial(ridden.layer)
|
||||
var/mob/living/L = ridden
|
||||
if(!(istype(L) && (L.status_flags & HIDING)))
|
||||
ridden.layer = initial(ridden.layer)
|
||||
|
||||
/datum/riding/taur/ride_check(mob/living/M)
|
||||
var/mob/living/L = ridden
|
||||
|
||||
@@ -47,9 +47,13 @@
|
||||
I.gurgle_contaminate(src, cont_flavor)
|
||||
items_preserved |= I
|
||||
else
|
||||
digest_item(I)
|
||||
to_update = TRUE
|
||||
did_an_item = TRUE
|
||||
I.gurgle_contaminate(src, cont_flavor)
|
||||
if(I.digest_stage && I.digest_stage > 0)
|
||||
digest_item(I)
|
||||
else
|
||||
digest_item(I)
|
||||
did_an_item = TRUE
|
||||
to_update = TRUE
|
||||
|
||||
//Handle eaten mobs
|
||||
else if(isliving(A))
|
||||
|
||||
@@ -4,17 +4,38 @@
|
||||
|
||||
// Ye default implementation.
|
||||
/obj/item/proc/digest_act(var/atom/movable/item_storage = null)
|
||||
for(var/obj/item/O in contents)
|
||||
if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
|
||||
for(var/obj/item/SO in O)
|
||||
if(item_storage)
|
||||
SO.forceMove(item_storage)
|
||||
qdel(O)
|
||||
else if(item_storage)
|
||||
O.forceMove(item_storage)
|
||||
|
||||
qdel(src)
|
||||
return w_class
|
||||
if(istype(item_storage,/obj/item/device/dogborg/sleeper))
|
||||
for(var/obj/item/O in contents)
|
||||
if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
|
||||
for(var/obj/item/SO in O)
|
||||
if(item_storage)
|
||||
SO.forceMove(item_storage)
|
||||
qdel(O)
|
||||
else if(item_storage)
|
||||
O.forceMove(item_storage)
|
||||
qdel(src)
|
||||
return w_class
|
||||
var/g_damage = 1
|
||||
if(digest_stage == null)
|
||||
digest_stage = w_class
|
||||
if(isbelly(item_storage))
|
||||
var/obj/belly/B = item_storage
|
||||
g_damage = 0.25 * (B.digest_brute + B.digest_burn)
|
||||
if(digest_stage > 0)
|
||||
if(g_damage > digest_stage)
|
||||
g_damage = digest_stage
|
||||
digest_stage -= g_damage
|
||||
else
|
||||
for(var/obj/item/O in contents)
|
||||
if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets.
|
||||
for(var/obj/item/SO in O)
|
||||
if(item_storage)
|
||||
SO.forceMove(item_storage)
|
||||
qdel(O)
|
||||
else if(item_storage)
|
||||
O.forceMove(item_storage)
|
||||
qdel(src)
|
||||
return g_damage
|
||||
|
||||
/////////////
|
||||
// Some indigestible stuff
|
||||
@@ -91,3 +112,7 @@
|
||||
/obj/item/device/mmi/digital/posibrain/digest_act(var/atom/movable/item_storage = null)
|
||||
//Replace this with a VORE setting so all types of posibrains can/can't be digested on a whim
|
||||
return FALSE
|
||||
|
||||
// Gradual damage measurement
|
||||
/obj/item
|
||||
var/digest_stage = null
|
||||
@@ -743,10 +743,6 @@
|
||||
var/recharging = 0
|
||||
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/frontier/unload_ammo(var/mob/user)
|
||||
if(recharging)
|
||||
@@ -778,6 +774,13 @@
|
||||
/obj/item/weapon/gun/energy/frontier/ex_act() //|rugged|
|
||||
return
|
||||
|
||||
//Needed to fix a bug with the holdout phaser
|
||||
/obj/item/weapon/gun/energy/frontier/basic
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/frontier/locked
|
||||
desc = "An extraordinarily rugged laser weapon, built to last and requiring effectively no maintenance. Includes a built-in crank charger for recharging away from civilization. This one has a safety interlock that prevents firing while in proximity to the facility."
|
||||
req_access = list(access_armory) //for toggling safety
|
||||
@@ -808,6 +811,13 @@
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
//Needed to fix a bug with the holdout phaser
|
||||
/obj/item/weapon/gun/energy/frontier/locked/basic
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=12, projectile_type=/obj/item/projectile/beam, charge_cost = 300),
|
||||
list(mode_name="low-power", fire_delay=8, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
//Expeditionary Holdout Phaser
|
||||
/obj/item/weapon/gun/energy/frontier/locked/holdout
|
||||
name = "holdout frontier phaser"
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: KasparoVy
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Hiding mobs are now revealed when grabbed, buckled and/or killed."
|
||||
- rscadd: "You cannot hide if you grab something, are grabbed yourself or are buckled."
|
||||
- rscadd: "Adds some fluff messages for when hiding mobs are revealed."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 140 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
@@ -95,8 +95,7 @@
|
||||
prob_fall = 25 //Chance goes down by this much each time it spawns one (not defining and prob_spawn 100 means they spawn as soon as one dies)
|
||||
guard = 40 //They'll stay within this range (not defining this disables them staying nearby and they will wander the map (and through step teleports))
|
||||
mobs_to_pick_from = list(
|
||||
/mob/living/simple_animal/hostile/giant_snake = 3, //Snakes are 3x more likely to spawn than,
|
||||
/mob/living/simple_animal/hostile/frog = 1 //these frogs are, with these values
|
||||
/mob/living/simple_animal/snake
|
||||
)
|
||||
|
||||
/obj/tether_away_spawner/beach_outside_friendly
|
||||
@@ -115,12 +114,14 @@
|
||||
faction = "beach_cave"
|
||||
atmos_comp = TRUE
|
||||
prob_spawn = 100
|
||||
prob_fall = 10
|
||||
prob_fall = 40
|
||||
guard = 20
|
||||
mobs_to_pick_from = list(
|
||||
/mob/living/simple_animal/hostile/deathclaw,
|
||||
/mob/living/simple_animal/hostile/frog,
|
||||
/mob/living/simple_animal/hostile/hivebot/range/ion
|
||||
/mob/living/simple_animal/hostile/frog = 3, //Frogs are 3x more likely to spawn than,
|
||||
/mob/living/simple_animal/hostile/deathclaw = 1, //these deathclaws are, with these values,
|
||||
/mob/living/simple_animal/hostile/giant_spider = 3,
|
||||
/mob/living/simple_animal/hostile/giant_snake = 1,
|
||||
/mob/living/simple_animal/hostile/giant_spider/ion = 2
|
||||
)
|
||||
|
||||
// These are step-teleporters, for map edge transitions
|
||||
|
||||
@@ -395,7 +395,7 @@ var/global/list/latejoin_tram = list()
|
||||
/obj/structure/closet/secure_closet/guncabinet/excursion/New()
|
||||
..()
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/gun/energy/frontier/locked(src)
|
||||
new /obj/item/weapon/gun/energy/frontier/locked/basic(src)
|
||||
for(var/i = 1 to 4)
|
||||
new /obj/item/weapon/gun/energy/frontier/locked/holdout(src)
|
||||
|
||||
|
||||
@@ -2261,6 +2261,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\animals\fluffy_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\fox_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\giant_spider.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\giant_spider_vr.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\goose.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\lizard.dm"
|
||||
#include "code\modules\mob\living\simple_animal\animals\miscellaneous.dm"
|
||||
@@ -2309,6 +2310,7 @@
|
||||
#include "code\modules\mob\living\simple_animal\vore\fennix.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\frog.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\gaslamp.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\hippo.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\horse.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\jelly.dm"
|
||||
#include "code\modules\mob\living\simple_animal\vore\otie.dm"
|
||||
|
||||
Reference in New Issue
Block a user