From b9d51da9e3453d81b106fb1bdb59d1571801fc44 Mon Sep 17 00:00:00 2001
From: ShiftyRail <31417754+ShiftyRail@users.noreply.github.com>
Date: Mon, 6 May 2019 17:29:38 +0200
Subject: [PATCH] Midround bomberman (#21520)
* Progress
* Whoops
* Test
* Fixes
* Landmarks and shit
* Additional fixes
* Duh
---
code/game/objects/effects/landmarks.dm | 2 +-
code/modules/bomberman/bomberman.dm | 28 +++++++++++-----------
code/modules/mob/dead/observer/observer.dm | 25 +++++++++++++++++++
3 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 420ac0ecd0b..67860ab22b6 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -134,4 +134,4 @@
name = "grinchstart"
/obj/effect/landmark/xtra_cleanergrenades
- name = "xtra_cleanergrenades"
\ No newline at end of file
+ name = "xtra_cleanergrenades"
diff --git a/code/modules/bomberman/bomberman.dm b/code/modules/bomberman/bomberman.dm
index d662c5799f3..a4f89ebbdc6 100644
--- a/code/modules/bomberman/bomberman.dm
+++ b/code/modules/bomberman/bomberman.dm
@@ -168,7 +168,6 @@ var/global/list/bombermangear = list()
if((!parent || !parent.arena) && bomberman_destroy)
destroy_environnement = 1
-
if(line_dir)
var/turf/T1 = get_turf(src)
step(src,line_dir)
@@ -968,7 +967,7 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
message_admins("[key_name_admin(user.client)] created a \"[size]\" Bomberman arena at [center.loc.name] ([center.x],[center.y],[center.z]) (JMP)")
log_game("[key_name_admin(user.client)] created a \"[size]\" Bomberman arena at [center.loc.name] ([center.x],[center.y],[center.z]) ")
- for(var/mob/dead/observer/O in observers)
+ for(var/mob/dead/observer/O in player_list)
to_chat(O, "[user.client.key] created a \"[size]\" Bomberman arena at [center.loc.name]. Click here to JUMP to it.")
else
@@ -976,8 +975,8 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
-/datum/bomberman_arena/proc/spawn_player(var/turf/T)
- var/mob/living/carbon/human/M = new(T)
+/datum/bomberman_arena/proc/spawn_player(var/turf/T, var/mob/M)
+ M.forceMove(T)
M.name = "Bomberman #[rand(1,999)]"
M.real_name = M.name
var/list/randomhexes = list(
@@ -1046,18 +1045,15 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
if(!isobserver(client_mob))
continue
- var/mob/living/carbon/human/M = spawn_player(S.spawnpoint)
- M.ckey = C.ckey
- dress_player(M)
- M.stunned = 3
- gladiators += M
+ var/mob/bomber = client_mob.transmogrify(/mob/living/carbon/human/, TRUE)
+ spawn_player(S.spawnpoint, bomber)
+ dress_player(bomber)
+ bomber.stunned = 3
+ gladiators += bomber
- if(S.player_mob)
- qdel(S.player_mob)
+ S.player_mob = bomber
- S.player_mob = M
-
- if(S.player_mob.ckey)
+ if(bomber.ckey)
readied++
if(readied < min_number_of_players)
@@ -1067,6 +1063,7 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
to_chat(M, "Not enough players. Round canceled.")
for(var/mob/M in gladiators)
+ M.completely_untransmogrify()
qdel(M)
gladiators = list()
@@ -1153,6 +1150,7 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
for(var/mob/living/M in gladiators)
if(M)
+ M.completely_untransmogrify()
qdel(M) //qdel doesn't work nicely with mobs
gladiators = list()
@@ -1304,6 +1302,8 @@ var/global/list/arena_spawnpoints = list()//used by /mob/dead/observer/Logout()
/datum/bomberman_arena/proc/planner(var/size,mob/user)
var/choice = 0
+ if (!user)
+ return TRUE
switch(size)
if("15x13 (2 players)")
var/obj/structure/planner/pencil = new(center, src)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 19d49e64612..e5758d78a91 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -1083,3 +1083,28 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
paiController.recruitWindow(src)
+
+// -- Require at least 2 players to start.
+
+// Global variable on whether an arena is being created or not
+var/creating_arena = FALSE
+
+/mob/dead/observer/verb/request_bomberman()
+ set name = "Request a bomberman arena"
+ set category = "Ghost"
+ set desc = "Create a bomberman arena for other observers and dead players."
+
+ if (ticker && ticker.current_state != GAME_STATE_PLAYING)
+ to_chat(src, "You can't use this verb before the game has started.")
+ return
+
+ if (arenas.len)
+ to_chat(src, "There are already bomberman arenas! Use the Find Arenas verb to jump to them.")
+ return
+
+ to_chat(src, "Pooling other ghosts for a bomberman arena...")
+ if (!creating_arena)
+ new /datum/bomberman_arena(locate(250, 250, 2), pick("15x13 (2 players)","15x15 (4 players)","39x23 (10 players)"), src)
+ creating_arena = TRUE
+ return
+ to_chat(src, "There were unfortunatly no available arenas.")