mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
@@ -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
|
||||
"}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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("<span class='warning'><font size=4>[src]'s Staff is flung free as their body explodes.</font></span>")
|
||||
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("<span class='warning'>[src] twists and distorts, before vanishing in a snap.</span>")
|
||||
src.forceMove(get_turf(master))
|
||||
|
||||
|
||||
|
||||
#undef STATE_JUDGE
|
||||
#undef STATE_WRATH
|
||||
#undef STATE_FLEE
|
||||
@@ -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("<span class='warning'>[src] shatters into a thousand shards, a staff falling from it.</span>")
|
||||
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("<span class='warning'>[user] inserts the [W] into the [src], giving it a quick turn.</span>")
|
||||
if(considerReady())
|
||||
qdel(W)
|
||||
src.visible_message("<span class='warning'>[src] shudders, the sound of moving gears arising...</span>")
|
||||
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("<span class='warning'>[src] begins to lower into the ground...</span>")
|
||||
icon_state = "chair_hades_slide"
|
||||
addtimer(src, "completeRitual", 50, FALSE)
|
||||
else
|
||||
src.visible_message("<span class='warning'>[src] clunks, the sound of grinding gears arising. Nothing happens.</span>")
|
||||
|
||||
/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."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 204 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 28 KiB |
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user