mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 15:08:02 +01:00
Merge pull request #10469 from datlo/grenadierbelt
Ports the grenadier belt from tg
This commit is contained in:
@@ -198,6 +198,7 @@
|
||||
#define TURF_WET_WATER 1
|
||||
#define TURF_WET_LUBE 2
|
||||
#define TURF_WET_ICE 3
|
||||
#define TURF_WET_PERMAFROST 4
|
||||
|
||||
#define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA
|
||||
|
||||
|
||||
@@ -565,6 +565,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 11
|
||||
surplus = 0
|
||||
|
||||
/datum/uplink_item/dangerous/grenadier
|
||||
name = "Grenadier's belt"
|
||||
desc = "A belt containing 25 lethally dangerous and destructive grenades."
|
||||
item = /obj/item/storage/belt/grenade/full
|
||||
cost = 30
|
||||
surplus = 0
|
||||
gamemodes = list(/datum/game_mode/nuclear)
|
||||
|
||||
/datum/uplink_item/dangerous/emp
|
||||
name = "EMP Grenades and Implanter Kit"
|
||||
desc = "A box that contains two EMP grenades and an EMP implant. Useful to disrupt communication, \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//TODO: Flash range does nothing currently
|
||||
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1, cause = null)
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1, cause = null, breach = TRUE)
|
||||
src = null //so we don't abort once src is deleted
|
||||
epicenter = get_turf(epicenter)
|
||||
|
||||
@@ -132,7 +132,10 @@
|
||||
if(AM && AM.simulated)
|
||||
AM.ex_act(dist)
|
||||
CHECK_TICK
|
||||
T.ex_act(dist)
|
||||
if(breach)
|
||||
T.ex_act(dist)
|
||||
else
|
||||
T.ex_act(3)
|
||||
|
||||
CHECK_TICK
|
||||
//--- THROW ITEMS AROUND ---
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
/obj/item/grenade/gas
|
||||
name = "Plasma Fire Grenade"
|
||||
name = "plasma fire grenade"
|
||||
desc = "A compressed plasma grenade, used to start horrific plasma fires."
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
@@ -18,7 +18,33 @@
|
||||
target_turf.air_update_turf()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/gas/plasma
|
||||
icon_state = "plasma"
|
||||
|
||||
/obj/item/grenade/gas/knockout
|
||||
name = "Knockout Grenade"
|
||||
name = "knockout grenade"
|
||||
desc = "A grenade that completely removes all air and heat from its detonation area."
|
||||
spawn_contents = SPAWN_20C | SPAWN_N2O
|
||||
spawn_contents = SPAWN_20C | SPAWN_N2O
|
||||
|
||||
/obj/item/grenade/gluon
|
||||
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also wet any nearby floors."
|
||||
name = "gluon grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "gluon"
|
||||
item_state = "flashbang"
|
||||
var/range = 4
|
||||
var/rad_damage = 60
|
||||
var/stamina_damage = 30
|
||||
|
||||
/obj/item/grenade/gluon/prime()
|
||||
update_mob()
|
||||
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
|
||||
for(var/turf/T in view(range, loc))
|
||||
if(isfloorturf(T))
|
||||
var/turf/simulated/F = T
|
||||
F.MakeSlippery(TURF_WET_PERMAFROST)
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.apply_effect(rad_damage, IRRADIATE)
|
||||
L.adjust_bodytemperature(-230)
|
||||
qdel(src)
|
||||
@@ -526,20 +526,20 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/grenade/chem_grenade/facid
|
||||
name = "acid grenade"
|
||||
desc = "Used for melting armoured opponents."
|
||||
payload_name = "acid smoke"
|
||||
desc = "Use to chew up opponents from the inside out."
|
||||
stage = READY
|
||||
|
||||
/obj/item/grenade/chem_grenade/facid/New()
|
||||
..()
|
||||
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
|
||||
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
|
||||
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
|
||||
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("facid", 280)
|
||||
B1.reagents.add_reagent("facid", 80)
|
||||
B1.reagents.add_reagent("potassium", 20)
|
||||
B2.reagents.add_reagent("phosphorus", 20)
|
||||
B2.reagents.add_reagent("sugar", 20)
|
||||
B2.reagents.add_reagent("facid", 260)
|
||||
B2.reagents.add_reagent("facid", 60)
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/obj/item/grenade/frag
|
||||
name = "frag grenade"
|
||||
desc = "Fire in the hole."
|
||||
icon_state = "frag"
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4"
|
||||
var/range = 5
|
||||
var/max_shrapnel = 4
|
||||
var/embed_prob = 100 //reduced by armor
|
||||
var/embedded_type = /obj/item/embedded/shrapnel
|
||||
|
||||
/obj/item/grenade/frag/prime()
|
||||
update_mob()
|
||||
var/turf/epicenter = get_turf(src)
|
||||
for(var/mob/living/carbon/human/H in epicenter)
|
||||
if(H.resting) //grenade is jumped on but get real fucked up
|
||||
embed_shrapnel(H, max_shrapnel)
|
||||
range = 1
|
||||
explosion(loc, 0, 1, range, breach = FALSE)
|
||||
for(var/turf/T in view(range, loc))
|
||||
for(var/mob/living/carbon/human/H in T)
|
||||
var/shrapnel_amount = max_shrapnel - T.Distance(epicenter)
|
||||
if(shrapnel_amount > 0)
|
||||
embed_shrapnel(H, shrapnel_amount)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/frag/proc/embed_shrapnel(mob/living/carbon/human/H, amount)
|
||||
for(var/i = 0, i < amount, i++)
|
||||
if(prob(embed_prob - H.getarmor(null, "bomb")))
|
||||
var/obj/item/embedded/S = new embedded_type(src)
|
||||
H.hitby(S, skipcatch = 1)
|
||||
S.throwforce = 1
|
||||
S.throw_speed = 1
|
||||
S.sharp = FALSE
|
||||
else
|
||||
to_chat(H, "<span class='warning'>Shrapnel bounces off your armor!</span>")
|
||||
|
||||
/obj/item/embedded/shrapnel
|
||||
name = "shrapnel"
|
||||
icon = 'icons/obj/shards.dmi'
|
||||
throwforce = 10
|
||||
throw_speed = EMBED_THROWSPEED_THRESHOLD
|
||||
embed_chance = 100
|
||||
embedded_fall_chance = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
sharp = TRUE
|
||||
hitsound = 'sound/weapons/pierce.ogg'
|
||||
|
||||
/obj/item/embedded/shrapnel/New()
|
||||
icon_state = pick("shrapnel1", "shrapnel2", "shrapnel3")
|
||||
@@ -8,5 +8,5 @@
|
||||
|
||||
/obj/item/grenade/syndieminibomb/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,1,2,4,flame_range = 2)
|
||||
qdel(src)
|
||||
explosion(loc, 1, 2, 4, flame_range = 2)
|
||||
qdel(src)
|
||||
@@ -302,6 +302,48 @@
|
||||
item_state = "utility"
|
||||
use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it.
|
||||
|
||||
/obj/item/storage/belt/grenade
|
||||
name = "grenadier belt"
|
||||
desc = "A belt for holding grenades."
|
||||
icon_state = "assaultbelt"
|
||||
item_state = "assault"
|
||||
storage_slots = 30
|
||||
max_combined_w_class = 60
|
||||
display_contents_with_number = 1
|
||||
can_hold = list(
|
||||
/obj/item/grenade,
|
||||
/obj/item/lighter,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/grenade/full/New()
|
||||
..()
|
||||
new /obj/item/grenade/smokebomb(src) //4
|
||||
new /obj/item/grenade/smokebomb(src)
|
||||
new /obj/item/grenade/smokebomb(src)
|
||||
new /obj/item/grenade/smokebomb(src)
|
||||
new /obj/item/grenade/empgrenade(src) //2
|
||||
new /obj/item/grenade/empgrenade(src)
|
||||
new /obj/item/grenade/gluon(src) //4
|
||||
new /obj/item/grenade/gluon(src)
|
||||
new /obj/item/grenade/gluon(src)
|
||||
new /obj/item/grenade/gluon(src)
|
||||
new /obj/item/grenade/chem_grenade/facid(src) //1
|
||||
new /obj/item/grenade/gas/plasma(src) //2
|
||||
new /obj/item/grenade/gas/plasma(src)
|
||||
new /obj/item/grenade/frag(src) //10
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/frag(src)
|
||||
new /obj/item/grenade/syndieminibomb(src) //2
|
||||
new /obj/item/grenade/syndieminibomb(src)
|
||||
|
||||
/obj/item/storage/belt/military/abductor
|
||||
name = "agent belt"
|
||||
desc = "A belt used by abductor agents."
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/turf/simulated/proc/burn_tile()
|
||||
|
||||
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice
|
||||
/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice, 4 = Permafrost
|
||||
if(wet >= wet_setting)
|
||||
return
|
||||
wet = wet_setting
|
||||
@@ -30,7 +30,10 @@
|
||||
wet_overlay = null
|
||||
var/turf/simulated/floor/F = src
|
||||
if(istype(F))
|
||||
wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static")
|
||||
if(wet_setting >= TURF_WET_ICE)
|
||||
wet_overlay = image('icons/effects/water.dmi', src, "ice_floor")
|
||||
else
|
||||
wet_overlay = image('icons/effects/water.dmi', src, "wet_floor_static")
|
||||
else
|
||||
wet_overlay = image('icons/effects/water.dmi', src, "wet_static")
|
||||
overlays += wet_overlay
|
||||
@@ -83,6 +86,9 @@
|
||||
if(!(prob(30) && M.slip("icy floor", 4, 2, tilesSlipped = 1, walkSafely = 1)))
|
||||
M.inertia_dir = 0
|
||||
|
||||
if(TURF_WET_PERMAFROST) // Permafrost
|
||||
M.slip("icy floor", 0, 5, tilesSlipped = 1, walkSafely = 0, slipAny = 1)
|
||||
|
||||
/turf/simulated/ChangeTurf(var/path)
|
||||
. = ..()
|
||||
queue_smooth_neighbors(src)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.4 KiB |
@@ -925,6 +925,7 @@
|
||||
#include "code\game\objects\items\weapons\grenades\custom_grenades.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\frag.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\ghettobomb.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\grenade.dm"
|
||||
#include "code\game\objects\items\weapons\grenades\smokebomb.dm"
|
||||
|
||||
Reference in New Issue
Block a user