From 138535f9f651ed82601b5c641a3095036b30e4e0 Mon Sep 17 00:00:00 2001 From: Ghommie Date: Sat, 22 Jun 2019 23:15:51 +0200 Subject: [PATCH 1/2] Porting in the "Mediborg's Amputation Adventure" and Minesweeper arcade machines. --- code/game/machinery/computer/arcade.dm | 1027 +---------------- code/game/machinery/computer/arcade/battle.dm | 206 ++++ .../machinery/computer/arcade/minesweeper.dm | 400 +++++++ .../machinery/computer/arcade/misc_arcade.dm | 31 + .../machinery/computer/arcade/orion_trail.dm | 809 +++++++++++++ .../circuitboards/computer_circuitboards.dm | 8 + code/modules/cargo/packs.dm | 3 +- code/modules/client/asset_cache.dm | 6 + .../comp_board_designs_all_misc.dm | 8 + icons/misc/minesweeper_tiles.dmi | Bin 0 -> 4583 bytes .../modules/research/techweb/all_nodes.dm | 2 +- sound/arcade/minesweeper_boardpress.ogg | Bin 0 -> 5439 bytes sound/arcade/minesweeper_emag1.ogg | Bin 0 -> 33868 bytes sound/arcade/minesweeper_emag2.ogg | Bin 0 -> 22229 bytes sound/arcade/minesweeper_explosion1.ogg | Bin 0 -> 12559 bytes sound/arcade/minesweeper_explosion2.ogg | Bin 0 -> 21241 bytes sound/arcade/minesweeper_explosion3.ogg | Bin 0 -> 20468 bytes sound/arcade/minesweeper_menuselect.ogg | Bin 0 -> 7384 bytes sound/arcade/minesweeper_startup.ogg | Bin 0 -> 25597 bytes sound/arcade/minesweeper_win.ogg | Bin 0 -> 18702 bytes sound/arcade/minesweeper_winfail.ogg | Bin 0 -> 14050 bytes tgstation.dme | 4 + 22 files changed, 1481 insertions(+), 1023 deletions(-) create mode 100644 code/game/machinery/computer/arcade/battle.dm create mode 100644 code/game/machinery/computer/arcade/minesweeper.dm create mode 100644 code/game/machinery/computer/arcade/misc_arcade.dm create mode 100644 code/game/machinery/computer/arcade/orion_trail.dm create mode 100644 icons/misc/minesweeper_tiles.dmi create mode 100644 sound/arcade/minesweeper_boardpress.ogg create mode 100644 sound/arcade/minesweeper_emag1.ogg create mode 100644 sound/arcade/minesweeper_emag2.ogg create mode 100644 sound/arcade/minesweeper_explosion1.ogg create mode 100644 sound/arcade/minesweeper_explosion2.ogg create mode 100644 sound/arcade/minesweeper_explosion3.ogg create mode 100644 sound/arcade/minesweeper_menuselect.ogg create mode 100644 sound/arcade/minesweeper_startup.ogg create mode 100644 sound/arcade/minesweeper_win.ogg create mode 100644 sound/arcade/minesweeper_winfail.ogg diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index efbbe36228..6f064d64df 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -83,8 +83,12 @@ // If it's a generic arcade machine, pick a random arcade // circuit board for it and make the new machine if(!circuit) - var/choice = pick(subtypesof(/obj/item/circuitboard/computer/arcade)) - var/obj/item/circuitboard/CB = new choice() + var/list/gameodds = list(/obj/item/circuitboard/computer/arcade/battle = 33, + /obj/item/circuitboard/computer/arcade/orion_trail = 33, + /obj/item/circuitboard/computer/arcade/minesweeper = 33, + /obj/item/circuitboard/computer/arcade/amputation = 2) + var/thegame = pickweight(gameodds) + var/obj/item/circuitboard/CB = new thegame() new CB.build_path(loc, CB) return INITIALIZE_HINT_QDEL Reset() @@ -122,1022 +126,3 @@ empprize = pickweight(prizes) new empprize(loc) explosion(loc, -1, 0, 1+num_of_prizes, flame_range = 1+num_of_prizes) - - -// ** BATTLE ** // - - -/obj/machinery/computer/arcade/battle - name = "arcade machine" - desc = "Does not support Pinball." - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/battle - var/enemy_name = "Space Villain" - var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = FALSE - var/blocked = FALSE //Player cannot attack/heal while set - var/turtle = 0 - - var/turn_speed = 5 //Measured in deciseconds. - -/obj/machinery/computer/arcade/battle/Reset() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") - - enemy_name = replacetext((name_part1 + name_part2), "the ", "") - name = (name_action + name_part1 + name_part2) - -/obj/machinery/computer/arcade/battle/ui_interact(mob/user) - . = ..() - var/dat = "Close" - dat += "

[enemy_name]

" - - dat += "

[temp]

" - dat += "
Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
" - - if (gameover) - dat += "
New Game" - else - dat += "
Attack | " - dat += "Heal | " - dat += "Recharge Power" - - dat += "
" - var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - -/obj/machinery/computer/arcade/battle/Topic(href, href_list) - if(..()) - return - - if (!blocked && !gameover) - if (href_list["attack"]) - blocked = TRUE - var/attackamt = rand(2,6) - temp = "You attack for [attackamt] damage!" - playsound(loc, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 10) - updateUsrDialog() - if(turtle > 0) - turtle-- - - sleep(turn_speed) - enemy_hp -= attackamt - arcade_action(usr) - - else if (href_list["heal"]) - blocked = TRUE - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(loc, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 10) - updateUsrDialog() - turtle++ - - sleep(turn_speed) - player_mp -= pointamt - player_hp += healamt - blocked = TRUE - updateUsrDialog() - arcade_action(usr) - - else if (href_list["charge"]) - blocked = TRUE - var/chargeamt = rand(4,7) - temp = "You regain [chargeamt] points" - playsound(loc, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 10) - player_mp += chargeamt - if(turtle > 0) - turtle-- - - updateUsrDialog() - sleep(turn_speed) - arcade_action(usr) - - if (href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - else if (href_list["newgame"]) //Reset everything - temp = "New Round" - player_hp = initial(player_hp) - player_mp = initial(player_mp) - enemy_hp = initial(enemy_hp) - enemy_mp = initial(enemy_mp) - gameover = FALSE - turtle = 0 - - if(obj_flags & EMAGGED) - Reset() - obj_flags &= ~EMAGGED - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/arcade/battle/proc/arcade_action(mob/user) - if ((enemy_mp <= 0) || (enemy_hp <= 0)) - if(!gameover) - gameover = TRUE - temp = "[enemy_name] has fallen! Rejoice!" - playsound(loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10) - - if(obj_flags & EMAGGED) - new /obj/effect/spawner/newbomb/timer/syndicate(loc) - new /obj/item/clothing/head/collectable/petehat(loc) - message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") - log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") - Reset() - obj_flags &= ~EMAGGED - else - prizevend(user) - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) - - - else if ((obj_flags & EMAGGED) && (turtle >= 4)) - var/boomamt = rand(5,10) - temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(loc, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 10) - player_hp -= boomamt - - else if ((enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - temp = "[enemy_name] steals [stealamt] of your power!" - playsound(loc, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 10) - player_mp -= stealamt - updateUsrDialog() - - if (player_mp <= 0) - gameover = TRUE - sleep(turn_speed) - temp = "You have been drained! GAME OVER" - playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(obj_flags & EMAGGED) - usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "mana", (obj_flags & EMAGGED ? "emagged":"normal"))) - - else if ((enemy_hp <= 10) && (enemy_mp > 4)) - temp = "[enemy_name] heals for 4 health!" - playsound(loc, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 10) - enemy_hp += 4 - enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - temp = "[enemy_name] attacks for [attackamt] damage!" - playsound(loc, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 10) - player_hp -= attackamt - - if ((player_mp <= 0) || (player_hp <= 0)) - gameover = TRUE - temp = "You have been crushed! GAME OVER" - playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) - if(obj_flags & EMAGGED) - usr.gib() - SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) - - blocked = FALSE - return - - -/obj/machinery/computer/arcade/battle/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - to_chat(user, "A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!") - temp = "If you die in the game, you die for real!" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = FALSE - blocked = FALSE - - obj_flags |= EMAGGED - - enemy_name = "Cuban Pete" - name = "Outbomb Cuban Pete" - - - updateUsrDialog() - - - -// *** THE ORION TRAIL ** // - -#define ORION_TRAIL_WINTURN 9 - -//Orion Trail Events -#define ORION_TRAIL_RAIDERS "Raiders" -#define ORION_TRAIL_FLUX "Interstellar Flux" -#define ORION_TRAIL_ILLNESS "Illness" -#define ORION_TRAIL_BREAKDOWN "Breakdown" -#define ORION_TRAIL_LING "Changelings?" -#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" -#define ORION_TRAIL_MALFUNCTION "Malfunction" -#define ORION_TRAIL_COLLISION "Collision" -#define ORION_TRAIL_SPACEPORT "Spaceport" -#define ORION_TRAIL_BLACKHOLE "BlackHole" - -#define ORION_STATUS_START 1 -#define ORION_STATUS_NORMAL 2 -#define ORION_STATUS_GAMEOVER 3 -#define ORION_STATUS_MARKET 4 - -/obj/machinery/computer/arcade/orion_trail - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - icon_state = "arcade" - circuit = /obj/item/circuitboard/computer/arcade/orion_trail - var/busy = FALSE //prevent clickspam that allowed people to ~speedrun~ the game. - var/engine = 0 - var/hull = 0 - var/electronics = 0 - var/food = 80 - var/fuel = 60 - var/turns = 4 - var/alive = 4 - var/eventdat = null - var/event = null - var/list/settlers = list("Harry","Larry","Bob") - var/list/events = list(ORION_TRAIL_RAIDERS = 3, - ORION_TRAIL_FLUX = 1, - ORION_TRAIL_ILLNESS = 3, - ORION_TRAIL_BREAKDOWN = 2, - ORION_TRAIL_LING = 3, - ORION_TRAIL_MALFUNCTION = 2, - ORION_TRAIL_COLLISION = 1, - ORION_TRAIL_SPACEPORT = 2 - ) - var/list/stops = list() - var/list/stopblurbs = list() - var/lings_aboard = 0 - var/spaceport_raided = 0 - var/spaceport_freebie = 0 - var/last_spaceport_action = "" - var/gameStatus = ORION_STATUS_START - var/canContinueEvent = 0 - -/obj/machinery/computer/arcade/orion_trail/kobayashi - name = "Kobayashi Maru control computer" - desc = "A test for cadets" - icon = 'icons/obj/machines/particle_accelerator.dmi' - icon_state = "control_boxp" - events = list("Raiders" = 3, "Interstellar Flux" = 1, "Illness" = 3, "Breakdown" = 2, "Malfunction" = 2, "Collision" = 1, "Spaceport" = 2) - prizes = list(/obj/item/paper/fluff/holodeck/trek_diploma = 1) - settlers = list("Kirk","Worf","Gene") - -/obj/machinery/computer/arcade/orion_trail/Reset() - // Sets up the main trail - stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") - stopblurbs = list( - "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", - "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", - "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", - "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", - "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", - "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", - "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", - "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", - "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" - ) - -/obj/machinery/computer/arcade/orion_trail/proc/newgame() - // Set names of settlers in crew - settlers = list() - for(var/i = 1; i <= 3; i++) - add_crewmember() - add_crewmember("[usr]") - // Re-set items to defaults - engine = 1 - hull = 1 - electronics = 1 - food = 80 - fuel = 60 - alive = 4 - turns = 1 - event = null - gameStatus = ORION_STATUS_NORMAL - lings_aboard = 0 - - //spaceport junk - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - -/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user) - . = ..() - if(fuel <= 0 || food <=0 || settlers.len == 0) - gameStatus = ORION_STATUS_GAMEOVER - event = null - var/dat = "" - if(gameStatus == ORION_STATUS_GAMEOVER) - dat = "

Game Over

" - dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." - if(!settlers.len) - dat += "
Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy." - else - if(food <= 0) - dat += "
You ran out of food and starved." - if(obj_flags & EMAGGED) - user.nutrition = 0 //yeah you pretty hongry - to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") - if(fuel <= 0) - dat += "
You ran out of fuel, and drift, slowly, into a star." - if(obj_flags & EMAGGED) - var/mob/living/M = user - M.adjust_fire_stacks(5) - M.IgniteMob() //flew into a star, so you're on fire - to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") - - if(obj_flags & EMAGGED) - to_chat(user, "You're never going to make it to Orion...") - user.death() - obj_flags &= ~EMAGGED //removes the emagged status after you lose - gameStatus = ORION_STATUS_START - name = "The Orion Trail" - desc = "Learn how our ancestors got to Orion, and have fun in the process!" - - dat += "

May They Rest In Peace

" - else if(event) - dat = eventdat - else if(gameStatus == ORION_STATUS_NORMAL) - var/title = stops[turns] - var/subtext = stopblurbs[turns] - dat = "

[title]

" - dat += "[subtext]" - dat += "

Crew:

" - dat += english_list(settlers) - dat += "
Food: [food] | Fuel: [fuel]" - dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - if(turns == 7) - dat += "

Go Around Continue

" - else - dat += "

Continue

" - dat += "

Kill a Crewmember

" - dat += "

Close

" - else - dat = "

The Orion Trail

" - dat += "

Experience the journey of your ancestors!



" - dat += "
New Game
" - dat += "

Close

" - var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) - popup.open() - return - -/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) - if(..()) - return - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=arcade") - - if(busy) - return - busy = TRUE - - if (href_list["continue"]) //Continue your travels - if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) - if(turns >= ORION_TRAIL_WINTURN) - win(usr) - else - food -= (alive+lings_aboard)*2 - fuel -= 5 - if(turns == 2 && prob(30)) - event = ORION_TRAIL_COLLISION - event() - else if(prob(75)) - event = pickweight(events) - if(lings_aboard) - if(event == ORION_TRAIL_LING || prob(55)) - event = ORION_TRAIL_LING_ATTACK - event() - turns += 1 - if(obj_flags & EMAGGED) - var/mob/living/carbon/M = usr //for some vars - switch(event) - if(ORION_TRAIL_RAIDERS) - if(prob(50)) - to_chat(usr, "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?") - M.hallucination += 30 - else - to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") - M.take_bodypart_damage(30) - playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) - if(ORION_TRAIL_ILLNESS) - var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS - if(severity == 1) - to_chat(M, "You suddenly feel slightly nauseated." ) - if(severity == 2) - to_chat(usr, "You suddenly feel extremely nauseated and hunch over until it passes.") - M.Stun(60) - if(severity >= 3) //you didn't pray hard enough - to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.") - M.Stun(100) - sleep(30) - M.vomit(10, distance = 5) - if(ORION_TRAIL_FLUX) - if(prob(75)) - M.Knockdown(60) - say("A sudden gust of powerful wind slams [M] into the floor!") - M.take_bodypart_damage(25) - playsound(loc, 'sound/weapons/genhit.ogg', 100, 1) - else - to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!") - if(ORION_TRAIL_COLLISION) //by far the most damaging event - if(prob(90)) - playsound(loc, 'sound/effects/bang.ogg', 100, 1) - var/turf/open/floor/F - for(F in orange(1, src)) - F.ScrapeAway() - say("Something slams into the floor around [src], exposing it to space!") - if(hull) - sleep(10) - say("A new floor suddenly appears around [src]. What the hell?") - playsound(loc, 'sound/weapons/genhit.ogg', 100, 1) - var/turf/open/space/T - for(T in orange(1, src)) - T.PlaceOnTop(/turf/open/floor/plating) - else - say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(loc, 'sound/effects/bang.ogg', 50, 1) - if(ORION_TRAIL_MALFUNCTION) - playsound(loc, 'sound/effects/empulse.ogg', 50, 1) - visible_message("[src] malfunctions, randomizing in-game stats!") - var/oldfood = food - var/oldfuel = fuel - food = rand(10,80) / rand(1,2) - fuel = rand(10,60) / rand(1,2) - if(electronics) - sleep(10) - if(oldfuel > fuel && oldfood > food) - audible_message("[src] lets out a somehow reassuring chime.") - else if(oldfuel < fuel || oldfood < food) - audible_message("[src] lets out a somehow ominous chime.") - food = oldfood - fuel = oldfuel - playsound(loc, 'sound/machines/chime.ogg', 50, 1) - - else if(href_list["newgame"]) //Reset everything - if(gameStatus == ORION_STATUS_START) - newgame() - else if(href_list["menu"]) //back to the main menu - if(gameStatus == ORION_STATUS_GAMEOVER) - gameStatus = ORION_STATUS_START - event = null - food = 80 - fuel = 60 - settlers = list("Harry","Larry","Bob") - else if(href_list["slow"]) //slow down - if(event == ORION_TRAIL_FLUX) - food -= (alive+lings_aboard)*2 - fuel -= 5 - event = null - else if(href_list["pastblack"]) //slow down - if(turns == 7) - food -= ((alive+lings_aboard)*2)*3 - fuel -= 15 - turns += 1 - event = null - else if(href_list["useengine"]) //use parts - if(event == ORION_TRAIL_BREAKDOWN) - engine = max(0, --engine) - event = null - else if(href_list["useelec"]) //use parts - if(event == ORION_TRAIL_MALFUNCTION) - electronics = max(0, --electronics) - event = null - else if(href_list["usehull"]) //use parts - if(event == ORION_TRAIL_COLLISION) - hull = max(0, --hull) - event = null - else if(href_list["wait"]) //wait 3 days - if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) - food -= ((alive+lings_aboard)*2)*3 - event = null - else if(href_list["keepspeed"]) //keep speed - if(event == ORION_TRAIL_FLUX) - if(prob(75)) - event = "Breakdown" - event() - else - event = null - else if(href_list["blackhole"]) //keep speed past a black hole - if(turns == 7) - if(prob(75)) - event = ORION_TRAIL_BLACKHOLE - event() - if(obj_flags & EMAGGED) - playsound(loc, 'sound/effects/supermatter.ogg', 100, 1) - say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") - if(isliving(usr)) - var/mob/living/L = usr - L.Stun(200, ignore_canstun = TRUE) //you can't run :^) - var/S = new /obj/singularity/academy(usr.loc) - addtimer(CALLBACK(src, /atom/movable/proc/say, "[S] winks out, just as suddenly as it appeared."), 50) - QDEL_IN(S, 50) - else - event = null - turns += 1 - else if(href_list["holedeath"]) - if(event == ORION_TRAIL_BLACKHOLE) - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(href_list["eventclose"]) //end an event - if(canContinueEvent) - event = null - - else if(href_list["killcrew"]) //shoot a crewmember - if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) - var/sheriff = remove_crewmember() //I shot the sheriff - playsound(loc,'sound/weapons/gunshot.ogg', 100, 1) - - if(settlers.len == 0 || alive == 0) - say("The last crewmember [sheriff], shot themselves, GAME OVER!") - if(obj_flags & EMAGGED) - usr.death(0) - obj_flags &= EMAGGED - gameStatus = ORION_STATUS_GAMEOVER - event = null - else if(obj_flags & EMAGGED) - if(usr.name == sheriff) - say("The crew of the ship chose to kill [usr.name]!") - usr.death(0) - - if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places - event = null - - //Spaceport specific interactions - //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) - //they also call event() again, to regen the eventdata, which is kind of odd but necessary - else if(href_list["buycrew"]) //buy a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && food >= 10 && fuel >= 10) - var/bought = add_crewmember() - last_spaceport_action = "You hired [bought] as a new crewmember." - fuel -= 10 - food -= 10 - event() - - else if(href_list["sellcrew"]) //sell a crewmember - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && settlers.len > 1) - var/sold = remove_crewmember() - last_spaceport_action = "You sold your crewmember, [sold]!" - fuel += 7 - food += 7 - event() - - else if(href_list["leave_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - event = null - gameStatus = ORION_STATUS_NORMAL - spaceport_raided = 0 - spaceport_freebie = 0 - last_spaceport_action = "" - - else if(href_list["raid_spaceport"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - var/success = min(15 * alive,100) //default crew (4) have a 60% chance - spaceport_raided = 1 - - var/FU = 0 - var/FO = 0 - if(prob(success)) - FU = rand(5,15) - FO = rand(5,15) - last_spaceport_action = "You successfully raided the spaceport! You gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" - else - FU = rand(-5,-15) - FO = rand(-5,-15) - last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" - - //your chance of lose a crewmember is 1/2 your chance of success - //this makes higher % failures hurt more, don't get cocky space cowboy! - if(prob(success*5)) - var/lost_crew = remove_crewmember() - last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" - if(obj_flags & EMAGGED) - say("WEEWOO! WEEWOO! Spaceport security en route!") - playsound(src, 'sound/items/weeoo1.ogg', 100, FALSE) - for(var/i, i<=3, i++) - var/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion(get_turf(src)) - O.target = usr - - - fuel += FU - food += FO - event() - - else if(href_list["buyparts"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided && fuel > 5) - switch(text2num(href_list["buyparts"])) - if(1) //Engine Parts - engine++ - last_spaceport_action = "Bought Engine Parts" - if(2) //Hull Plates - hull++ - last_spaceport_action = "Bought Hull Plates" - if(3) //Spare Electronics - electronics++ - last_spaceport_action = "Bought Spare Electronics" - fuel -= 5 //they all cost 5 - event() - - else if(href_list["trade"]) - if(gameStatus == ORION_STATUS_MARKET) - if(!spaceport_raided) - switch(text2num(href_list["trade"])) - if(1) //Fuel - if(fuel > 5) - fuel -= 5 - food += 5 - last_spaceport_action = "Traded Fuel for Food" - event() - if(2) //Food - if(food > 5) - fuel += 5 - food -= 5 - last_spaceport_action = "Traded Food for Fuel" - event() - - add_fingerprint(usr) - updateUsrDialog() - busy = FALSE - return - - -/obj/machinery/computer/arcade/orion_trail/proc/event() - eventdat = "

[event]

" - canContinueEvent = 0 - switch(event) - if(ORION_TRAIL_RAIDERS) - eventdat += "Raiders have come aboard your ship!" - if(prob(50)) - var/sfood = rand(1,10) - var/sfuel = rand(1,10) - food -= sfood - fuel -= sfuel - eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." - else if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] tried to fight back, but was killed." - else - eventdat += "
Fortunately, you fended them off without any trouble." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_FLUX) - eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." - eventdat += "
What will you do?" - eventdat += "

Slow Down Continue

" - eventdat += "

Close

" - - if(ORION_TRAIL_ILLNESS) - eventdat += "A deadly illness has been contracted!" - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by the disease." - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_BREAKDOWN) - eventdat += "Oh no! The engine has broken down!" - eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." - if(engine >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_MALFUNCTION) - eventdat += "The ship's systems are malfunctioning!" - eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." - if(electronics >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_COLLISION) - eventdat += "Something hit us! Looks like there's some hull damage." - if(prob(25)) - var/sfood = rand(5,15) - var/sfuel = rand(5,15) - food -= sfood - fuel -= sfuel - eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." - if(prob(10)) - var/deadname = remove_crewmember() - eventdat += "
[deadname] was killed by rapid depressurization." - eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." - if(hull >= 1) - eventdat += "

Use PartWait

" - else - eventdat += "

Wait

" - eventdat += "

Close

" - - if(ORION_TRAIL_BLACKHOLE) - eventdat += "You were swept away into the black hole." - eventdat += "

Oh...

" - eventdat += "

Close

" - settlers = list() - - if(ORION_TRAIL_LING) - eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." - if(settlers.len <= 2) - eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." - eventdat += "

Continue

" - eventdat += "

Close

" - if(prob(10)) // "likely", I didn't say it was guaranteed! - lings_aboard = min(++lings_aboard,2) - else - if(lings_aboard) //less likely to stack lings - if(prob(20)) - lings_aboard = min(++lings_aboard,2) - else if(prob(70)) - lings_aboard = min(++lings_aboard,2) - - eventdat += "

Kill a Crewmember

" - eventdat += "

Risk it

" - eventdat += "

Close

" - canContinueEvent = 1 - - if(ORION_TRAIL_LING_ATTACK) - if(lings_aboard <= 0) //shouldn't trigger, but hey. - eventdat += "Haha, fooled you, there are no changelings on board!" - eventdat += "
(You should report this to a coder :S)" - else - var/ling1 = remove_crewmember() - var/ling2 = "" - if(lings_aboard >= 2) - ling2 = remove_crewmember() - - eventdat += "Changelings among your crew suddenly burst from hiding and attack!" - if(ling2) - eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" - else - eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" - - var/chance2attack = alive*20 - if(prob(chance2attack)) - var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance - if(prob(chancetokill)) - var/deadguy = remove_crewmember() - var/murder_text = pick("The changeling[ling2 ? "s" : ""] bring[ling2 ? "" : "s"] down [deadguy] and disembowel[ling2 ? "" : "s"] them in a spray of gore!", \ - "[ling2 ? pick(ling1, ling2) : ling1] corners [deadguy] and impales them through the stomach!", \ - "[ling2 ? pick(ling1, ling2) : ling1] decapitates [deadguy] in a single cleaving arc!") - eventdat += "
[murder_text]" - else - eventdat += "

You valiantly fight off the changeling[ling2 ? "s":""]!" - if(ling2) - food += 30 - lings_aboard = max(0,lings_aboard-2) - else - food += 15 - lings_aboard = max(0,--lings_aboard) - eventdat += "
Well, it's perfectly good food...\ -
You cut the changeling[ling2 ? "s" : ""] into meat, gaining [ling2 ? "30" : "15"] Food!" - else - eventdat += "

[pick("Sensing unfavorable odds", "After a failed attack", "Suddenly breaking nerve")], \ - the changeling[ling2 ? "s":""] vanish[ling2 ? "" : "es"] into space through the airlocks! You're safe... for now." - if(ling2) - lings_aboard = max(0,lings_aboard-2) - else - lings_aboard = max(0,--lings_aboard) - - eventdat += "

Continue

" - eventdat += "

Close

" - canContinueEvent = 1 - - - if(ORION_TRAIL_SPACEPORT) - gameStatus = ORION_STATUS_MARKET - if(spaceport_raided) - eventdat += "The spaceport is on high alert! You've been barred from docking by the local authorities after your failed raid." - if(last_spaceport_action) - eventdat += "
Last Spaceport Action: [last_spaceport_action]" - eventdat += "

Depart Spaceport

" - eventdat += "

Close

" - else - eventdat += "Your jump into the sector yields a spaceport - a lucky find!" - eventdat += "
This spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." - eventdat += "
Trading terms: FU = Fuel, FO = Food" - if(last_spaceport_action) - eventdat += "
Last action: [last_spaceport_action]" - eventdat += "

Crew:

" - eventdat += english_list(settlers) - eventdat += "
Food: [food] | Fuel: [fuel]" - eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" - - - //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) - if(!spaceport_freebie && (fuel < 20 || food < 20)) - spaceport_freebie++ - var/FU = 10 - var/FO = 10 - var/freecrew = 0 - if(prob(30)) - FU = 25 - FO = 25 - - if(prob(10)) - add_crewmember() - freecrew++ - - eventdat += "
The traders of the spaceport take pity on you, and generously give you some free supplies! (+[FU]FU, +[FO]FO)" - if(freecrew) - eventdat += "
You also gain a new crewmember!" - - fuel += FU - food += FO - - //CREW INTERACTIONS - eventdat += "

Crew Management:

" - - //Buy crew - if(food >= 10 && fuel >= 10) - eventdat += "

Hire a New Crewmember (-10FU, -10FO)

" - else - eventdat += "

You cannot afford a new crewmember.

" - - //Sell crew - if(settlers.len > 1) - eventdat += "

Sell Crew for Fuel and Food (+7FU, +7FO)

" - else - eventdat += "

You have no other crew to sell.

" - - //BUY/SELL STUFF - eventdat += "

Spare Parts:

" - - //Engine parts - if(fuel > 5) - eventdat += "

Buy Engine Parts (-5FU)

" - else - eventdat += "

You cannot afford engine parts." - - //Hull plates - if(fuel > 5) - eventdat += "

Buy Hull Plates (-5FU)

" - else - eventdat += "

You cannot afford hull plates." - - //Electronics - if(fuel > 5) - eventdat += "

Buy Spare Electronics (-5FU)

" - else - eventdat += "

You cannot afford spare electronics." - - //Trade - if(fuel > 5) - eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" - else - eventdat += "

You don't have 5FU to trade. 5) - eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" - else - eventdat += "

You don't have 5FO to trade.You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.") - name = "The Orion Trail: Realism Edition" - desc = "Learn how our ancestors got to Orion, and try not to die in the process!" - newgame() - obj_flags |= EMAGGED - -/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion - name = "spaceport security" - desc = "Premier corporate security forces for all spaceports found along the Orion Trail." - faction = list("orion") - loot = list() - del_on_death = TRUE - -/obj/item/orion_ship - name = "model settler ship" - desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." - icon = 'icons/obj/toy.dmi' - icon_state = "ship" - w_class = WEIGHT_CLASS_SMALL - var/active = 0 //if the ship is on - -/obj/item/orion_ship/examine(mob/user) - ..() - if(!(in_range(user, src))) - return - if(!active) - to_chat(user, "There's a little switch on the bottom. It's flipped down.") - else - to_chat(user, "There's a little switch on the bottom. It's flipped up.") - -/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse - if(active) - return - - message_admins("[ADMIN_LOOKUPFLW(usr)] primed an explosive Orion ship for detonation at [AREACOORD(usr)].") - log_game("[key_name(usr)] primed an explosive Orion ship for detonation at [AREACOORD(usr)].") - - to_chat(user, "You flip the switch on the underside of [src].") - active = 1 - visible_message("[src] softly beeps and whirs to life!") - playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) - say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") - sleep(20) - visible_message("[src] begins to vibrate...") - say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") - sleep(30) - say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, 1) - sleep(3.6) - visible_message("[src] explodes!") - explosion(loc, 2,4,8, flame_range = 16) - qdel(src) - - -#undef ORION_TRAIL_WINTURN -#undef ORION_TRAIL_RAIDERS -#undef ORION_TRAIL_FLUX -#undef ORION_TRAIL_ILLNESS -#undef ORION_TRAIL_BREAKDOWN -#undef ORION_TRAIL_LING -#undef ORION_TRAIL_LING_ATTACK -#undef ORION_TRAIL_MALFUNCTION -#undef ORION_TRAIL_COLLISION -#undef ORION_TRAIL_SPACEPORT -#undef ORION_TRAIL_BLACKHOLE - -#undef ORION_STATUS_START -#undef ORION_STATUS_NORMAL -#undef ORION_STATUS_GAMEOVER -#undef ORION_STATUS_MARKET diff --git a/code/game/machinery/computer/arcade/battle.dm b/code/game/machinery/computer/arcade/battle.dm new file mode 100644 index 0000000000..ded9cf95f6 --- /dev/null +++ b/code/game/machinery/computer/arcade/battle.dm @@ -0,0 +1,206 @@ +// ** BATTLE ** // + + +/obj/machinery/computer/arcade/battle + name = "arcade machine" + desc = "Does not support Pinball." + icon_state = "arcade" + circuit = /obj/item/circuitboard/computer/arcade/battle + var/enemy_name = "Space Villain" + var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc + var/player_hp = 30 //Player health/attack points + var/player_mp = 10 + var/enemy_hp = 45 //Enemy health/attack points + var/enemy_mp = 20 + var/gameover = FALSE + var/blocked = FALSE //Player cannot attack/heal while set + var/turtle = 0 + + var/turn_speed = 5 //Measured in deciseconds. + +/obj/machinery/computer/arcade/battle/Reset() + var/name_action + var/name_part1 + var/name_part2 + + name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "Ban ") + + name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") + name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn", "Bloopers") + + enemy_name = replacetext((name_part1 + name_part2), "the ", "") + name = (name_action + name_part1 + name_part2) + +/obj/machinery/computer/arcade/battle/ui_interact(mob/user) + . = ..() + var/dat = "Close" + dat += "

[enemy_name]

" + + dat += "

[temp]

" + dat += "
Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
" + + if (gameover) + dat += "
New Game" + else + dat += "
Attack | " + dat += "Heal | " + dat += "Recharge Power" + + dat += "
" + var/datum/browser/popup = new(user, "arcade", "Space Villain 2000") + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) + popup.open() + +/obj/machinery/computer/arcade/battle/Topic(href, href_list) + if(..()) + return + + if (!blocked && !gameover) + if (href_list["attack"]) + blocked = TRUE + var/attackamt = rand(2,6) + temp = "You attack for [attackamt] damage!" + playsound(loc, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 10) + updateUsrDialog() + if(turtle > 0) + turtle-- + + sleep(turn_speed) + enemy_hp -= attackamt + arcade_action(usr) + + else if (href_list["heal"]) + blocked = TRUE + var/pointamt = rand(1,3) + var/healamt = rand(6,8) + temp = "You use [pointamt] magic to heal for [healamt] damage!" + playsound(loc, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 10) + updateUsrDialog() + turtle++ + + sleep(turn_speed) + player_mp -= pointamt + player_hp += healamt + blocked = TRUE + updateUsrDialog() + arcade_action(usr) + + else if (href_list["charge"]) + blocked = TRUE + var/chargeamt = rand(4,7) + temp = "You regain [chargeamt] points" + playsound(loc, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 10) + player_mp += chargeamt + if(turtle > 0) + turtle-- + + updateUsrDialog() + sleep(turn_speed) + arcade_action(usr) + + if (href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + else if (href_list["newgame"]) //Reset everything + temp = "New Round" + player_hp = initial(player_hp) + player_mp = initial(player_mp) + enemy_hp = initial(enemy_hp) + enemy_mp = initial(enemy_mp) + gameover = FALSE + turtle = 0 + + if(obj_flags & EMAGGED) + Reset() + obj_flags &= ~EMAGGED + + add_fingerprint(usr) + updateUsrDialog() + return + +/obj/machinery/computer/arcade/battle/proc/arcade_action(mob/user) + if ((enemy_mp <= 0) || (enemy_hp <= 0)) + if(!gameover) + gameover = TRUE + temp = "[enemy_name] has fallen! Rejoice!" + playsound(loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10) + + if(obj_flags & EMAGGED) + new /obj/effect/spawner/newbomb/timer/syndicate(loc) + new /obj/item/clothing/head/collectable/petehat(loc) + message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") + log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") + Reset() + obj_flags &= ~EMAGGED + else + prizevend(user) + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("win", (obj_flags & EMAGGED ? "emagged":"normal"))) + + + else if ((obj_flags & EMAGGED) && (turtle >= 4)) + var/boomamt = rand(5,10) + temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" + playsound(loc, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 10) + player_hp -= boomamt + + else if ((enemy_mp <= 5) && (prob(70))) + var/stealamt = rand(2,3) + temp = "[enemy_name] steals [stealamt] of your power!" + playsound(loc, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 10) + player_mp -= stealamt + updateUsrDialog() + + if (player_mp <= 0) + gameover = TRUE + sleep(turn_speed) + temp = "You have been drained! GAME OVER" + playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(obj_flags & EMAGGED) + usr.gib() + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "mana", (obj_flags & EMAGGED ? "emagged":"normal"))) + + else if ((enemy_hp <= 10) && (enemy_mp > 4)) + temp = "[enemy_name] heals for 4 health!" + playsound(loc, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 10) + enemy_hp += 4 + enemy_mp -= 4 + + else + var/attackamt = rand(3,6) + temp = "[enemy_name] attacks for [attackamt] damage!" + playsound(loc, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 10) + player_hp -= attackamt + + if ((player_mp <= 0) || (player_hp <= 0)) + gameover = TRUE + temp = "You have been crushed! GAME OVER" + playsound(loc, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 10) + if(obj_flags & EMAGGED) + usr.gib() + SSblackbox.record_feedback("nested tally", "arcade_results", 1, list("loss", "hp", (obj_flags & EMAGGED ? "emagged":"normal"))) + + blocked = FALSE + return + + +/obj/machinery/computer/arcade/battle/emag_act(mob/user) + if(obj_flags & EMAGGED) + return + to_chat(user, "A mesmerizing Rhumba beat starts playing from the arcade machine's speakers!") + temp = "If you die in the game, you die for real!" + player_hp = 30 + player_mp = 10 + enemy_hp = 45 + enemy_mp = 20 + gameover = FALSE + blocked = FALSE + + obj_flags |= EMAGGED + + enemy_name = "Cuban Pete" + name = "Outbomb Cuban Pete" + + + updateUsrDialog() diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm new file mode 100644 index 0000000000..f3f810a5fc --- /dev/null +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -0,0 +1,400 @@ +#define MINESWEEPER_GAME_MAIN_MENU 0 +#define MINESWEEPER_GAME_PLAYING 1 +#define MINESWEEPER_GAME_LOST 2 +#define MINESWEEPER_GAME_WON 3 +#define MINESWEEPERIMG(what) {""} //Basically bypassing asset.icon_tag() + +/obj/machinery/computer/arcade/minesweeper + name = "Minesweeper" + desc = "An arcade machine that generates grids. It seems that the machine sparks and screeches when a grid is generated, as if it cannot cope with the intensity of generating the grid." + icon_state = "arcade" + circuit = /obj/item/circuitboard/computer/arcade/minesweeper + var/area + var/difficulty = "" //To show what difficulty you are playing + var/flag_text = "" + var/flagging = FALSE + var/game_status = MINESWEEPER_GAME_MAIN_MENU + var/mine_limit = 0 + var/mine_placed = 0 + var/mine_sound = TRUE //So it doesn't get repeated when multiple mines are exposed + var/randomcolour = 1 + var/randomnumber = 1 //Random emagged game iteration number to be displayed, put here so it is persistent across one individual arcade machine + var/safe_squares_revealed + var/saved_web = "" //To display the web if you click on the arcade + var/win_condition + var/rows = 1 + var/columns = 1 + var/table[31][51] //Make the board boys, 30x50 board + +/obj/machinery/computer/arcade/minesweeper/interact(mob/user) + var/web_difficulty_menu = " Reveal all the squares without hitting a mine!
What difficulty do you want to play?



Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom" + var/static_web = "Minesweeper
Minesweeper
" //When we need to revert to the main menu we set web as this + var/static_emagged_web = "Minesweeper
Minesweeper EXTREME EDITION: Iteration #[randomnumber]
" //Different colour mix for every random number made + var/emagged_web_difficulty_menu = "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" + user = usr + + var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/minesweeper) + assets.send(user) + + if(game_status == MINESWEEPER_GAME_MAIN_MENU) + if(obj_flags & EMAGGED) + playsound(loc, 'sound/arcade/minesweeper_emag2.ogg', 50, 0, extrarange = -3, falloff = 10) + user << browse(static_emagged_web+emagged_web_difficulty_menu,"window=minesweeper,size=400x500") + else + playsound(loc, 'sound/arcade/minesweeper_startup.ogg', 50, 0, extrarange = -3, falloff = 10) + user << browse(static_web+web_difficulty_menu,"window=minesweeper,size=400x500") + else + playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, 0, extrarange = -3, falloff = 10) + user << browse(saved_web,"window=minesweeper,size=400x500") + if(obj_flags & EMAGGED) + do_sparks(5, 1, src) + add_fingerprint(user) + + ..() + +/obj/machinery/computer/arcade/minesweeper/Topic(href, href_list) + if(..()) + return + + var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/minesweeper) + var/exploding_hell = FALSE //For emagged failures + var/reset_board = FALSE + var/prizevended = TRUE + var/mob/living/user = usr //To identify who the hell is using this window, this should also make things like aliens and monkeys able to use the machine!! + var/web_difficulty_menu = " Reveal all the squares without hitting a mine!
What difficulty do you want to play?



Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom" + var/web = "Minesweeper
Minesweeper
" + var/static_web = "Minesweeper
Minesweeper
" //When we need to revert to the main menu we set web as this + web = static_web + web += sheet.css_tag() + + if(obj_flags & EMAGGED) + web = "Minesweeper
Minesweeper EXTREME EDITION: Iteration #[randomnumber]
" //Different colour mix for every random number made + do_sparks(5, 1, src) + + 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, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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"]) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + flag_text = "OFF" + game_status = MINESWEEPER_GAME_PLAYING + reset_board = TRUE + difficulty = "Custom" + rows = text2num(input(usr, "How many rows do you want? (Maximum of 30 allowed)", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 + columns = text2num(input(usr, "How many columns do you want? (Maximum of 50 allowed)", "Minesweeper Squares"))+1 //+1 as dm arrays start at 1 + var/grid_area = (rows-1)*(columns-1) + mine_limit = text2num(input(usr, "How many mines do you want? (Maximum of [round(grid_area*0.85)] allowed)", "Minesweeper Mines")) + custom_generation() + if(href_list["Flag"]) + playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, 0, extrarange = -3, falloff = 10) + if(!flagging) + flagging = TRUE + flag_text = "ON" + else + flagging = FALSE + flag_text = "OFF" + + if(game_status == MINESWEEPER_GAME_MAIN_MENU) + if(obj_flags & EMAGGED) + playsound(loc, 'sound/arcade/minesweeper_emag2.ogg', 50, 0, extrarange = -3, falloff = 10) + 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, 0, extrarange = -3, falloff = 10) + web += web_difficulty_menu + + if(game_status == MINESWEEPER_GAME_PLAYING) + prizevended = FALSE + 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, 0, extrarange = -3, falloff = 10) + else + if(game_status != MINESWEEPER_GAME_LOST && game_status != MINESWEEPER_GAME_WON) + game_status = MINESWEEPER_GAME_LOST + if(obj_flags & EMAGGED && !exploding_hell) + exploding_hell = TRUE + explode_EVERYTHING() + if(mine_sound) + switch(rand(1,3)) //Play every time a mine is hit + if(1) + playsound(loc, 'sound/arcade/minesweeper_explosion1.ogg', 50, 0, extrarange = -3, falloff = 10) + if(2) + playsound(loc, 'sound/arcade/minesweeper_explosion2.ogg', 50, 0, extrarange = -3, falloff = 10) + if(3) + playsound(loc, 'sound/arcade/minesweeper_explosion3.ogg', 50, 0, extrarange = -3, falloff = 10) + mine_sound = FALSE + else + playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, 0, extrarange = -3, falloff = 10) + 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(href_list["same_board"]) //Reset the board... kinda + if(game_status != MINESWEEPER_GAME_PLAYING) + game_status = MINESWEEPER_GAME_PLAYING + if(table[y1][x1] >= 10) //If revealed, become unrevealed! + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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 + + web += "" //Start setting up the html table + web += "" + for(var/y1=1;y1= win_condition && game_status == MINESWEEPER_GAME_PLAYING) + game_status = MINESWEEPER_GAME_WON + + if(game_status == MINESWEEPER_GAME_WON) + if(rows < 10 || columns < 10) //If less than easy difficulty + if(!prizevended) + playsound(loc, 'sound/arcade/minesweeper_winfail.ogg', 50, 0, extrarange = -3, falloff = 10) + say("You cleared the board of all mines, but you picked too small of a board! Try again with at least a 9x9 board!") + prizevended = TRUE + web += "You won, but your board was too small! Pick a bigger board next time!
Want to play again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom

Play on the same board
Return to Main Menu
" + else + if(!prizevended) + playsound(loc, 'sound/arcade/minesweeper_win.ogg', 50, 0, extrarange = -3, falloff = 10) + say("You cleared the board of all mines! Congratulations!") + if(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 grenade launcher" + new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(loc) + new /obj/item/ammo_casing/a40mm(loc) + new /obj/item/ammo_casing/a40mm(loc) + new /obj/item/ammo_casing/a40mm(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.") + else + prizevend(user) + prizevended = TRUE + web += "Congratulations, you have won!
Want to play again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom

Play on the same board
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

Play on the same board
Return to Main Menu
" + + if(game_status == MINESWEEPER_GAME_PLAYING) + web += "Return to Main Menu
" + web += "
Difficulty: [difficulty]
Mines: [mine_placed]
Rows: [rows-1]
Columns: [columns-1]
Flagging mode: [flag_text]
" + + web += "" + saved_web = web + user << browse(web,"window=minesweeper,size=400x500") + return + +/obj/machinery/computer/arcade/minesweeper/emag_act(mob/user) + if(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) + 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, 0, extrarange = 3, falloff = 10) + 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, 0, extrarange = 3, falloff = 10) //Loud buzz + game_status = MINESWEEPER_GAME_MAIN_MENU + +/obj/machinery/computer/arcade/minesweeper/proc/custom_generation() + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound + if(rows < 4) + rows = text2num(input(usr, "You must put at least 4 rows! Pick a higher amount of rows", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + if(columns < 4) + columns = text2num(input(usr, "You must put at least 4 columns! Pick a higher amount of columns", "Minesweeper Columns"))+1 //+1 as dm arrays start at 1 + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + if(rows > 31) + rows = text2num(input(usr, "A maximum of 30 rows are allowed! Pick a lower amount of rows", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + if(columns > 51) + columns = text2num(input(usr, "A maximum of 50 columns are allowed! Pick a lower amount of columns", "Minesweeper Columns"))+1//+1 as dm arrays start at 1 + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + var/grid_area = (rows-1)*(columns-1) //Need a live update of this, won't update if we use the area var in topic + if(mine_limit > round(grid_area*0.85)) + mine_limit = text2num(input(usr, "You can only put in [round(grid_area*0.85)] mines on this board! Pick a lower amount of mines to insert", "Minesweeper Mines")) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + if(mine_limit < round(grid_area/6.4)) //Same mine density as intermediate difficulty + mine_limit = text2num(input(usr, "You must at least put [round(grid_area/6.4)] mines on this board! Pick a higher amount of mines to insert", "Minesweeper Mines")) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + custom_generation() + +/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 > 11) + row_limit = 10 + if(columns > 11) + column_limit = 10 + if(mine_limit > (rows*columns) * 0.25) + mine_limit_v2 = 24 + message_admins("[key_name_admin(user)] failed Minesweeper 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, 4, 8, 16) //Thought you could survive by putting as few mines as possible, huh?? + else + explosion(loc, 1, 3, rand(1,5), rand(1,10)) + for(var/y69=y-row_limit;y69coward!\"" + icon_state = "arcade" + circuit = /obj/item/circuitboard/computer/arcade/amputation + +/obj/machinery/computer/arcade/amputation/attack_hand(mob/user) + if(!iscarbon(user)) + return + var/mob/living/carbon/c_user = user + if(!c_user.get_bodypart(BODY_ZONE_L_ARM) && !c_user.get_bodypart(BODY_ZONE_R_ARM)) + return + to_chat(c_user, "You move your hand towards the machine, and begin to hesitate as a bloodied guillotine emerges from inside of it...") + if(do_after(c_user, 50, target = src)) + to_chat(c_user, "The guillotine drops on your arm, and the machine sucks it in!") + playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) + var/which_hand = BODY_ZONE_L_ARM + if(!(c_user.active_hand_index % 2)) + which_hand = BODY_ZONE_R_ARM + var/obj/item/bodypart/chopchop = c_user.get_bodypart(which_hand) + chopchop.dismember() + qdel(chopchop) + playsound(loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10) + for(var/i=1; i<=rand(3,5); i++) + prizevend(user) + else + to_chat(c_user, "You (wisely) decide against putting your hand in the machine.") \ No newline at end of file diff --git a/code/game/machinery/computer/arcade/orion_trail.dm b/code/game/machinery/computer/arcade/orion_trail.dm new file mode 100644 index 0000000000..12941dea35 --- /dev/null +++ b/code/game/machinery/computer/arcade/orion_trail.dm @@ -0,0 +1,809 @@ + + +// *** THE ORION TRAIL ** // + +#define ORION_TRAIL_WINTURN 9 + +//Orion Trail Events +#define ORION_TRAIL_RAIDERS "Raiders" +#define ORION_TRAIL_FLUX "Interstellar Flux" +#define ORION_TRAIL_ILLNESS "Illness" +#define ORION_TRAIL_BREAKDOWN "Breakdown" +#define ORION_TRAIL_LING "Changelings?" +#define ORION_TRAIL_LING_ATTACK "Changeling Ambush" +#define ORION_TRAIL_MALFUNCTION "Malfunction" +#define ORION_TRAIL_COLLISION "Collision" +#define ORION_TRAIL_SPACEPORT "Spaceport" +#define ORION_TRAIL_BLACKHOLE "BlackHole" + +#define ORION_STATUS_START 1 +#define ORION_STATUS_NORMAL 2 +#define ORION_STATUS_GAMEOVER 3 +#define ORION_STATUS_MARKET 4 + +/obj/machinery/computer/arcade/orion_trail + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + icon_state = "arcade" + circuit = /obj/item/circuitboard/computer/arcade/orion_trail + var/busy = FALSE //prevent clickspam that allowed people to ~speedrun~ the game. + var/engine = 0 + var/hull = 0 + var/electronics = 0 + var/food = 80 + var/fuel = 60 + var/turns = 4 + var/alive = 4 + var/eventdat = null + var/event = null + var/list/settlers = list("Harry","Larry","Bob") + var/list/events = list(ORION_TRAIL_RAIDERS = 3, + ORION_TRAIL_FLUX = 1, + ORION_TRAIL_ILLNESS = 3, + ORION_TRAIL_BREAKDOWN = 2, + ORION_TRAIL_LING = 3, + ORION_TRAIL_MALFUNCTION = 2, + ORION_TRAIL_COLLISION = 1, + ORION_TRAIL_SPACEPORT = 2 + ) + var/list/stops = list() + var/list/stopblurbs = list() + var/lings_aboard = 0 + var/spaceport_raided = 0 + var/spaceport_freebie = 0 + var/last_spaceport_action = "" + var/gameStatus = ORION_STATUS_START + var/canContinueEvent = 0 + +/obj/machinery/computer/arcade/orion_trail/kobayashi + name = "Kobayashi Maru control computer" + desc = "A test for cadets" + icon = 'icons/obj/machines/particle_accelerator.dmi' + icon_state = "control_boxp" + events = list("Raiders" = 3, "Interstellar Flux" = 1, "Illness" = 3, "Breakdown" = 2, "Malfunction" = 2, "Collision" = 1, "Spaceport" = 2) + prizes = list(/obj/item/paper/fluff/holodeck/trek_diploma = 1) + settlers = list("Kirk","Worf","Gene") + +/obj/machinery/computer/arcade/orion_trail/Reset() + // Sets up the main trail + stops = list("Pluto","Asteroid Belt","Proxima Centauri","Dead Space","Rigel Prime","Tau Ceti Beta","Black Hole","Space Outpost Beta-9","Orion Prime") + stopblurbs = list( + "Pluto, long since occupied with long-range sensors and scanners, stands ready to, and indeed continues to probe the far reaches of the galaxy.", + "At the edge of the Sol system lies a treacherous asteroid belt. Many have been crushed by stray asteroids and misguided judgement.", + "The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now a low-population sanctuary for adventurers and traders.", + "This region of space is particularly devoid of matter. Such low-density pockets are known to exist, but the vastness of it is astounding.", + "Rigel Prime, the center of the Rigel system, burns hot, basking its planetary bodies in warmth and radiation.", + "Tau Ceti Beta has recently become a waypoint for colonists headed towards Orion. There are many ships and makeshift stations in the vicinity.", + "Sensors indicate that a black hole's gravitational field is affecting the region of space we were headed through. We could stay of course, but risk of being overcome by its gravity, or we could change course to go around, which will take longer.", + "You have come into range of the first man-made structure in this region of space. It has been constructed not by travellers from Sol, but by colonists from Orion. It stands as a monument to the colonists' success.", + "You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for mankind!" + ) + +/obj/machinery/computer/arcade/orion_trail/proc/newgame() + // Set names of settlers in crew + settlers = list() + for(var/i = 1; i <= 3; i++) + add_crewmember() + add_crewmember("[usr]") + // Re-set items to defaults + engine = 1 + hull = 1 + electronics = 1 + food = 80 + fuel = 60 + alive = 4 + turns = 1 + event = null + gameStatus = ORION_STATUS_NORMAL + lings_aboard = 0 + + //spaceport junk + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + +/obj/machinery/computer/arcade/orion_trail/ui_interact(mob/user) + . = ..() + if(fuel <= 0 || food <=0 || settlers.len == 0) + gameStatus = ORION_STATUS_GAMEOVER + event = null + var/dat = "" + if(gameStatus == ORION_STATUS_GAMEOVER) + dat = "

Game Over

" + dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever." + if(!settlers.len) + dat += "
Your entire crew died, and your ship joins the fleet of ghost-ships littering the galaxy." + else + if(food <= 0) + dat += "
You ran out of food and starved." + if(obj_flags & EMAGGED) + user.nutrition = 0 //yeah you pretty hongry + to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") + if(fuel <= 0) + dat += "
You ran out of fuel, and drift, slowly, into a star." + if(obj_flags & EMAGGED) + var/mob/living/M = user + M.adjust_fire_stacks(5) + M.IgniteMob() //flew into a star, so you're on fire + to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") + + if(obj_flags & EMAGGED) + to_chat(user, "You're never going to make it to Orion...") + user.death() + obj_flags &= ~EMAGGED //removes the emagged status after you lose + gameStatus = ORION_STATUS_START + name = "The Orion Trail" + desc = "Learn how our ancestors got to Orion, and have fun in the process!" + + dat += "

May They Rest In Peace

" + else if(event) + dat = eventdat + else if(gameStatus == ORION_STATUS_NORMAL) + var/title = stops[turns] + var/subtext = stopblurbs[turns] + dat = "

[title]

" + dat += "[subtext]" + dat += "

Crew:

" + dat += english_list(settlers) + dat += "
Food: [food] | Fuel: [fuel]" + dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + if(turns == 7) + dat += "

Go Around Continue

" + else + dat += "

Continue

" + dat += "

Kill a Crewmember

" + dat += "

Close

" + else + dat = "

The Orion Trail

" + dat += "

Experience the journey of your ancestors!



" + dat += "
New Game
" + dat += "

Close

" + var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) + popup.open() + return + +/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) + if(..()) + return + if(href_list["close"]) + usr.unset_machine() + usr << browse(null, "window=arcade") + + if(busy) + return + busy = TRUE + + if (href_list["continue"]) //Continue your travels + if(gameStatus == ORION_STATUS_NORMAL && !event && turns != 7) + if(turns >= ORION_TRAIL_WINTURN) + win(usr) + else + food -= (alive+lings_aboard)*2 + fuel -= 5 + if(turns == 2 && prob(30)) + event = ORION_TRAIL_COLLISION + event() + else if(prob(75)) + event = pickweight(events) + if(lings_aboard) + if(event == ORION_TRAIL_LING || prob(55)) + event = ORION_TRAIL_LING_ATTACK + event() + turns += 1 + if(obj_flags & EMAGGED) + var/mob/living/carbon/M = usr //for some vars + switch(event) + if(ORION_TRAIL_RAIDERS) + if(prob(50)) + to_chat(usr, "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?") + M.hallucination += 30 + else + to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") + M.take_bodypart_damage(30) + playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) + if(ORION_TRAIL_ILLNESS) + var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS + if(severity == 1) + to_chat(M, "You suddenly feel slightly nauseated." ) + if(severity == 2) + to_chat(usr, "You suddenly feel extremely nauseated and hunch over until it passes.") + M.Stun(60) + if(severity >= 3) //you didn't pray hard enough + to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.") + M.Stun(100) + sleep(30) + M.vomit(10, distance = 5) + if(ORION_TRAIL_FLUX) + if(prob(75)) + M.Knockdown(60) + say("A sudden gust of powerful wind slams [M] into the floor!") + M.take_bodypart_damage(25) + playsound(loc, 'sound/weapons/genhit.ogg', 100, 1) + else + to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!") + if(ORION_TRAIL_COLLISION) //by far the most damaging event + if(prob(90)) + playsound(loc, 'sound/effects/bang.ogg', 100, 1) + var/turf/open/floor/F + for(F in orange(1, src)) + F.ScrapeAway() + say("Something slams into the floor around [src], exposing it to space!") + if(hull) + sleep(10) + say("A new floor suddenly appears around [src]. What the hell?") + playsound(loc, 'sound/weapons/genhit.ogg', 100, 1) + var/turf/open/space/T + for(T in orange(1, src)) + T.PlaceOnTop(/turf/open/floor/plating) + else + say("Something slams into the floor around [src] - luckily, it didn't get through!") + playsound(loc, 'sound/effects/bang.ogg', 50, 1) + if(ORION_TRAIL_MALFUNCTION) + playsound(loc, 'sound/effects/empulse.ogg', 50, 1) + visible_message("[src] malfunctions, randomizing in-game stats!") + var/oldfood = food + var/oldfuel = fuel + food = rand(10,80) / rand(1,2) + fuel = rand(10,60) / rand(1,2) + if(electronics) + sleep(10) + if(oldfuel > fuel && oldfood > food) + audible_message("[src] lets out a somehow reassuring chime.") + else if(oldfuel < fuel || oldfood < food) + audible_message("[src] lets out a somehow ominous chime.") + food = oldfood + fuel = oldfuel + playsound(loc, 'sound/machines/chime.ogg', 50, 1) + + else if(href_list["newgame"]) //Reset everything + if(gameStatus == ORION_STATUS_START) + newgame() + else if(href_list["menu"]) //back to the main menu + if(gameStatus == ORION_STATUS_GAMEOVER) + gameStatus = ORION_STATUS_START + event = null + food = 80 + fuel = 60 + settlers = list("Harry","Larry","Bob") + else if(href_list["slow"]) //slow down + if(event == ORION_TRAIL_FLUX) + food -= (alive+lings_aboard)*2 + fuel -= 5 + event = null + else if(href_list["pastblack"]) //slow down + if(turns == 7) + food -= ((alive+lings_aboard)*2)*3 + fuel -= 15 + turns += 1 + event = null + else if(href_list["useengine"]) //use parts + if(event == ORION_TRAIL_BREAKDOWN) + engine = max(0, --engine) + event = null + else if(href_list["useelec"]) //use parts + if(event == ORION_TRAIL_MALFUNCTION) + electronics = max(0, --electronics) + event = null + else if(href_list["usehull"]) //use parts + if(event == ORION_TRAIL_COLLISION) + hull = max(0, --hull) + event = null + else if(href_list["wait"]) //wait 3 days + if(event == ORION_TRAIL_BREAKDOWN || event == ORION_TRAIL_MALFUNCTION || event == ORION_TRAIL_COLLISION) + food -= ((alive+lings_aboard)*2)*3 + event = null + else if(href_list["keepspeed"]) //keep speed + if(event == ORION_TRAIL_FLUX) + if(prob(75)) + event = "Breakdown" + event() + else + event = null + else if(href_list["blackhole"]) //keep speed past a black hole + if(turns == 7) + if(prob(75)) + event = ORION_TRAIL_BLACKHOLE + event() + if(obj_flags & EMAGGED) + playsound(loc, 'sound/effects/supermatter.ogg', 100, 1) + say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") + if(isliving(usr)) + var/mob/living/L = usr + L.Stun(200, ignore_canstun = TRUE) //you can't run :^) + var/S = new /obj/singularity/academy(usr.loc) + addtimer(CALLBACK(src, /atom/movable/proc/say, "[S] winks out, just as suddenly as it appeared."), 50) + QDEL_IN(S, 50) + else + event = null + turns += 1 + else if(href_list["holedeath"]) + if(event == ORION_TRAIL_BLACKHOLE) + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(href_list["eventclose"]) //end an event + if(canContinueEvent) + event = null + + else if(href_list["killcrew"]) //shoot a crewmember + if(gameStatus == ORION_STATUS_NORMAL || event == ORION_TRAIL_LING) + var/sheriff = remove_crewmember() //I shot the sheriff + playsound(loc,'sound/weapons/gunshot.ogg', 100, 1) + + if(settlers.len == 0 || alive == 0) + say("The last crewmember [sheriff], shot themselves, GAME OVER!") + if(obj_flags & EMAGGED) + usr.death(0) + obj_flags &= EMAGGED + gameStatus = ORION_STATUS_GAMEOVER + event = null + else if(obj_flags & EMAGGED) + if(usr.name == sheriff) + say("The crew of the ship chose to kill [usr.name]!") + usr.death(0) + + if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places + event = null + + //Spaceport specific interactions + //they get a header because most of them don't reset event (because it's a shop, you leave when you want to) + //they also call event() again, to regen the eventdata, which is kind of odd but necessary + else if(href_list["buycrew"]) //buy a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && food >= 10 && fuel >= 10) + var/bought = add_crewmember() + last_spaceport_action = "You hired [bought] as a new crewmember." + fuel -= 10 + food -= 10 + event() + + else if(href_list["sellcrew"]) //sell a crewmember + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && settlers.len > 1) + var/sold = remove_crewmember() + last_spaceport_action = "You sold your crewmember, [sold]!" + fuel += 7 + food += 7 + event() + + else if(href_list["leave_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + event = null + gameStatus = ORION_STATUS_NORMAL + spaceport_raided = 0 + spaceport_freebie = 0 + last_spaceport_action = "" + + else if(href_list["raid_spaceport"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + var/success = min(15 * alive,100) //default crew (4) have a 60% chance + spaceport_raided = 1 + + var/FU = 0 + var/FO = 0 + if(prob(success)) + FU = rand(5,15) + FO = rand(5,15) + last_spaceport_action = "You successfully raided the spaceport! You gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)" + else + FU = rand(-5,-15) + FO = rand(-5,-15) + last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)" + + //your chance of lose a crewmember is 1/2 your chance of success + //this makes higher % failures hurt more, don't get cocky space cowboy! + if(prob(success*5)) + var/lost_crew = remove_crewmember() + last_spaceport_action = "You failed to raid the spaceport! You lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)" + if(obj_flags & EMAGGED) + say("WEEWOO! WEEWOO! Spaceport security en route!") + playsound(src, 'sound/items/weeoo1.ogg', 100, FALSE) + for(var/i, i<=3, i++) + var/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion(get_turf(src)) + O.target = usr + + + fuel += FU + food += FO + event() + + else if(href_list["buyparts"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided && fuel > 5) + switch(text2num(href_list["buyparts"])) + if(1) //Engine Parts + engine++ + last_spaceport_action = "Bought Engine Parts" + if(2) //Hull Plates + hull++ + last_spaceport_action = "Bought Hull Plates" + if(3) //Spare Electronics + electronics++ + last_spaceport_action = "Bought Spare Electronics" + fuel -= 5 //they all cost 5 + event() + + else if(href_list["trade"]) + if(gameStatus == ORION_STATUS_MARKET) + if(!spaceport_raided) + switch(text2num(href_list["trade"])) + if(1) //Fuel + if(fuel > 5) + fuel -= 5 + food += 5 + last_spaceport_action = "Traded Fuel for Food" + event() + if(2) //Food + if(food > 5) + fuel += 5 + food -= 5 + last_spaceport_action = "Traded Food for Fuel" + event() + + add_fingerprint(usr) + updateUsrDialog() + busy = FALSE + return + + +/obj/machinery/computer/arcade/orion_trail/proc/event() + eventdat = "

[event]

" + canContinueEvent = 0 + switch(event) + if(ORION_TRAIL_RAIDERS) + eventdat += "Raiders have come aboard your ship!" + if(prob(50)) + var/sfood = rand(1,10) + var/sfuel = rand(1,10) + food -= sfood + fuel -= sfuel + eventdat += "
They have stolen [sfood] Food and [sfuel] Fuel." + else if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] tried to fight back, but was killed." + else + eventdat += "
Fortunately, you fended them off without any trouble." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_FLUX) + eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies." + eventdat += "
What will you do?" + eventdat += "

Slow Down Continue

" + eventdat += "

Close

" + + if(ORION_TRAIL_ILLNESS) + eventdat += "A deadly illness has been contracted!" + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by the disease." + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_BREAKDOWN) + eventdat += "Oh no! The engine has broken down!" + eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days." + if(engine >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_MALFUNCTION) + eventdat += "The ship's systems are malfunctioning!" + eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI." + if(electronics >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_COLLISION) + eventdat += "Something hit us! Looks like there's some hull damage." + if(prob(25)) + var/sfood = rand(5,15) + var/sfuel = rand(5,15) + food -= sfood + fuel -= sfuel + eventdat += "
[sfood] Food and [sfuel] Fuel was vented out into space." + if(prob(10)) + var/deadname = remove_crewmember() + eventdat += "
[deadname] was killed by rapid depressurization." + eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together." + if(hull >= 1) + eventdat += "

Use PartWait

" + else + eventdat += "

Wait

" + eventdat += "

Close

" + + if(ORION_TRAIL_BLACKHOLE) + eventdat += "You were swept away into the black hole." + eventdat += "

Oh...

" + eventdat += "

Close

" + settlers = list() + + if(ORION_TRAIL_LING) + eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." + if(settlers.len <= 2) + eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." + eventdat += "

Continue

" + eventdat += "

Close

" + if(prob(10)) // "likely", I didn't say it was guaranteed! + lings_aboard = min(++lings_aboard,2) + else + if(lings_aboard) //less likely to stack lings + if(prob(20)) + lings_aboard = min(++lings_aboard,2) + else if(prob(70)) + lings_aboard = min(++lings_aboard,2) + + eventdat += "

Kill a Crewmember

" + eventdat += "

Risk it

" + eventdat += "

Close

" + canContinueEvent = 1 + + if(ORION_TRAIL_LING_ATTACK) + if(lings_aboard <= 0) //shouldn't trigger, but hey. + eventdat += "Haha, fooled you, there are no changelings on board!" + eventdat += "
(You should report this to a coder :S)" + else + var/ling1 = remove_crewmember() + var/ling2 = "" + if(lings_aboard >= 2) + ling2 = remove_crewmember() + + eventdat += "Changelings among your crew suddenly burst from hiding and attack!" + if(ling2) + eventdat += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!" + else + eventdat += "
[ling1]'s arm twists and contorts into a grotesque blade!" + + var/chance2attack = alive*20 + if(prob(chance2attack)) + var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance + if(prob(chancetokill)) + var/deadguy = remove_crewmember() + var/murder_text = pick("The changeling[ling2 ? "s" : ""] bring[ling2 ? "" : "s"] down [deadguy] and disembowel[ling2 ? "" : "s"] them in a spray of gore!", \ + "[ling2 ? pick(ling1, ling2) : ling1] corners [deadguy] and impales them through the stomach!", \ + "[ling2 ? pick(ling1, ling2) : ling1] decapitates [deadguy] in a single cleaving arc!") + eventdat += "
[murder_text]" + else + eventdat += "

You valiantly fight off the changeling[ling2 ? "s":""]!" + if(ling2) + food += 30 + lings_aboard = max(0,lings_aboard-2) + else + food += 15 + lings_aboard = max(0,--lings_aboard) + eventdat += "
Well, it's perfectly good food...\ +
You cut the changeling[ling2 ? "s" : ""] into meat, gaining [ling2 ? "30" : "15"] Food!" + else + eventdat += "

[pick("Sensing unfavorable odds", "After a failed attack", "Suddenly breaking nerve")], \ + the changeling[ling2 ? "s":""] vanish[ling2 ? "" : "es"] into space through the airlocks! You're safe... for now." + if(ling2) + lings_aboard = max(0,lings_aboard-2) + else + lings_aboard = max(0,--lings_aboard) + + eventdat += "

Continue

" + eventdat += "

Close

" + canContinueEvent = 1 + + + if(ORION_TRAIL_SPACEPORT) + gameStatus = ORION_STATUS_MARKET + if(spaceport_raided) + eventdat += "The spaceport is on high alert! You've been barred from docking by the local authorities after your failed raid." + if(last_spaceport_action) + eventdat += "
Last Spaceport Action: [last_spaceport_action]" + eventdat += "

Depart Spaceport

" + eventdat += "

Close

" + else + eventdat += "Your jump into the sector yields a spaceport - a lucky find!" + eventdat += "
This spaceport is home to travellers who failed to reach Orion, but managed to find a different home..." + eventdat += "
Trading terms: FU = Fuel, FO = Food" + if(last_spaceport_action) + eventdat += "
Last action: [last_spaceport_action]" + eventdat += "

Crew:

" + eventdat += english_list(settlers) + eventdat += "
Food: [food] | Fuel: [fuel]" + eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]" + + + //If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port) + if(!spaceport_freebie && (fuel < 20 || food < 20)) + spaceport_freebie++ + var/FU = 10 + var/FO = 10 + var/freecrew = 0 + if(prob(30)) + FU = 25 + FO = 25 + + if(prob(10)) + add_crewmember() + freecrew++ + + eventdat += "
The traders of the spaceport take pity on you, and generously give you some free supplies! (+[FU]FU, +[FO]FO)" + if(freecrew) + eventdat += "
You also gain a new crewmember!" + + fuel += FU + food += FO + + //CREW INTERACTIONS + eventdat += "

Crew Management:

" + + //Buy crew + if(food >= 10 && fuel >= 10) + eventdat += "

Hire a New Crewmember (-10FU, -10FO)

" + else + eventdat += "

You cannot afford a new crewmember.

" + + //Sell crew + if(settlers.len > 1) + eventdat += "

Sell Crew for Fuel and Food (+7FU, +7FO)

" + else + eventdat += "

You have no other crew to sell.

" + + //BUY/SELL STUFF + eventdat += "

Spare Parts:

" + + //Engine parts + if(fuel > 5) + eventdat += "

Buy Engine Parts (-5FU)

" + else + eventdat += "

You cannot afford engine parts." + + //Hull plates + if(fuel > 5) + eventdat += "

Buy Hull Plates (-5FU)

" + else + eventdat += "

You cannot afford hull plates." + + //Electronics + if(fuel > 5) + eventdat += "

Buy Spare Electronics (-5FU)

" + else + eventdat += "

You cannot afford spare electronics." + + //Trade + if(fuel > 5) + eventdat += "

Trade Fuel for Food (-5FU,+5FO)

" + else + eventdat += "

You don't have 5FU to trade. 5) + eventdat += "

Trade Food for Fuel (+5FU,-5FO)

" + else + eventdat += "

You don't have 5FO to trade.You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.") + name = "The Orion Trail: Realism Edition" + desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + newgame() + obj_flags |= EMAGGED + +/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion + name = "spaceport security" + desc = "Premier corporate security forces for all spaceports found along the Orion Trail." + faction = list("orion") + loot = list() + del_on_death = TRUE + +/obj/item/orion_ship + name = "model settler ship" + desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..." + icon = 'icons/obj/toy.dmi' + icon_state = "ship" + w_class = WEIGHT_CLASS_SMALL + var/active = 0 //if the ship is on + +/obj/item/orion_ship/examine(mob/user) + ..() + if(!(in_range(user, src))) + return + if(!active) + to_chat(user, "There's a little switch on the bottom. It's flipped down.") + else + to_chat(user, "There's a little switch on the bottom. It's flipped up.") + +/obj/item/orion_ship/attack_self(mob/user) //Minibomb-level explosion. Should probably be more because of how hard it is to survive the machine! Also, just over a 5-second fuse + if(active) + return + + message_admins("[ADMIN_LOOKUPFLW(usr)] primed an explosive Orion ship for detonation at [AREACOORD(usr)].") + log_game("[key_name(usr)] primed an explosive Orion ship for detonation at [AREACOORD(usr)].") + + to_chat(user, "You flip the switch on the underside of [src].") + active = 1 + visible_message("[src] softly beeps and whirs to life!") + playsound(loc, 'sound/machines/defib_SaftyOn.ogg', 25, 1) + say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") + sleep(20) + visible_message("[src] begins to vibrate...") + say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") + sleep(30) + say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") + playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + sleep(3.6) + visible_message("[src] explodes!") + explosion(loc, 2,4,8, flame_range = 16) + qdel(src) + +#undef ORION_TRAIL_WINTURN +#undef ORION_TRAIL_RAIDERS +#undef ORION_TRAIL_FLUX +#undef ORION_TRAIL_ILLNESS +#undef ORION_TRAIL_BREAKDOWN +#undef ORION_TRAIL_LING +#undef ORION_TRAIL_LING_ATTACK +#undef ORION_TRAIL_MALFUNCTION +#undef ORION_TRAIL_COLLISION +#undef ORION_TRAIL_SPACEPORT +#undef ORION_TRAIL_BLACKHOLE + +#undef ORION_STATUS_START +#undef ORION_STATUS_NORMAL +#undef ORION_STATUS_GAMEOVER +#undef ORION_STATUS_MARKET diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 26f00c730e..a1ee62e2eb 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -123,6 +123,14 @@ name = "Orion Trail (Computer Board)" build_path = /obj/machinery/computer/arcade/orion_trail +/obj/item/circuitboard/computer/arcade/minesweeper + name = "Minesweeper (Computer Board)" + build_path = /obj/machinery/computer/arcade/minesweeper + +/obj/item/circuitboard/computer/arcade/amputation + name = "Mediborg's Amputation Adventure (Computer Board)" + build_path = /obj/machinery/computer/arcade/amputation + /obj/item/circuitboard/computer/turbine_control name = "Turbine control (Computer Board)" build_path = /obj/machinery/computer/turbine_computer diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 7042913b0d..a1b0402021 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2241,7 +2241,8 @@ /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, /obj/item/clothing/mask/gas/syndicate, /obj/item/clothing/neck/necklace/dope, - /obj/item/vending_refill/donksoft) + /obj/item/vending_refill/donksoft, + /obj/item/circuitboard/computer/arcade/amputation) crate_name = "crate" /datum/supply_pack/costumes_toys/foamforce diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 7c08a3332c..e095ef304b 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -528,6 +528,12 @@ GLOBAL_LIST_EMPTY(asset_datums) "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', ) +/datum/asset/spritesheet/minesweeper + name = "minesweeper" + +/datum/asset/spritesheet/minesweeper/register() + InsertAll("minesweeper", 'icons/misc/minesweeper_tiles.dmi') + /datum/asset/spritesheet/goonchat name = "chat" 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 780a1bc97d..65a435a309 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,6 +21,14 @@ 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/icons/misc/minesweeper_tiles.dmi b/icons/misc/minesweeper_tiles.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5a5a943832b3dfb29894d4ee5d9fc3c05ee2bc14 GIT binary patch literal 4583 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 Rd-?zX002ovPDHLkV1mi!+5i9m literal 0 HcmV?d00001 diff --git a/modular_citadel/code/modules/research/techweb/all_nodes.dm b/modular_citadel/code/modules/research/techweb/all_nodes.dm index e561b106d8..c0ddaceaf7 100644 --- a/modular_citadel/code/modules/research/techweb/all_nodes.dm +++ b/modular_citadel/code/modules/research/techweb/all_nodes.dm @@ -19,7 +19,7 @@ display_name = "Games and Toys" description = "For the slackers on the station." prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe") + design_ids = list("arcade_battle", "arcade_orion", "arcade_minesweeper", "slotmachine", "autoylathe") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) export_price = 5000 diff --git a/sound/arcade/minesweeper_boardpress.ogg b/sound/arcade/minesweeper_boardpress.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a928a7498d98b85a3c2c8248bec3d5c4f72c4146 GIT binary patch literal 5439 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 z zs?j4M|4eUJSF8iUD<4PB=nCkgch1&#)bI54=@b^SBt(5q{K;!+?}*3eubUm6(W?LA zkCRJ%expC%Nl^F@(9F-)=}h`?R3&ctuIL?B84K6Fh={)*EN7Rah|yDKW0cuqMEU5y z_G^^?-`$8Z^>E77>c0SD)M1CCy6I9?c$d8EA|!Ui8ogk$CZ89QU&Rx3Rb^Gt`%TPF zZ5SValbS5fyh#zAkj^eoKc$-dcBGnX@MzdYH=pi(b)k+R92;q#d&62s7pVJ4Hc-6wuhlsW8MBd zUupP51-@{p7h_DlG186z^@ZZw>iGh1o1BSN=>kqTXJXZA7ni;5A@?4)H0d{e^gjO9 zJm6zc9x`QVxKrs&d;HER`$I>&&-H4&`xwZ1+No;W_$9eBSx>nP!L%s=xd)jATKSbU z<#_*_G(~|hkTgLPlr{7Lqva%>u`hZ`qwn@~t?a9pHZFvb7P#O9aV({YORmUCi)CpF zd^5~Cg<9A`R&C93l4tAPbi(o23vLD0-_)+meP8YK+oG5y<@G~%GQ9Nnt9T%b-IlQ1 z-?o&lyPxuoFr=ra3Okk_auq3S!{BDt3C(p2y;+N7wi9IBpbDg>Q>YaZh5NxAa5 zH(rw0NGM`k?#-SM5?Qmf*q7PD>`Yv3GQ!YNa`eX8s70)h(1*7cS5L-Xx_5VjP^s{6 zk&bbj_xbmKr>c+iM8}xN;grukBK>|%_^_&jJDaMT0$uicZDxp?z4fn^TJ+yaY0Fkh z!&@$aMJY-WC4@qN)zO`5*kfde3Dw^cv|xJXXX3a zMOuE!PkIV&?=+Zjel2mbr8Ab8_pg_QwAf&s<%ydj4nYn=Y3rFVs}U{_R9bm<0dn*1m8g z`p!XEwW8aTk8HElhV2QAMI2^oIs&s;p!$fagFSK{ za|mZJ@UC?k*D}VApVgHYLz@hmB*x?iGzUvKVUqB1DllU{4lI8YTAY-rl=X9B!RH~G zyQ8{hzKOeTtg=?Ef%MDwk?*Ok*&V%n{Uc{j3UA>w*&OF#c{w-^sg;ETU^-(cL9hi7 z&@&n^RUlO+Xcl8@VKaa*(~d`l8H&GzIrdxbz`_q2IJ&^ApGfhVj0)<$`-&a}Fo&v- zAkip`o)PC^dH#H*)jt|)vxz}xtbdE>jLxyuzf4#^w0Zuf=<9Py%yFtj-2UmKYoAT} z1F7SJZVDDJXNsumf#tH{=l}eO|DPX;)(YT!W{v!ccL<)aI5>eRt``XoSTNEaGR879 z_4us;<>csMTI86u<%qSvJ58S~vFXE)Q1f0I9*ZhDb9Q35^k;lU-R67u8KpZT9mgb= zXBPY%>=}Ohu%GK&p~S}Mg^`d9IXNA4bDTPs9Xo4M(XR63v_JP`+hdrRq3F{auFn2N zlEJmYgaI!m44;b8EQEP50zzTsHi#~C-k1k@1w$xxy(V;Vw6;#fAA7p{VbJCUyN8Zd z8~k`t7Mk;YlP$|+XtC`-WuaNqHWm7@*H)L$R})RfZt}PFKghYD$3_+?AXw$HGDJ-o z-2rHltruMFpfC%mgSY=+cOIUX%5>V4%m`<{0g1IRfLkM!P_& z3S1RgKqqtZiz%#)64!KJBDT~+$5Gi~&MJlFQ$2DO3Ka?&ntC|pq0K)&g$i6&>V;5s&8m zwW8c}#pkpwSJN>Clrt{42ZAbF-~A64Sa{myC3{mvD)t@@x@-(J8Ee|3fGF&PSbI#x zJ?f*$YAayD`VTATJa&c2SO9SR4sjN;UjTd7=N@4(jGMX*q~h2Fnr}A;lA!c>niJn) z9NXTLoFxtm8zE$~sX`)#K+TJ((L`JPI{Tjlnz z*BT^W;Aih%xUT(>y!tGXGCLkALr*N$z{=eKq?F~?8}KiE0?aE+C3xzy zLbF$RZaOD7C6kw$xhFO0K>8t0R_gAoeShuUmANk^ZC6_AUa+v&$Fh&00oscdGaWE0 z!=tO@Y^vpY(fB;WGQztTg^(o$Oa@czE%G33bG0%OA2r@Y^JMnbH`byvG*YpOHUd^{ zpzg+vc|B`w@A)lni6*5wq=HVvMvSGH8)o zLfiyiMmIWW;o2`Ui_zsvC3>Vr%6cYkU2tR-sX_yqL4B?P@m`J)5lg5Y@24CZ#DY%a(f5C|GS0hYJhXXpd}fV2v*0q@wrESo(2xb4G`FNo9)Te+eTO~wmMNSGAhA( zcT+Zsh%WYbjNgP^F=;5fVq)~xOS&{Wt)XtODQ<0icbl2yxIB)$`9*Siq07(Olrjtd zNLM_3lz;>^3t1F0UWaH^7qm`TddUC$lbbJ2Krx)m!(!OnaU!Hl}fJ0>dsyfQl~ zwluySXRVu~<83whJsk;JYai~Fp@KI-!T{<5Az+tS2CpA#J6W4@%dXBF`g7LgT&f*v z>;~_ra^~nO0)1PSV`V<1?6G1g;#fsp#3qhyHNpYxu4)>u>jm^c9ZTY_KhdcQdVfo>g361TUAUuT*GJ<0NJVeyB}`#+5GcawK3 z0PhUZf^4A;qW}W|;+DZ?6>98>yL78lJzrw>GqAj%_d+Z-oK;|Ms;h_rFmOgctt^38 zQyzmB6wGzAYV3X09oXMtEsCmjVPf->S(|iibOf3M*DvqEll3pZA(WqY{H$nep6+dW zNv-8-%p7Ci*~Wo&m&VSQPaq-7m2~hr$Q(WBm7k@Ds3;kjZQh>X<~!?PPOb;5u4K_R z^R=;wYhe_`Q-EoHMHBT_dWlz4mWXqtF@^_YMrcK}e&!)cmIsM&;gv4XfJr)qt~7st zTgJw+ytKf3<($Pw`o1mya^QUV=TF(?SPcp}qUAwgNmY%8R{p^)>?_*(gAP%8CnMM= zp_3Pn^x)euKTRzsLfsnJkL_ZXczS(X!(CK%wp;ghCZ1JrwTuF!Mwmm4BBRLY`Ezp> ze$2JL!XV-_d@6%SHKpTSx4o5ECq~wqnCNFSL~S*Kua}c;w~wDXu}5`Bi1R_COD6TY zn6}KP;XmX+O`jfN66Ih-u!3Wov%DT+4=RXEaBE0;Ofz0R2m@F`W?jn3j=YIweg*IN z=WU9S?GA>uhYf=_+VDUUsugbZ z>RifPw+Ry+AMH8Pr0=SE3hN z$6II#y<_?Z0`FZj%9b;NF-^?QpIg7h_~nlErzwXC7O~Pyw)_Y&2~?ibp}yt9_MV|3 zxwtY!8D1a8L!E%vC#)WnjAi@6>!(+Wu{1Z8cG=sbyEApv1Q?jmWI?W=Lvcz<;W9Qi zbn7ZsjdYQ0IQo1BErT0g%wQYlr&VdSpLlsBDb(xpwSj9^YXb=Zwmdft$u~dIiuE~y z9noVkWsxo7!-oRpFR+I?dWYf=1{({$ITd=Kf~^XUIlX4sG)x}6QYBkW4uJqAi&0#! zNed~DbF+Z&R&-NfTgQxILVa!<0wuo7j$esdjK)MF$2tn!f zfxPfyktolZw*9~h1g{wy^hjZzzwY&T7uPn+y`jte@>?V(s_OVud7vs8nCU+VykwHCBRz;73NZ8Cg6_N3#77HA%kS}yF$`F~8-A7Ge5H6p~@EYV-gp+Fc zuk()cS$ZUjKTMUk?Zj7b<7y2rkS=XYTJ+Szkiu%NaC4$jDwF$`KYBMHzx?dI=T$}s zd(!Q^e`Kw9!&Y$;9(bUXAw(Ul;$5hl_pH(!PhoTCer+4=L>Sy8E>r1%(+^An!lR0D zwQ^{RB>Ht{#&Z2wv{8>nia^7`s6wD2H8R6--3sU?-J-nXw1R1upTB>7EE?z<_*gRE zLg}~-QHLZhV*w46Sw4I9PoJ-kr}p|>*|GDvT50puFC3;D#;Oc*6>HdDp^agV0UQiZ zL77eFBoDw=Q75ScN?Bz)9ug+mmPQ>F*}C&ICw~- z1uZV59aZV969R$MjCDf4y+(1z=y1SY%aNTHQ!PoSmcAjcWe1P?pZL>Wv*AejI(@3< zSzMB?eA`Ek0fJFhg5LEWaFxxQ6RxA)3g$XEmi;Gcu4oC70{{<3R*y%JOug2zOb!s* z8i^-~>x=T17IL`^pM+@1n0HgUC^pEaST_Sp!D%+kTVbA)v~?`zTMlLR;@q_vD-(`N z7J3qR+dC6a+djbsy;N(!r-TV?O%-*HvBj!TJ!H!%|1|Y^7J6V2TXl)2|JOCcDqyUg z)NBqO9i`O}ZR)dcgv!$JAPEM!eNHyH#)6bj^o-8?^ znm6_)>00UK_j+_E{oZ(27R5QO1$+Ar^<2T0uaDnf(HKX9$cSPO!j{w1lNqR+0lc!O zFfn$&_O3Y}?aX16qq%8?5#ZRMfSDMXkkT+x=#YD(@EB7_-$EwaHg59i<79SuG`Y>~ zm@NipZt%T&?%DUzhKEaOBj+7eR#q4-8#mc(XnB zPn~JsoSLv`l>)k-&q`B79-HbvSO78eHqE^P1ew#S;y7Q%vr?2-q@v(f8U|HErbTOa z5suGr<=J-EqP?U9F5k|b))L)9^eV}Y>Zia20X!7wQ6)%G*_ z3|e78NHEB}uAUKan?k1S>G#-{Nm*YMLecJh#bV|`RpzR-cQkP%F;<69B(mHut0o!u zZaq&XyxK<)(&EnF2|#8)UY$(MY2g&5D=Lbph_V`T+4S}6LmPvfH&rzLclXr816tH2 zGk_-|d$7GP-b4Mvxw&t3N#rKxEs>juOWIFcANCc+QcnEzU`Mg8sfKa*UWB5#@ODH-iL>QB?`=5bH5%;D8( zL~J`}hj4^~6T$O271)sXRi&?EoRoJQaO&Q3U|#k}z=1jQUIg}sTZS5c{$f7MZSb_S zwx7Q-Mk$PX922LCYX8%rYv$vd6D>UVOjZ1?vKvgUvyAf*;vi)Bs0{dRCEOT6A+y`O zQ8~ELEur?6)XmN&0)~+n=i-=QI*z_JJ9HFBW3;c>4_Wjm-o`g31emLPeh6wmE0LHq z=^P`bUCjAoOEvC3&GA7@2-|#>2vG!j98|_Z3omE1kn1+Fc0VLa*C%u!82 zA1=Fw>Fl+D9%(f?9>E;aM0mE0lub>T-`d?pByTR_xH7UR1KtwoQ;5u0ls07xxs0r?etX-l zHegOvkg_~)_?7ML9Awm$sV*Izi#r*-RD9>|qc*8V=!bz7EOHj}Z3AruUP)`Y-85No zH1jEB4rm7)%(+>fXnti*&?-v^K;8=ZSHpTzWgk0`L)E}`u-~xeubeWa zd@i%w%qvYVSYUg>E+-bp&8CoJh_myHbEDFAq@JUjJ=Z&G?jo$Qy1ipPq5s;Y=!|{~ zL~HK~m8RwA^A3lVMI!e21Za(zQU8I8u+zP#(S?xR4U6DY1~w$caCmnJedvP+B60`P z)*NMrXi1ygi}Z3h#O}@Jy%sn+GibA}RMQN)#T zE-T6BNyXFAAQ$b`WR0A%i(cx5nJTNk3OVN1P`_g%3aI<*f8ToD7jp@9gjZLzoo30X zuVttYqB&X^DglCA1YA^p!;N`)PX=E}p&s1NWKD*YSkjr^%-eeTHu+gBoD)t`HBvl# zqoXHrLOG^8y$#2hr~UF)M{M0^(FG#o-Myb~%Pj~aO(8d@4UebZGA`GN(^D_QU}S3e z#@ zm%$K%tAgq*&3QgXb&P}s-BJL-z=gp3T%yYj_zs{GB4jPf0<6~Ow_;W``0x1yo5#TsB0n65C4^u%(YTUGSMJ}ga+LwmQj~}zQ#yKYF=_vNuU{fb_NX2#x zYrBwR#`^}$&t!KviFSHibb0!x=S45Madj_KlN)6!e@geWe$?WN9iPkN`w)QC5&K_$ z1VN-1H6U3K0Rxh=fdNDaBJ*7k1HY+3+H`XT4|t#&T&}Ry&dZg@7%MO)72oc{ZgkW) z5yC>4>HDNhdWn_Y9hq-BTYp4{x~_k(&wHc3;Ys_h#dGs=qRw1h^v%)t>Dhs3D|I}g zHpEs09sGJE=wRxkHM)_Y+qNk>t`LzqFt9ww1VG5+YVf6zhJ?oF96dv?1Zcvi@%Voh zaqLLse2ZQ|ZhqEjTK@4$zRp3czD9-T4*F%U`(7l6!07 zesIHZe!tF6c^Z|6vB#=|0$>j}T0=bp3YeU9hjZp2)ZdK=5jyF=1c0qfK;9%^XyCe! z@)?FO24EXQXasz?SRY$x8SJVB_KmkAwn|@z6QL-nG1PGqzItSTwlL@qi;QJ{pC8ej z$TV%XacI@Td81C;dpf@%=Mrue`P}2F=%`Sm;CnHsAFCP-`v(O{TIJ^N3d4>+&Dn0R_{3|<{B)20kaxachUOOeAzc6-qGp`I%>WKJGtRI} z!2)ctMkKNa{*)|(0YJzWIIXA%wqngfW}z4F5{Yn_xThcQ#al|I6JZ&!oDqg3I)i?~ z$mPTeN8P^%?%!0K%ZPnkeVF&=V36(SPuh+35&MHjQ(LZWSYT}4dv3?Dzr_6N&WD2E z%Wxz_E)O!A|4(9p+JmGW59LwN26)6nX7^Esm{KUcJ@FPsBleeS9a72eoo`})A$(x_p>=Kam*=HcUIUiXzwf9y8H8f(hz#uQG z=TN+vQ5i)EQBzXsLD%EcS)&tdI8gWvqFX!!iS#DK-x*i%e|_8|?uYZrHs`s`>=9rk zT6J&e=2^zvCc4l@y_<+R%p8l=j^3TDjiP23VT4JoetPaI->jX91NXDDv8Q{h)C1o= zzV&Gy()*U5dlq~C=i9pbArjp$*KpCp>Pnu9(8@NWiVcv`{aO;pXdym@S>FV={P&Xa zRT){){UVb^povYB99LSxO^q5RlOgWHk{DYRJL8KJJ35->r*FwGGXLuPEqY^DwOqMM z9sj#e(w(vew5~G-hMXeLl4e@|mBSvirW2;>?b!_8KTfem z6xETR=y=X+et+MOS^|}Uy0|$OG6;sl35Qpo`A`S&@>qfri<&B~&!jT0+sfTPnBd;z zo_?GRO&PZ2s=n~DJ~6`r*BP%|S1PKxpKV^Ay;rB^_}OpV`wvP_Xr5@vG&a`ou_WJJ zw0+;y+Yc|ev~$PKujK1exqkAPI3x#{-KZ2sYn-=My!-DCXrLwp0^r!N1bFxfUg0pb z`y#X9#`Dj+iO{c05O3%tPGHaPWT2=L%e~5vg+9G-KSY=Ghn;;2A{T~*r=N^WI1mVlrX-GH8oq}K`&Ci?Bu zNg;0-w%Rp@Kg-%z_*`F*SYKuy&9PFTE(~h!-|cg;FDO8$tD6bTZRmWRgO}IQMPL8Z z49qa*H~3-(W&onHIKWy52Nf%b3BQU~4!lLnnHahEhTQ^7uiF$C8kAj&Z12T#{fnXn zTt=bCiTrSjRCI9KU8)nKF#{^vC!xS=+z9U!?-2%U>}_o0zjp zZ|g9bVbQc3nG=lSjXF*fqA9T+ z3ckm{fgu{wK0P0p57@;MN{Ef_v`P}G#M#M4e|1E<->ZtXZYTT;b1(UP@RX?GV0?`q z@3dAU$QH6y7&ENzxzd$l{{{i8saV=hbrauDH$f9 z@!uU(S2}>~2y(DdVSwz|0zI--h84k0#9&A|K_e%O+$XzYS)MISa8|NW4DlY;-^GSA z!hU(uFLd?(A+s?n|EFfby_NojmwhXbY1dYk#4l7BU;p|IDFh!kw#$v^cbL*#H8hS< zRQ_*aVi~^{rWB9?=ujc4L0&5}5d?vu&+aYts&oM}hAE2b4`Cc)QetvN28v|(c2^dx ziDsYJ`arx6E$NSd%j=(Auzd1tQPF|=wd>#mYnA?oeFNLr_Ume#mRZ&qq&YsE`&{?c zsP>@#FiWGN9>Is9C^{I2(V>*(`z5tu*&3<*>ZJx5^N3hxXtIMU0D z7Szh9D&#^N$VuWJ1|8&RZ#R+}`xYt+DE=3zDTd{Ua|Ib=2fNciyeL z?9814ouI7OBNKZ+)t^X#Nf+NAXD|3YE`2VhS5XmxhQfa%2yExiW+Dh|=dwPc2y`2n zIVvLp^5KUJ#yq1vJj*)#rlMGfeAfi#!B@eWBZ-~%3AE;X{zw|Lm}Tlx1>axN;|NQe zyUx6?JUkMbkoAYYrP>0uPl09AbmvpcqMfq;7<(4;P5M=y)x3*n8Jrm=Pg85Vicv!X z;9K*{fXE!`)&j!Z5hm8}*9P7vlqJR0WgL{ljFrcuT0y!6Ub!M&N=y-vY}nn!t!m8+ zq&09WB^>6Ro=i>`Q|LodlhFeqmIGN`$xn(bCy%`ghkm zb|`&vzy3Y0S{`9O2yRJ06yftP){H0+V)MjuH%jVbS_A<6`?I6aw&_Y6w3QUE3?u+H zhyV;vUWw>vPra1EOzQ#y4KqdvU4EGbxDoq^b?`|e@Amt+iewf^|Jrr~;m>@*oK7LP z)M%Nv>Rv<3^Klmwf3Vg?Io4u=f8LdjTs@|KtN+NRi)PL0H&^;Q19Uc2hEc%F!vF%b z82D`Yfylq_SIg?};V`xXVk?!C4F}j?APy*`%g3r);4EN@W9M?2B3l<-U>PwOTl1?N z2GhDA`IKw-#^DC(w@zsP%#Tsp^^N&XS=*{mhmX9Z0{54Y%Dg4u z8#@Iv#&~?(=6(x_h0t(Mx=Fh|L$?zvwC`}*aTE2h%e z`SH)A!t@56b^Gp~dnu*f51nV9vVw+S%MjINX0JET6r3VKhF=9I0^-m0(*QgTwFvZT zyEyml1%v!WD|=Ginj#NbNa53iU1K7?0;{E-M-g!C2;>fXTxDnYE9R`~GclYzG{^Okd)e-9&wjyO_NC*r?`nhoLk$GoQ?&fT)c=x~C z;aEghe(x_B1$};q_@MQTv|TBe18DuRP~GS*TIyv^+SH}T$>-4LRr|z=J>iZV zPP^CiDdC3m(^=*wTlRhOo%n}ey#M0YKs}Rl1#iAziEN8(WAw;3V~3E{lvy(FgF<%* zL?*bi_XdHp> zGjG5^1H0~!dLDdLI?L%4-C(Vd2ypiv{PAEoHvno&+yT#5`orQP*24 z``fZ#7%(6nzDbgektlSvZ9U*Dc0a-1QJp9MBJC-nO+|b~Jt=bgP$_BKtf|Jn%N~*jV;NG`qLi^D3E5+^?@J^^N+=St zFG(eeEG<$}+Vs0euh;wY`TYL*K7NnS@2}tEcOJLXx$pZd*SW6iJg@6q_n8j)_}BqZ z;GZ-S{I~FB$i@RA203*y*n=LzdIUAN{!f+Dke$M9$RSqC|0GsR)|)?^ypHI7fBr{$ z4g1@XJow&;9_XudDA-5*INif>r+aZzaS~C5L?jVa#qoy%PS68`y+XWBgc4YNL)iW{ zmDbaDga8x(z=dGtjLJg<;?P2R)`ANndc*$j1@$a=Vnj$5M;=Ruq)L<(=_MS&M~|jD z0IUWVb;B`niMmLMIO+XP>9Ml=!BT=2_>9hahSvKxGt}}0-|8Yo;}(dTsMt4}TOx6W zT25&2*@}4FZoS*g*y~zgWt^Icbu2<_MI`Ql0zNUOhj?2c4z7kzidiJ~O~&rhOJK&D zs%;6y`RIlV{2c?QYmyp^(Cx#<8R>!)Ahd2{;vVZ(3B}22A@|0KlWF`wDgYFf;1f&m zoM@p&PM{9}&=ecYqacy~G?D(BBD;`W&TK6HBEfnliDf1!izewf=XB|vYw1#r!sEuB zi?q|+1OTjUP=-Mm_MLV#06-RLCYC!Tmis0yC!`?b;;%yi1^~dpVaWP+I>wm>BlZr{ zEdkH}+jS({OK_(-$V2ov-Mbo*K!gb*cH{t(!Qe?G_AvfsG6QSIUBXePHJ7(ggXv<^P6DFq%FesnmOxP2&=1|?Crx}#VB!P24L z)t7nb|5Vwjx5H#`z7%wPvil1Ha(vlW+=$0Rh_tHvZH34o6q~2_c5KDBEK?gPofTwj zCi|D+P=JDzxPY-W`8V@Okch_y4-hJgV$9^Kt4fkcj}@8*cQWnw*PFQap;UU%`to%> zwsrw(Pn`VMw3eB%&5kbqb+>HI2<4f!oICsz2YIiD5TvEruzL1LAXMfBbIMiyWv4hx zGyrhuv&a~a=zm?GL`Ha|ZFs>;ae|~aVQ1(N<~5xi=G=Pj$kPi)znz-}udOh5r))3h z|8f1DI=I5cL1q6t5kfCEWKe4bmx=y&nxH^|K#cK@zL_@S%*Sy<;|hm1$cOm$+h7bQ z$PQ!tM{P6$Y}CCb)Q;MzA9ZjHIGi1Dq$TY6Rj=pY&dvR|>nQuq6nOzaJ6(#9E=fpV z&`iOZQhfX501AS&A`@TZQx-JSai;0g^mLzy?5bSmYHopC%}x~n&8osmi520A)!~U% z;VCN#>AtzyRn<)Sfr|Hc>fimJu3b9{jst*DoN+MD*cNAK3l?^`%RsTXE7GlkGYnRE zJWl>Q$1%SBAVUv_{soPH1ONc2{szqBF%e5%=_y-92Rp?nTf-?khyPQuoFH5BfsEw< zQXxPQ`iObm!xtQWA|B(xgSb#D4|L5gc>D*1U`VM$xY^BB1T}E*=!@R%eojyir4*( z`3SV(fANAm5?iC^@TvwF+Mw20J5(wC*Q@MhU5DbDz@v;e5k!X^IeY&9dUXg>e8>9e zZMiO0!`pJM{58A&>(zfRfyj&v1PwT`81*krftrb45P-1&k^}%L3r+%{SCuWD2mn-P zCLRR(|6Tf@1M&h1P=JUB2LwF~s&h6Qd8iS{MvUq(mLVV_fR*tq>Kb(IJc1Y?@IwI` z06-YtRIubTWLD6bGKpjs9%3R2Dk2K#dJ{S$WQoKAA12yxMAb5<0$(GCHgo{FVm;4d zdu&C|Yv4lsbvU301yCs-&IPidPn1|uT?6)_a|mNNMs}ETpfka~Kxc_wQ}gz-4mi*R zXre&>@@?wjCf5cPeEabw=b=)ZD38cub-=9GwpHa&CcuP3q+zH*y6Yoz4R9 z0|3_D@#i4dxkW%PIjJZkN$zsPSlq7Nlwt{aC<6}wUDyhY-2hQWq6{t6i;LsclabEK zG^-IWv$ZAg$JyJ;NtdSE`Vkz^wgf^Jr=DDSmOTJGjfR1L7p#5z%mDG-07KjeG}@jh zQU%6ySc^T&Hc@3cFC$5%Hz#D+lpyFisI^>{nZ)vnY|WNft`VVp$M4CsH3OennGvMp zhP7nNGsnRyd;nm-!|l?(CAgIC4!dn3AiF)CL5YDJ&&JW2%OHoD72c-Ir3mmzMgPV> z+|OdYV6k3qnjiEFEJ4;aD*VICzibQh%Bf(9;EvMq=k_4~y#!n8m^E^D8&R%@L64;+ z8Z_VUpS1wMI-DISf(kntYZ8QZDUfN>EPF}8#wLL-`31Bdr$k()Et2DZs6Q`Y0;+uK z%_l5}>Iub|Q9SUK>tLHmK}m=hJ0D1-qD zrwd!26KthN;MYsil94DEkdMQHJT_Ai7|~)c&V1scP!PhcN2q(~WdAlVGt(upt_njU z5Xzr;pdWy@{^hsC2 ziA-xf0w_5VP0;bh>dFc_2)LJW>=FBm7&HLLY_v7Q*Evum%dut8^o(<3F(H=}LQpP4 z$JwaaoslEDdph^GrM7^wgNgR`juUGu=J z5OgRMZY&J090TtJgKoXRaBB`Uj~#^K5u>LB*gLtF9d)H#g($7Ou7^p$C6Kxb+(ity zNM2w!-^uU?Tvnq5xiE3CU(gE#)cEFvnlS6o6;3I{^;-;K361AxQ-dP^*HhQt5voV$E>+5@beGwXTrJ?GCf z$bU<`q7rzbvXYDxSw&u2iliuqlT=kwz)33;0cz@-jF%WqBNqsDzinDJrSR;uYm3rRC)-3kyn$08Z|I6C!W?!c=2rsQWF2 zzr+AQ*|=eqm))x5WTX6%XehX)uXlZPIibbArJ>6j(mu}idA5U<)xRvm11xjKs8Okx ztfTw96p~TC1Z^KzwYhb!+^59vCuE$}njg~hmfqx~kZnqt7<8SuPPen%HAtYrCw_Nm z9K0Xe`Eh9E#C|DBr&O@=>HA~TJ}*pty`Q{yu2l80GPdUbu6MThR=yCKJZ;(O?;A4v zx88 z<{=m%000xjzu8*R@wRM2Vu7YTyfP@^_12C4gXjknnO4pHvA^Djw0W1EAqN^G#pv!6 znv;GuS&b(@IBGQCDE4|>CZaI2`^M^B+QIgUk0&NvI2u8jy^X;dXIkZApS{;2PhYSU z{Wbpc>+H|+Zy)Y{g9uauc*tw?#UXDV(aMRS>wSHF>59hL{Yiou61u`FuMN#w6YZxx z0D~E6H?BQiSHsm_DEbK+q~HPK+uM(6B61*+xk44)wD-h(6+~0*r&i52x9njAVE;<- zSG*%Ddl~N+Ps4zCRF#NTRZEILH6An`l*8RUh>}`td-sXPN1j$5!qDrFF$s;&o3A5i z5Rhg$xwjsZ?};g@-YJQB*ep7S!t9mn)kp8_b+!X%4~4U)WkTgsF?7fpNSgk5@$S_~ z05dbxA**6|s_CQYAUhTUx+?ZCR|Tu?r3UACiLoH&BhM0eS`ijA zb?uKvGG_cD$U#I>B$gKT65Abf9+)N)vLYx zh%CLSi4mHC%E^pT+F#XHxYEC9GE)g#YjSlJp9;9+?m(hX;|kNXK}|G|~G zP3-r7b(URW=9|`pPk+Zq?t#0O^3r%#RO&X~&lO`@QqetMmv0RFHTg60hWk&uj~n;m zKd?IiPGD3;sOYJp`o$pr5HT40jAmVbC@+*PB++}V zyuGo-t!>}JK`CjR56!Tj+Zr1ZV_b(8Wp>Tl&AzW{FMp0#%ikht3T<9>kAZ-4nmrxX z-|?}dmL(@F8vT3SXHW4PTYL6?Y}AR1}-MWjzjtfGJ#*Grr6BGcjHKaw;@Ngz6$^x9TpWor;nFLz`l?x=yfT;s^w+Q=m6 zA#l?}?UnBRVX7bLPftu-&%Trv4NxZ&bO*tixS=xoX(ZD}tD)MWN8*hmU*2$5fc?+O zNP((>gh#qv(Ymv(Q)&}0$fsJ-JxC56=y0c200zhW-7J$kp0EI~Oey_1h|GcP21%c{ z_9kW6&}bv6G8a}0W^UZ$5Sg0RmOo>E?A`ShF$P-^7$Q}KtW{iQ%5~bSJyXyM>DTrY zvLS!%h2UoP3VyO|JV<(dmt9;DRA6f(Xr+6OWQ{V3W5^O$K4?0x2`Eejbok#XzcX~& zvh~OaNp(V;AE+`FL_p%$zadij@ozvLzTREYhk3xW2 zQls*^=EmZfYJQT8TE2>9?>sIt;LIBw7iPk|TFb>kxqN9Q1#lztM8DyjX;E(ri$@0DUoA|FxIZhlzAt52otMWe*LY91 zv=;O7+y{MshDwRjcu-!7l)g+iI-i8OW4%3IRH=EIVHuU}YefFhG5F0BY~t zxomlTq}Xpk6O}JiA=4dd(P3slBF`*uMbjHcKEaxf)cN3y#6gQRkM!$^#nSzjl2qbQ zrbLD3b8qsTTRIN#j*E_3hXYY>ym6u{R2 zs{f+Ly9ul8<~vSS_5b>Qrm6PlkL#YdyzbsQaucw4&ULTtT8r?RkXGSaBodaV0kDRP zeE*{ruOgLiq3tQ+!t8r8B=GA7U;(a<^A$JLln>tJ3QNO+o+t$qySMloQ3fu+&H%joQd?yw%iu;_K>FM)&_B-1E8Q2YHzolv=olFKrz*Z3cM@cR(3w! zcn|6re|uZ*9r^H(rX!P5QY^2Uh*0ajBB7m>k*n&>U3>cY8V)8hWB&Ms7%N*tQdw4? z<HrOd)4ZN;ffDWDDnnf>?JeA8zqjxg37-wCF& zfuv4~o{l~6nk>krdL@mMxSvI*L81&R1Lp$HWJh_p?^>cWGPB&t`7=3M4gdzUdV3B& z47>aB;fNR`4RpPQ=3hsHuGhJ9z54}ACRPVm2Xj>`v#@Wan)mcav6DfECS;nX@e_m~ zvMC7#fWA0IRHgT5!PTrFQa)DDvO?8pbDXSganVL;$3Hn<@sanW`d!NbR6hV>K;U71 zp3;spr-oy$FfWt?V}uI`U4bd4JElirUHx-Ka7fKrU5h6yT87j zJPF#pV-w%+(xNPvK|j*WA@y&}HibbAJ{CD~Q&2LaSP)8{zBPB*GUVvbdr#l1XM1_4 zvs4YK)T`#!J{p=goR{L}``hKid>)*f!f!re%V@G43eDa5A_}3 z6fxfmifQC2D5jC8YwC4b@LjCA1BcOvqsB_iC$4KrNtLQr3a*?36hKiunhl;^JNx2; zx&y{G3FIaqVsp^`!zOWcaM(n3)gr^*F8z-2(6=nW;JMmd+ocx&4wmBsR>TAG7caZi z$tctOvE!@Fv8&D9v?3R0k$2Z%xEZyVm!ISA_MQ#8do5XzgA)y!VWJ0`=kS2km8d23 zYq$vLz)yWh`@QZmy9QwZ(I88;d7bhrB>ct?yqW&!?wvG$2%Iff`=fxM*{-u7?m4lB zgayV}PWrjI6sF@Yd3zUXJ)vP=kLTIHf{~{zJN86bhGl$wI9Ja^u>h6mVQ@70rE!vq zm65iEY;W;&g8ZU%1_5B2UI^Yug<}6yzv?T~Yl|>}B>kBT+=2iW$6MS9Sd;{Ks|Jv2auL?;QPlLADa6#$F8Dke3B zmaQGowV&E?l-G zG_t#H3*S|2uKQ{8<8Vzu#^(da*rCU2s=KGAIYZBl^Y(F%l=qsO={?jv^Yp81w!x*| zz2<2)QnAT$vFn=4RcgTq2(ay9x!IX2VsdcOy4}(4w=#}>e771V)v_thxmHn|sw$quCiQ}aFqbqMRzVRJ)3C_|_{o0Ch@*fOtJig!b@K$=( zq0E$e-n%btkC`vq_L80Tr1klH0l}9pmT#gizF>TQGxnd-D<@b*jILn9gHjadUj?M5 zET~Nf{&EAf$f~Nws=WaNIKs6fu^W-Qn5u2FH}ENgva^-QrkwpOy0h)B~tbK zjMP`l%=|jzu}ebPMt2SUA0KpW)EiP*{-Aq7`nH!7w}bXxJ8rul0mE+tT7F0+o_DP^ z(S92kB?*XLg-oXQzME(I0RO~A9_{GZPF#dVQGK4j9=4>qJiqdKThr}^x`w*yx~iM? z^|kfYm6Zi%maB6tjV+fkl2a>>k^(jMDif>J7Jm~_0VQA)bSvrDzx_pu?R8s}LsCXv zyLH|8=4svo1=5!k2qqJuz2bJG+%nY!D!PVKq|SI|RcPyW$^9Ift!VLv_F;;yA?5nz zu0dpx3&olz=bRvHK{jgTwl5P>_uM{K-6}wv^mP$01Y03PN z{*|W24V>3b-k$4I!22Ha)3mA_`y-so#`eLS>!K$-2Ze}D(;YjA0_hXik%{Wcl0}Li znZWsc^&S$ca_!Gmq_+TRePtvz`n@&AurUUCX#>^*i$<3VtS|Fwo0(G1z6{uEK%V+@ zK?F6W8vj*`qc1tf*XHVb;&5M!>!zhaNa%~!pZSlBODpa?Zyor(=eilZ?*5ye4o9h9 zr@lCH&G)|IyzxO;Rr>4H121-v(ACaVtpUyZAIdcDW@R-@b~%-ZO;Cwdi2>ma zOnpqLi>|8aOM}p0+CX2nYNM9`DWfb`>scSeSFUlwLfoA<7br~;<&RN__TCM5nS3H) zc3FQ#D@s)Iv!HKe95O%H#Xm@YE=za%?C@TrT|>RChmh`v&$ct|&OT@;ZAp~I@pGSV zy%dRTIXpFWcv!MbKqzCmY6|7|E}4EFQlK61<}?ces@+ZVTR!gtA>hws16B}r7Fjf! z!)dnqg}6f|06EyVc!w9+*&lZQBLpa{Xd8N>&=wGa3Dq8>7bORo8513i98`+k)Byq? zs*AzF71uZrlSmibWkjmO{A$i{+u$U6cbl*YEpHWVC+ zTU&tL$r`zB`c9$adec*bma408e!o!Sdu~#Qfyi(P37ZB)%&ANpB^90cuH63pocXs) zEh)-ztBQ8(wlY_0hU4bj0a`XJH zE?K{xBNAOu#F&tUWCt7trpG;6(2!FNzLE()cRB{EscAdYBT*UNOSv^D?$KLv~ zG{?JNMKhH7NsISujyQa^{6S|Jhj1fL>`jV2MF05*2$)PObMCk0%3AiTimVeUaB{Zm@-OcsWj<| zh{DRi0vwXse*TrJs}3+@HzZe@t^n;DPdM&Lqf|y+-Ci8V5LwOd8}9>*;VI=+?UR%>$!++_QpGBzkhH3eNO)z{tS^% z7)G^!nXI(IIf>u7cSTSBiaamqOsNH zT^>z-0?DpWAsZP8(sxj7{xt2j+m%##pd0l)(rrB)gs~A6JI*`Z*=Wy% z5DBZQACi2+)?-H-b>GHG2ef>Am9V$M`Osr=Q3@kKb22#eTl=KTs-AafyLbcyooFL;1a8>jn8}P1x(4EMl@;wX#MfX29Tqtjurcn8)?{NDZ zUMUxnqYM#QbW5p%Ey=6u24wtZ%78Wy@h0HYX*A#Jr!bzw_g9JnCSm*w7Rqc83Z&DK z;ZSau{YGAe^8jbqwmfRr)`K9-+h2#V0_zt_J&lEBV(%9v+_xX)fg#vIVi}B)T>_zt zTnNC_sGfQ4g?GiJJWk6-gR-_uD>Nwfa_$BUpYJDFg=b^i+Dhh(+j|yhyk%OnM-9{T zXX(Vp0a>p4x+{>??;e-4mG8P5WSC}f=-Zk-cYhz+;9gQVI-@?V!vOXO{mN`&t|&TJ z5E(bPaMnJRu*ZAPaQj-#rISybpR?;C1Lx(E-<-zsI&CxT=n9?Psa>DhZ^so}Am>;h zVpY6GeKjwzP%U*KT(n&*B!~#0_U7z1j=nA@mzIA$m!muG0gkqGUUHpko5bm&2ciCo zM!FU~gE;CrT|Vf-x4L3Ib~iET`=J2x@uQ9p&C5DPAf7leEJU^%m6g;+_eEosy$<4BCC$W4hbK>p)DIH(6 zwT{DLR4_CVcsEEU&`298@Lpmn2GG0>K~}OG{p^v%J^I#u z?`b$nz$W_b;-gz(XD+@Jn4;IW-itv;4$fdt_D+)rH;~9}hp!UFNz&h8j5F3q6l;Skn@e$64#BRaP=eElL)AwC76!3>)jl3Nj zy=8|`CcOiLBt>G?{REyqiVRkKvF4$>l2VbN==v)~#jaov$fv40X!pmFiY1XG;{g3% zpQhPe&wVQ|66`BeD&i-Ryi_ixCC2_-j9;qIlENj==6i3eAzbo{(}ut47R8TDi!QewWmA(7L%507PybeH0Tv zA~ky5l-$qLXb>&fH(0}+_laZ)T;dL>?t0|SQ53WV^Nx~<#@0PzdPyNz614cCSrv24yZ1EIx`p}7Bea$u{b%1E>VrieTEE0R%jN%r;xb9CK(&i*H%&H z++tS7cRb%bm)DtFKY!a&?9-X4C33co=0tCTM8^14dF^NS&%VuQpFLx4IC$EqrB9b# z>Rt))OqiI#SL^)X4%zi( zKKy`-+WC#X0HC1DcWP@$sudCreQ9mXCGDi2gEA9D^;qX2cy`dh8ZyZx4&=m|9@rD3 zTQroLkd$Z85_9T-rfNLQq>vO}#9!OBXWFbGikBkr1YSE%!9GN2pOk9gFD&cdcNE6Z z8G(HZ>+EleSi1YMg}U-Ih*!#>N@UjubqZdVP=EFJ;XfJLw#{*V_s0%q{5<@mFbHVc z?K;$Dv6_Uud9pJo2M)NoY_6Te^2WUxqR^-AcDkFOvo&D#mhxR)G*XTQTdYJOX`ZFI zz8htqEPk@Q&Aa5pL_&0fB&N44s-rLAGeDg+EcW+V6 zFvOCoJ!qi}Du5yuLtXPek40Wcq%(KhcYP|xmeji=Q>l7!4eRHMD0{}r#y|VC{kG?S zn{8hBD*WJxbw1igvaPh@;cbp0MEJtNZ*ixF5N>9h=Qk28p_{uhZST$Lcw|t1LsO)s z?d}(4rrp;pk9B9Qu}|NLHx>q#+4}~iO&ev}IGjU}Cg~Qz{gVnd)C%tjr z#INIA)R&RK_%j^wr-QH2ZkUQc$A^u%qnAxrHknl)kJg14P5T7*d+x_I4i?mw!SguD;?Kl)k&8G+!HptFsBb~hmt*sx zZ+|b1>FBO@GW3z)F42RCFZUT`XYusL;#MpqR~AV1J~U4DNihonf{m{E+vW-~=waSr zsQIC@jzDP%wEGb|T=1i3%F0UDqVnFrhezoYy|yw&|Co_@dd=@vCf9BKm;MLlYMn8Mg62%ljwi4fMZLg8?#7psl!i zvPT9uNO{{_*2!}X_ys6QC_Le_U@!I{kVl)X?lW4ZvHJI?0D*uYKb=1x*TfhR zPb%N6O>U&Eg%q?_N}Gd z0UP}{mY}?&h&!j@e$?9`LwRJV6<;A(zuI85(T+L1|y_#QAUc$_|nqGWBF8R}; zr-*s3Bs0%nd@Yc0SiJ;SFE}+@5RkEzfA^NRQ|3gbPcHp{q%NEpl0Yu8OE!8r*3%P? zi^tQ4Fu53_mxv@+Roxh6`Aw$N!(HMBccHcdqJb=c)|nJtSbdD{a;Xy7FI3wgU@GKZcDtRR2Q+2+m)k*3(B++5==OweK$G*T zm-_UWYF$a{s(i6fQAyQWeMU+Sg{`NaFm)2Ta{CU<_aF%YcYr5E8o4i51eE+qKs098 z@~efe*sH>^k3vawBT>Ego+3qoDNI=DYsq8xR(t|aJzv$6(sIjpD z4;J_9xD~qof|rqSGfjTkz+l&)F3G{fXvn~Ee#1)?NX|*|J8~-Wz3Z6d{E&^yFH!YA zoiVOsH~05!MnNd@i7tAlvup4t);8=b68w#Ca?a+;8*x#qGpF8OrnBYK8sFQ1PxHe)uDE3T>pU&5x!me%YkS@C)1eh8aJ<_RkW=mvRK9 zc!1N@wHtCgC!U9j=EHS8sw{!_^Y4Mk$sz2pT~!K!L0s$&?R0=m@I|zf<_$e;K(fib zHJ#A8@=ie;q=%2}ho8OxaTHQC^XS)gJwzxwNM!PxIbSi#AMe+8LXSJgbQs%1app)! zTmuHgGuo)CFA&FCnq65UH{NBiodf1ipZmP8etio<_l{S;iq>LOnEJL*5mZz@ZqMjA z6Hj@Vv3r#C3~BwH23gEeNiEO9>eXLD@FoYfx@@HF!EA+(a5g{l+wVFBnNFIj6seS*$FKy@sz?k82T&s z?TNl1+Ja|r{-&+LELkk&r8vU$#B=hr2#v;P7?RM}SD%~9$i0s;1@u=ju)4SyuD$X+ z4BlkRcCXuf5u0OSHcjLAdU^KP^0sVl=hlRTFbxRx^BF6q-{0TY&h%G1xLQW58wn7q!{j6^_ zti&Mrrp$#MZAW(PS&upF-60M!WfF!8>eAS#&(u|E){t4{2lmmr@o%A|j>P5(MG7B5 zVt1YBy)fqRU0#*9g!@@3LfM)a<#Sn+TIiCzkMDSJFOO}tIgi2m?q|<_EsK;nKFIY| zdw1QWcXL~A(Y}%hZBd|rV7YzhsrEd3U#83-+2f+?Fin|cFFzEb1clgN@|Q3G-J^E! z{34ua5@Kp_qUoXn_%k0ho|(pU8AxxMyHS`B74IpjNX1VS0RlEQ0RKaQE_@Xu@|%22 zB9Lu=MEqOSH1ZZd3U#HKXZu|44MzHy7V1#PGpEn0qMX=0X0BUw;}5Fu8}d#2@OR_p zr-(huzyZSMiH!y|bbGXE_33LD>!RnmZkLVrrsoKGi4TlorHuXw01t9;es|?TLaFs5 zv7X!l>w*SN(pjn;Y4<1F7yRXOG@u5p@tp6AlyGveGJX2|#-v21 zQg#K;ZyQ^aoCnCB9PSM7q^|6_J!s=cBlALAJx}Y?PZDp&?iS$Mn$lIMx`!}4KmiF{zhf~i6eN^2fODz*PGjD$7t!?I{+_}0CAnN%< z#~+5!v<5(p`&1~QQPdf2UVY^cstu&|wt86)wwp#HS{q1dgXbGTUyf~mcs}E@G0^wv zPKpSh?xUh1v4DEADi@KE(H98#6>bP1g9S4FY?}&;Xmt&r6`+1L;aG`y?17!wZ#5De z&tW56=D0AltZFfkC4F7NC)cG;$X;c+JW1m2^^Y;7O2$R5DakE_x${SP_=LB9!%{Eo z0u~XBSQv|eoegST5T$aJ?L93BO$G=fGV%RINnrRq$Oy~Ya{%HYi?=^>bix3)!b3|4 z2|R2lohKMa!}rjr@dGiwB4YEB0b8A^^4mz*gZsN9cq$m#4tjxy zk1ehh*j?`TmYSPc@E=p4zHtNd>u7x*q z;4*zlsUT-Xfy*=;rsRH~x7*$tp_gEK311KW;)fBwEiDTbWo-O=^FaDUG%Cf#ykwRIoP+6X1wWa)^Kai8aFN5A+usjh3B>0bs z6e)bLRJ7x;dUohY%e#a-sSr1U<>p*Ya?Cu3y_wx_4ewI%aHv?>O-i&Jr-e*xG=3aw z!}=(Mlf^(gIsk@q|(Y})EbdF6*8qMiCwFE#tC07YvQ2P|~Rm}EhEn}GDxUBC7q1Uof z$Qr}ozE=a=2ObZ7-LuEPSL$^J8DyH}r@01)E-ni*yI&f|`2%4}1e8D+~uZzguu77Wt#o6sP)Za_Nj*tarL;w1k?B8XH!Mz+up7c%G4lnttp>;YD~V!)$VGpSaClt;rX1Sj$(Y=8V%=LEgzhy`8;); zhF=`YL4us z1etX!23#o0bY$piTdbg|$Xt_)6kLu8M_dA_2mO_=QkL&H9flaq*$iPcrbS_m0-?}ULE)WAnr z5g_pBqx-t>cFdx$LCbX^XNNwbM}=e9qifUHR~zh-MH>e2qN0S*FNSGubq728wgaYYh%rKCj=2UASa)E!|?&QEnr9@50;>!6G%=>U?QYqYFbLPYkDL z_9}YIE?g1Vj!Y|}z^oZC(vIr&)j>~CZJDn-(~f{d`adwc9$hVAgwXdC+1c=e#=hvC z1LeSa8!*omJ{ShG?K&jUZ}B|O)KCDDA(LNS$`GPK?bxI&6qdeU+lA!0wF|lCC#>@Y zy7!mK`2~awPgrz^WG%gxS2BT=l4}Mhg{G@d^p1bI>_5rZZZp+JuzcsTwrEx-hkjCh zLUij^-_+5x8QjAqQ(fUq!PH1;Yo`qKFAEz)x@H zHElyi+3zp-ruZ&COC5uD#|6mFqPlMZAIinJiF2?!Mu!k z`ovGxxBh!gYRW2+-peBiZb53G3&wKop;5VAz&*PTO}XPN+QPik+Hj4G$a>fl?aE{Pi^yRZXr&W7Iwt(4SD7b7mE z9|_Rt=}SX*h)|~A9x?Be-hDzL!q-^u+D*}l57vyCh5Q!W5IUcRp{@#_2-I3IGCpFB zO`rPuQ9HlKVLaP_F4SW?4YT$IIR811Q2Jjn1U8UM?41s^qPZyvF&8gix_J3QOj1&M zMm{t3Y5|kU%+D)e7Umb=H@!C+Y`P%4B7VwMF^EBk6=(Y|;R^;|G8o}; z0rR70k}CMSX(BHA@6PlhZ@uT~-nd~*;o0N;PR3tG9z#K{1NbgT!B*0zIU;`4eZTYp z&tDoS&QPaA^%87PQf0uiJS4mh^6z;RfHC(`ZCWRO4gzR-*K3IL6s5{s!ZrFcA-Ga2 z_IN}n<|S0O){(L1U-#wXsdY)|+nT+Uo@oi_sorU{WQ|<^W{F_b9oXyzk64304$z?O zh_au@%wty^h5OYg(J+t>Jh-98vNc2-&`qPd@eFYH03hjd;DOSN2mg=&082T!(_BSV zG;BTMS9lQDG`m5%wB3YAA2*Fe8t%dnGlLR#C#?NKd!NFbj$nHrQq>js3F3|sUUxg= z`sXy)Z=YROHj1N%&!2;6<8uAj!#_WgAy9cG*({7<7@z~B0JK$rOvAs0`E+QKv}Lj_ zC>t#MU&sJ`@W=Q0Py=}Y5PXk&3Ess8WZk3no6#^HyxOrT5F@`t3{piGP}`gMQJj%V zlYD##TVf-^Sl)%YF2cR?-X69tV8fNt`4Oq)nEN2$yO2I(d>&9SIP>MenlMbznt?cv zw*Ys`4|{4A&R~3?A3qdOjhem9R19eUW@0ZGqlhJQ=Wf z%z2w9yLHTRB5WIB-#7e9ZrK`u7T_(n=T^iS95}O#KN{Mg%5u9?30OQB3Kc=P|BWyL zNTyULo61RGH0eE^xj5*YI|G>!3a<91>q_gkBv=8SUJCN)`X&Jr@Z(J`Huk3=<7HG` z0Qh--uNH5%>SWQIjMFEjF1_#M`WA8+%Dq|he0?eGdwBL$VLh@?jJc>F1khzEN66BVIyC2RNH!52`@kIyr?R*KP=W{3JX4_O8Mv$9!Pyt_*Jt=8{cGCB$*>ho zd)Dt+Ttp&)A8&;j5w{_kNgJ;YI5KLkkOQdl{cDNd(wSw+F9s#oY^8j^iMr?}d=>r4 zH`L-HHS&aE^z4PU?*-fPMG zKxy9n2{?_Jex@2_0u^k~&z%$RZsesvR3D_+Q$ElbR~(^5W2X9B@)+u`Y;=OIG$XK9 zk+I$?UG?D^di$PUQO`xO(Kz=S#reeULdxYqc0dZF#O!Vn4Fu*{$_nm$KvFCuM7v%P=3I$8ceJETQtz9?Ug@N&Yh$yRQe&rYjsUw-ju|cg0(j<{ zlM7VU?UPvkhG>2I=cw)~2A5`8s)eC}6iC2dv<5x)Pt1rn8If)b1$xEci$%1SYBbJL z?TA2{v-m<)Mzjs%rbP_ffn!POg@SEg=k)$47D*r4g?=Zt<L_Saxx0zr z;Zs)H5`7fe!5CcD2ZGb4+bfF9-Sf2iLMyB|d-`y;Y`4e03mvfLiGIZix4!c}UZXAJ zj9{qbJ?YNm@6t*prTEM*h8j8QZZ;wd@7$YPB#SpLybrBb)~|n4Uc3z{J!$zcA^JEH z;DWeqC7sw{A?X4B1EtS(KqSpMR4=XQ^w{2-tsFCk1b+wfH+83ttY7PY2kZK^<$4$* zHP1;t;=5QyhV{`byvzE_D3AIuDv{Su@ZYWyrF+UqL+nSpDVtg+A*Z(aOF#t5{-Q8ZPMjJRTx&%YLsqr>R6d4*~&*+Q>2YJqR z{hoJpU|t@DyP8Ce0Thah0J%GHfZsc~-o_Y|d@@`2-G+NsCK>_$NH)$F86a`7!9}>% zact#B<@o-pHU}bQGH^2|u315@P$Qk^dmcqUMr`TR$Jrm!5V@ zunjbNoEP%QLjvgv6j}X2-)nS;XL2bS!X(}Y#{ZlL)~XD@$ZinS%ouOA_{$ESrkoAN zFjK>?T=JvK@a88(c4$XG8L4d?9J;K>*76}5@U!Lqj6ImQ&mM|t4FkqeSe7%kT9|eO zVli(cG;vU>6@-;EiL2FA@qr>#??3;k$NZh($Q1Ssj>UB8T7|Zum*9~*lO|jmt-n5( z%NLPrA@~S`rP;oO;Wer#Y1@qK1iLTw>J*Vit}jZKPOtq}xOu|v55M!D_>)~B-@H6q z@kTqP>3-e*0De2kyLqEsxzFS-`kGySDfH?4Ic0h+>1py>YA}9ARD|Wgu0}n;cafq^ z=w^TTj3C(@Sa$`>QWR*6d_%E2aa(|RV@~!_j5ox%FHN;6x6PYR%eISX5w?Vize$lr zsji~C5;%IH@gzg2;xwm@s7iC(K1Sh1b@3|PXmHpb;uF=`$x~d-uH>$w%Rt@HWtpD2 zLucY7(L(s@o<*x%N9in{da1`x4=x0o*!@h=I=(v_Ap~GM@X6qwt_}d9=byrSx}HZe z=<~xQdZ_`;VE==bE{%`&z!g>wc&r=);>e^>hMM z!G3^>>&*q{NquY|1)4RXu&7u*;--7Sl6#{*c@sqlSCo?U$>>^DFx3)itPos~eQ~hD zu6WPg2=(=HTz<{{hxCiMAgFhkUk%zc_Eg;p~Gicx|h|9LwhqThB zBbOcWcOJtg$VfG9biJ5$A>~!@`I2Rp!UE|bZ=3Kwt&wf@sMZHp-ztQ9%G{t;M3p7G ztQfZ_@?CHpe{|*+pRaV{%S`S#!^*V-6lMxQ=wNr~XYK@G==f{F5vSeJmP~i09>BFTJ!A1f83*w`+V|!uKe<_S!Z`$3#w@2nX2uD_;?_7SO$Y;?6oEhJmpIq z#I}uP<45e;BFM1?aMU&?jb|BDhB?u{BQ+ppMcPu2nfN@AtrVpR|A% zl~QR)6g)R zK`MTKP$nROcUV+rjo`>WSzQ{iQ>oB*ZD9wER<*f`{U;#{t52K$KGxg`fvpL3oE6%kAx2!dupAinn# zQ-wo(58~St$3!d&X`;m2N{C;`G!KPLyfKEzN+Mh15`!^$EFd{yOj*w*ErjhpB9*#m zg=FaqogkD~-j2UCoEmx%BNO_O+R*#KxHzk2ZvPFh(2J)vRu}p`FH(zY)a?s%eW(}5 z&oUcLJkuTjP~<)XM-v79R=CDD8*&3R^G4`N^V0ceOUXvSl-i?r`QF;1liR83$G#40 zWBEe`Bh6(c(<#E)0 z!=b#5{9BN6PEz!1jeU(oWKxv<-K*V(C;Q^Z4oi{C$`p$x)Y2pRnDMnG2{8{&T4s`o z!fwhA4cL5)jwYAgGt#_5YZxlHo&5V(&to|t9HQ<#fSd$|a-4JeAwC74q>06AOJaT# zLd1=GV>eSa!Su3MWK`DK0^?Kme%7Z{4C$ogk@=AdVXEre!O~oqWdzQLaM=No(zF!& zbs%6Pb2syQrbi&#H{wAK)u}<~@js7{^52$kIPRbp0GXUqtt^<8FS((rYFH#Fg^4YdMk zV442U_7zw)G1Ze%;vg(erCH=C85TD4TjgXhuIHpCvmz*^Tr9=Pe=G~wcT;_PlQIUw zT$3^%*nyF6jRvt9h&?1C%}~ylT9O7Joy_CVo`py(P9lToI`tXk?*~piFeXvs4Ky?k zM+7ilzi7}>j8vC6DGX`J(2%uG5wIj2ViUX;IH<-t2j8Orkg{~4d_Jb5tgG;RX}o!*WSgukU!)-mP`6JVQKw zZ;g5O{;l!)1oBCqMz+X{z0&OT(q*qF8W4fMP~&Qwh3e-e1&hs*F398Zq3H;@^hp58 zS@n3_9k|O39NI2stZQDUk#)EXp3RR{>}21a@y##-X1=itUI87CHGu*@_(mUT==qqZ zz;E)^-m26J>H+zW-=mb-r>WCnIiIVoQ*QY;CX;aebulfd(*?SiTj4=VZ?^e6gSM5ViQ$lVxN)9YCLvvlZk=?3zHNu_mq(f_kX^7m zMGXM7aVP_@ZnPR#fn(t(~?p*UZ?oE-#(ZpAd0zIT%~fb z>r0(Den;4$j^Pe_yrEjt?gcI=0~H1M`RN)b=3ns3&c5G;r4cQL9O2Us9g$kRw%8`<(eq zZAtaJE)MiWYP)!IBE0=HdW0mNhgG3E$l&1;#C2^W0blUZ`K|AghX|&5`GAwplb38p)4+ zG;~FKm9;7T)N4jeW9Kh@Bhp3wS)2ThY2cp~E;AhqcOgopw-XrZ!doP!m9}lKX=fl{Rb|W;qtg&J* zOR1VRaMk^TiAZHtJbfmRcB0&yvMNPCQI64GAA`+|lyKbsfX&ZPQuK9)>vy5Mu>WnKvoj|9H&I{sGj2>5LN)31e35JL~UWejuz2v?4N zk$I}8tEX#TsDZ+yb+XR3o`R9tru+%M~skoqx-U$~Fjt`vEbk8w(BVTv!u* z|Dsvr9C-&z*b1bHuz1Js=R?s&0xV+ui1yvMd0L=VVoE}w`(+F<$XZ+h{(rvBk~iY- zgkHDv?;{3a6eh(w`XtMhXWKe)Yzm+Nn5u4kRg-H0LMaaaymvB<04M+b`2QCF1*7a3 AWB>pF literal 0 HcmV?d00001 diff --git a/sound/arcade/minesweeper_explosion1.ogg b/sound/arcade/minesweeper_explosion1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f8272722fdfd8fea09b5f56d00071fed1a629001 GIT binary patch literal 12559 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%0AIvgLDe9{{|;+rGw|pP;Lov%Uss@Wf0yG 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 FXaKot`#t~w literal 0 HcmV?d00001 diff --git a/sound/arcade/minesweeper_explosion3.ogg b/sound/arcade/minesweeper_explosion3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..22aa309d9d2363e9387438604fc8d5e4b2e1d876 GIT binary patch literal 20468 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 E0!dfZWdHyG literal 0 HcmV?d00001 diff --git a/sound/arcade/minesweeper_win.ogg b/sound/arcade/minesweeper_win.ogg new file mode 100644 index 0000000000000000000000000000000000000000..214f1925b07d3364a5c982e1d448040eb961d2ee GIT binary patch literal 18702 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 R$pj++(asJA2V5cj{{W)V3)lbv literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 8e33f39524..c990446236 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -638,6 +638,10 @@ #include "code\game\machinery\computer\station_alert.dm" #include "code\game\machinery\computer\telecrystalconsoles.dm" #include "code\game\machinery\computer\teleporter.dm" +#include "code\game\machinery\computer\arcade\battle.dm" +#include "code\game\machinery\computer\arcade\minesweeper.dm" +#include "code\game\machinery\computer\arcade\misc_arcade.dm" +#include "code\game\machinery\computer\arcade\orion_trail.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\airlock_types.dm" From 61a6d899d2d9c4a77f723dda4a508567bbfbda7c Mon Sep 17 00:00:00 2001 From: Ghommie Date: Wed, 26 Jun 2019 00:21:06 +0200 Subject: [PATCH 2/2] Should be ready. --- code/game/machinery/computer/arcade.dm | 12 +- .../machinery/computer/arcade/minesweeper.dm | 208 +++++++++--------- code/modules/client/asset_cache.dm | 24 +- icons/misc/minesweeper_tiles.dmi | Bin 4583 -> 0 bytes icons/misc/minesweeper_tiles/eight.png | Bin 0 -> 392 bytes icons/misc/minesweeper_tiles/empty.png | Bin 0 -> 84 bytes icons/misc/minesweeper_tiles/five.png | Bin 0 -> 454 bytes icons/misc/minesweeper_tiles/flag.png | Bin 0 -> 487 bytes icons/misc/minesweeper_tiles/four.png | Bin 0 -> 491 bytes icons/misc/minesweeper_tiles/hidden.png | Bin 0 -> 164 bytes icons/misc/minesweeper_tiles/mine.png | Bin 0 -> 275 bytes icons/misc/minesweeper_tiles/minehit.png | Bin 0 -> 256 bytes icons/misc/minesweeper_tiles/one.png | Bin 0 -> 326 bytes icons/misc/minesweeper_tiles/seven.png | Bin 0 -> 352 bytes icons/misc/minesweeper_tiles/six.png | Bin 0 -> 468 bytes icons/misc/minesweeper_tiles/three.png | Bin 0 -> 449 bytes icons/misc/minesweeper_tiles/two.png | Bin 0 -> 503 bytes 17 files changed, 126 insertions(+), 118 deletions(-) delete mode 100644 icons/misc/minesweeper_tiles.dmi create mode 100644 icons/misc/minesweeper_tiles/eight.png create mode 100644 icons/misc/minesweeper_tiles/empty.png create mode 100644 icons/misc/minesweeper_tiles/five.png create mode 100644 icons/misc/minesweeper_tiles/flag.png create mode 100644 icons/misc/minesweeper_tiles/four.png create mode 100644 icons/misc/minesweeper_tiles/hidden.png create mode 100644 icons/misc/minesweeper_tiles/mine.png create mode 100644 icons/misc/minesweeper_tiles/minehit.png create mode 100644 icons/misc/minesweeper_tiles/one.png create mode 100644 icons/misc/minesweeper_tiles/seven.png create mode 100644 icons/misc/minesweeper_tiles/six.png create mode 100644 icons/misc/minesweeper_tiles/three.png create mode 100644 icons/misc/minesweeper_tiles/two.png diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 6f064d64df..11698ae586 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -41,7 +41,6 @@ /obj/item/toy/toy_xeno = ARCADE_WEIGHT_TRICK, /obj/item/toy/windupToolbox = ARCADE_WEIGHT_TRICK, - /obj/item/twohanded/dualsaber/toy = ARCADE_WEIGHT_RARE, /mob/living/simple_animal/bot/secbot/grievous/toy = ARCADE_WEIGHT_RARE, /obj/item/clothing/mask/facehugger/toy = ARCADE_WEIGHT_RARE, /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted = ARCADE_WEIGHT_TRICK, @@ -93,7 +92,7 @@ return INITIALIZE_HINT_QDEL Reset() -/obj/machinery/computer/arcade/proc/prizevend(mob/user) +/obj/machinery/computer/arcade/proc/prizevend(mob/user, list/rarity_classes) SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "arcade", /datum/mood_event/arcade) if(prob(1) && prob(1) && prob(1)) //Proper 1 in a million @@ -101,7 +100,14 @@ SSmedals.UnlockMedal(MEDAL_PULSE, usr.client) if(!contents.len) - var/prizeselect = pickweight(prizes) + var/list/toy_raffle + if(rarity_classes) + for(var/A in prizes) + if(prizes[A] in rarity_classes) + LAZYSET(toy_raffle, A, prizes[A]) + if(!toy_raffle) + toy_raffle = prizes + var/prizeselect = pickweight(toy_raffle) new prizeselect(src) var/atom/movable/prize = pick(contents) diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index f3f810a5fc..fe69860f76 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -2,7 +2,7 @@ #define MINESWEEPER_GAME_PLAYING 1 #define MINESWEEPER_GAME_LOST 2 #define MINESWEEPER_GAME_WON 3 -#define MINESWEEPERIMG(what) {""} //Basically bypassing asset.icon_tag() +#define MINESWEEPERIMG(what) {""} //Basically bypassing asset.icon_tag() /obj/machinery/computer/arcade/minesweeper name = "Minesweeper" @@ -25,51 +25,51 @@ var/rows = 1 var/columns = 1 var/table[31][51] //Make the board boys, 30x50 board + var/spark_spam = FALSE /obj/machinery/computer/arcade/minesweeper/interact(mob/user) - var/web_difficulty_menu = " Reveal all the squares without hitting a mine!
What difficulty do you want to play?



Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom" - var/static_web = "Minesweeper

Minesweeper
" //When we need to revert to the main menu we set web as this - var/static_emagged_web = "Minesweeper
Minesweeper EXTREME EDITION: Iteration #[randomnumber]
" //Different colour mix for every random number made - var/emagged_web_difficulty_menu = "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" + var/emagged = CHECK_BITFIELD(obj_flags, EMAGGED) + var/dat + if(game_status == MINESWEEPER_GAME_MAIN_MENU) + dat += "Minesweeper
Minesweeper[emagged ? " EXTREME EDITION: Iteration #[randomnumber]" : ""]
" //Different colour mix for every random number made + dat += " [emagged ? "Explode in the game, explode in real life" : "Reveal all the squares without hitting a mine"]!
What difficulty do you want to play?



Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom" + else + dat = saved_web user = usr - var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/minesweeper) + var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/minesweeper) assets.send(user) - if(game_status == MINESWEEPER_GAME_MAIN_MENU) - if(obj_flags & EMAGGED) - playsound(loc, 'sound/arcade/minesweeper_emag2.ogg', 50, 0, extrarange = -3, falloff = 10) - user << browse(static_emagged_web+emagged_web_difficulty_menu,"window=minesweeper,size=400x500") - else - playsound(loc, 'sound/arcade/minesweeper_startup.ogg', 50, 0, extrarange = -3, falloff = 10) - user << browse(static_web+web_difficulty_menu,"window=minesweeper,size=400x500") - else - playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, 0, extrarange = -3, falloff = 10) - user << browse(saved_web,"window=minesweeper,size=400x500") - if(obj_flags & EMAGGED) - do_sparks(5, 1, src) + user << browse(dat,"window=minesweeper,size=400x500") add_fingerprint(user) - ..() + . = ..() + +/obj/machinery/computer/arcade/minesweeper/proc/reset_spark_spam() + spark_spam = FALSE /obj/machinery/computer/arcade/minesweeper/Topic(href, href_list) - if(..()) + . = ..() + if(.) return - var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/minesweeper) var/exploding_hell = FALSE //For emagged failures var/reset_board = FALSE - var/prizevended = TRUE var/mob/living/user = usr //To identify who the hell is using this window, this should also make things like aliens and monkeys able to use the machine!! var/web_difficulty_menu = " Reveal all the squares without hitting a mine!
What difficulty do you want to play?



Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom" var/web = "Minesweeper
Minesweeper
" var/static_web = "Minesweeper
Minesweeper
" //When we need to revert to the main menu we set web as this web = static_web - web += sheet.css_tag() - if(obj_flags & EMAGGED) + if(CHECK_BITFIELD(obj_flags, EMAGGED)) web = "Minesweeper
Minesweeper EXTREME EDITION: Iteration #[randomnumber]
" //Different colour mix for every random number made - do_sparks(5, 1, src) + 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 @@ -78,7 +78,7 @@ columns = 0 mine_placed = 0 if(href_list["Easy"]) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + playsound(loc, startup_sound, 50, 0, extrarange = -3, falloff = 10) flag_text = "OFF" game_status = MINESWEEPER_GAME_PLAYING reset_board = TRUE @@ -87,7 +87,7 @@ columns = 10 mine_limit = 10 if(href_list["Intermediate"]) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + playsound(loc, startup_sound, 50, 0, extrarange = -3, falloff = 10) flag_text = "OFF" game_status = MINESWEEPER_GAME_PLAYING reset_board = TRUE @@ -96,7 +96,7 @@ columns = 17 mine_limit = 40 if(href_list["Hard"]) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + playsound(loc, startup_sound, 50, 0, extrarange = -3, falloff = 10) flag_text = "OFF" game_status = MINESWEEPER_GAME_PLAYING reset_board = TRUE @@ -105,16 +105,12 @@ columns = 31 mine_limit = 99 if(href_list["Custom"]) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - flag_text = "OFF" - game_status = MINESWEEPER_GAME_PLAYING - reset_board = TRUE - difficulty = "Custom" - rows = text2num(input(usr, "How many rows do you want? (Maximum of 30 allowed)", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 - columns = text2num(input(usr, "How many columns do you want? (Maximum of 50 allowed)", "Minesweeper Squares"))+1 //+1 as dm arrays start at 1 - var/grid_area = (rows-1)*(columns-1) - mine_limit = text2num(input(usr, "How many mines do you want? (Maximum of [round(grid_area*0.85)] allowed)", "Minesweeper Mines")) - custom_generation() + if(custom_generation(usr)) + flag_text = "OFF" + game_status = MINESWEEPER_GAME_PLAYING + reset_board = TRUE + difficulty = "Custom" + playsound(loc, startup_sound, 50, 0, extrarange = -3, falloff = 10) if(href_list["Flag"]) playsound(loc, 'sound/arcade/minesweeper_boardpress.ogg', 50, 0, extrarange = -3, falloff = 10) if(!flagging) @@ -125,7 +121,7 @@ flag_text = "OFF" if(game_status == MINESWEEPER_GAME_MAIN_MENU) - if(obj_flags & EMAGGED) + if(CHECK_BITFIELD(obj_flags, EMAGGED)) playsound(loc, 'sound/arcade/minesweeper_emag2.ogg', 50, 0, extrarange = -3, falloff = 10) 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 @@ -133,7 +129,6 @@ web += web_difficulty_menu if(game_status == MINESWEEPER_GAME_PLAYING) - prizevended = FALSE mine_sound = TRUE area = (rows-1)*(columns-1) @@ -161,7 +156,7 @@ else if(game_status != MINESWEEPER_GAME_LOST && game_status != MINESWEEPER_GAME_WON) game_status = MINESWEEPER_GAME_LOST - if(obj_flags & EMAGGED && !exploding_hell) + if(CHECK_BITFIELD(obj_flags, EMAGGED) && !exploding_hell) exploding_hell = TRUE explode_EVERYTHING() if(mine_sound) @@ -204,17 +199,17 @@ if(game_status != MINESWEEPER_GAME_PLAYING) web += "
" else - web += "" + web += "" if(0) if(game_status != MINESWEEPER_GAME_PLAYING) web += "" else - web += "" //Make unique hrefs for every square + web += "" //Make unique hrefs for every square if(1 to 9) if(game_status != MINESWEEPER_GAME_PLAYING) web += "" else - web += "" //Make unique hrefs for every square + web += "" //Make unique hrefs for every square if(10) web += "" if(11) @@ -242,40 +237,37 @@ 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, 0, extrarange = -3, falloff = 10) + 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, 0, extrarange = -3, falloff = 10) + 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 grenade launcher" + new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(loc) + new /obj/item/ammo_casing/a40mm(loc) + new /obj/item/ammo_casing/a40mm(loc) + new /obj/item/ammo_casing/a40mm(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) ? list(ARCADE_WEIGHT_RARE) : (area >= 256) ? list(ARCADE_WEIGHT_RARE, ARCADE_WEIGHT_TRICK) : null + prizevend(user, dope_prizes) if(game_status == MINESWEEPER_GAME_WON) - if(rows < 10 || columns < 10) //If less than easy difficulty - if(!prizevended) - playsound(loc, 'sound/arcade/minesweeper_winfail.ogg', 50, 0, extrarange = -3, falloff = 10) - say("You cleared the board of all mines, but you picked too small of a board! Try again with at least a 9x9 board!") - prizevended = TRUE - web += "You won, but your board was too small! Pick a bigger board next time!
Want to play again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom

Play on the same board
Return to Main Menu

" - else - if(!prizevended) - playsound(loc, 'sound/arcade/minesweeper_win.ogg', 50, 0, extrarange = -3, falloff = 10) - say("You cleared the board of all mines! Congratulations!") - if(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 grenade launcher" - new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(loc) - new /obj/item/ammo_casing/a40mm(loc) - new /obj/item/ammo_casing/a40mm(loc) - new /obj/item/ammo_casing/a40mm(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.") - else - prizevend(user) - prizevended = TRUE - web += "Congratulations, you have won!
Want to play again?
Easy (9x9 board, 10 mines)
Intermediate (16x16 board, 40 mines)
Hard (16x30 board, 99 mines)
Custom

Play on the same board
Return to Main Menu

" + 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

Play on the same board
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

Play on the same board
Return to Main Menu
" @@ -285,18 +277,20 @@ web += "
Difficulty: [difficulty]
Mines: [mine_placed]
Rows: [rows-1]
Columns: [columns-1]
Flagging mode: [flag_text]
" web += "" - saved_web = web - user << browse(web,"window=minesweeper,size=400x500") + 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(obj_flags & EMAGGED) + 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) - obj_flags |= EMAGGED + 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, 0, extrarange = 3, falloff = 10) @@ -305,33 +299,29 @@ playsound(user, 'sound/machines/buzz-sigh.ogg', 100, 0, extrarange = 3, falloff = 10) //Loud buzz game_status = MINESWEEPER_GAME_MAIN_MENU -/obj/machinery/computer/arcade/minesweeper/proc/custom_generation() +/obj/machinery/computer/arcade/minesweeper/proc/custom_generation(mob/user) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) //Entered into the menu so ping sound - if(rows < 4) - rows = text2num(input(usr, "You must put at least 4 rows! Pick a higher amount of rows", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() - if(columns < 4) - columns = text2num(input(usr, "You must put at least 4 columns! Pick a higher amount of columns", "Minesweeper Columns"))+1 //+1 as dm arrays start at 1 - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() - if(rows > 31) - rows = text2num(input(usr, "A maximum of 30 rows are allowed! Pick a lower amount of rows", "Minesweeper Rows"))+1 //+1 as dm arrays start at 1 - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() - if(columns > 51) - columns = text2num(input(usr, "A maximum of 50 columns are allowed! Pick a lower amount of columns", "Minesweeper Columns"))+1//+1 as dm arrays start at 1 - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() - var/grid_area = (rows-1)*(columns-1) //Need a live update of this, won't update if we use the area var in topic - if(mine_limit > round(grid_area*0.85)) - mine_limit = text2num(input(usr, "You can only put in [round(grid_area*0.85)] mines on this board! Pick a lower amount of mines to insert", "Minesweeper Mines")) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() - if(mine_limit < round(grid_area/6.4)) //Same mine density as intermediate difficulty - mine_limit = text2num(input(usr, "You must at least put [round(grid_area/6.4)] mines on this board! Pick a higher amount of mines to insert", "Minesweeper Mines")) - playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) - custom_generation() + 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, !issilicon(user))) + return FALSE + new_rows = CLAMP(new_rows + 1, 4, 30) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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, !issilicon(user))) + return FALSE + new_columns = CLAMP(new_columns + 1, 4, 50) + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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, !issilicon(user))) + return FALSE + playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) + 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) @@ -381,9 +371,9 @@ column_limit = 10 if(mine_limit > (rows*columns) * 0.25) mine_limit_v2 = 24 - message_admins("[key_name_admin(user)] failed Minesweeper and has unleashed an explosion armageddon of size [row_limit],[column_limit] around [ADMIN_LOOKUPFLW(user.loc)]!") + 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, 4, 8, 16) //Thought you could survive by putting as few mines as possible, huh?? + 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)) for(var/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 Rd-?zX002ovPDHLkV1mi!+5i9m diff --git a/icons/misc/minesweeper_tiles/eight.png b/icons/misc/minesweeper_tiles/eight.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5c4179efe59564ee6031ed3a20da3736d961f3 GIT binary patch literal 392 zcmV;30eAk1P)gM)Z@c(b#!t*xzneSO2j!>+EbkdTm;mX?*3m6w;7 zj*gCohK8`Pu+GlT#l^*^r>BB~f|Qh$ot>SWoSc!7k*TSv#KgqL#>RkvfTE(JcXxNQ zjW%Ea005*(L_t&-m0gd?7J@Jg09%j-N(0ojxBzaTh`90p-zII*_jGQV!z3Yu5c+{w zsN-53Yv{;hpkaQX4do#SjG`zOkjUQ9F%$7*I-4&Pq}+%l;L4Tm8aKj-EKgan-R%$T zSY{>?c%TqbfnS;VbgtQ@xi&5HZgwyCY(!BSj0J%J#E{-7_ dGm{e(c!4|v21e&8+tYz822WQ%mvv4FO#p3M5fuOc literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/five.png b/icons/misc/minesweeper_tiles/five.png new file mode 100644 index 0000000000000000000000000000000000000000..dacf837f9bd93f6662caafb957d8afc3568e9151 GIT binary patch literal 454 zcmV;%0XhDOP)3KtO^D3(4HvzrMf5($dD$)5+c3u7`(( z6cxkD%C3rvu8WMXjEu38lb%{ygANdQ004jk0+2d9$JNxy+uMZ_6NC~HgcKBm4iAz$ zJI?9p#?{s2bm)2j005>*L_t&-m2J=062c%5g<&8HMv02OMvbwT*n98q|3vO$^vdsU z|2e}9gb>QUC_&5!d<7ZY)Zkov@Q?``7Um)%EfkH#br2DiNTxtKll6nl#q*$0#8)x! zQrWicO0}kgqw21bQYyF6Y(b&zPPYg81I~vYPDbMin$Dz{W1x%WY7I79SL`q_$FlZF wiNo=Pi}U4r)9#Na(|<8N-%H=H`62(j0e>(Pi@vp_E&u=k07*qoM6N<$g5qwzA91t=ZYL$;rC9x^8Z6fPjFxxw*f;zren}xYX3J?d{=K zR{sD1-(6k2%*?>Qzreu2vgzsTIy(3f5&Q=S-ehETb#=M8xVhEU?<*_*007-&WW318 z%bT0}4-dQ0(9ws7(}IHVEG*?@WWC47y3o+no13gBC!1bg#LUdb#>Uj#+*4v=Rb5@u z($de*&yJ3ce}8{CI5;&mHJqHB&d$!o#l^|V$(ov)BO@aK001*HGnJKHgA{V%_@FE&DdaXdmcjO`Am%WcOPdjx`z zm-_sHAcVpqV~l@;FA|N#Az?uB1*vofAPc!Kc=LrKz%PiUa-|A23#eFcG+XTs{Q{#> zx7Qz7APwcwcru;MKd_LOD@9S(n=NMm-t85$!_i!*r}O3A^`;q5JyhM9Y3!~O#0k8W dP6&FC|DL^W8($AV&jn#8P literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/four.png b/icons/misc/minesweeper_tiles/four.png new file mode 100644 index 0000000000000000000000000000000000000000..17a2bdfeb460016c3c8c8e64344751211c9a6585 GIT binary patch literal 491 zcmV=ph@ya<9lSmw$+ATJ zUMGVCK_wK9P$e4s2#6<=G?mU!mK8n%=kiP~6ibwqEA|nn*6NzlXttQv?sRzs_xh9& zNhP|j42E35Xgo0tV>)Bne6h5Tz-rCeY$@CAogxPt^T@x%eq9kVPZBx1#pQatKb|fD hOUrs;loyG&JnoxpV*i{Ra*lC@n2Lc<^9ZSy^#$@$(~pB7ho=JY5_^IA$g%G%zT# zrHKm^_@+OYv6YMEN@CC3kmLFVdQ&MBb@0BsjS`v3p{ literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/mine.png b/icons/misc/minesweeper_tiles/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..e16c89c2a83b7fbc685d616cc67454d99a403957 GIT binary patch literal 275 zcmV+u0qp*XP)zP{Ml*u}-g>FMcaW@Z2Y0J^%mQc_Y64-W_k2uMgs1_lOpc6L}; zSj)@H|NsAujg3l5N@ZnbjEsyxKtRyiynp}z0DwtEK~xx(WslnugD?n0v#7a{1XFFb z{r?|rK&La-ePKAj0?wI01osnwVH}4Zj(qZgVoH&MpRDdVmnu?AX0JU6d1h6cb1*=K zA6S$Wb;cSipupDzYGlj85j~67-|_9 zSQr={F)$P|Fo-cQ@GvkuWMD`Es$^i`U|=YzuHL_Ye?&yY|NsAcdwb&<7-|?8dU|>s z92}Av7&6#oErIHaJzX3_B&MeJNAev|;BZOZwPI~q{JZ+gRvELloNI4U=Sk@CVlZ6q z!s6R3axZ>C?oY3CyYE@OpZnHYwJDJ&M5di7XU4PEBSI?d;?GKxdlz$mJKX+s567R4 z%FRlww}O`Fn)F(pUnWz1{QZslNmpNeExi9({!21z@7cu%cYxgK>FVdQ&MBb@017== Ap#T5? literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/one.png b/icons/misc/minesweeper_tiles/one.png new file mode 100644 index 0000000000000000000000000000000000000000..a84e6010a3e87f1072a65cd67c34075c3053fd7c GIT binary patch literal 326 zcmV-M0lEH(P)OXbhcy58NjWMtg}0{%}=eh` zTzb*|$_w;>E?i*VnjHRO8pzx5dT2$jH5ulg*Zu%sV^l z7#Q}{)VVb??GF$66cqP0GwjvXx7^&e)z!H9Q9-2u004SPL_t&-m2J$~5`r)ch2bQ1 zIk;O8t%~d-;QK$H4s>dn@xT1$Bt&B@On#zfb6;e!M6mjatT$Wilmpoxj(~Q+p#~x! zPH}wp7sMBHodB`Y)5Yzc0Lde@!dYIFKw0G3C~PVWRmMX7Y+m1*wzfCY^+RuQUv2cS Y4=`&72M5N+#*~zlD=RA)7#NL>jmyi+&(F_qZ*L(XA>rZSpP!#NI5->}9DRL# z%*@Qu(a~aJVmv%N-rnA(rlv+lMiUbgXJ=>4&CSrz&_zW>S65dI3=CFQRx(Q_>i_@% zf=NU{R2Y?Qj7Ji}Fc1WHWf(9biX2T&#>VFVk7EU8EeHBGU0p*&Y$}*MCaP7`jckq( zXf&lUv5J-z!R=1h)9V8RFNocT;RqPp@2zJtongLM2EnT}ut`kVZo9+&aMa**1}<0K y?siA|$W-J{pwNIgE6VbvflsW>f3_Hb{__SJp9nJCv~iID00000ZeE*2l-&$;lRkh5&wk0Dpi0d3peL zcK~#D7lVY^$;jc$%K&+{wwB zv$NC2#)hq~6oiFlqN9^gM$== zggTIt>CVpA$H&#j#&^(4U;qFBu1Q2eR2Y?Q&)F8iFc5&@Bq#}`V=J|_N>MwtQ?)Pe z|3I3iz4P7WKXWDtLI`0ZU?jxi2|*&_oJ>*1(R7B-U^$ypAnz*_OFWP=Rn$sV)3jQ> z5rk$-ftqgk+QC*H%ud&`tX^M=CI&VDsB}0QV-e_NI-4&{bLoTuR`Ock0NVz^zs26| z562T_E)Q5bGX|dLsqAt!_}19%{&;fk>n+|+K92Au;qPz+{qqCtWfO~6z&#fL0000< KMNUMnLSTYo*Whsg literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/three.png b/icons/misc/minesweeper_tiles/three.png new file mode 100644 index 0000000000000000000000000000000000000000..1c128d88eefcb05fa5520ba581eb55493a76a4c2 GIT binary patch literal 449 zcmV;y0Y3hTP)`4AAd+}ys!#k$bYxYgCQ-`~-Qi2Mf!yv)qmaB$^IOXN^c;#5@bGc)!W7|@N4 zyvxhE)YR}UF7Pcavg+!*%F5M#e&1nX-DG6kX=&*|K=>6E(}97##>TqO&$-jn(uRin z2?^1PiqDIS&y0-Cl9J(BS^5tTwBh0Y0RiedI=R)=w%gnI5fS(j6897o`4124Iy$oH z>9^V0w%ptbm~vtO005y$L_t&-m2J+|7Q!$PMbS)(++xLAin|nt;_mSOUj#`5PwcnM znw*3&MqD8#am}ar1L90t5W0j=n2Uu76dlpn=N1|9gpf=DX;Wm#vaF14XLCT_^tx0i zmdceXYW0R1G+Q##?r`s6a=N|#V2IJUAR80In7Xbu1LmSZ&SJUxSZ{!>81UWqAJ`v` rV&inaT&3InA*1~HQta;|KkT13RGbk@`>(Y@00000NkvXXu0mjfmuKh{ literal 0 HcmV?d00001 diff --git a/icons/misc/minesweeper_tiles/two.png b/icons/misc/minesweeper_tiles/two.png new file mode 100644 index 0000000000000000000000000000000000000000..ff74af5c82544f4de75dbfec809082e421ede6bc GIT binary patch literal 503 zcmVi6_^`*Wt_I0CoTXaR6 zr-EjkW-p2_i>!;%#?p4Ac6X(B8ig9n!^{DF0XUC1RhCtkt(V)%+t0<%0CxZZe*vSm zqm;3fjIE4}u8fbbkIBQy0(%18$=%z@+Y*8j6oV8ai6hy`*<`)a$p8QVxk*GpR2Y?Q z&({)yFc1aMBv>OVBnb9~V(-28UQqx4VgRsl0vJ(o8M#S-zASpi_hFf!Fzy`eN) zZF>>ybbI{)A<}Tfb9X$M5;ExbK6#d%E8fL&wcZ#N)*x+*cVcpXIG*(L#a_$4MZy+( ty|J}-(|mBLr)tl<(qAgFkAXknk2g3v6}RRjXZt$# literal 0 HcmV?d00001
[MINESWEEPERIMG(flag)][MINESWEEPERIMG(flag)][MINESWEEPERIMG(mine)][MINESWEEPERIMG(hidden)][MINESWEEPERIMG(hidden)][MINESWEEPERIMG(hidden)][MINESWEEPERIMG(minehit)]