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.")