diff --git a/aurorastation.dme b/aurorastation.dme
index bab50c9d1db..05b29221f0d 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1835,6 +1835,7 @@
#include "code\modules\martial_arts\gunkata.dm"
#include "code\modules\martial_arts\martial.dm"
#include "code\modules\martial_arts\plasma_fist.dm"
+#include "code\modules\martial_arts\revenant.dm"
#include "code\modules\martial_arts\skrell.dm"
#include "code\modules\martial_arts\sleeping_carp.dm"
#include "code\modules\martial_arts\sol_combat.dm"
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 66a0b83481d..f22cee6970d 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -322,6 +322,7 @@
#define USE_ALLOW_NON_ADJACENT 16
#define USE_FORCE_SRC_IN_USER 32
#define USE_DISALLOW_SILICONS 64
+#define USE_DISALLOW_SPECIALS 128 // revenants, zombies, etc
#define USE_SUCCESS 0
#define USE_FAIL_NON_ADJACENT 1
@@ -331,6 +332,7 @@
#define USE_FAIL_INCAPACITATED 5
#define USE_FAIL_NOT_IN_USER 6
#define USE_FAIL_IS_SILICON 7
+#define USE_FAIL_IS_MOB_SPECIAL 8
#define DEFAULT_SIGHT (SEE_SELF)
diff --git a/code/game/antagonist/outsider/revenant.dm b/code/game/antagonist/outsider/revenant.dm
index 6d1e35e931e..fa89ab21e3c 100644
--- a/code/game/antagonist/outsider/revenant.dm
+++ b/code/game/antagonist/outsider/revenant.dm
@@ -12,7 +12,7 @@ var/datum/antagonist/revenant/revenants = null
hard_cap = 12
hard_cap_round = 12
- var/rifts_left = 3
+ var/rifts_left = 1
var/kill_count = 0
var/obj/effect/portal/revenant/revenant_rift
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index f29b40aaa8e..718071062e9 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -160,6 +160,11 @@
to_chat(user, "How do you propose doing that without hands?")
return USE_FAIL_IS_SILICON
+ if (HAS_FLAG(USE_DISALLOW_SPECIALS) && is_mob_special(user))
+ if (show_messages)
+ to_chat(user, "Your current mob type prevents you from doing this.")
+ return USE_FAIL_IS_MOB_SPECIAL
+
if (HAS_FLAG(USE_FORCE_SRC_IN_USER) && !(src in user))
if (show_messages)
to_chat(user, "You need to be holding [src] to do that.")
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 7277c46d322..e47b188b5b9 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -399,6 +399,9 @@
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
return
else if(istype(O, /obj/structure/reagent_dispensers/fueltank) && O.Adjacent(user) && welding)
+ if(use_check(user, USE_DISALLOW_SPECIALS))
+ to_chat(user, SPAN_WARNING("A strange force prevents you from doing this.")) //there is no way to justify this icly
+ return
var/obj/structure/reagent_dispensers/fueltank/tank = O
if(tank.armed)
to_chat(user, "You are already heating \the [O]!")
diff --git a/code/modules/martial_arts/revenant.dm b/code/modules/martial_arts/revenant.dm
new file mode 100644
index 00000000000..793bf39434f
--- /dev/null
+++ b/code/modules/martial_arts/revenant.dm
@@ -0,0 +1,40 @@
+#define BASH_SLASH "HHH"
+
+/datum/martial_art/revenant
+ name = "Revenant"
+ help_verb = /datum/martial_art/revenant/proc/revenant_help
+ no_guns = TRUE
+ no_guns_message = "Revenants cannot use guns."
+
+/datum/martial_art/revenant/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ if(findtext(streak, BASH_SLASH))
+ streak = ""
+ bash_slash(A, D)
+ return TRUE
+ return FALSE
+
+/datum/martial_art/revenant/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ add_to_streak("H", D)
+ if(check_streak(A, D))
+ return TRUE
+ basic_hit(A, D)
+ return TRUE
+
+/datum/martial_art/revenant/proc/bash_slash(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)
+ A.do_attack_animation(D)
+ D.visible_message(SPAN_DANGER("[A] bashes [D] away!"), SPAN_DANGER("[A] bashes you away!"))
+ D.apply_damage(rand(5, 10), BRUTE, damage_flags = DAM_SHARP)
+ var/throw_range = rand(1, 2)
+ D.throw_at(get_step_away(D, A, throw_range), throw_range, THROWNOBJ_KNOCKBACK_SPEED / 3, A, FALSE)
+ playsound(get_turf(D), 'sound/weapons/slash.ogg', 25, 1, -1)
+ return TRUE
+
+/datum/martial_art/revenant/proc/revenant_help()
+ set name = "Recall Revenant Combat"
+ set desc = "Remember the martial techniques of the bluespace masters."
+ set category = "Abilities"
+
+ to_chat(usr, "You think of your former dimension...")
+ to_chat(usr, "Bash Slash: Harm Harm Harm. Deliver a strong slashing strike against the enemy, pushing them away.")
+
+#undef BASH_SLASH
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
index b1f9d0746ef..f0b8eb7f7a2 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm
@@ -123,6 +123,8 @@
H.gender = NEUTER
H.universal_understand = TRUE
H.add_language(LANGUAGE_REVENANT_RIFTSPEAK)
+ var/datum/martial_art/revenant/R = new /datum/martial_art/revenant()
+ R.teach(H)
/datum/species/revenant/get_random_name()
return "Revenant"
@@ -133,7 +135,7 @@
return FALSE
/datum/species/revenant/bullet_act(var/obj/item/projectile/P, var/def_zone, var/mob/living/carbon/human/H)
- if((istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) && prob(30))
+ if((istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) && prob(20))
H.visible_message(SPAN_CULT("The [P.name] gets absorbed by [H]!"), SPAN_CULT("You absorb the [P.name]!"))
return -1
return ..()
\ No newline at end of file
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 90347741f23..67f0335c5ac 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -116,6 +116,13 @@
/mob/living/carbon/alien/diona/is_diona()
return DIONA_NYMPH
+/proc/is_mob_special(A) // determines special mobs. has restrictions on certain things, like welderbombing
+ if(isrevenant(A))
+ return TRUE
+ if(iszombie(A))
+ return TRUE
+ return FALSE
+
/proc/isskeleton(A)
if(istype(A, /mob/living/carbon/human) && (A:get_species() == SPECIES_SKELETON))
return 1
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 12af5ebfc46..1d3639fbd7b 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -65,6 +65,9 @@
return
if (O.iswrench())
+ if(use_check(user, USE_DISALLOW_SPECIALS))
+ to_chat(user, SPAN_WARNING("A strange force prevents you from doing this.")) //there is no way to justify this icly
+ return
if(can_tamper && user.a_intent == I_HURT)
user.visible_message("\The [user] wrenches \the [src]'s faucet [is_leaking ? "closed" : "open"].","You wrench \the [src]'s faucet [is_leaking ? "closed" : "open"]")
is_leaking = !is_leaking
diff --git a/html/changelogs/geeves-more_revenant_tweaks.yml b/html/changelogs/geeves-more_revenant_tweaks.yml
new file mode 100644
index 00000000000..afc10f9345e
--- /dev/null
+++ b/html/changelogs/geeves-more_revenant_tweaks.yml
@@ -0,0 +1,10 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Revenants now get a martial art that allows them to bash people away on a three hit combo. This replaces their ability to use guns."
+ - rscdel: "Revenants are no longer able to operate welderbombs."
+ - tweak: "Revenants now absorb 20% of laser fire instead of 30%."
+ - tweak: "Moved Revenant spawnpoints into the station."
+ - tweak: "Tweaked the rift gameplay, should be easier for the station to stop the revenants now."
\ No newline at end of file
diff --git a/maps/aurora/aurora-2_under-station.dmm b/maps/aurora/aurora-2_under-station.dmm
index 8369c11bc15..b82811422d5 100644
--- a/maps/aurora/aurora-2_under-station.dmm
+++ b/maps/aurora/aurora-2_under-station.dmm
@@ -36,13 +36,6 @@
},
/turf/simulated/floor/carpet/rubber,
/area/engineering/cooling)
-"ep" = (
-/obj/structure/lattice,
-/obj/effect/landmark{
- name = "Revenant"
- },
-/turf/template_noop,
-/area/template_noop)
"eu" = (
/obj/structure/table/standard,
/obj/item/storage/briefcase/inflatable,
@@ -334,6 +327,9 @@
d2 = 2;
icon_state = "0-2"
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/plating{
roof_type = null
},
@@ -12774,7 +12770,7 @@ CN
CN
mc
CN
-ep
+Ar
CN
UG
sQ
diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm
index b564985299f..276b09472c7 100644
--- a/maps/aurora/aurora-3_sublevel.dmm
+++ b/maps/aurora/aurora-3_sublevel.dmm
@@ -2019,6 +2019,9 @@
pixel_y = 8;
specialfunctions = 4
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/tiled/freezer,
/area/engineering/bathroom)
"aeP" = (
@@ -12066,6 +12069,9 @@
dir = 1;
pixel_y = -28
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/wood,
/area/medical/patient_wing_gym)
"avG" = (
@@ -22398,6 +22404,9 @@
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/tiled/white,
/area/rnd/xenobiology/xenoflora_hazard)
"aVJ" = (
@@ -29479,17 +29488,6 @@
},
/turf/simulated/floor/carpet,
/area/engineering/break_room)
-"iwX" = (
-/obj/effect/floor_decal/industrial/warning/dust{
- dir = 1
- },
-/obj/effect/landmark{
- name = "Revenant"
- },
-/turf/simulated/floor/airless{
- icon_state = "asteroidplating"
- },
-/area/mine/unexplored)
"iAw" = (
/obj/structure/table/rack,
/obj/item/shovel{
@@ -32381,12 +32379,6 @@
/obj/machinery/power/crystal_agitator,
/turf/simulated/floor,
/area/security/penal_colony)
-"oJR" = (
-/obj/effect/landmark{
- name = "Revenant"
- },
-/turf/unsimulated/floor/asteroid/ash/rocky,
-/area/mine/unexplored)
"oKh" = (
/obj/effect/floor_decal/corner_wide/mauve{
dir = 10
@@ -35438,6 +35430,9 @@
pixel_x = -28
},
/obj/machinery/light/small/emergency,
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/tiled/freezer,
/area/maintenance/medsublevel_port)
"vnr" = (
@@ -52092,7 +52087,7 @@ nDL
nDL
tkm
iOl
-oJR
+aba
aba
aba
ale
@@ -71122,7 +71117,7 @@ aIZ
aNT
vnf
awP
-iwX
+aqA
ebn
ayi
akG
@@ -80887,7 +80882,7 @@ eEq
baw
cFw
nzR
-oJR
+aba
aba
aba
aaa
diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm
index 9a577cc7b78..b5e8b47dfdd 100644
--- a/maps/aurora/aurora-4_mainlevel.dmm
+++ b/maps/aurora/aurora-4_mainlevel.dmm
@@ -2242,9 +2242,6 @@
"ael" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/generic,
-/obj/effect/landmark{
- name = "RevenantRift"
- },
/turf/simulated/floor/tiled/old,
/area/maintenance/vault)
"aem" = (
@@ -4736,6 +4733,9 @@
d2 = 8;
icon_state = "2-8"
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/plating,
/area/maintenance/atmos_control)
"ajd" = (
@@ -60156,6 +60156,13 @@
},
/turf/simulated/floor/tiled,
/area/hallway/primary/aft)
+"dKN" = (
+/obj/random/junk,
+/obj/effect/landmark{
+ name = "Revenant"
+ },
+/turf/simulated/floor/plating,
+/area/maintenance/research_port)
"dKW" = (
/obj/item/stack/rods,
/turf/simulated/floor/airless,
@@ -62319,11 +62326,22 @@
/turf/simulated/floor/plating,
/area/maintenance/substation/supply)
"icb" = (
+/obj/structure/cable{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 6
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 6
+ },
/obj/effect/landmark{
name = "Revenant"
},
-/turf/unsimulated/floor/asteroid/ash/rocky,
-/area/mine/unexplored)
+/turf/simulated/floor/plating,
+/area/maintenance/security_starboard)
"idi" = (
/obj/structure/cable{
d1 = 1;
@@ -64020,6 +64038,9 @@
dir = 4
},
/obj/random/loot,
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/plating,
/area/maintenance/medbay)
"mnI" = (
@@ -86076,7 +86097,7 @@ aab
aab
aab
aab
-icb
+aab
aab
aab
aab
@@ -87879,7 +87900,7 @@ beG
bbs
bcY
bbs
-beC
+dKN
bbs
bcY
bbs
@@ -88589,7 +88610,7 @@ aaa
aaa
aab
aab
-icb
+aab
aox
qba
aij
@@ -99111,7 +99132,7 @@ aab
aab
aad
aaA
-aaI
+icb
aaT
aaT
aaT
@@ -99365,7 +99386,7 @@ aab
aab
aab
aab
-icb
+aab
aad
aaB
aaJ
@@ -113849,7 +113870,7 @@ vAC
vAC
mmQ
blN
-icb
+aab
aab
aab
aab
diff --git a/maps/aurora/aurora-5_interstitial.dmm b/maps/aurora/aurora-5_interstitial.dmm
index 655608f0533..bbc9e72341b 100644
--- a/maps/aurora/aurora-5_interstitial.dmm
+++ b/maps/aurora/aurora-5_interstitial.dmm
@@ -8089,12 +8089,6 @@
},
/turf/simulated/floor/plating,
/area/maintenance/interstitial_cargo)
-"zN" = (
-/obj/effect/landmark{
- name = "Revenant"
- },
-/turf/unsimulated/floor/asteroid/ash/rocky,
-/area/mine/unexplored)
"zQ" = (
/obj/structure/flora/pottedplant/random,
/obj/structure/extinguisher_cabinet{
@@ -10546,6 +10540,9 @@
dir = 9
},
/obj/machinery/firealarm/east,
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/tiled,
/area/maintenance/interstitial_main)
"LD" = (
@@ -12619,6 +12616,9 @@
/obj/machinery/alarm{
pixel_y = 28
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/plating,
/area/maintenance/security_interstitial)
"WR" = (
@@ -42791,7 +42791,7 @@ mo
mo
mo
mo
-zN
+ab
ab
ab
ab
@@ -50712,7 +50712,7 @@ if
im
wo
Zt
-zN
+ab
ab
ab
aa
diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm
index b1ced109b98..2c198b6df97 100644
--- a/maps/aurora/aurora-6_surface.dmm
+++ b/maps/aurora/aurora-6_surface.dmm
@@ -12223,6 +12223,9 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
+/obj/effect/landmark{
+ name = "Revenant"
+ },
/turf/simulated/floor/plating,
/area/maintenance/cargo/surface)
"kZt" = (
@@ -53955,7 +53958,7 @@ fdu
fdu
fdu
kKF
-nmN
+kKF
kKF
kKF
kKF