Bomberman part 1
@@ -908,6 +908,7 @@
|
||||
#include "code\modules\awaymissions\maploader\reader.dm"
|
||||
#include "code\modules\awaymissions\maploader\swapmaps.dm"
|
||||
#include "code\modules\awaymissions\maploader\writer.dm"
|
||||
#include "code\modules\bomberman\bomberman.dm"
|
||||
#include "code\modules\client\client defines.dm"
|
||||
#include "code\modules\client\client procs.dm"
|
||||
#include "code\modules\client\preferences.dm"
|
||||
|
||||
@@ -557,4 +557,20 @@
|
||||
|
||||
//Return a lattice to allow plating building, return 0 for error message, return -1 for silent fail.
|
||||
/turf/proc/canBuildPlating()
|
||||
return BUILD_SILENT_FAILURE
|
||||
return BUILD_SILENT_FAILURE
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
|
||||
/turf/proc/spawn_powerup()
|
||||
spawn(5)
|
||||
var/powerup = pick(
|
||||
50;/obj/structure/powerup/bombup,
|
||||
50;/obj/structure/powerup/fire,
|
||||
50;/obj/structure/powerup/skate,
|
||||
10;/obj/structure/powerup/kick,
|
||||
10;/obj/structure/powerup/line,
|
||||
10;/obj/structure/powerup/power,
|
||||
10;/obj/structure/powerup/skull,
|
||||
5;/obj/structure/powerup/full,
|
||||
)
|
||||
new powerup(src)
|
||||
|
||||
@@ -34,6 +34,7 @@ var/list/directional = list(
|
||||
/obj/machinery/light,
|
||||
/obj/machinery/door/airlock/multi_tile,
|
||||
/obj/machinery/camera,
|
||||
/obj/structure/bomberflame,
|
||||
)
|
||||
|
||||
var/list/exception = list(
|
||||
|
||||
@@ -742,6 +742,11 @@ var/global/floorIsLava = 0
|
||||
<A href='?src=\ref[src];secretsfun=togglenarsie'>Toggle Nar-Sie's behaviour</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakealerts'>Trigger a fake alert</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=fakebooms'>Adds in some Micheal Bay to the shift without major destruction</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=massbomber'>Turn every players into Bomberman</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bomberhurt'>Make Bomberman Bombs actually hurt players</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bomberdestroy'>Make Bomberman Bombs actually destroy stuff</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bombernohurt'>Make Bomberman Bombs harmless to players(default)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=bombernodestroy'>Make Bomberman Bombs harmless to the environnement(default)</A><BR>
|
||||
<BR>
|
||||
<B>Final Solutions</B><BR>
|
||||
<I>(Warning, these will end the round!)</I><BR>
|
||||
|
||||
@@ -108,6 +108,8 @@ var/list/admin_verbs_fun = list(
|
||||
/client/proc/editappear,
|
||||
/client/proc/commandname,
|
||||
/client/proc/delete_all_adminbus,
|
||||
/client/proc/delete_all_bomberman,
|
||||
/client/proc/create_bomberman_arena,
|
||||
/client/proc/gib_money, // /vg/
|
||||
/client/proc/smissmas,
|
||||
)
|
||||
|
||||
@@ -2761,6 +2761,69 @@
|
||||
for(var/i = 1 to choice)
|
||||
world << sound('sound/effects/explosionfar.ogg')
|
||||
sleep(rand(2, 10)) //Sleep 0.2 to 1 second
|
||||
if("massbomber")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBM")
|
||||
var/choice = alert("Dress every player like Bomberman and give them BBDs?","Bomberman Mode Activation","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
world << sound('sound/bomberman/start.ogg')
|
||||
for(var/mob/living/carbon/human/M in player_list)
|
||||
if(M.wear_suit)
|
||||
var/obj/item/O = M.wear_suit
|
||||
M.u_equip(O)
|
||||
O.loc = M.loc
|
||||
O.dropped(M)
|
||||
if(M.head)
|
||||
var/obj/item/O = M.head
|
||||
M.u_equip(O)
|
||||
O.loc = M.loc
|
||||
O.dropped(M)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/bomberman(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/bomberman(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/bomberman/(M), slot_s_store)
|
||||
M.update_icons()
|
||||
M << "Wait...what?"
|
||||
spawn(50)
|
||||
M << "<span class='notice'>Tip: Use the BBD in your suit's pocket to place bombs.</span>"
|
||||
|
||||
message_admins("[key_name_admin(usr)] turned everyone into Bomberman!")
|
||||
log_admin("[key_name_admin(usr)] turned everyone into Bomberman!")
|
||||
if("bomberhurt")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBH")
|
||||
var/choice = alert("Activate Cuban Pete mode? Note that newly spawned BBD will still have player damage deactivated.","Activating Bomberman Bombs Player Damage","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
for(var/obj/item/weapon/bomberman/B in world)
|
||||
B.hurt_players = 1
|
||||
message_admins("[key_name_admin(usr)] enabled the player damage of the Bomberman Bomb Dispensers currently in the world. Cuban Pete approves.")
|
||||
log_admin("[key_name_admin(usr)] enabled the player damage of the Bomberman Bomb Dispensers currently in the world. Cuban Pete approves.")
|
||||
if("bomberdestroy")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBD")
|
||||
var/choice = alert("Activate Michael Bay mode? Note that newly spawned BBD will still have environnement damage deactivated.","Activating Bomberman Bombs Environnement Damage","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
for(var/obj/item/weapon/bomberman/B in world)
|
||||
B.destroy_environnement = 1
|
||||
message_admins("[key_name_admin(usr)] enabled the environnement damage of the Bomberman Bomb Dispensers currently in the world. Michael Bay approves.")
|
||||
log_admin("[key_name_admin(usr)] enabled the environnement damage of the Bomberman Bomb Dispensers currently in the world. Michael Bay approves.")
|
||||
if("bombernohurt")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBNH")
|
||||
var/choice = alert("Disable Cuban Pete mode.","Disable Bomberman Bombs Player Damage","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
for(var/obj/item/weapon/bomberman/B in world)
|
||||
B.hurt_players = 0
|
||||
message_admins("[key_name_admin(usr)] disabled the player damage of the Bomberman Bomb Dispensers currently in the world.")
|
||||
log_admin("[key_name_admin(usr)] disabled the player damage of the Bomberman Bomb Dispensers currently in the world.")
|
||||
if("bombernodestroy")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","BBND")
|
||||
var/choice = alert("Disable Michael Bay mode?","Disable Bomberman Bombs Environnement Damage","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
for(var/obj/item/weapon/bomberman/B in world)
|
||||
B.destroy_environnement = 0
|
||||
message_admins("[key_name_admin(usr)] disabled the environnement damage of the Bomberman Bomb Dispensers currently in the world.")
|
||||
log_admin("[key_name_admin(usr)] disabled the environnement damage of the Bomberman Bomb Dispensers currently in the world.")
|
||||
if(usr)
|
||||
log_admin("[key_name(usr)] used secret [href_list["secretsfun"]]")
|
||||
if(ok)
|
||||
|
||||
@@ -564,7 +564,9 @@ Pressure: [env.return_pressure()]"}
|
||||
"emergency rescue team",
|
||||
"nanotrasen representative",
|
||||
"nanotrasen officer",
|
||||
"nanotrasen captain"
|
||||
"nanotrasen captain",
|
||||
"Bomberman",
|
||||
"Bomberman(arena)",
|
||||
)
|
||||
var/dostrip = input("Do you want to strip [M] before equipping them? (0=no, 1=yes)", "STRIPTEASE") as null|anything in list(0,1)
|
||||
if(isnull(dostrip))
|
||||
@@ -952,6 +954,37 @@ Pressure: [env.return_pressure()]"}
|
||||
W.assignment = "Admiral"
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
if("Bomberman")
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/darkblue(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/purple(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/bomberman(M), slot_head)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/suit/space/bomberman(M), slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/bomberman/(M), slot_s_store)
|
||||
if("Bomberman(arena)") //they have a random color, cannot remove their clothes, and their initial speed is slightly lowered by their suit.
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/under/darkblue(M), slot_w_uniform)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/shoes/purple(M), slot_shoes)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/bomberman(M), slot_head)
|
||||
var/obj/item/clothing/suit/space/bomberman/bombsuit = new /obj/item/clothing/suit/space/bomberman(M)
|
||||
M.equip_to_slot_or_del(bombsuit, slot_wear_suit)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/gloves/purple(M), slot_gloves)
|
||||
M.equip_to_slot_or_del(new /obj/item/weapon/bomberman/(M), slot_s_store)
|
||||
bombsuit.slowdown = 1
|
||||
var/list/randomhexes = list(
|
||||
"7",
|
||||
"8",
|
||||
"9",
|
||||
"a",
|
||||
"b",
|
||||
"c",
|
||||
"d",
|
||||
"e",
|
||||
"f",
|
||||
)
|
||||
M.color = "#[pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)][pick(randomhexes)]"
|
||||
for(var/obj/item/clothing/C in M)
|
||||
C.canremove = 0
|
||||
M.name = "Bomberman #[rand(1,999)]"
|
||||
|
||||
M.regenerate_icons()
|
||||
|
||||
@@ -1318,6 +1351,68 @@ client/proc/delete_all_adminbus()
|
||||
for(var/obj/structure/stool/bed/chair/vehicle/adminbus/AB in world)
|
||||
AB.Adminbus_Deletion()
|
||||
|
||||
client/proc/delete_all_bomberman()
|
||||
set name = "Remove all that Bomberman shit"
|
||||
set desc = "4th wall ointment."
|
||||
set category = "Fun"
|
||||
|
||||
if(alert(usr, "Remove all Bomberman-related objects in the game world?", "Remove Bomberman", "Yes", "No") != "Yes")
|
||||
return
|
||||
|
||||
for(var/obj/structure/bomberflame/O in world)
|
||||
qdel(O)
|
||||
|
||||
for(var/obj/structure/bomberman/O in world)
|
||||
qdel(O)
|
||||
|
||||
for(var/obj/item/weapon/bomberman/O in world)
|
||||
if(istype(O.loc, /mob/living/carbon/))
|
||||
var/mob/living/carbon/C = O.loc
|
||||
C.u_equip(O)
|
||||
O.loc = C.loc
|
||||
O.dropped(C)
|
||||
qdel(O)
|
||||
|
||||
for(var/obj/item/clothing/suit/space/bomberman/O in world)
|
||||
if(istype(O.loc, /mob/living/carbon/))
|
||||
var/mob/living/carbon/C = O.loc
|
||||
C.u_equip(O)
|
||||
O.loc = C.loc
|
||||
O.dropped(C)
|
||||
qdel(O)
|
||||
|
||||
for(var/obj/item/clothing/head/helmet/space/bomberman/O in world)
|
||||
if(istype(O.loc, /mob/living/carbon/))
|
||||
var/mob/living/carbon/C = O.loc
|
||||
C.u_equip(O)
|
||||
O.loc = C.loc
|
||||
O.dropped(C)
|
||||
qdel(O)
|
||||
|
||||
for(var/obj/structure/softwall/O in world)
|
||||
qdel(O)
|
||||
|
||||
for(var/turf/unsimulated/wall/bomberman/T in world)
|
||||
T.ChangeTurf(/turf/simulated/wall)
|
||||
|
||||
|
||||
for(var/obj/structure/powerup/O in world)
|
||||
qdel(O)
|
||||
|
||||
client/proc/create_bomberman_arena()
|
||||
set name = "Create a Bomberman Arena"
|
||||
set desc = "4th wall ointment."
|
||||
set category = "Fun"
|
||||
|
||||
var/list/arena_sizes = list(
|
||||
"screensized",
|
||||
"saturntenplayers",
|
||||
)
|
||||
var/arena_type = input("What size for the arena?", "Arena Construction") in arena_sizes
|
||||
var/turf/T = get_turf(src.mob)
|
||||
var/datum/bomberman_arena/A = new /datum/bomberman_arena(T,arena_type,src.mob)
|
||||
arenas += A
|
||||
|
||||
client/proc/mob_list()
|
||||
set name = "show mob list"
|
||||
set category = "Debug"
|
||||
|
||||
883
code/modules/bomberman/bomberman.dm
Normal file
@@ -0,0 +1,883 @@
|
||||
//////////////////////////////////based on the original game by Hudson Soft
|
||||
//Spess Bomberman, by Deity Link//
|
||||
//////////////////////////////////
|
||||
|
||||
#define MAX_BOMB_POWER 16 //How far will the largest explosions reach.
|
||||
#define MAX_SPEED_BONUS 10 //How fast can a player get by cumulating skates (his tally cannot exceed -1 anyway, but additional skates will allow him to stay fast while starving for example)
|
||||
|
||||
///////////////////////////////BOMB DISPENSER//////////////////////////
|
||||
/obj/item/weapon/bomberman/
|
||||
name = "Bomberman's Bomb Dispenser"
|
||||
desc = "Now to not get yourself stuck in a corner."
|
||||
w_class = 5.0
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "dispenser"
|
||||
var/bomblimit = 1 //how many bombs are currently in the dispenser
|
||||
var/bombtotal = 1 //how many bombs can this dispenser sustain in the world at once
|
||||
var/bombpower = 1 //how many tiles do the fire columns reach
|
||||
var/can_kick = 0 //allows its holder to kick bombs. kicked bombs roll until their reach an obstacle or detonate
|
||||
var/can_line = 0 //allows its user to deploy all his bombs in a line at once
|
||||
var/has_power = 0 //if this dispenser currently has no bombs in the world, its next bomb will have maximum power
|
||||
var/skate = 0
|
||||
var/speed_bonus = 0 //each skate power-up will speed-up its user. whoever holds the dispenser has the bonus.
|
||||
|
||||
//griff modifiers, can be changed globaly with admin commands
|
||||
var/destroy_environnement = 0 //does it break wall/tables/closets
|
||||
var/hurt_players = 0 //damage dealt by the bombs to mobs
|
||||
|
||||
//disease modifiers
|
||||
var/slow = 0
|
||||
var/fast = 0
|
||||
var/small_bomb = 0
|
||||
var/no_bomb = 0
|
||||
var/spam_bomb = 0
|
||||
|
||||
/obj/item/weapon/bomberman/attack_self(mob/user)
|
||||
var/turf/T = get_turf(src)
|
||||
if(bomblimit && !no_bomb)
|
||||
var/power = bombpower
|
||||
if(small_bomb)
|
||||
power = 1
|
||||
if(!(locate(/obj/structure/bomberman) in T))
|
||||
playsound(T, 'sound/bomberman/bombplace.ogg', 50, 1)
|
||||
if(has_power && (bomblimit == bombtotal))
|
||||
bomblimit--
|
||||
new /obj/structure/bomberman/power(T, power, destroy_environnement, hurt_players, src)
|
||||
else
|
||||
bomblimit--
|
||||
new /obj/structure/bomberman(T, power, destroy_environnement, hurt_players, src)
|
||||
else if(can_line)
|
||||
playsound(T, 'sound/bomberman/bombplace.ogg', 50, 1)
|
||||
bomblimit--
|
||||
new /obj/structure/bomberman(T, power, destroy_environnement, hurt_players, src, user.dir)
|
||||
|
||||
/obj/item/weapon/bomberman/proc/cure(var/disease)
|
||||
world << "making a cure() for [disease]"
|
||||
spawn(400)
|
||||
world << "curing [disease]"
|
||||
switch(disease)
|
||||
if("Low Power Disease")
|
||||
small_bomb = 0
|
||||
if("Constipation")
|
||||
no_bomb = 0
|
||||
if("Diarrhea")
|
||||
spam_bomb = 0
|
||||
if("Slow Pace Disease")
|
||||
slow = 0
|
||||
if("Rapid Pace Disease")
|
||||
fast = 0
|
||||
speed_bonus = skate
|
||||
|
||||
/obj/item/weapon/bomberman/proc/lost()
|
||||
var/list/turfs = list()
|
||||
for(var/turf/T in range(loc,1))
|
||||
turfs += T
|
||||
while(skate > 0)
|
||||
new/obj/structure/powerup/skate(pick(turfs))
|
||||
skate--
|
||||
while(bombtotal > 1)
|
||||
new/obj/structure/powerup/bombup(pick(turfs))
|
||||
bombtotal--
|
||||
while(bombpower > 1)
|
||||
new/obj/structure/powerup/fire(pick(turfs))
|
||||
bombpower--
|
||||
if(can_kick)
|
||||
new/obj/structure/powerup/kick(pick(turfs))
|
||||
if(can_line)
|
||||
new/obj/structure/powerup/line(pick(turfs))
|
||||
if(has_power)
|
||||
new/obj/structure/powerup/power(pick(turfs))
|
||||
qdel(src)
|
||||
|
||||
///////////////////////////////BOMB////////////////////////////////////
|
||||
/obj/structure/bomberman
|
||||
name = "bomb"
|
||||
desc = "Tick, Tick, Tick!"
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "bomb"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/bombpower = 1
|
||||
var/destroy_environnement = 0
|
||||
var/hurt_players = 0
|
||||
|
||||
var/obj/item/weapon/bomberman/parent = null
|
||||
|
||||
var/countdown = 3
|
||||
var/kicked = 0
|
||||
|
||||
/obj/structure/bomberman/power/
|
||||
icon_state = "bomb_power"
|
||||
|
||||
/obj/structure/bomberman/New(turf/loc, var/Bpower=1, var/destroy=0, var/hurt=0, var/dispenser=null, var/line_dir=null)
|
||||
..()
|
||||
bombpower = Bpower
|
||||
destroy_environnement = destroy
|
||||
hurt_players = hurt
|
||||
parent = dispenser
|
||||
if(line_dir)
|
||||
var/turf/T1 = get_turf(src)
|
||||
step(src,line_dir)
|
||||
var/turf/T2 = get_turf(src)
|
||||
if(T1 == T2)
|
||||
qdel(src)
|
||||
else if(parent.bomblimit > 0)
|
||||
parent.bomblimit--
|
||||
new /obj/structure/bomberman(T2, bombpower, destroy_environnement, hurt_players, parent, line_dir)
|
||||
ticking()
|
||||
|
||||
|
||||
|
||||
/obj/structure/bomberman/Bump(atom/obstacle)
|
||||
kicked = 0
|
||||
..()
|
||||
|
||||
/obj/structure/bomberman/Bumped(M as mob|obj) //kick bomb
|
||||
for (var/obj/item/weapon/bomberman/dispenser in M)
|
||||
if (dispenser.can_kick && !kicked)
|
||||
kicked = 1
|
||||
kicked(get_dir(M,src))
|
||||
..()
|
||||
|
||||
/obj/structure/bomberman/proc/ticking()
|
||||
countdown--
|
||||
sleep(10)
|
||||
if(countdown <= 0)
|
||||
detonate()
|
||||
else
|
||||
ticking()
|
||||
|
||||
/obj/structure/bomberman/proc/detonate()
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/bomberman/bombexplode.ogg', 100, 1)
|
||||
spawn()
|
||||
new /obj/structure/bomberflame(T,1,bombpower,SOUTH,destroy_environnement,hurt_players)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/bomberman/power/detonate()
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/bomberman/bombexplode.ogg', 100, 1)
|
||||
spawn()
|
||||
new /obj/structure/bomberflame(T,1,MAX_BOMB_POWER,SOUTH,destroy_environnement,hurt_players)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/bomberman/proc/kicked(var/kick_dir)
|
||||
var/turf/T1 = get_turf(src)
|
||||
step(src, kick_dir)
|
||||
var/turf/T2 = get_turf(src)
|
||||
if(locate(/obj/structure/bomberflame) in T2) //if a kicked bomb rolls into an explosion, it detonates
|
||||
detonate()
|
||||
if(T1 != T2)
|
||||
sleep(2)
|
||||
kicked(kick_dir)
|
||||
else
|
||||
kicked = 0
|
||||
|
||||
|
||||
/obj/structure/bomberman/Destroy()
|
||||
if(parent)
|
||||
parent.bomblimit++
|
||||
..()
|
||||
|
||||
/obj/structure/bomberman/emp_act(severity) //EMPs can safely remove the bombs
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/bomberman/bullet_act(var/obj/item/projectile/Proj)
|
||||
visible_message("<span class='warning'>\The [Proj] hits \the [src].</span>")
|
||||
detonate()
|
||||
return
|
||||
|
||||
/obj/structure/bomberman/ex_act(severity)
|
||||
detonate()
|
||||
return
|
||||
|
||||
/obj/structure/bomberman/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/bomberman/singuloCanEat()
|
||||
return 0
|
||||
|
||||
///////////////////////////////FLAME/EXPLOSION//////////////////////////
|
||||
/obj/structure/bomberflame
|
||||
name = "explosion"
|
||||
desc = "Sidesteps are its only weakness."
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "explosion_core"
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = LIGHTING_LAYER+1
|
||||
var/destroy_environnement = 0
|
||||
var/hurt_players = 0
|
||||
|
||||
var/fuel = 1
|
||||
|
||||
/obj/structure/bomberflame/New(turf/loc, var/initial=1, var/power=1, var/flame_dir=SOUTH, var/destroy=0, var/hurt=0)
|
||||
..()
|
||||
fuel = power
|
||||
dir = flame_dir
|
||||
destroy_environnement = destroy
|
||||
hurt_players = hurt
|
||||
var/turf/T1 = get_turf(src)
|
||||
var/turf/T2 = null
|
||||
if(!initial)
|
||||
if(fuel)
|
||||
icon_state = "explosion_branch"
|
||||
else
|
||||
icon_state = "explosion_tip"
|
||||
|
||||
step(src, flame_dir)
|
||||
T2 = get_turf(src)
|
||||
if(T1 == T2)
|
||||
del(src)
|
||||
return
|
||||
else
|
||||
T2 = T1
|
||||
|
||||
collisions(T2)
|
||||
|
||||
spawn(1)
|
||||
if(fuel)
|
||||
propagate(initial)
|
||||
|
||||
sleep(5)
|
||||
collisions(T2)
|
||||
|
||||
sleep(5)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/bomberflame/proc/collisions(var/turf/T)
|
||||
|
||||
for(var/mob/living/carbon/C in T)
|
||||
for(var/obj/item/weapon/bomberman/dispenser in C.contents)
|
||||
C.u_equip(dispenser)
|
||||
dispenser.loc = C.loc
|
||||
dispenser.dropped(C)
|
||||
dispenser.lost()
|
||||
T.turf_animation('icons/obj/bomberman.dmi',"dispenser_break",0,0,MOB_LAYER-0.1,'sound/bomberman/bombed.ogg')
|
||||
|
||||
if(hurt_players)
|
||||
for(var/mob/living/L in T)
|
||||
if(fuel <= 2)
|
||||
L.ex_act(3)
|
||||
else if(fuel <= 10)
|
||||
L.ex_act(2)
|
||||
else
|
||||
L.ex_act(1)
|
||||
|
||||
/obj/structure/bomberflame/proc/propagate(var/init)
|
||||
if(init)
|
||||
for(var/direction in cardinal)
|
||||
spawn() //so we don't wait for the flame to die before it spawns the next one, duh
|
||||
new /obj/structure/bomberflame(get_turf(src),0,fuel-1,direction,destroy_environnement,hurt_players)
|
||||
else
|
||||
new /obj/structure/bomberflame(get_turf(src),0,fuel-1,dir,destroy_environnement,hurt_players)
|
||||
|
||||
|
||||
/obj/structure/bomberflame/Bump(atom/obstacle) //if an explosion reaches a bomb, it detonates
|
||||
if(istype(obstacle, /obj/structure/bomberman/))
|
||||
var/obj/structure/bomberman/chained_explosion = obstacle
|
||||
chained_explosion.detonate()
|
||||
|
||||
else if(istype(obstacle, /obj/structure/softwall/))
|
||||
var/obj/structure/softwall/wall_break = obstacle
|
||||
wall_break.pulverized()
|
||||
|
||||
if(destroy_environnement)
|
||||
if(istype(obstacle, /obj/structure/closet/))
|
||||
qdel(obstacle)
|
||||
|
||||
else if(istype(obstacle, /obj/structure/table/))
|
||||
var/obj/structure/table/table = obstacle
|
||||
table.destroy()
|
||||
|
||||
else if(istype(obstacle, /obj/structure/rack/))
|
||||
var/obj/structure/rack/rack = obstacle
|
||||
rack.destroy()
|
||||
|
||||
else if(istype(obstacle, /obj/structure/grille))
|
||||
var/obj/structure/grille/grille = obstacle
|
||||
grille.broken = 1
|
||||
grille.icon_state = "[initial(grille.icon_state)]-b"
|
||||
grille.density = 0
|
||||
if(prob(35))
|
||||
var/turf/T = grille.loc
|
||||
T.spawn_powerup()
|
||||
|
||||
else if(istype(obstacle, /obj/structure/window))
|
||||
qdel(obstacle)
|
||||
|
||||
else if(istype(obstacle, /turf/simulated/wall/) && !istype(obstacle, /turf/simulated/wall/r_wall))
|
||||
var/turf/T = obstacle
|
||||
T.ChangeTurf(/turf/simulated/floor/plating)
|
||||
T.icon_state = "wall_thermite"
|
||||
if(prob(35))
|
||||
T.spawn_powerup()
|
||||
|
||||
else if(istype(obstacle, /obj/structure/reagent_dispensers/fueltank))
|
||||
obstacle.ex_act(1)
|
||||
|
||||
else if(istype(obstacle, /obj/machinery/portable_atmospherics/canister))
|
||||
var/obj/machinery/portable_atmospherics/canister/canister = obstacle
|
||||
canister.health = 0
|
||||
canister.healthcheck()
|
||||
|
||||
else if(istype(obstacle, /obj/machinery/computer/))
|
||||
var/obj/machinery/computer/computer = obstacle
|
||||
for(var/x in computer.verbs)
|
||||
computer.verbs -= x
|
||||
computer.set_broken()
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/bomberflame/ex_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/bomberflame/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/bomberflame/singuloCanEat()
|
||||
return 0
|
||||
|
||||
|
||||
///////////////////////////////SOFT WALLS/////////////////////////////
|
||||
/obj/structure/softwall
|
||||
name = "soft wall"
|
||||
desc = "Looks like even the weakest explosion could break this wall apart."
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "softwall"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/softwall/proc/pulverized()
|
||||
icon_state = "softwall_break"
|
||||
density = 0
|
||||
mouse_opacity = 0
|
||||
spawn(5)
|
||||
if(prob(35))
|
||||
pick_a_powerup()
|
||||
spawn(5)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/softwall/proc/pick_a_powerup()
|
||||
var/powerup = pick(
|
||||
50;/obj/structure/powerup/bombup,
|
||||
50;/obj/structure/powerup/fire,
|
||||
50;/obj/structure/powerup/skate,
|
||||
10;/obj/structure/powerup/kick,
|
||||
10;/obj/structure/powerup/line,
|
||||
10;/obj/structure/powerup/power,
|
||||
10;/obj/structure/powerup/skull,
|
||||
5;/obj/structure/powerup/full,
|
||||
)
|
||||
new powerup(get_turf(src))
|
||||
|
||||
/obj/structure/softwall/ex_act(severity)
|
||||
pulverized()
|
||||
return
|
||||
|
||||
/obj/structure/softwall/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/softwall/singuloCanEat()
|
||||
return 0
|
||||
|
||||
///////////////////////////////HARD WALLS/////////////////////////////
|
||||
/turf/unsimulated/wall/bomberman
|
||||
name = "hard wall"
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "hardwall"
|
||||
opacity = 0
|
||||
|
||||
/turf/unsimulated/wall/ex_act(severity)
|
||||
return
|
||||
|
||||
/turf/unsimulated/wall/cultify()
|
||||
return
|
||||
|
||||
/turf/unsimulated/wall/singuloCanEat()
|
||||
return 0
|
||||
|
||||
///////////////////////////////POWER-UPS//////////////////////////////
|
||||
/obj/structure/powerup
|
||||
name = "powerup"
|
||||
desc = ""
|
||||
icon = 'icons/obj/bomberman.dmi'
|
||||
icon_state = "powerup"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/powerup/bombup
|
||||
name = "bomb-up"
|
||||
icon_state = "bombup"
|
||||
|
||||
/obj/structure/powerup/fire
|
||||
name = "fire"
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/powerup/full
|
||||
name = "full fire"
|
||||
icon_state = "full"
|
||||
|
||||
/obj/structure/powerup/kick
|
||||
name = "kick"
|
||||
icon_state = "kick"
|
||||
|
||||
/obj/structure/powerup/line
|
||||
name = "line bomb"
|
||||
icon_state = "line"
|
||||
|
||||
/obj/structure/powerup/power
|
||||
name = "power bomb"
|
||||
icon_state = "power"
|
||||
|
||||
/obj/structure/powerup/skate
|
||||
name = "skate"
|
||||
icon_state = "skate"
|
||||
|
||||
/obj/structure/powerup/skull
|
||||
name = "skull"
|
||||
icon_state = "skull"
|
||||
|
||||
/obj/structure/powerup/attackby(var/obj/item/weapon/bomberman/dispenser, var/mob/user)
|
||||
if(istype(dispenser))
|
||||
apply_power(dispenser)
|
||||
..()
|
||||
|
||||
/obj/structure/powerup/Bumped(M as mob|obj) //kick bomb
|
||||
if (istype(M, /mob/living) || istype(M, /obj/mecha) || istype(M, /obj/structure/stool/bed/chair/) || istype(M, /obj/structure/bomberflame))
|
||||
density = 0
|
||||
step(M, get_dir(M,src))
|
||||
spawn(1) //to prevent an infinite loop when a player with no BBD is trying to walk over a tile with at least two power-ups.
|
||||
density = 1
|
||||
var/obj/item/weapon/bomberman/dispenser = locate() in M
|
||||
if (dispenser)
|
||||
apply_power(dispenser)
|
||||
if (istype(M, /obj/structure/bomberflame))
|
||||
icon_state = "powerup_break"
|
||||
spawn(5)
|
||||
qdel(src)
|
||||
|
||||
..()
|
||||
|
||||
/obj/structure/powerup/proc/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
playsound(get_turf(src), 'sound/bomberman/powerup.ogg', 50, 1)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/powerup/bombup/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.bomblimit++
|
||||
dispenser.bombtotal++
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/fire/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.bombpower = min(MAX_BOMB_POWER, dispenser.bombpower + 1)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/full/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.bombpower = MAX_BOMB_POWER
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/kick/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.can_kick = 1
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/line/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.can_line = 1
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/power/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.has_power = 1
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/skate/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
dispenser.skate = min(MAX_SPEED_BONUS, dispenser.skate + 1)
|
||||
if(!dispenser.slow)
|
||||
dispenser.speed_bonus = min(MAX_SPEED_BONUS, dispenser.speed_bonus + 1)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/skull/apply_power(var/obj/item/weapon/bomberman/dispenser)
|
||||
playsound(get_turf(src), 'sound/bomberman/disease.ogg', 50, 1)
|
||||
var/list/diseases = list(
|
||||
"Low Power Disease",
|
||||
"Constipation ",
|
||||
"Diarrhea",
|
||||
"Slow Pace Disease",
|
||||
"Rapid Pace Disease",
|
||||
"Change",
|
||||
"Fire",
|
||||
)
|
||||
var/disease = pick(diseases)
|
||||
dispenser.loc << "<span class='danger'>[disease][((disease != "Fire")&&(disease != "Change")) ? " for 40 seconds" : ""]!!</span>"
|
||||
switch(disease)
|
||||
if("Low Power Disease")
|
||||
dispenser.small_bomb = 1
|
||||
dispenser.cure(disease)
|
||||
if("Constipation")
|
||||
dispenser.no_bomb = 1
|
||||
dispenser.cure(disease)
|
||||
if("Diarrhea")
|
||||
dispenser.spam_bomb = 1
|
||||
dispenser.cure(disease)
|
||||
if("Slow Pace Disease")
|
||||
dispenser.slow = 1
|
||||
dispenser.cure(disease)
|
||||
if("Rapid Pace Disease")
|
||||
dispenser.fast = 1
|
||||
dispenser.speed_bonus = MAX_SPEED_BONUS
|
||||
dispenser.cure(disease)
|
||||
if("Change")
|
||||
for(var/mob/living/carbon/C in player_list)
|
||||
var/obj/item/weapon/bomberman/target = locate() in C
|
||||
if(target)
|
||||
var/turf/T = get_turf(src)
|
||||
var/mob/living/L = src.loc
|
||||
L.loc = C.loc
|
||||
C.loc = T
|
||||
playsound(get_turf(src), 'sound/bomberman/disease.ogg', 50, 1)
|
||||
qdel(src)
|
||||
return
|
||||
if("Fire")
|
||||
if(istype(dispenser.loc, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = dispenser.loc
|
||||
M.adjust_fire_stacks(0.5)
|
||||
M.on_fire = 1
|
||||
M.update_icon = 1
|
||||
playsound(M.loc, 'sound/effects/bamf.ogg', 50, 0)
|
||||
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/powerup/proc/pulverized()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/powerup/ex_act(severity)
|
||||
pulverized()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/powerup/singuloCanEat()
|
||||
return 0
|
||||
|
||||
|
||||
///////////////////////////////CLOTHING///////////////////////////////
|
||||
/obj/item/clothing/suit/space/bomberman
|
||||
name = "Bomberman's suit"
|
||||
desc = "Doesn't actually make you immune to bombs!"
|
||||
icon_state = "bomberman"
|
||||
item_state = "bomberman"
|
||||
slowdown = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0
|
||||
flags = FPRINT | ONESIZEFITSALL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO
|
||||
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
allowed = list(/obj/item/weapon/bomberman/)
|
||||
pressure_resistance = 40 * ONE_ATMOSPHERE
|
||||
|
||||
/obj/item/clothing/head/helmet/space/bomberman
|
||||
name = "Bomberman head"
|
||||
desc = "Terrorism has never looked so adorable."
|
||||
icon_state = "bomberman"
|
||||
item_state = "bomberman"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR
|
||||
body_parts_covered = FULL_HEAD
|
||||
siemens_coefficient = 0
|
||||
|
||||
///////////////////////////////ARENA BUILDER///////////////////////////
|
||||
|
||||
var/global/list/arenas = list()
|
||||
|
||||
/datum/bomberman_spawn
|
||||
var/turf/spawnpoint = null
|
||||
var/availability = 0
|
||||
|
||||
/datum/bomberman_arena
|
||||
var/name = "Bomberman Arena"
|
||||
var/area/arena = null
|
||||
var/area/under = null
|
||||
var/turf/center = null //middle of the arena.
|
||||
var/list/planners = list() //these let you visualize the dimensions of the arena before building it.
|
||||
var/list/cameras = list() //security cameras.
|
||||
var/list/spawns = list() //player spawns.
|
||||
var/list/turfs = list() //all of the arena's turfs. they get reverted to space tiles when the arena is removed.
|
||||
var/list/swalls = list() //all of the soft walls. randomly spread over the arena between round.
|
||||
var/list/players = list() //players that registered with this arena.
|
||||
var/list/tools = list() //clothes and bomb dispensers spawned by the arena.
|
||||
|
||||
/datum/bomberman_arena/New(var/turf/a_center=null, var/size="",mob/user)
|
||||
if(!a_center) return
|
||||
if(!size) return
|
||||
if(!user) return
|
||||
center = a_center
|
||||
name += " #[rand(1,999)]"
|
||||
open(size,user)
|
||||
arenas += src
|
||||
|
||||
/datum/bomberman_arena/proc/open(var/size,mob/user)
|
||||
switch(size)
|
||||
if("screensized")
|
||||
if(planner(size,user))
|
||||
var/obj/machinery/camera/C = new /obj/machinery/camera(center)
|
||||
cameras += C
|
||||
C.name = name
|
||||
C.c_tag = name
|
||||
C.network = list(
|
||||
"thunder", //entertainment monitors
|
||||
"SS13", //security monitors
|
||||
)
|
||||
|
||||
var/obj/structure/planner/pencil = new /obj/structure/planner(center)
|
||||
pencil.x -= 7
|
||||
pencil.y -= 7
|
||||
var/x = pencil.x
|
||||
var/y = pencil.y
|
||||
var/w = 14
|
||||
var/h = 14
|
||||
var/turf/T = null
|
||||
|
||||
under = get_area(pencil)
|
||||
|
||||
while (pencil.y <= (y+h)) //placing the Hard Walls and floors
|
||||
pencil.x = x
|
||||
while(pencil.x <= (x+w))
|
||||
T = pencil.loc
|
||||
if((pencil.y == y) || (pencil.y == (y+h)))
|
||||
T.ChangeTurf(/turf/unsimulated/wall/bomberman)
|
||||
T.opacity = 1
|
||||
turfs += T
|
||||
else if((pencil.x == x) || (pencil.x == (x+w)))
|
||||
T.ChangeTurf(/turf/unsimulated/wall/bomberman)
|
||||
T.opacity = 1
|
||||
turfs += T
|
||||
else if((((pencil.x - x)%2) == 0) && (((pencil.y - y)%2) == 0))
|
||||
T.ChangeTurf(/turf/unsimulated/wall/bomberman)
|
||||
turfs += T
|
||||
else
|
||||
T.ChangeTurf(/turf/simulated/floor/plating)
|
||||
turfs += T
|
||||
pencil.x++
|
||||
sleep(2) //giving the game some time to process to avoid unbearable lag spikes when we create an arena, plus it looks cool.
|
||||
pencil.y++
|
||||
|
||||
pencil.x = x
|
||||
pencil.y = y //placing the Spawns
|
||||
pencil.x++
|
||||
pencil.y++
|
||||
T = pencil.loc
|
||||
var/datum/bomberman_spawn/sp1 = new/datum/bomberman_spawn()
|
||||
sp1.spawnpoint = T
|
||||
spawns += sp1
|
||||
pencil.x = x+w-1
|
||||
T = pencil.loc
|
||||
var/datum/bomberman_spawn/sp2 = new/datum/bomberman_spawn()
|
||||
sp2.spawnpoint = T
|
||||
spawns += sp2
|
||||
pencil.y = y+h-1
|
||||
T = pencil.loc
|
||||
var/datum/bomberman_spawn/sp3 = new/datum/bomberman_spawn()
|
||||
sp3.spawnpoint = T
|
||||
spawns += sp3
|
||||
pencil.x = x+1
|
||||
T = pencil.loc
|
||||
var/datum/bomberman_spawn/sp4 = new/datum/bomberman_spawn()
|
||||
sp4.spawnpoint = T
|
||||
spawns += sp4
|
||||
|
||||
pencil.x = x
|
||||
pencil.y = y
|
||||
while (pencil.y <= (y+h)) //placing the Soft Walls
|
||||
pencil.x = x
|
||||
while(pencil.x <= (x+w))
|
||||
T = pencil.loc
|
||||
if(istype(T, /turf/simulated/floor/plating))
|
||||
if(prob(60))
|
||||
T = pencil.loc
|
||||
var/obj/structure/softwall/W = new /obj/structure/softwall(T)
|
||||
swalls += W
|
||||
pencil.x++
|
||||
sleep(2) //giving the game some time to process to avoid unbearable lag spikes when we create a large arena, plus it looks cool.
|
||||
pencil.y++
|
||||
|
||||
qdel(pencil) //RIP sweet prince
|
||||
|
||||
for (var/datum/bomberman_spawn/S in spawns) //removing the soft walls near the spawns
|
||||
for (var/obj/structure/softwall/W in range(S.spawnpoint,1))
|
||||
swalls -= W
|
||||
qdel(W)
|
||||
|
||||
|
||||
//now we just need to add a thunderdome jukebox to every map
|
||||
var/area/A = new
|
||||
A.name = name
|
||||
A.tagbase = "[A.type]_[md5(name)]"
|
||||
A.tag = "[A.type]/[md5(name)]"
|
||||
A.master = A
|
||||
A.power_equip = 0
|
||||
A.power_light = 0
|
||||
A.power_environ = 0
|
||||
A.always_unpowered = 0
|
||||
A.jammed = SUPER_JAMMED //lol telesci
|
||||
A.addSorted()
|
||||
arena = A
|
||||
|
||||
spawn(0)
|
||||
A.contents.Add(turfs)
|
||||
for(var/turf/F in turfs)
|
||||
for(var/atom/movable/AM in F)
|
||||
AM.areaMaster = get_area_master(F)
|
||||
|
||||
|
||||
|
||||
message_admins("[key_name_admin(user.mind)] created a \"[size]\" Bomberman arena at [center.loc.name] ([center.x],[center.y],[center.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[center.x];Y=[center.y];Z=[center.z]'>JMP</A>)")
|
||||
log_game("[key_name_admin(user.mind)] created a \"[size]\" Bomberman arena at [center.loc.name] ([center.x],[center.y],[center.z]) ")
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
if("saturntenplayers")
|
||||
qdel(src)
|
||||
|
||||
/datum/bomberman_arena/proc/reset()
|
||||
for(var/obj/structure/softwall/W in swalls)
|
||||
qdel(W)
|
||||
swalls = list()
|
||||
|
||||
for(var/obj/T in tools)
|
||||
qdel(T)
|
||||
tools = list()
|
||||
|
||||
for(var/mob/M in players)
|
||||
qdel(M)
|
||||
players = list()
|
||||
|
||||
var/obj/structure/planner/pencil = new /obj/structure/planner(center)
|
||||
pencil.x -= 7
|
||||
pencil.y -= 7
|
||||
var/x = pencil.x
|
||||
var/y = pencil.y
|
||||
var/w = 14
|
||||
var/h = 14
|
||||
var/turf/T = null
|
||||
|
||||
sleep(50) //waiting a moment, in case there are bombs waiting to explode in the arena
|
||||
|
||||
while (pencil.y <= (y+h)) //replacing the Soft Walls
|
||||
pencil.x = x
|
||||
while(pencil.x <= (x+w))
|
||||
T = pencil.loc
|
||||
if(istype(T, /turf/simulated/floor/plating))
|
||||
if(prob(60))
|
||||
T = pencil.loc
|
||||
var/obj/structure/softwall/W = new /obj/structure/softwall(T)
|
||||
swalls += W
|
||||
pencil.x++
|
||||
sleep(2)
|
||||
pencil.y++
|
||||
|
||||
qdel(pencil)
|
||||
|
||||
for (var/datum/bomberman_spawn/S in spawns) //removing the soft walls near the spawns
|
||||
for (var/obj/structure/softwall/W in range(S.spawnpoint,1))
|
||||
swalls -= W
|
||||
qdel(W)
|
||||
|
||||
/datum/bomberman_arena/proc/close()
|
||||
for(var/obj/machinery/camera/C in cameras)
|
||||
qdel(C)
|
||||
cameras = list()
|
||||
|
||||
for(var/obj/structure/softwall/W in swalls)
|
||||
qdel(W)
|
||||
swalls = list()
|
||||
|
||||
for(var/obj/T in tools)
|
||||
qdel(T)
|
||||
tools = list()
|
||||
|
||||
for(var/mob/M in players)
|
||||
qdel(M)
|
||||
players = list()
|
||||
|
||||
under.contents.Add(turfs)
|
||||
for(var/turf/T in turfs)
|
||||
for(var/atom/movable/AM in T)
|
||||
AM.areaMaster = get_area_master(T)
|
||||
if(under.name == "Space")
|
||||
T.ChangeTurf(/turf/space)
|
||||
else
|
||||
T.ChangeTurf(/turf/simulated/floor/plating)
|
||||
turfs = list()
|
||||
arenas -= src
|
||||
return
|
||||
|
||||
/datum/bomberman_arena/proc/planner(var/size,mob/user)
|
||||
var/choice = 0
|
||||
switch(size)
|
||||
if("screensized")
|
||||
for(var/turf/T in range(center,7))
|
||||
var/obj/structure/planner/P = new /obj/structure/planner(T)
|
||||
if(P.loc)
|
||||
planners += P
|
||||
if(planners.len == 225)
|
||||
var/achoice = alert(user, "All those green tiles (that only ghosts can see) will be part of the arena. Do you want to proceed?","Arena Creation", "Confirm","Cancel")
|
||||
if(achoice=="Confirm")
|
||||
choice = 1
|
||||
else
|
||||
user << "<span class='warning'>Part of the arena was outside the Z-Level.</span>"
|
||||
if("saturntenplayers")
|
||||
choice = 0
|
||||
for (var/obj/structure/planner/P in planners)
|
||||
qdel(P)
|
||||
return choice
|
||||
|
||||
/obj/structure/planner
|
||||
name = "arena planner"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "planner"
|
||||
density = 0
|
||||
anchored = 1
|
||||
invisibility = 60
|
||||
|
||||
/obj/structure/planner/ex_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/planner/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/planner/singuloCanEat()
|
||||
return 0
|
||||
|
||||
/obj/structure/bomber_spawn
|
||||
name = "spawn"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "planner"
|
||||
density = 0
|
||||
anchored = 1
|
||||
invisibility = 60
|
||||
var/mob/living/carbon/bomber = null
|
||||
|
||||
/obj/structure/bomber_spawn/ex_act(severity)
|
||||
return
|
||||
|
||||
/obj/structure/bomber_spawn/cultify()
|
||||
return
|
||||
|
||||
/obj/structure/bomber_spawn/singuloCanEat()
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -60,6 +60,13 @@
|
||||
if(M_RUN in mutations)
|
||||
tally = 0
|
||||
|
||||
var/skate_bonus = 0
|
||||
var/disease_slow = 0
|
||||
for(var/obj/item/weapon/bomberman/dispenser in src)
|
||||
disease_slow = max(disease_slow, dispenser.slow)
|
||||
skate_bonus = max(skate_bonus, dispenser.speed_bonus)//if the player is carrying multiple BBD for some reason, he'll benefit from the speed bonus of the most upgraded one
|
||||
tally = tally - skate_bonus + (6 * disease_slow)
|
||||
|
||||
return (tally+config.human_delay)
|
||||
|
||||
/mob/living/carbon/human/Process_Spacemove(var/check_drift = 0)
|
||||
@@ -105,3 +112,7 @@
|
||||
if(shoes && istype(shoes, /obj/item/clothing/shoes))
|
||||
var/obj/item/clothing/shoes/S = shoes
|
||||
S.step_action()
|
||||
|
||||
for(var/obj/item/weapon/bomberman/dispenser in src)
|
||||
if(dispenser.spam_bomb)
|
||||
dispenser.attack_self(src)
|
||||
|
||||
|
Before Width: | Height: | Size: 371 KiB After Width: | Height: | Size: 372 KiB |
|
Before Width: | Height: | Size: 225 KiB After Width: | Height: | Size: 184 KiB |
|
Before Width: | Height: | Size: 355 KiB After Width: | Height: | Size: 351 KiB |
BIN
icons/obj/bomberman.dmi
Normal file
|
After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |