/obj/machinery/computer/arcade name = "random arcade" desc = "random arcade machine" icon_state = "arcade1" icon_keyboard = null clicksound = null //Gets too spammy and makes no sense for arcade to have the console keyboard noise anyway var/list/prizes = list( /obj/item/storage/box/snappops = 2, /obj/item/toy/blink = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, /obj/item/storage/box/capguntoy = 2, /obj/item/gun/projectile/revolver/toy/crossbow = 2, /obj/item/clothing/suit/syndicatefake = 2, /obj/item/storage/fancy/crayons = 2, /obj/item/toy/spinningtoy = 2, /obj/random/mech_toy = 1, /obj/item/reagent_containers/spray/waterflower = 1, /obj/random/action_figure = 1, /obj/random/plushie = 1, /obj/item/toy/cultsword = 1, /obj/item/toy/bouquet/fake = 1, /obj/item/clothing/accessory/badge/sheriff = 2, /obj/item/clothing/head/cowboy/small = 2, /obj/item/toy/stickhorse = 2 ) var/list/special_prizes = list() // Holds instanced objects, intended for admins to shove surprises inside or something. /obj/machinery/computer/arcade/Initialize() . = ..() // 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/arcade) - /obj/item/circuitboard/arcade/clawmachine) var/obj/item/circuitboard/CB = new choice() new CB.build_path(loc, CB) return INITIALIZE_HINT_QDEL /obj/machinery/computer/arcade/proc/prizevend() if(LAZYLEN(special_prizes)) // Downstream wanted the 'win things inside contents sans circuitboard' feature kept. var/atom/movable/AM = pick_n_take(special_prizes) AM.forceMove(get_turf(src)) special_prizes -= AM else if(LAZYLEN(prizes)) var/prizeselect = pickweight(prizes) //VOREstation edit - Randomized map objects were put in loot piles, so handle them... if(istype(prizeselect,/obj/random)) var/obj/random/randy = prizeselect var/new_I = randy.spawn_item() qdel(prizeselect) prizeselect = new_I // swap it //VOREstation edit end new prizeselect(src.loc) if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit new /obj/item/clothing/head/syndicatefake(src.loc) /obj/machinery/computer/arcade/attack_ai(mob/user as mob) return attack_hand(user) /obj/machinery/computer/arcade/emp_act(severity) if(stat & (NOPOWER|BROKEN)) ..(severity) return var/empprize = null var/num_of_prizes = 0 switch(severity) if(1) num_of_prizes = rand(1,4) if(2) num_of_prizes = rand(1,3) if(3) num_of_prizes = rand(0,2) if(4) num_of_prizes = rand(0,1) for(num_of_prizes; num_of_prizes > 0; num_of_prizes--) empprize = pickweight(prizes) new empprize(src.loc) ..(severity) /////////////////// // BATTLE HERE // /////////////////// /obj/machinery/computer/arcade/battle name = "Battler" desc = "Fight through what space has to offer!" icon_state = "arcade2" icon_screen = "battler" circuit = /obj/item/circuitboard/arcade/battle var/enemy_name = "Space Villian" var/temp = "Winners don't use space drugs" //Temporary message, for attack messages, etc var/enemy_action = "" 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 = 0 var/blocked = 0 //Player cannot attack/heal while set var/turtle = 0 /obj/machinery/computer/arcade/battle/Initialize() . = ..() randomize_characters() /obj/machinery/computer/arcade/battle/proc/randomize_characters() 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/attack_hand(mob/user as mob) if(..()) return user.set_machine(src) tgui_interact(user) /obj/machinery/computer/arcade/battle/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ArcadeBattle", name) ui.open() /obj/machinery/computer/arcade/battle/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() data["name"] = name data["temp"] = temp data["enemyAction"] = enemy_action data["enemyName"] = enemy_name data["playerHP"] = player_hp data["playerMP"] = player_mp data["enemyHP"] = enemy_hp data["gameOver"] = gameover return data /obj/machinery/computer/arcade/battle/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) if(..()) return TRUE if(!blocked && !gameover) switch(action) if("attack") blocked = 1 var/attackamt = rand(2,6) temp = "You attack for [attackamt] damage!" playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) if(turtle > 0) turtle-- sleep(10) enemy_hp -= attackamt arcade_action() if("heal") blocked = 1 var/pointamt = rand(1,3) var/healamt = rand(6,8) temp = "You use [pointamt] magic to heal for [healamt] damage!" playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) turtle++ sleep(10) player_mp -= pointamt player_hp += healamt blocked = 1 arcade_action() if("charge") blocked = 1 var/chargeamt = rand(4,7) temp = "You regain [chargeamt] points" playsound(src, 'sound/arcade/mana.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) player_mp += chargeamt if(turtle > 0) turtle-- sleep(10) arcade_action() if(action == "newgame") //Reset everything temp = "New Round" player_hp = 30 player_mp = 10 enemy_hp = 45 enemy_mp = 20 gameover = 0 turtle = 0 if(emagged) randomize_characters() emagged = 0 add_fingerprint(usr) return TRUE /obj/machinery/computer/arcade/battle/proc/arcade_action() if ((enemy_mp <= 0) || (enemy_hp <= 0)) if(!gameover) gameover = 1 temp = "[enemy_name] has fallen! Rejoice!" playsound(src, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) if(emagged) feedback_inc("arcade_win_emagged") new /obj/effect/spawner/newbomb/timer/syndicate(src.loc) new /obj/item/clothing/head/collectable/petehat(src.loc) message_admins("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name_admin(usr)] has outbombed Cuban Pete and been awarded a bomb.") randomize_characters() emagged = 0 else if(!contents.len) feedback_inc("arcade_win_normal") prizevend() else feedback_inc("arcade_win_normal") prizevend() else if (emagged && (turtle >= 4)) var/boomamt = rand(5,10) enemy_action = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" playsound(src, 'sound/arcade/boom.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) player_hp -= boomamt else if ((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) enemy_action = "[enemy_name] steals [stealamt] of your power!" playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) player_mp -= stealamt if (player_mp <= 0) gameover = 1 sleep(10) temp = "You have been drained! GAME OVER" if(emagged) feedback_inc("arcade_loss_mana_emagged") usr.gib() else feedback_inc("arcade_loss_mana_normal") else if ((enemy_hp <= 10) && (enemy_mp > 4)) enemy_action = "[enemy_name] heals for 4 health!" playsound(src, 'sound/arcade/heal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) enemy_hp += 4 enemy_mp -= 4 else var/attackamt = rand(3,6) enemy_action = "[enemy_name] attacks for [attackamt] damage!" playsound(src, 'sound/arcade/hit.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) player_hp -= attackamt if ((player_mp <= 0) || (player_hp <= 0)) gameover = 1 temp = "You have been crushed! GAME OVER" playsound(src, 'sound/arcade/lose.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) if(emagged) feedback_inc("arcade_loss_hp_emagged") usr.gib() else feedback_inc("arcade_loss_hp_normal") blocked = 0 return /obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) if(!emagged) to_chat(user, span_notice("You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Hyper-Lethal Mode.")) temp = "If you die in the game, you die for real!" player_hp = 30 player_mp = 10 enemy_hp = 45 enemy_mp = 20 gameover = 0 blocked = 0 emagged = 1 enemy_name = "Cuban Pete" name = "Outbomb Cuban Pete" return 1 ////////////////////////// // ORION TRAIL HERE // ////////////////////////// #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_MUTINY "Mutiny?" #define ORION_TRAIL_MUTINY_ATTACK "Mutinous 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 = "arcade1" icon_screen = "orion" circuit = /obj/item/circuitboard/arcade/orion_trail var/busy = 0 //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_MUTINY = 3, ORION_TRAIL_MALFUNCTION = 2, ORION_TRAIL_COLLISION = 1, ORION_TRAIL_SPACEPORT = 2 ) var/list/stops = list() var/list/stopblurbs = list() var/traitors_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/New() ..() // 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 traitors_aboard = 0 //spaceport junk spaceport_raided = 0 spaceport_freebie = 0 last_spaceport_action = "" /obj/machinery/computer/arcade/orion_trail/attack_hand(mob/living/user) if(..()) return if(fuel <= 0 || food <=0 || settlers.len == 0) gameStatus = ORION_STATUS_GAMEOVER event = null user.set_machine(src) var/dat = "" if(gameStatus == ORION_STATUS_GAMEOVER) playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) dat = "
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 cannot afford to sell a Crewmember
" //BUY/SELL STUFF eventdat += "Spare Parts:
" //Engine parts if(fuel > 5) eventdat += "" else eventdat += "You cannot afford to buy Engine Parts" //Hull plates if(fuel > 5) eventdat += "
" else eventdat += "You cannot afford to buy Hull Plates" //Electronics if(fuel > 5) eventdat += "
" else eventdat += "You cannot afford to buy Spare Electronics" //Trade if(fuel > 5) eventdat += "
Trade Fuel for Food (-5FU,+5FO)
" else eventdat += "You cannot afford to Trade Fuel for Food
5) eventdat += "Trade Food for Fuel (+5FU,-5FO)
" else eventdat += "You cannot afford to Trade Food for Fuel
!! Raid Spaceport !!" eventdat += "" /obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(var/specific = "") var/newcrew = "" if(specific) newcrew = specific else if(prob(50)) newcrew = pick(first_names_male) else newcrew = pick(first_names_female) if(newcrew) settlers += newcrew alive++ return newcrew /obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(var/specific = "", var/dont_remove = "") var/list/safe2remove = settlers var/removed = "" if(dont_remove) safe2remove -= dont_remove if(specific && specific != dont_remove) safe2remove = list(specific) else removed = pick(safe2remove) if(removed) if(traitors_aboard && prob(40*traitors_aboard)) //if there are 2 traitors you're twice as likely to get one, obviously traitors_aboard = max(0,--traitors_aboard) settlers -= removed alive-- return removed /obj/machinery/computer/arcade/orion_trail/proc/win() gameStatus = ORION_STATUS_START src.visible_message("\The [src] plays a triumpant tune, stating 'CONGRATULATIONS, YOU HAVE MADE IT TO ORION.'") playsound(src, 'sound/arcade/Ori_win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) if(emagged) new /obj/item/orion_ship(src.loc) message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") log_game("[key_name(usr)] made it to Orion on an emagged machine and got an explosive toy ship.") else prizevend() emagged = 0 name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" /obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) if(!emagged) to_chat(user, span_notice("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() emagged = 1 return 1 /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 = ITEMSIZE_SMALL var/active = 0 //if the ship is on /obj/item/orion_ship/examine(mob/user) . = ..() if(in_range(user, src)) if(!active) . += span_notice("There's a little switch on the bottom. It's flipped down.") else . += span_notice("There's a little switch on the bottom. It's flipped up.") /obj/item/orion_ship/attack_self(mob/user) if(active) return message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") to_chat(user, span_warning("You flip the switch on the underside of [src].")) active = 1 src.visible_message(span_notice("[src] softly beeps and whirs to life!")) src.audible_message(span_bold("\The [src]") + " says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") sleep(20) src.visible_message(span_warning("[src] begins to vibrate...")) src.audible_message(span_bold("\The [src]") + " says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") sleep(30) src.audible_message(span_bold("\The [src]") + " says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") sleep(3.6) src.visible_message(span_danger("[src] explodes!")) explosion(src.loc, 1,2,4) 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_MUTINY #undef ORION_TRAIL_MUTINY_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 ////////////////// // Claw Machine // ////////////////// /obj/machinery/computer/arcade/clawmachine name = "AlliCo Grab-a-Gift" desc = "Show off your arcade skills for that special someone!" icon_state = "clawmachine_new" icon_keyboard = null icon_screen = null circuit = /obj/item/circuitboard/arcade/clawmachine prizes = list(/obj/random/plushie) var/wintick = 0 var/winprob = 0 var/instructions = "Insert 1 thaler or swipe a card to play!" var/gameStatus = "CLAWMACHINE_NEW" var/gamepaid = 0 var/gameprice = 1 var/winscreen = "" /// Payment /obj/machinery/computer/arcade/clawmachine/attackby(obj/item/I as obj, mob/user as mob) if(..()) return if(gamepaid == 0 && vendor_account && !vendor_account.suspended) var/paid = 0 var/obj/item/card/id/W = I.GetID() if(W) //for IDs and PDAs and wallets with IDs paid = pay_with_card(W,I) else if(istype(I, /obj/item/spacecash/ewallet)) var/obj/item/spacecash/ewallet/C = I paid = pay_with_ewallet(C) else if(istype(I, /obj/item/spacecash)) var/obj/item/spacecash/C = I paid = pay_with_cash(C, user) if(paid) gamepaid = 1 instructions = "Hit start to play!" return return ////// Cash /obj/machinery/computer/arcade/clawmachine/proc/pay_with_cash(var/obj/item/spacecash/cashmoney, mob/user) if(!emagged) if(gameprice > cashmoney.worth) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in to_chat(usr, "[icon2html(cashmoney,user.client)] " + span_warning("That is not enough money.")) return 0 if(istype(cashmoney, /obj/item/spacecash)) visible_message(span_info("\The [usr] inserts some cash into \the [src].")) cashmoney.worth -= gameprice if(cashmoney.worth <= 0) usr.drop_from_inventory(cashmoney) qdel(cashmoney) else cashmoney.update_icon() // Machine has no idea who paid with cash credit_purchase("(cash)") return 1 if(emagged) playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) to_chat(user, span_info("It doesn't seem to accept that! Seem you'll need to swipe a valid ID.")) ///// Ewallet /obj/machinery/computer/arcade/clawmachine/proc/pay_with_ewallet(var/obj/item/spacecash/ewallet/wallet) if(!emagged) visible_message(span_info("\The [usr] swipes \the [wallet] through \the [src].")) playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) if(gameprice > wallet.worth) visible_message(span_info("Insufficient funds.")) return 0 else wallet.worth -= gameprice credit_purchase("[wallet.owner_name] (chargecard)") return 1 if(emagged) playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) to_chat(usr, span_info("It doesn't seem to accept that! Seem you'll need to swipe a valid ID.")) ///// ID /obj/machinery/computer/arcade/clawmachine/proc/pay_with_card(var/obj/item/card/id/I, var/obj/item/ID_container) if(I==ID_container || ID_container == null) visible_message(span_info("\The [usr] swipes \the [I] through \the [src].")) else visible_message(span_info("\The [usr] swipes \the [ID_container] through \the [src].")) playsound(src, 'sound/machines/id_swipe.ogg', 50, 1) var/datum/money_account/customer_account = get_account(I.associated_account_number) if(!customer_account) visible_message(span_info("Error: Unable to access account. Please contact technical support if problem persists.")) return 0 if(customer_account.suspended) visible_message(span_info("Unable to access account: account suspended.")) return 0 // Have the customer punch in the PIN before checking if there's enough money. Prevents people from figuring out acct is // empty at high security levels if(customer_account.security_level != 0) //If card requires pin authentication (ie seclevel 1 or 2) var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Vendor transaction") customer_account = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!customer_account) visible_message(span_info("Unable to access account: incorrect credentials.")) return 0 if(gameprice > customer_account.money) visible_message(span_info("Insufficient funds in account.")) return 0 else // Okay to move the money at this point if(emagged) gameprice = customer_account.money // debit money from the purchaser's account customer_account.money -= gameprice // create entry in the purchaser's account log var/datum/transaction/T = new() T.target_name = "[vendor_account.owner_name] (via [name])" T.purpose = "Purchase of arcade game([name])" if(gameprice > 0) T.amount = "([gameprice])" else T.amount = "[gameprice]" T.source_terminal = name T.date = current_date_string T.time = stationtime2text() customer_account.transaction_log.Add(T) // Give the vendor the money. We use the account owner name, which means // that purchases made with stolen/borrowed card will look like the card // owner made them credit_purchase(customer_account.owner_name) return 1 /// Add to vendor account /obj/machinery/computer/arcade/clawmachine/proc/credit_purchase(var/target as text) vendor_account.money += gameprice var/datum/transaction/T = new() T.target_name = target T.purpose = "Purchase of arcade game([name])" T.amount = "[gameprice]" T.source_terminal = name T.date = current_date_string T.time = stationtime2text() vendor_account.transaction_log.Add(T) /// End Payment /obj/machinery/computer/arcade/clawmachine/New() ..() /obj/machinery/computer/arcade/clawmachine/attack_hand(mob/living/user) if(..()) return tgui_interact(user) /// TGUI Stuff /obj/machinery/computer/arcade/clawmachine/tgui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ClawMachine", name, ui_x = 300, ui_y = 400) ui.autoupdate = TRUE ui.open() /obj/machinery/computer/arcade/clawmachine/tgui_data(mob/user) var/list/data = list() data["wintick"] = wintick data["instructions"] = instructions data["gameStatus"] = gameStatus data["winscreen"] = winscreen return data /obj/machinery/computer/arcade/clawmachine/tgui_act(action, params) if(..()) return if(action == "newgame" && gamepaid == 0) playsound(src, 'sound/arcade/steal.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) if(action == "newgame" && gamepaid == 1) gameStatus = "CLAWMACHINE_ON" icon_state = "clawmachine_new_move" instructions = "Guide the claw to the prize you want!" wintick = 0 if(action == "return" && gameStatus == "CLAWMACHINE_END") gameStatus = "CLAWMACHINE_NEW" if(action == "pointless" && wintick < 10) wintick += 1 if(action == "pointless" && wintick >= 10) instructions = "Insert 1 thaler or swipe a card to play!" clawvend() /obj/machinery/computer/arcade/clawmachine/proc/clawvend() /// True to a real claw machine, it's NEARLY impossible to win. winprob += 1 /// Yeah. if(prob(winprob)) /// YEAH. if(!emagged) prizevend() winscreen = "You won!" else if(emagged) gameprice = 1 emagged = 0 winscreen = "You won...?" var/obj/item/grenade/G = new /obj/item/grenade/explosive(get_turf(src)) /// YEAAAAAAAAAAAAAAAAAAH!!!!!!!!!! G.activate() G.throw_at(get_turf(usr),10,10) /// Play stupid games, win stupid prizes. playsound(src, 'sound/arcade/Ori_win.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) winprob = 0 else playsound(src, 'sound/arcade/Ori_fail.ogg', 50, 1, extrarange = -3, falloff = 0.1, ignore_walls = FALSE) winscreen = "Aw, shucks. Try again!" wintick = 0 gamepaid = 0 icon_state = "clawmachine_new" gameStatus = "CLAWMACHINE_END" /obj/machinery/computer/arcade/clawmachine/emag_act(mob/user) if(!emagged) to_chat(user, span_info("You modify the claw of the machine. The next one is sure to win! You just have to pay...")) name = "AlliCo Snag-A-Prize" desc = "Get some goodies, all for you!" instructions = "Swipe a card to play!" winprob = 100 gamepaid = 0 wintick = 0 gameStatus = "CLAWMACHINE_NEW" emagged = 1 return 1 /obj/machinery/computer/arcade/attackby(obj/item/O, mob/user, params) ..() if(istype(O, /obj/item/stack/arcadeticket)) var/obj/item/stack/arcadeticket/T = O var/amount = T.get_amount() if(amount <2) to_chat(user, span_warning("You need 2 tickets to claim a prize!")) return prizevend(user) T.pay_tickets() T.update_icon() O = T to_chat(user, span_notice("You turn in 2 tickets to the [src] and claim a prize!")) return else ..() //You can now actually deconstruct these.