diff --git a/_maps/map_files/generic/chapel.dmm b/_maps/map_files/generic/chapel.dmm
new file mode 100644
index 00000000000..6bf7cb9bd63
--- /dev/null
+++ b/_maps/map_files/generic/chapel.dmm
@@ -0,0 +1,348 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"aa" = (
+/turf/open/space,
+/area/space)
+"ab" = (
+/turf/closed/indestructible/riveted,
+/area/hades)
+"ac" = (
+/obj/structure/bookcase/random/religion,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ad" = (
+/obj/structure/piano,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ae" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"af" = (
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ag" = (
+/obj/structure/window/fulltile,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ah" = (
+/obj/structure/window/reinforced,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ai" = (
+/obj/effect/gibspawner/human,
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"aj" = (
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ak" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/window/fulltile,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"al" = (
+/obj/structure/table/reinforced/brass,
+/obj/item/candle/infinite,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"am" = (
+/obj/structure/table/reinforced/brass,
+/obj/item/candle/infinite,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"an" = (
+/obj/structure/table/reinforced/brass,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ao" = (
+/obj/structure/table/reinforced/brass,
+/obj/item/candle/infinite,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"ap" = (
+/obj/structure/window/reinforced,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/fulltile,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"aq" = (
+/turf/open/floor/carpet,
+/area/hades)
+"ar" = (
+/obj/structure/chair/wood/normal{
+ icon_state = "wooden_chair";
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"as" = (
+/obj/structure/chair/wood/normal{
+ icon_state = "wooden_chair";
+ dir = 1
+ },
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"at" = (
+/obj/effect/gibspawner/human,
+/turf/open/floor/carpet,
+/area/hades)
+"au" = (
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/carpet,
+/area/hades)
+"av" = (
+/obj/structure/dresser,
+/turf/open/floor/carpet,
+/area/hades)
+"aw" = (
+/obj/structure/table/wood,
+/obj/item/trash/candle,
+/turf/open/floor/carpet,
+/area/hades)
+"ax" = (
+/obj/structure/flora/grass/green,
+/turf/open/floor/grass,
+/area/hades)
+"ay" = (
+/obj/structure/flora/ausbushes/ppflowers,
+/turf/open/floor/grass,
+/area/hades)
+"az" = (
+/obj/structure/flora/ausbushes/palebush,
+/turf/open/floor/grass,
+/area/hades)
+"aA" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/turf/open/floor/grass,
+/area/hades)
+"aB" = (
+/obj/structure/bookcase/random/nonfiction,
+/turf/open/floor/carpet,
+/area/hades)
+"aC" = (
+/obj/structure/bookcase/random/fiction,
+/turf/open/floor/carpet,
+/area/hades)
+"aD" = (
+/obj/structure/bookcase/random/adult,
+/turf/open/floor/carpet,
+/area/hades)
+"aE" = (
+/obj/structure/bookcase/random/religion,
+/turf/open/floor/carpet,
+/area/hades)
+"aF" = (
+/obj/structure/kitchenspike,
+/turf/open/floor/mineral/diamond,
+/area/hades)
+"aG" = (
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/mineral/gold,
+/area/hades)
+"aH" = (
+/turf/open/floor/mineral/gold,
+/area/hades)
+"aI" = (
+/obj/structure/table/wood,
+/turf/open/floor/carpet,
+/area/hades)
+"aJ" = (
+/obj/structure/flora/ausbushes/grassybush,
+/turf/open/floor/grass,
+/area/hades)
+"aK" = (
+/obj/structure/flora/ausbushes/stalkybush,
+/turf/open/floor/grass,
+/area/hades)
+"aL" = (
+/obj/structure/flora/ausbushes/genericbush,
+/turf/open/floor/grass,
+/area/hades)
+"aM" = (
+/obj/structure/bookcase/random/reference,
+/turf/open/floor/carpet,
+/area/hades)
+"aN" = (
+/obj/structure/closet/cabinet,
+/turf/open/floor/carpet,
+/area/hades)
+"aO" = (
+/obj/structure/table/wood,
+/obj/item/weapon/paper/hades_instructions,
+/turf/open/floor/carpet,
+/area/hades)
+"aP" = (
+/obj/structure/flora/ausbushes/fernybush,
+/turf/open/floor/grass,
+/area/hades)
+"aQ" = (
+/obj/structure/bed,
+/obj/item/weapon/bedsheet/black,
+/turf/open/floor/carpet,
+/area/hades)
+"aR" = (
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/carpet,
+/area/hades)
+"aS" = (
+/obj/structure/table/wood,
+/obj/item/weapon/storage/box/matches,
+/turf/open/floor/carpet,
+/area/hades)
+"aT" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plasteel,
+/area/hades)
+"aU" = (
+/obj/machinery/door/airlock/wood,
+/turf/open/floor/plasteel/hades,
+/area/hades)
+"aV" = (
+/obj/structure/table/wood,
+/obj/item/weapon/lipstick,
+/turf/open/floor/carpet,
+/area/hades)
+"aW" = (
+/obj/structure/table/wood,
+/obj/item/weapon/storage/fancy/candle_box,
+/turf/open/floor/carpet,
+/area/hades)
+"aX" = (
+/obj/structure/chair/wood/normal{
+ icon_state = "wooden_chair";
+ dir = 4
+ },
+/turf/open/floor/carpet,
+/area/hades)
+"aY" = (
+/obj/structure/chair/wood/normal{
+ icon_state = "wooden_chair";
+ dir = 8
+ },
+/turf/open/floor/carpet,
+/area/hades)
+"aZ" = (
+/obj/structure/table/wood,
+/obj/item/weapon/storage/crayons,
+/turf/open/floor/carpet,
+/area/hades)
+"ba" = (
+/obj/structure/table/wood,
+/obj/item/weapon/razor,
+/turf/open/floor/carpet,
+/area/hades)
+"bb" = (
+/obj/machinery/door/airlock/wood,
+/turf/open/floor/carpet,
+/area/hades)
+"bc" = (
+/obj/structure/chair/hades,
+/turf/open/floor/mineral/diamond,
+/area/hades)
+"bd" = (
+/obj/machinery/vending/cola,
+/turf/open/floor/carpet,
+/area/hades)
+"be" = (
+/obj/machinery/vending/snack,
+/turf/open/floor/carpet,
+/area/hades)
+"bf" = (
+/obj/structure/table/wood,
+/obj/machinery/chem_dispenser/drinks/beer,
+/turf/open/floor/carpet,
+/area/hades)
+"bg" = (
+/obj/structure/table/wood,
+/obj/machinery/microwave,
+/turf/open/floor/carpet,
+/area/hades)
+"bh" = (
+/obj/structure/table/wood,
+/obj/item/weapon/storage/box/donkpockets,
+/turf/open/floor/carpet,
+/area/hades)
+"bi" = (
+/obj/machinery/chem_dispenser/drinks,
+/obj/structure/table/wood,
+/turf/open/floor/carpet,
+/area/hades)
+"bj" = (
+/obj/structure/chair/wood/normal,
+/mob/living/simple_animal/hostile/hadesacolyte,
+/turf/open/floor/carpet,
+/area/hades)
+"bk" = (
+/obj/structure/table/wood,
+/obj/item/weapon/kitchen/fork,
+/turf/open/floor/carpet,
+/area/hades)
+"bl" = (
+/obj/structure/chair/wood/normal{
+ icon_state = "wooden_chair";
+ dir = 1
+ },
+/turf/open/floor/carpet,
+/area/hades)
+"bm" = (
+/obj/structure/table/wood,
+/obj/item/weapon/storage/box/drinkingglasses,
+/turf/open/floor/carpet,
+/area/hades)
+
+(
+1,
+1,
+1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaabacacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaabadaeafafafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaababababagahahaiafafajahahagababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabacacacakalamananananaoalapacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabaeafafafafajaqaqaqaqajafafafafaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafafafaeafafaqaqaqaqafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafarasasasafaqataqaqafarasasarafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafafafafafafaqaqaqaqafafafafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafasasarasafaqaqaqaqafasarasasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafafaeafafafaqataqaqafafaeafafafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafasasasarafaqaqaqaqafasasarasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafafafaeafafaqauaqaqafafafafaeafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabafarasasasafaqaqataqafasarasasafabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabaeafafafafafaqaqaqaqafafafafafaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaabababababababaqaqaqaqababababababababababababababababababababababaa
+aaaaabavavavavavabawaqaqaqabaxayazaAaxabaBaBaCaCaDaEabaFaGaHaHaHaGaFabaa
+aaaaabaqaqaqaqaqabaIaqaqaqabaJaKaLaAayabaMaqaqaqaqaMabafafafaHafafafabaa
+aaaaabaNaqaqaqaNabaOaqaqaqabaPayaJaxazabaMaqaqaqaqaCabafafafaHafafafabaa
+aaaaabaQaRaqaqaQabaSaqaqaqabaTaTaTaTaTabaEaqaRaRaqaBaUafafafaHafafafabaa
+aaaaabaVaqaqaqaOabaWaqaqaqabaXaqaqaqaYabaEaqaRaRaqaBabafafafaHafafafabaa
+aaaaabaQaqaqaqaQabaZaqaqaqabaXaqaqaqaYabaEaqaqaqaqaCabafafafaHafafafabaa
+aaaaabaIaqaqaRbaabaIaqaqaqbbaqaqaqaqaqabababbbababababaFaGaHbcaHaGaFabaa
+aaaaabaQaRaqaqaQabaqaqaqaqabaqaqaqaqaqabaEaBaqaCaBaEabafafafaHafafafabaa
+aaaaabababbbababababababababaqaqaqaqaqabaEaqaqaqaRaBabafafafaHafafafabaa
+aaaaabaqaqaqaqbdbebfbgbhbiabaXaqaqaRaYabaBaqaqaqaqaEabafafafaHafafafabaa
+aaaaabaqbjbjaqaqaqaqaqaqaqabaXaqaqaqaYabaCaqaqaqaqaMabafafafaHafafafabaa
+aaaaabaXbkaIaYaqaqaqaqaqaqbbaqaqaqaqaqbbaqaqaRaqaqaEabafafafaHafafafabaa
+aaaaabaqblblaqaqaqbmaIaIaOabaqaqaqaqaqabaMaMaBaDaCaMabaFaGaHaHaHaGaFabaa
+aaaaabababababababababababababababababababababababababababababababababaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm
index 58314f4fbae..967d7bea649 100644
--- a/code/datums/helper_datums/map_template.dm
+++ b/code/datums/helper_datums/map_template.dm
@@ -23,21 +23,7 @@
height = bounds[MAP_MAXY]
return bounds
-/datum/map_template/proc/load(turf/T, centered = FALSE)
- if(centered)
- T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z)
- if(!T)
- return
- if(T.x+width > world.maxx)
- return
- if(T.y+height > world.maxy)
- return
-
- var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE)
- if(!bounds)
- return 0
-
- //initialize things that are normally initialized after map load
+/proc/initTemplateBounds(var/list/bounds)
var/list/obj/machinery/atmospherics/atmos_machines = list()
var/list/obj/structure/cable/cables = list()
var/list/atom/atoms = list()
@@ -58,6 +44,23 @@
SSmachine.setup_template_powernets(cables)
SSair.setup_template_machinery(atmos_machines)
+/datum/map_template/proc/load(turf/T, centered = FALSE)
+ if(centered)
+ T = locate(T.x - round(width/2) , T.y - round(height/2) , T.z)
+ if(!T)
+ return
+ if(T.x+width > world.maxx)
+ return
+ if(T.y+height > world.maxy)
+ return
+
+ var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE)
+ if(!bounds)
+ return 0
+
+ //initialize things that are normally initialized after map load
+ initTemplateBounds(bounds)
+
log_game("[name] loaded at at [T.x],[T.y],[T.z]")
return 1
diff --git a/code/game/gamemodes/miniantags/hades/hades.dm b/code/game/gamemodes/miniantags/hades/hades.dm
index da25b58168a..d9882cf21b4 100644
--- a/code/game/gamemodes/miniantags/hades/hades.dm
+++ b/code/game/gamemodes/miniantags/hades/hades.dm
@@ -43,11 +43,14 @@
var/currentState = STATE_JUDGE
var/rageLevel = 0
+ var/maxWrathTimer = 150
+ var/lastWrathTimer = 0
+
var/list/validSins = list("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath")
var/lastsinPerson = 0
var/sinPersonTime = 300
var/lastFlee = 0
- var/fleeTimer = 150
+ var/fleeTimer = 30
var/fakesinPersonChance = 60
var/list/sinPersonsayings = list("You revel in only your own greed.",\
"There is nothing but your absolution.",\
@@ -79,6 +82,14 @@
/mob/living/simple_animal/hostile/hades/New()
..()
+ //helper_datums/map_template.dmm make this a generic function
+
+ var/list/bounds = maploader.load_map('_maps/map_files/generic/chapel.dmm')
+ initTemplateBounds(bounds)
+ log_game("Chapel of Sin loaded by [src] spawning.")
+
+ //
+
sinLightning = new/obj/effect/proc_holder/spell/targeted/lightning(src)
sinLightning.charge_max = 1
@@ -123,6 +134,18 @@
SpinAnimation(0,0)
explosion(get_turf(src), 0, 2, 4, 6, flame_range = 6)
..()
+ var/area/A = locate(/area/hades) in world
+ if(A)
+ var/turf/T = get_turf(locate(/obj/effect/landmark/event_spawn) in A)
+ if(T)
+ src.visible_message("[src]'s Staff is flung free as their body explodes.")
+ var/obj/structure/ladder/unbreakable/hades/churchLadder = new/obj/structure/ladder/unbreakable/hades(T)
+ var/obj/structure/ladder/unbreakable/hades/bodyLadder = new/obj/structure/ladder/unbreakable/hades(get_turf(src))
+ var/obj/item/weapon/hades_staff/HS = new/obj/item/weapon/hades_staff(get_turf(src))
+ HS.throw_at_fast(pick(orange(src,7)),10,1)
+ churchLadder.up = bodyLadder
+ bodyLadder.down = churchLadder
+ qdel(src)
/mob/living/simple_animal/hostile/hades/attackby(obj/item/I, mob/user, params)
..()
@@ -210,8 +233,9 @@
if(..() && !isDoingDeath) // appropriately check if we're alive now we leave a corpse
if(health > maxHealth/4 && !isFleeing)
if(rageLevel > 50)
+ lastWrathTimer = world.time
currentState = STATE_WRATH
- else if(rageLevel <= 0)
+ else
currentState = STATE_JUDGE
else
if(world.time > lastFlee + fleeTimer)
@@ -236,12 +260,16 @@
A.gib()
if(currentState == STATE_WRATH) // we have been enraged.
- rageLevel -= 0.25 // rage phase starts at 50, meaning roughly 20s of rage.
+ if(world.time > lastWrathTimer + maxWrathTimer)
+ rageLevel = 0 // wind down if we're wrathful too long.
+ rageLevel -= 1 // rage phase starts at 50, meaning roughly 20s of rage.
if(currentAcolytes.len == 0)
src.say("Rise, Servants. AID YOUR MASTER.")
playsound(get_turf(src), 'sound/magic/CastSummon.ogg', 100, 1)
for(var/i in 1 to 5)
- currentAcolytes += new/mob/living/simple_animal/hostile/hadesacolyte(get_turf(src))
+ var/mob/living/simple_animal/hostile/hadesacolyte/HA = new/mob/living/simple_animal/hostile/hadesacolyte(get_turf(src))
+ HA.master = src
+ currentAcolytes += HA
if(rageLevel >= 100)
rageLevel = 50
var/list/overboardSayings = list("Ashes! It will all be ashes!","I will bring about the apocolypse!",\
@@ -255,6 +283,7 @@
for(var/mob/living/A in nearby)
if(A.ckey)
slashCount++
+ A.Beam(src,"n_beam",'icons/effects/beam.dmi',10)
spawn(slashCount+3)
loc = get_turf(A)
sinShed(StartLoc)
@@ -322,98 +351,144 @@
src.say("Your sin, [sinPerson], is Greed.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- var/list/greed = list(/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/diamond)
- for(var/i in 1 to 10)
- var/greed_type = pick(greed)
- new greed_type(get_turf(sinPerson))
+ sin_Greed(sinPerson, TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- var/mob/living/M = sinPerson.change_mob_type(/mob/living/simple_animal/cockroach,get_turf(sinPerson),"Greedroach",1)
- M.AddSpell(new/obj/effect/proc_holder/spell/targeted/mind_transfer)
+ sin_Greed(sinPerson, FALSE)
if("Gluttony")
src.say("Your sin, [sinPerson], is Gluttony.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- var/list/allTypes = list()
- for(var/A in typesof(/obj/item/weapon/reagent_containers/food/snacks))
- var/obj/item/weapon/reagent_containers/food/snacks/O = A
- if(initial(O.cooked_type))
- allTypes += A
- for(var/i in 1 to 10)
- var/greed_type = pick(allTypes)
- new greed_type(get_turf(sinPerson))
+ sin_Gluttony(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- sinPerson.reagents.add_reagent("nutriment",1000)
+ sin_Gluttony(sinPerson,FALSE)
if("Pride")
src.say("Your sin, [sinPerson], is Pride.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- var/obj/item/weapon/twohanded/sin_pride/good = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
- good.pride_direction = FALSE
+ sin_Pride(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- var/obj/item/weapon/twohanded/sin_pride/bad = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
- bad.pride_direction = TRUE
+ sin_Pride(sinPerson,FALSE)
if("Lust")
src.say("Your sin, [sinPerson], is Lust.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- var/obj/item/lovestone/good = new/obj/item/lovestone(get_turf(sinPerson))
- good.lust_direction = FALSE
+ sin_Lust(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- var/obj/item/lovestone/bad = new/obj/item/lovestone(get_turf(sinPerson))
- bad.lust_direction = TRUE
+ sin_Lust(sinPerson,TRUE)
if("Envy")
src.say("Your sin, [sinPerson], is Envy.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- for(var/mob/living/carbon/human/H in player_list) // name lottery
- if(H == sinPerson)
- continue
- if(prob(25))
- spawn(10)
- sinPerson.name = H.name
- sinPerson.real_name = H.real_name
- var/datum/dna/lottery = H.dna
- lottery.transfer_identity(sinPerson, transfer_SE=1)
- sinPerson.updateappearance(mutcolor_update=1)
- sinPerson.domutcheck()
+ sin_Envy(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- var/sinPersonspecies = pick(species_list)
- var/newtype = species_list[sinPersonspecies]
- sinPerson.set_species(newtype)
+ sin_Envy(sinPerson,FALSE)
if("Sloth")
src.say("Your sin, [sinPerson], is Sloth.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- sinPerson.drowsyness += 1000
+ sin_Sloth(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- sinPerson.reagents.add_reagent("frostoil", 50)
+ sin_Sloth(sinPerson,FALSE)
if("Wrath")
src.say("Your sin, [sinPerson], is Wrath.")
if(prob(50))
src.say("I will indulge your sin, [sinPerson].")
- sinPerson.change_mob_type(/mob/living/simple_animal/slaughter,get_turf(sinPerson),"Wrath Demon",1)
+ sin_Wrath(sinPerson,TRUE)
else
src.say("Your sin will be punished, [sinPerson]!")
- sinPerson.reagents.add_reagent("lexorin", 100)
- sinPerson.reagents.add_reagent("mindbreaker", 100)
+ sin_Wrath(sinPerson,FALSE)
///Sin related things
+//global Sin procs, shared between staff and pope
+
+/proc/sin_Greed(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ var/list/greed = list(/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/silver,/obj/item/stack/sheet/mineral/diamond)
+ for(var/i in 1 to 10)
+ var/greed_type = pick(greed)
+ new greed_type(get_turf(sinPerson))
+ else
+ var/mob/living/M = sinPerson.change_mob_type(/mob/living/simple_animal/cockroach,get_turf(sinPerson),"Greedroach",1)
+ M.AddSpell(new/obj/effect/proc_holder/spell/targeted/mind_transfer)
+
+/proc/sin_Gluttony(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ var/list/allTypes = list()
+ for(var/A in typesof(/obj/item/weapon/reagent_containers/food/snacks))
+ var/obj/item/weapon/reagent_containers/food/snacks/O = A
+ if(initial(O.cooked_type))
+ allTypes += A
+ for(var/i in 1 to 10)
+ var/greed_type = pick(allTypes)
+ new greed_type(get_turf(sinPerson))
+ else
+ sinPerson.reagents.add_reagent("nutriment",1000)
+
+/proc/sin_Pride(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ var/obj/item/weapon/twohanded/sin_pride/good = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
+ good.name = "Indulged [good.name]"
+ good.pride_direction = FALSE
+ else
+ var/obj/item/weapon/twohanded/sin_pride/bad = new/obj/item/weapon/twohanded/sin_pride(get_turf(sinPerson))
+ bad.name = "Punished [bad.name]"
+ bad.pride_direction = TRUE
+
+/proc/sin_Lust(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ var/obj/item/lovestone/good = new/obj/item/lovestone(get_turf(sinPerson))
+ good.name = "Indulged [good.name]"
+ good.lust_direction = FALSE
+ else
+ var/obj/item/lovestone/bad = new/obj/item/lovestone(get_turf(sinPerson))
+ bad.name = "Punished [bad.name]"
+ bad.lust_direction = TRUE
+
+/proc/sin_Envy(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ for(var/mob/living/carbon/human/H in player_list) // name lottery
+ if(H == sinPerson)
+ continue
+ if(prob(25))
+ spawn(10)
+ sinPerson.name = H.name
+ sinPerson.real_name = H.real_name
+ var/datum/dna/lottery = H.dna
+ lottery.transfer_identity(sinPerson, transfer_SE=1)
+ sinPerson.updateappearance(mutcolor_update=1)
+ sinPerson.domutcheck()
+ else
+ var/sinPersonspecies = pick(species_list)
+ var/newtype = species_list[sinPersonspecies]
+ sinPerson.set_species(newtype)
+
+/proc/sin_Sloth(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ sinPerson.drowsyness += 1000
+ else
+ sinPerson.reagents.add_reagent("frostoil", 50)
+
+/proc/sin_Wrath(var/mob/living/carbon/human/sinPerson, var/isIndulged)
+ if(isIndulged)
+ sinPerson.change_mob_type(/mob/living/simple_animal/slaughter,get_turf(sinPerson),"Wrath Demon",1)
+ else
+ sinPerson.reagents.add_reagent("lexorin", 100)
+ sinPerson.reagents.add_reagent("mindbreaker", 100)
+
/obj/effect/overlay/temp/hadesFlick
name = "transdimensional waste"
icon = 'icons/mob/mob.dmi'
icon_state = "liquify"
duration = 15
-
-
/obj/effect/timestop/hades // custom timeslip to make him immune
name = "Frozen Time"
desc = "Time has slowed to a halt."
@@ -503,9 +578,9 @@
/mob/living/simple_animal/hostile/hadesacolyte
name = "Acolyte of Hades"
desc = "Darkness seethes from their every pore."
- icon_state = "faithless"
- icon_living = "faithless"
- icon_dead = "faithless_dead"
+ icon_state = "hades_acolyte"
+ icon_living = "hades_acolyte"
+ icon_dead = "hades_acolyte_dead"
speak_chance = 0
turns_per_move = 5
response_help = "trembles in fear of"
@@ -525,6 +600,17 @@
del_on_death = 0
faction = list("hades")
+ var/mob/living/simple_animal/hostile/hades/master
+
+/mob/living/simple_animal/hostile/hadesacolyte/Life()
+ if(..())
+ if(master)
+ if(get_dist(src,master) > 5)
+ src.visible_message("[src] twists and distorts, before vanishing in a snap.")
+ src.forceMove(get_turf(master))
+
+
+
#undef STATE_JUDGE
#undef STATE_WRATH
#undef STATE_FLEE
\ No newline at end of file
diff --git a/code/game/gamemodes/miniantags/hades/hades_chapel.dm b/code/game/gamemodes/miniantags/hades/hades_chapel.dm
new file mode 100644
index 00000000000..3f506c1c496
--- /dev/null
+++ b/code/game/gamemodes/miniantags/hades/hades_chapel.dm
@@ -0,0 +1,166 @@
+/area/hades
+ name = "Chapel of Sin"
+ icon_state = "yellow"
+ requires_power = 0
+ has_gravity = 1
+
+/turf/open/floor/plasteel/hades
+ name = "Sin-touched Floor"
+ icon_state = "cult"
+
+/obj/structure/chair/hades
+ name = "Cross of Hades"
+ desc = "An inverted cross, with straps on it to support the weight of a living being."
+ icon_state = "chair_hades"
+ var/list/watchedSpikes = list()
+
+/obj/structure/chair/hades/New()
+ ..()
+ flags |= NODECONSTRUCT
+ for(var/obj/structure/kitchenspike/KS in range(12))
+ watchedSpikes += KS
+
+/obj/structure/chair/hades/proc/considerReady()
+ //buckled_mobs seems to work inconsistently, so we're doing some custom searching here.
+ if(!buckled_mobs)
+ return FALSE
+ if(!buckled_mobs.len)
+ return FALSE
+ for(var/obj/structure/kitchenspike/KS in watchedSpikes)
+ var/mob/living/M = locate(/mob/living) in get_turf(KS)
+ if(!M)
+ return FALSE
+ return TRUE
+
+/obj/structure/chair/hades/proc/completeRitual()
+ for(var/obj/structure/kitchenspike/KS in watchedSpikes)
+ var/mob/living/M = locate(/mob/living) in get_turf(KS)
+ M.gib()
+ playsound(get_turf(src), 'sound/effects/pope_entry.ogg', 100, 1)
+ spawn(100)
+ playsound(get_turf(src), 'sound/effects/hyperspace_end.ogg', 100, 1)
+ new/obj/item/weapon/hades_staff/imbued(get_turf(src))
+ src.visible_message("[src] shatters into a thousand shards, a staff falling from it.")
+ qdel(src)
+
+/obj/structure/chair/hades/attackby(obj/item/weapon/W, mob/user, params)
+ ..()
+ if(istype(W, /obj/item/weapon/hades_staff))
+ src.visible_message("[user] inserts the [W] into the [src], giving it a quick turn.")
+ if(considerReady())
+ qdel(W)
+ src.visible_message("[src] shudders, the sound of moving gears arising...")
+ for(var/mob/living/M in buckled_mobs)
+ M.gib()
+ for(var/i in 1 to 4)
+ spawn(i*10)
+ playsound(get_turf(src), 'sound/effects/clang.ogg', 100, 1)
+ spawn(50)
+ src.visible_message("[src] begins to lower into the ground...")
+ icon_state = "chair_hades_slide"
+ addtimer(src, "completeRitual", 50, FALSE)
+ else
+ src.visible_message("[src] clunks, the sound of grinding gears arising. Nothing happens.")
+
+/obj/structure/ladder/unbreakable/hades
+ name = "Dimensional Rift"
+ desc = "Where does it lead?"
+ icon = 'icons/mob/EvilPope.dmi'
+ icon_state = "popedeath"
+ anchored = TRUE
+
+/obj/structure/ladder/unbreakable/hades/update_icon()
+ return
+
+/obj/item/weapon/paper/hades_instructions
+ name = "paper- 'Hastily Scrawled Letter'"
+ info = "The Master has instructed us to collect corpses for the ritual, and told us to deposity them in the Ritual Room, behind a bookcase in the library. The Master has locked the device to only work with his key, so no more accidents happen."
+
+/obj/item/weapon/hades_staff
+ name = "Staff of Hades"
+ desc = "A large, dark staff, with a set of key-like prongs on the end."
+ icon_state = "staffofchange"
+ icon = 'icons/obj/guns/magic.dmi'
+ item_state = "staffofchange"
+ slot_flags = SLOT_BELT | SLOT_BACK
+ force = 40
+ throwforce = 10
+ w_class = 3
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ attack_verb = list("slapped", "shattered", "blasphemed", "smashed", "whacked", "crushed", "hammered")
+ block_chance = 50
+
+/obj/item/weapon/hades_staff/imbued
+ name = "Imbued Staff of Hades"
+ desc = " Bestowed with the power of wayward souls, this Staff allows the wielder to judge a target."
+ var/lastJudge = 0
+ var/judgeCooldown = 150
+
+/obj/item/weapon/hades_staff/imbued/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
+ if(!istype(M))
+ return ..()
+
+ if(world.time > lastJudge + judgeCooldown)
+ var/mob/living/sinPerson = M
+ lastJudge = world.time
+ var/sinPersonchoice = pick("Greed","Gluttony","Pride","Lust","Envy","Sloth","Wrath")
+ switch(sinPersonchoice)
+ if("Greed")
+ src.say("Your sin, [sinPerson], is Greed.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Greed(sinPerson, TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Greed(sinPerson, FALSE)
+ if("Gluttony")
+ src.say("Your sin, [sinPerson], is Gluttony.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Gluttony(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Gluttony(sinPerson,FALSE)
+ if("Pride")
+ src.say("Your sin, [sinPerson], is Pride.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Pride(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Pride(sinPerson,FALSE)
+ if("Lust")
+ src.say("Your sin, [sinPerson], is Lust.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Lust(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Lust(sinPerson,TRUE)
+ if("Envy")
+ src.say("Your sin, [sinPerson], is Envy.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Envy(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Envy(sinPerson,FALSE)
+ if("Sloth")
+ src.say("Your sin, [sinPerson], is Sloth.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Sloth(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Sloth(sinPerson,FALSE)
+ if("Wrath")
+ src.say("Your sin, [sinPerson], is Wrath.")
+ if(prob(50))
+ src.say("I will indulge your sin, [sinPerson].")
+ sin_Wrath(sinPerson,TRUE)
+ else
+ src.say("Your sin will be punished, [sinPerson]!")
+ sin_Wrath(sinPerson,FALSE)
+ else
+ ..()
+ user << "The [src] is still recharging."
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 0b818e9ced6..3de0203b710 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi
index 7a0ccdcbe56..a16797fa17c 100644
Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index b84db3190ca..37d6a5bf53f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -364,6 +364,7 @@
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm"
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm"
#include "code\game\gamemodes\miniantags\hades\hades.dm"
+#include "code\game\gamemodes\miniantags\hades\hades_chapel.dm"
#include "code\game\gamemodes\miniantags\monkey\monkey.dm"
#include "code\game\gamemodes\miniantags\morph\morph.dm"
#include "code\game\gamemodes\miniantags\sintouched\objectives.dm"