Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions code/__DEFINES/map_modules.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,9 @@
#define FORTS_ROLE_COMMANDER "Commander"

#define FORTS_ROLES list(FORTS_ROLE_MEMBER, FORTS_ROLE_MEDIC, FORTS_ROLE_ARTILLERYMAN, FORTS_ROLE_ENGINEER, FORTS_ROLE_OFFICER, FORTS_ROLE_COMMANDER)


#define MAP_MODULE_INSTAGIB "Instagib Deathmatch"

#define INSTAGIB_FACTION "Eternal Purgatory"
#define INSTAGIB_ROLE "Forsaken Sinner"
3 changes: 3 additions & 0 deletions code/__DEFINES/status_effects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@

#define STATUS_EFFECT_ARRAY_TURN_BACK /datum/status_effect/array_turn_back

#define STATUS_EFFECT_INSTAGIB_SPAWNED /datum/status_effect/instagib_spawned
#define STATUS_EFFECT_INSTAGIB_KILLED /datum/status_effect/instagib_killed

// Stasis helpers

#define IS_IN_STASIS(mob) (mob.has_status_effect(STATUS_EFFECT_STASIS_BAG))
1 change: 1 addition & 0 deletions code/_globalvars/lists/objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var/global/list/closet_list = list() //guess what? closets! /obj/structur
var/global/list/crematorium_list = list() //list if all /obj/structure/crematorium
var/global/list/implant_list = list() //list of all /obj/item/weapon/implant
var/global/list/ladder_list = list() //|====| <- /obj/structure/ladder
var/global/list/static_portal_list = list() //|====| <- /obj/structure/static_portal
var/global/list/mecha_tracking_list = list()//list of all /obj/item/mecha_parts/mecha_tracking
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
var/global/list/crafting_recipes = list() //list of all personal craft recipes
Expand Down
10 changes: 5 additions & 5 deletions code/controllers/subsystem/ticker.dm
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(ticker)

var/atom/movable/screen/cinematic = null
var/datum/station_state/start_state = null
var/datum/map_template/post_round_arena/arena = null
var/datum/map_template/arena/post_round/arena = null
var/list/medal_list = list()
var/station_was_nuked = FALSE //see nuclearbomb.dm and malfunction.dm
var/explosion_in_progress = FALSE //sit back and relax
Expand Down Expand Up @@ -628,11 +628,11 @@ SUBSYSTEM_DEF(ticker)
var/online = global.player_list.len
var/list/arenas = list()

for(var/datum/map_template/post_round_arena/A as anything in subtypesof(/datum/map_template/post_round_arena))
for(var/datum/map_template/arena/A as anything in subtypesof(/datum/map_template/arena/post_round))
if(A.spawners && (A.spawners >= (online - 5)) && (A.spawners <= (online + 5)))
arenas += A

var/datum/map_template/post_round_arena/picked_arena = /datum/map_template/post_round_arena/four_biomes
var/datum/map_template/arena/post_round/picked_arena = /datum/map_template/arena/post_round/four_biomes
if(arenas.len)
picked_arena = pick(arenas)

Expand All @@ -649,15 +649,15 @@ SUBSYSTEM_DEF(ticker)
if(!arena.load(arena_location, centered = TRUE))
CRASH("Loading arena map [arena.name] - [arena.mappath] failed!")

/datum/controller/subsystem/ticker/proc/load_arena_admin(datum/map_template/post_round_arena/new_arena)
/datum/controller/subsystem/ticker/proc/load_arena_admin(datum/map_template/arena/post_round/new_arena)
if(!config.deathmatch_arena)
return

if(arena) // clear arena if it was previously loaded
for(var/turf/T in block(locate(arena.bounds[MAP_MINX], arena.bounds[MAP_MINY], arena.bounds[MAP_MINZ]),
locate(arena.bounds[MAP_MAXX], arena.bounds[MAP_MAXY], arena.bounds[MAP_MAXZ])))
for(var/obj/O in T)
if(!istype(O, /obj/effect/landmark/post_round_dm/arena))
if(!istype(O, /obj/effect/landmark/arenas/post_round/arena))
qdel(O)

var/turf/arena_location = pick_landmarked_location("Arena Spawn", least_used = FALSE)
Expand Down
63 changes: 63 additions & 0 deletions code/datums/outfits/misc/instagib.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@

/datum/outfit/instagib/looser
name = "Instagib looser"
shoes = /obj/item/clothing/shoes/orange/candals

/datum/outfit/instagib/winner
name = "Instagib winner"
uniform = /obj/item/clothing/under/rank/chaplain/light
head = /obj/item/clothing/head/wizard/nimb
shoes = /obj/item/clothing/shoes/sandal/brown

/datum/outfit/instagib/arena/roman
name = "Roman"
head = /obj/item/clothing/head/helmet/roman/legionaire
uniform = /obj/item/clothing/under/roman
shoes = /obj/item/clothing/shoes/roman

/datum/outfit/instagib/arena/pirate
name = "Pirate"
head = /obj/item/clothing/head/pirate
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/boots
glasses = /obj/item/clothing/glasses/eyepatch
suit = /obj/item/clothing/suit/pirate

/datum/outfit/instagib/arena/mage
name = "Mage"
head = /obj/item/clothing/head/wizard/redhood
uniform = /obj/item/clothing/under/color/black
suit = /obj/item/clothing/suit/wizrobe/wiz_red
shoes = /obj/item/clothing/shoes/sandal/brown

/datum/outfit/instagib/arena/cultist
name = "Cultist"
head = /obj/item/clothing/head/culthood
uniform = /obj/item/clothing/under/color/black
shoes = /obj/item/clothing/shoes/boots/cult
suit = /obj/item/clothing/suit/hooded/cultrobes

/datum/outfit/instagib/arena/soviet
name = "Soviet"
head = /obj/item/clothing/head/ushanka/black_white
uniform = /obj/item/clothing/under/soviet
shoes = /obj/item/clothing/shoes/boots

/datum/outfit/instagib/arena/crusader
name = "Crusader"
head = /obj/item/clothing/head/helmet/crusader
uniform = /obj/item/clothing/under/color/black
shoes = /obj/item/clothing/shoes/boots
suit = /obj/item/clothing/suit/armor/crusader

/datum/outfit/instagib/arena/mafia
name = "Mafia"
head = /obj/item/clothing/head/det_hat/gray
uniform = /obj/item/clothing/under/mafia/sue
shoes = /obj/item/clothing/shoes/laceup

/datum/outfit/instagib/arena/sam
name = "Sam"
uniform = /obj/item/clothing/under/pants/classicjeans
shoes = /obj/item/clothing/shoes/red
glasses = /obj/item/clothing/glasses/aviator_red
37 changes: 37 additions & 0 deletions code/datums/spawners_menu/maps/instagib.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

/datum/spawner/instagib
name = "Forsaken Sinner"
desc = "Искупите свои грехи."

spawn_landmark_name = "Sinner Spawn"
lobby_spawner = TRUE
positions = INFINITY
cooldown = 30 SECONDS

var/datum/map_module/instagib/map_module
var/list/sinner_outfits

/datum/spawner/instagib/New(datum/map_module/instagib/MM)
. = ..()
map_module = MM
sinner_outfits = subtypesof(/datum/outfit/instagib/arena)

/datum/spawner/instagib/spawn_body(mob/dead/spectator)
var/spawnloc = pick_spawn_location()
var/client/C = spectator.client
var/mob/living/carbon/human/H = new(spawnloc)

H.key = C.key
H.real_name = C.key
H.name = C.key

map_module.assign_to_faction(H)
H.equipOutfit(pick(sinner_outfits))

H.makeSkeleton()
H.revive()
H.regenerate_icons()
ADD_TRAIT(H, ELEMENT_TRAIT_GODMODE, INNATE_TRAIT)
H.put_in_hands(new /obj/item/weapon/gun/energy/laser/devil_dagger)
H.shoes.flags = DROPDEL | ABSTRACT
H.shoes.canremove = 0
56 changes: 56 additions & 0 deletions code/datums/status_effects/neutral.dm
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,59 @@

/datum/status_effect/array_turn_back/on_apply()
return isreplicator(owner)


/atom/movable/screen/alert/status_effect/instagib_killed
name = "Мёртв"
desc = "Подожди секунду дабы вернуться на арену."
icon_state = "instagib"

/datum/status_effect/instagib_killed
id = "instagib_killed"
duration = 1.2 SECOND
status_type = STATUS_EFFECT_REPLACE
alert_type = /atom/movable/screen/alert/status_effect/instagib_killed

/datum/status_effect/instagib_killed/on_apply()
. = ..()
if(!.)
return

playsound(owner.loc, 'sound/magic/message.ogg', VOL_EFFECTS_MASTER)
new /obj/effect/temp_visual/cult/blood(owner.loc)
owner.Stun(1, TRUE)
owner.alpha = 55

/datum/status_effect/instagib_killed/on_remove()
owner.alpha = 255
owner.apply_status_effect(STATUS_EFFECT_INSTAGIB_SPAWNED)
return ..()


/atom/movable/screen/alert/status_effect/instagib_spawned
name = "Возродившийся"
desc = "Только что возродившиеся игроки не получают и не приносят очков за убийства."
icon_state = "instagib"

/datum/status_effect/instagib_spawned
id = "instagib_spawned"
duration = 1 SECOND
status_type = STATUS_EFFECT_REPLACE
alert_type = /atom/movable/screen/alert/status_effect/instagib_spawned

/datum/status_effect/instagib_spawned/on_apply()
. = ..()
if(!.)
return

if(iscarbon(owner))
var/mob/living/carbon/C = owner
var/mutable_appearance/overlay = mutable_appearance('icons/effects/effects.dmi', "bloodsparkles", EXTERNAL_APPEARANCE)
C.overlays_standing[EXTERNAL_APPEARANCE] = overlay
C.apply_standing_overlay(EXTERNAL_APPEARANCE)

/datum/status_effect/instagib_spawned/on_remove()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
C.remove_standing_overlay(EXTERNAL_APPEARANCE)
return ..()
12 changes: 12 additions & 0 deletions code/game/objects/structures/rock.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/obj/structure/big_rock
name = "big rock"
desc = "Ты чувствуешь бессмысленность бытия"
icon = 'icons/obj/objects.dmi'
icon_state = "rock"
density = TRUE

/obj/structure/big_rock/Bumped(atom/A)
if(isliving(A))
var/mob/living/L = A
L.Stun(0.5)
SpinAnimation(10,1)
38 changes: 38 additions & 0 deletions code/game/objects/structures/static_portal.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/obj/structure/static_portal
name = "Teleport"
icon = 'icons/obj/objects.dmi'
icon_state = "bluespace_wormhole_enter"
density = FALSE
anchored = TRUE
var/id = null
var/obj/structure/static_portal/linked_portal

/obj/structure/static_portal/atom_init()
global.static_portal_list += src
..()
return INITIALIZE_HINT_LATELOAD

/obj/structure/static_portal/Destroy()
global.static_portal_list -= src
return ..()

/obj/structure/static_portal/atom_init_late()
find_linked()

/obj/structure/static_portal/Crossed(atom/movable/AM)
. = ..()
if(!find_linked())
return

AM.forceMove(get_step(linked_portal, AM.dir))
playsound(src, 'sound/effects/static_portal.ogg', VOL_EFFECTS_MASTER)
playsound(linked_portal, 'sound/effects/static_portal.ogg', VOL_EFFECTS_MASTER)

/obj/structure/static_portal/proc/find_linked()
if(linked_portal)
return TRUE
for(var/obj/structure/static_portal/SP in global.static_portal_list)
if(SP != src && SP.id == id)
linked_portal = SP
return TRUE
return FALSE
6 changes: 3 additions & 3 deletions code/modules/admin/admin_verbs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1257,14 +1257,14 @@ var/global/centcom_barriers_stat = 1

var/list/arenas = list()

for(var/i in subtypesof(/datum/map_template/post_round_arena))
var/datum/map_template/post_round_arena/A = i
for(var/i in subtypesof(/datum/map_template/arena/post_round))
var/datum/map_template/arena/post_round/A = i
arenas[A.name] = A

var/choice = input("Select the arena") as null|anything in arenas
if(!choice) return

var/datum/map_template/post_round_arena/arena = arenas[choice]
var/datum/map_template/arena/post_round/arena = arenas[choice]
SSticker.load_arena_admin(arena)

log_admin("[key_name(src)] load arena map [arena.name] - [arena.mappath]")
Expand Down
7 changes: 7 additions & 0 deletions code/modules/arenas/arenas.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@

/obj/effect/landmark/arenas

/datum/map_template/arena
name = "Arena"
mappath = "maps/templates/"
var/spawners = 0
47 changes: 47 additions & 0 deletions code/modules/arenas/instagib.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@

/obj/effect/landmark/instagib_arena/purgatory
name = "Purgatory Spawn"

/obj/effect/landmark/instagib_arena/sinner
name = "Sinner Spawn"

/obj/effect/landmark/instagib_arena/winner
name = "Winner Spawn"

/obj/effect/landmark/instagib_arena/looser
name = "Looser Spawn"

/datum/map_template/arena/instagib/four_biomes
name = "Four Biomes - 40"
mappath = "maps/templates/instagib_arena/four_biomes.dmm"
spawners = 40

/datum/map_template/arena/instagib/med
name = "Medbay - 34"
mappath = "maps/templates/instagib_arena/medbay.dmm"
spawners = 34

/datum/map_template/arena/instagib/space_ships
name = "Space Ships - 26"
mappath = "maps/templates/instagib_arena/space_ships.dmm"
spawners = 26

/datum/map_template/arena/instagib/alien
name = "Alien Nest - 20"
mappath = "maps/templates/instagib_arena/alien_nest.dmm"
spawners = 20

/datum/map_template/arena/instagib/classic
name = "Classic - 12"
mappath = "maps/templates/instagib_arena/classic.dmm"
spawners = 13

/datum/map_template/arena/instagib/agressor
name = "Agressor - 10"
mappath = "maps/templates/instagib_arena/agressor.dmm"
spawners = 10

/datum/map_template/arena/instagib/space_evil
name = "Space Evil - 8"
mappath = "maps/templates/instagib_arena/space_evil.dmm"
spawners = 8
Loading
Loading