Minesweeper" //When we need to revert to the main menu we set web as this
- web = static_web
-
- if(CHECK_BITFIELD(obj_flags, EMAGGED))
- web = "
MinesweeperMinesweeper EXTREME EDITION: Iteration #[randomnumber]" //Different colour mix for every random number made
- if(!spark_spam)
- do_sparks(5, 1, src)
- spark_spam = TRUE
- addtimer(CALLBACK(src, .proc/reset_spark_spam), 30)
-
-
- var/startup_sound = CHECK_BITFIELD(obj_flags, EMAGGED) ? 'sound/arcade/minesweeper_emag2.ogg' : 'sound/arcade/minesweeper_startup.ogg'
-
- if(href_list["Main_Menu"])
- game_status = MINESWEEPER_GAME_MAIN_MENU
- mine_limit = 0
- rows = 0
- columns = 0
- mine_placed = 0
- if(href_list["Easy"])
- playsound(loc, startup_sound, 50, FALSE, extrarange = -3)
- flag_text = "OFF"
- game_status = MINESWEEPER_GAME_PLAYING
- reset_board = TRUE
- difficulty = "Easy"
- rows = 10 //9x9 board
- columns = 10
- mine_limit = 10
- if(href_list["Intermediate"])
- playsound(loc, startup_sound, 50, FALSE, extrarange = -3)
- flag_text = "OFF"
- game_status = MINESWEEPER_GAME_PLAYING
- reset_board = TRUE
- difficulty = "Intermediate"
- rows = 17 //16x16 board
- columns = 17
- mine_limit = 40
- if(href_list["Hard"])
- playsound(loc, startup_sound, 50, FALSE, extrarange = -3)
- flag_text = "OFF"
- game_status = MINESWEEPER_GAME_PLAYING
- reset_board = TRUE
- difficulty = "Hard"
- rows = 17 //16x30 board
- columns = 31
- mine_limit = 99
- if(href_list["Custom"])
- if(custom_generation(usr))
- flag_text = "OFF"
- game_status = MINESWEEPER_GAME_PLAYING
- reset_board = TRUE
- difficulty = "Custom"
- playsound(loc, startup_sound, 50, FALSE, extrarange = -3)
- if(href_list["Flag"])
- playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, FALSE, extrarange = -3)
- if(!flagging)
- flagging = TRUE
- flag_text = "ON"
- else
- flagging = FALSE
- flag_text = "OFF"
-
- if(game_status == MINESWEEPER_GAME_MAIN_MENU)
- if(CHECK_BITFIELD(obj_flags, EMAGGED))
- playsound(loc, 'sound/arcade/minesweeper_emag2.ogg', 50, FALSE, extrarange = -3)
- web += "
Explode in the game, explode in real life!
What difficulty do you want to play?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom"
- else
- playsound(loc, 'sound/arcade/minesweeper_startup.ogg', 50, FALSE, extrarange = -3)
- web += web_difficulty_menu
-
- if(game_status == MINESWEEPER_GAME_PLAYING)
- mine_sound = TRUE
-
- area = (rows-1)*(columns-1)
-
- if(reset_board)
- mine_placed = 0
- var/reset_everything = TRUE
- make_mines(reset_everything)
-
- safe_squares_revealed = 0
- win_condition = area-mine_placed
-
- if(game_status != MINESWEEPER_GAME_MAIN_MENU)
- for(var/y1=1;y1= 0) //Check that it's not already revealed, and stop flag removal if we're out of flag mode
- table[y1][x1] += 10
- if(table[y1][x1] != 10)
- playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, FALSE, extrarange = -3)
- else
- if(game_status != MINESWEEPER_GAME_LOST && game_status != MINESWEEPER_GAME_WON)
- game_status = MINESWEEPER_GAME_LOST
- if(CHECK_BITFIELD(obj_flags, EMAGGED) && !exploding_hell)
- exploding_hell = TRUE
- explode_EVERYTHING()
- if(QDELETED(src))
- return
- if(mine_sound)
- switch(rand(1,3)) //Play every time a mine is hit
- if(1)
- playsound(loc, 'sound/arcade/minesweeper_explosion1.ogg', 50, FALSE, extrarange = -3)
- if(2)
- playsound(loc, 'sound/arcade/minesweeper_explosion2.ogg', 50, FALSE, extrarange = -3)
- if(3)
- playsound(loc, 'sound/arcade/minesweeper_explosion3.ogg', 50, FALSE, extrarange = -3)
- mine_sound = FALSE
- else
- playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, FALSE, extrarange = -3)
- if(table[y1][x1] >= 0) //Check that it's not already flagged
- table[y1][x1] -= 10
- else if(table[y1][x1] < 0) //If flagged, remove the flag
- table[y1][x1] += 10
- if(table[y1][x1] > 10 && !reset_board)
- safe_squares_revealed += 1
- var/y2 = y1
- var/x2 = x1
- work_squares(y2, x2) //Work squares while in this loop so there's less load
- reset_board = FALSE
- CHECK_TICK
-
- web += "" //Start setting up the html table
- web += ""
- for(var/y1=1;y1"
- for(var/x1=1;x1[MINESWEEPERIMG(flag)]"
- else
- web += "| [MINESWEEPERIMG(flag)] | "
- if(0)
- if(game_status != MINESWEEPER_GAME_PLAYING)
- web += "[MINESWEEPERIMG(mine)] | "
- else
- web += "[MINESWEEPERIMG(hidden)] | " //Make unique hrefs for every square
- if(1 to 9)
- if(game_status != MINESWEEPER_GAME_PLAYING)
- web += "[MINESWEEPERIMG(hidden)] | "
- else
- web += "[MINESWEEPERIMG(hidden)] | " //Make unique hrefs for every square
- if(10)
- web += "[MINESWEEPERIMG(minehit)] | "
- if(11)
- web += "[MINESWEEPERIMG(empty)] | "
- if(12)
- web += "[MINESWEEPERIMG(1)] | "
- if(13)
- web += "[MINESWEEPERIMG(2)] | "
- if(14)
- web += "[MINESWEEPERIMG(3)] | "
- if(15)
- web += "[MINESWEEPERIMG(4)] | "
- if(16)
- web += "[MINESWEEPERIMG(5)] | "
- if(17)
- web += "[MINESWEEPERIMG(6)] | "
- if(18)
- web += "[MINESWEEPERIMG(7)] | "
- if(19)
- web += "[MINESWEEPERIMG(8)] | "
- CHECK_TICK
- web += ""
- web += "
"
- web += ""
- web += "
"
-
- if(safe_squares_revealed >= win_condition && game_status == MINESWEEPER_GAME_PLAYING)
- game_status = MINESWEEPER_GAME_WON
- if(rows < 10 || columns < 10) //If less than easy difficulty
- playsound(loc, 'sound/arcade/minesweeper_winfail.ogg', 50, FALSE, extrarange = -3)
- say("You cleared the board of all mines, but you picked too small of a board! Try again with at least a 9x9 board!")
- else
- playsound(loc, 'sound/arcade/minesweeper_win.ogg', 50, FALSE, extrarange = -3)
- say("You cleared the board of all mines! Congratulations!")
- if(CHECK_BITFIELD(obj_flags, EMAGGED))
- var/itemname
- switch(rand(1,3))
- if(1)
- itemname = "a syndicate bomb beacon"
- new /obj/item/sbeacondrop/bomb(loc)
- if(2)
- itemname = "a rocket launcher"
- new /obj/item/gun/ballistic/rocketlauncher/unrestricted(loc)
- new /obj/item/ammo_casing/caseless/rocket(loc)
- new /obj/item/ammo_casing/caseless/rocket(loc)
- new /obj/item/ammo_casing/caseless/rocket(loc)
- if(3)
- itemname = "two bags of c4"
- new /obj/item/storage/backpack/duffelbag/syndie/c4(loc)
- new /obj/item/storage/backpack/duffelbag/syndie/x4(loc)
- message_admins("[key_name_admin(user)] won emagged Minesweeper and got [itemname]!")
- visible_message("[src] dispenses [itemname]!", "You hear a chime and a clunk.")
- DISABLE_BITFIELD(obj_flags, EMAGGED)
- else
- var/dope_prizes = (area >= 480) ? 6 : (area >= 256) ? 4 : 2
- prizevend(user, dope_prizes)
-
- if(game_status == MINESWEEPER_GAME_WON)
- web += "[(rows < 10 || columns < 10) ? "You won, but your board was too small! Pick a bigger board next time!" : "Congratulations, you have won!"]
Want to play again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom
Return to Main Menu
"
-
- if(game_status == MINESWEEPER_GAME_LOST)
- web += "You have lost!
Try again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom
Return to Main Menu
"
-
- if(game_status == MINESWEEPER_GAME_PLAYING)
- web += "Return to Main Menu
"
- web += ""
-
- web += " "
- var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/simple/minesweeper)
- saved_web = sheet.css_tag()
- saved_web += web
- updateDialog()
- return
-
-/obj/machinery/computer/arcade/minesweeper/emag_act(mob/user)
- . = ..()
- if(CHECK_BITFIELD(obj_flags, EMAGGED))
- return
- desc = "An arcade machine that generates grids. It's clunking and sparking everywhere, almost as if threatening to explode at any moment!"
- do_sparks(5, 1, src)
- randomnumber = rand(1,255)
- randomcolour = rgb(randomnumber,randomnumber/2,randomnumber/3)
- ENABLE_BITFIELD(obj_flags, EMAGGED)
- if(game_status == MINESWEEPER_GAME_MAIN_MENU)
- to_chat(user, "
An ominous tune plays from the arcade's speakers!")
- playsound(user, 'sound/arcade/minesweeper_emag1.ogg', 100, FALSE, extrarange = 3)
- else //Can't let you do that, star fox!
- to_chat(user, "
The machine buzzes and sparks... the game has been reset!")
- playsound(user, 'sound/machines/buzz-sigh.ogg', 100, FALSE, extrarange = 3) //Loud buzz
- game_status = MINESWEEPER_GAME_MAIN_MENU
- return TRUE
-
-/obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user)
- playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, FALSE, extrarange = -3) //Entered into the menu so ping sound
- var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num
- if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
- return FALSE
- new_rows = clamp(new_rows + 1, 4, 20)
- playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, FALSE, extrarange = -3)
- var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num
- if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
- return FALSE
- new_columns = clamp(new_columns + 1, 4, 30)
- playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, FALSE, extrarange = -3)
- var/grid_area = (new_rows - 1) * (new_columns - 1)
- var/lower_limit = round(grid_area*0.156)
- var/upper_limit = round(grid_area*0.85)
- var/new_mine_limit = input(user, "How many mines do you want? (Minimum: [lower_limit], Maximum: [upper_limit])", "Minesweeper Mines") as null|num
- if(!new_mine_limit || !user.canUseTopic(src, !hasSiliconAccessInArea(user)))
- return FALSE
- playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, FALSE, extrarange = -3)
- rows = new_rows
- columns = new_columns
- mine_limit = clamp(new_mine_limit, lower_limit, upper_limit)
- return TRUE
-
-/obj/machinery/computer/arcade/minesweeper/proc/make_mines(var/reset_everything)
- if(mine_placed < mine_limit)
- for(var/y1=1;y1
0 && x3 > 0)
- y2 = y3
- x2 = x3
- if(table[y2][x2] == 1)
- for(y3=y2-1;y3= rows || y3 < 1)
- continue
- for(x3=x2-1;x3= columns || x3 < 1)
- continue
- if(table[y3][x3] == 0)
- table[y2][x2] += 1
- if(table[y2][x2] == 11)
- for(y3=y2-1;y3= rows || y3 < 1)
- continue
- for(x3=x2-1;x3= columns || x3 < 1)
- continue
- if(table[y3][x3] > 0 && table[y3][x3] < 10)
- table[y3][x3] += 10
- work_squares(y3, x3) //Refresh so we check everything we might be missing
-
-/obj/machinery/computer/arcade/minesweeper/proc/explode_EVERYTHING()
- var/mob/living/user = usr
- to_chat(user, "You feel a great sense of dread wash over you, as if you just unleashed armageddon upon yourself!")
- var/row_limit = rows-1
- var/column_limit = columns-1
- var/mine_limit_v2 = mine_limit
- if(rows > 21)
- row_limit = 20
- if(columns > 21)
- column_limit = 20
- if(mine_limit > (rows*columns) * 0.25)
- mine_limit_v2 = 24
- message_admins("[key_name_admin(user)] failed an emagged Minesweeper arcade and has unleashed an explosion armageddon of size [row_limit],[column_limit] around [ADMIN_LOOKUPFLW(user.loc)]!")
- if(mine_limit_v2 < 10)
- explosion(loc, 2, 5, 10, 15) //Thought you could survive by putting as few mines as possible, huh??
- else
- explosion(loc, 1, 3, rand(1,5), rand(1,10))
- var/list/targets = list()
- var/cur_y = y - round(row_limit * 0.5, 1)
- var/starting_row = 1
- if(cur_y < 1)
- starting_row -= cur_y - 1
- cur_y = 1
- var/start_x = x - round(column_limit * 0.5, 1)
- var/starting_column = 1
- if(start_x < 1)
- starting_column -= start_x - 1
- start_x = 1
- for(var/row in starting_row to length(table)) //translate the mines locations into actual turf coordinates.
- if(!locate(cur_y, start_x, z))
- break
- var/cur_x = start_x
- for(var/column in starting_column to length(table[row]))
- var/coord_value = table[row][column]
- if(coord_value == 10 || coord_value == 0) //there is a mine in here.
- var/turf/T = locate(cur_y, cur_x, z)
- if(!T)
- break
- targets += T
- cur_x++
- cur_y++
- var/num_explosions = 0
- for(var/T in shuffle(targets)) //Create a shitton of explosions in irl turfs if we lose, it will probably kill us
- addtimer(CALLBACK(GLOBAL_PROC, /proc/explosion, T, 0, rand(1,2),rand(1,5),rand(3,10), FALSE), 15 * ++num_explosions)
- if(num_explosions == mine_limit_v2)
- return
-
-#undef MINESWEEPERIMG
-#undef MINESWEEPER_GAME_MAIN_MENU
-#undef MINESWEEPER_GAME_PLAYING
-#undef MINESWEEPER_GAME_LOST
-#undef MINESWEEPER_GAME_WON
diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm
index afab49ac76..742a1fe3b0 100644
--- a/code/game/objects/items/circuitboards/computer_circuitboards.dm
+++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm
@@ -259,11 +259,6 @@
build_path = /obj/machinery/computer/arcade/orion_trail
-/obj/item/circuitboard/computer/arcade/minesweeper
- name = "Minesweeper (Computer Board)"
- icon_state = "generic"
- build_path = /obj/machinery/computer/arcade/minesweeper
-
/obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
name = "Holodeck Control (Computer Board)"
icon_state = "generic"
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index 0af024985e..2d680fe212 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -273,24 +273,6 @@
"frenching" = 'icons/UI_Icons/Achievements/Misc/frenchingthebubble.png'
)
-/datum/asset/spritesheet/simple/minesweeper
- name = "minesweeper"
- assets = list(
- "1" = 'icons/UI_Icons/minesweeper_tiles/one.png',
- "2" = 'icons/UI_Icons/minesweeper_tiles/two.png',
- "3" = 'icons/UI_Icons/minesweeper_tiles/three.png',
- "4" = 'icons/UI_Icons/minesweeper_tiles/four.png',
- "5" = 'icons/UI_Icons/minesweeper_tiles/five.png',
- "6" = 'icons/UI_Icons/minesweeper_tiles/six.png',
- "7" = 'icons/UI_Icons/minesweeper_tiles/seven.png',
- "8" = 'icons/UI_Icons/minesweeper_tiles/eight.png',
- "empty" = 'icons/UI_Icons/minesweeper_tiles/empty.png',
- "flag" = 'icons/UI_Icons/minesweeper_tiles/flag.png',
- "hidden" = 'icons/UI_Icons/minesweeper_tiles/hidden.png',
- "mine" = 'icons/UI_Icons/minesweeper_tiles/mine.png',
- "minehit" = 'icons/UI_Icons/minesweeper_tiles/minehit.png'
- )
-
/datum/asset/spritesheet/simple/pills
name = "pills"
assets = list(
diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm
index 91663dbe0f..990e32df67 100644
--- a/code/modules/cargo/packs/misc.dm
+++ b/code/modules/cargo/packs/misc.dm
@@ -171,11 +171,11 @@
desc = "Start up your own grand casino with this crate filled with slot machine and arcade boards!"
cost = 3000
contains = list(/obj/item/circuitboard/computer/arcade/battle,
+ /obj/item/circuitboard/computer/arcade/battle,
/obj/item/circuitboard/computer/arcade/battle,
/obj/item/circuitboard/computer/arcade/orion_trail,
/obj/item/circuitboard/computer/arcade/orion_trail,
- /obj/item/circuitboard/computer/arcade/minesweeper,
- /obj/item/circuitboard/computer/arcade/minesweeper,
+ /obj/item/circuitboard/computer/arcade/orion_trail,
/obj/item/circuitboard/computer/slot_machine,
/obj/item/circuitboard/computer/slot_machine,
/obj/item/circuitboard/computer/slot_machine,
diff --git a/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm
index 99caa5b480..8ea883edf1 100644
--- a/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm
+++ b/code/modules/research/designs/comp_board_designs/comp_board_designs_all_misc.dm
@@ -21,14 +21,6 @@
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_ALL
-/datum/design/board/minesweeper
- name = "Computer Design (Minesweeper Arcade Machine)"
- desc = "Allows for the construction of circuit boards used to build a new Minesweeper machine."
- id = "arcade_minesweeper"
- build_path = /obj/item/circuitboard/computer/arcade/minesweeper
- category = list("Computer Boards")
- departmental_flags = DEPARTMENTAL_FLAG_ALL
-
/datum/design/board/slot_machine
name = "Computer Design (Slot Machine)"
desc = "Allows for the construction of circuit boards used to build a new slot machine."
diff --git a/code/modules/research/techweb/nodes/computer_hud_nodes.dm b/code/modules/research/techweb/nodes/computer_hud_nodes.dm
index 2db03861e9..0f2cf2e4bd 100644
--- a/code/modules/research/techweb/nodes/computer_hud_nodes.dm
+++ b/code/modules/research/techweb/nodes/computer_hud_nodes.dm
@@ -56,5 +56,5 @@
display_name = "Games and Toys"
description = "For the slackers on the station."
prereq_ids = list("comptech")
- design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe")
+ design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000)