/obj/machinery/computer/arcade/
name = "random arcade"
desc = "random arcade machine"
icon = 'icons/obj/computer.dmi'
icon_state = "arcade"
icon_keyboard = null
icon_screen = "invaders"
light_color = "#00FF00"
var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2,
/obj/item/toy/AI = 2,
/obj/item/clothing/under/syndicate/tacticool = 2,
/obj/item/toy/blink = 2,
/obj/item/weapon/storage/box/fakesyndiesuit = 2,
/obj/item/toy/sword = 2,
/obj/item/toy/gun = 2,
/obj/item/toy/crossbow = 2,
/obj/item/weapon/storage/fancy/crayons = 2,
/obj/item/toy/spinningtoy = 2,
/obj/item/toy/crossbow/tommygun = 2,
/obj/item/toy/prize/ripley = 1,
/obj/item/toy/prize/fireripley = 1,
/obj/item/toy/prize/deathripley = 1,
/obj/item/toy/prize/gygax = 1,
/obj/item/toy/prize/durand = 1,
/obj/item/toy/prize/honk = 1,
/obj/item/toy/prize/marauder = 1,
/obj/item/toy/prize/seraph = 1,
/obj/item/toy/prize/mauler = 1,
/obj/item/toy/prize/odysseus = 1,
/obj/item/toy/prize/phazon = 1,
/obj/item/toy/nuke = 2,
/obj/item/toy/cards/deck = 2,
/obj/item/toy/carpplushie = 2,
/obj/item/toy/minimeteor = 2,
/obj/item/toy/redbutton = 2,
/obj/item/toy/owl = 2,
/obj/item/toy/griffin = 2,
/obj/item/clothing/head/blob = 2,
/obj/item/weapon/id_decal/gold = 2,
/obj/item/weapon/id_decal/silver = 2,
/obj/item/weapon/id_decal/prisoner = 2,
/obj/item/weapon/id_decal/centcom = 2,
/obj/item/weapon/id_decal/emag = 2,
/obj/item/weapon/spellbook/oneuse/fake_gib = 2,
/obj/item/toy/foamblade = 2,
/obj/item/toy/flash = 2,
/obj/item/toy/minigibber = 2
)
/obj/machinery/computer/arcade/power_change()
..()
if(!(stat & (BROKEN|NOPOWER)))
set_light(2)
else
set_light(0)
/obj/machinery/computer/arcade/New()
..()
var/choice = pick(typesof(/obj/machinery/computer/arcade) - /obj/machinery/computer/arcade)
new choice(loc)
qdel(src)
/obj/machinery/computer/arcade/proc/prizevend()
if(!contents.len)
var/prizeselect = pickweight(prizes)
new prizeselect(src.loc)
if(istype(prizeselect, /obj/item/toy/gun)) //Ammo comes with the gun
new /obj/item/toy/ammo/gun(src.loc)
else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit
new /obj/item/clothing/head/syndicatefake(src.loc)
else
var/atom/movable/prize = pick(contents)
prize.loc = src.loc
/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(0,2)
for(num_of_prizes; num_of_prizes > 0; num_of_prizes--)
empprize = pickweight(prizes)
new empprize(src.loc)
..(severity)
/obj/machinery/computer/arcade/battle
name = "arcade machine"
desc = "Does not support Pinball."
icon = 'icons/obj/computer.dmi'
icon_state = "arcade"
circuit = /obj/item/weapon/circuitboard/arcade
var/enemy_name = "Space Villian"
var/temp = "Winners Don't Use Spacedrugs" //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 = 0
var/blocked = 0 //Player cannot attack/heal while set
var/turtle = 0
/obj/machinery/computer/arcade/battle/New()
var/name_action
var/name_part1
var/name_part2
name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ")
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")
src.enemy_name = replacetext((name_part1 + name_part2), "the ", "")
src.name = (name_action + name_part1 + name_part2)
/obj/machinery/computer/arcade/battle/attack_hand(mob/user as mob)
if(..())
return
user.set_machine(src)
var/dat = "Close"
dat += "
[src.enemy_name]
"
dat += "
[src.temp]
"
dat += "
Health: [src.player_hp] | Magic: [src.player_mp] | Enemy Health: [src.enemy_hp]"
if (src.gameover)
dat += "New Game"
else
dat += "Attack | "
dat += "Heal | "
dat += "Recharge Power"
dat += ""
//user << browse(dat, "window=arcade")
//onclose(user, "arcade")
var/datum/browser/popup = new(user, "arcade", "Space Villian 2000")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/arcade/battle/Topic(href, href_list)
if(..())
return 1
if(usr.machine != src)
return 0
if (!src.blocked && !src.gameover)
if (href_list["attack"])
src.blocked = 1
var/attackamt = rand(2,6)
src.temp = "You attack for [attackamt] damage!"
src.updateUsrDialog()
if(turtle > 0)
turtle--
sleep(10)
src.enemy_hp -= attackamt
src.arcade_action()
else if (href_list["heal"])
src.blocked = 1
var/pointamt = rand(1,3)
var/healamt = rand(6,8)
src.temp = "You use [pointamt] magic to heal for [healamt] damage!"
src.updateUsrDialog()
turtle++
sleep(10)
src.player_mp -= pointamt
src.player_hp += healamt
src.blocked = 1
src.updateUsrDialog()
src.arcade_action()
else if (href_list["charge"])
src.blocked = 1
var/chargeamt = rand(4,7)
src.temp = "You regain [chargeamt] points"
src.player_mp += chargeamt
if(turtle > 0)
turtle--
src.updateUsrDialog()
sleep(10)
src.arcade_action()
if (href_list["close"])
usr.unset_machine()
usr << browse(null, "window=arcade")
else if (href_list["newgame"]) //Reset everything
temp = "New Round"
player_hp = 30
player_mp = 10
enemy_hp = 45
enemy_mp = 20
gameover = 0
turtle = 0
if(emagged)
src.New()
emagged = 0
src.add_fingerprint(usr)
src.updateUsrDialog()
return
/obj/machinery/computer/arcade/battle/proc/arcade_action()
if ((src.enemy_mp <= 0) || (src.enemy_hp <= 0))
if(!gameover)
src.gameover = 1
src.temp = "[src.enemy_name] has fallen! Rejoice!"
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.")
src.New()
emagged = 0
else
feedback_inc("arcade_win_normal")
prizevend()
else if (emagged && (turtle >= 4))
var/boomamt = rand(5,10)
src.temp = "[src.enemy_name] throws a bomb, exploding you for [boomamt] damage!"
src.player_hp -= boomamt
else if ((src.enemy_mp <= 5) && (prob(70)))
var/stealamt = rand(2,3)
src.temp = "[src.enemy_name] steals [stealamt] of your power!"
src.player_mp -= stealamt
src.updateUsrDialog()
if (src.player_mp <= 0)
src.gameover = 1
sleep(10)
src.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 ((src.enemy_hp <= 10) && (src.enemy_mp > 4))
src.temp = "[src.enemy_name] heals for 4 health!"
src.enemy_hp += 4
src.enemy_mp -= 4
else
var/attackamt = rand(3,6)
src.temp = "[src.enemy_name] attacks for [attackamt] damage!"
src.player_hp -= attackamt
if ((src.player_mp <= 0) || (src.player_hp <= 0))
src.gameover = 1
src.temp = "You have been crushed! GAME OVER"
if(emagged)
feedback_inc("arcade_loss_hp_emagged")
usr.gib()
else
feedback_inc("arcade_loss_hp_normal")
src.blocked = 0
return
/obj/machinery/computer/arcade/battle/emag_act(user as mob)
if(!emagged)
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"
src.updateUsrDialog()
/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 = 'icons/obj/computer.dmi'
icon_state = "arcade"
circuit = /obj/item/weapon/circuitboard/arcade/orion_trail
var/engine = 0
var/hull = 0
var/electronics = 0
var/food = 80
var/fuel = 60
var/turns = 4
var/playing = 0
var/gameover = 0
var/alive = 4
var/eventdat = null
var/event = null
var/list/settlers = list("Harry","Larry","Bob")
var/list/events = list("Raiders" = 3,
"Interstellar Flux" = 1,
"Illness" = 3,
"Breakdown" = 2,
"Malfunction" = 2,
"Collision" = 1
)
var/list/stops = list()
var/list/stopblurbs = list()
/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 miss-guided judgement.",
"The nearest star system to Sol, in ages past it stood as a reminder of the boundaries of sub-light travel, now it is a low-population sanctuary for adventureres 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 it's planetary bodies in warmth and radiation.",
"Tau Ceti Beta has recently become a way-point for colonists headed towards Orion. There are many ships and makeshift stations in the viscinity.",
"Sensors indicate a black-hole's gravitational field is affecting the region of space we were headed through. We could stay the course, but risk being over-come by it's 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 colonist's success.",
"You have made it to Orion! Congratulations! Your crew is one of the few to start a new foothold for man-kind!"
)
/obj/machinery/computer/arcade/orion_trail/proc/newgame()
// Set names of settlers in crew
settlers = list()
var/choice = null
for(var/i = 1; i <= 3; i++)
if(prob(50))
choice = pick(first_names_male)
else
choice = pick(first_names_female)
settlers += choice
settlers += "[usr]"
// Re-set items to defaults
engine = 1
hull = 1
electronics = 1
food = 80
fuel = 60
alive = 4
turns = 1
event = null
playing = 1
gameover = 0
/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user as mob)
if(fuel <= 0 || food <=0 || settlers.len == 0)
gameover = 1
event = null
user.set_machine(src)
var/dat = ""
if(gameover)
dat = "Game Over
"
dat += "Like many before you, your crew never made it to Orion, lost to space...
Forever."
if(settlers.len == 0)
dat += "
Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy."
else
if(food <= 0)
dat += "
You ran out of food and starved."
if(fuel <= 0)
dat += "
You ran out of fuel, and drift, slowly, into a star."
dat += "
OK...
"
else if(event)
dat = eventdat
else if(playing)
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 += "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")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/computer/arcade/orion_trail/Topic(href, href_list)
if(..())
return 1
if(usr.machine != src)
return 0
if(href_list["close"])
usr.unset_machine()
usr << browse(null, "window=arcade")
else if (href_list["continue"]) //Continue your travels
if(turns >= 9)
win()
else if(turns == 2)
if(prob(30))
event = "Collision"
event()
food -= alive*2
fuel -= 5
turns += 1
else
food -= alive*2
fuel -= 5
turns += 1
if(prob(75))
event = pickweight(events)
event()
else
food -= alive*2
fuel -= 5
turns += 1
if(prob(75))
event = pickweight(events)
event()
else if(href_list["newgame"]) //Reset everything
newgame()
else if(href_list["menu"]) //back to the main menu
playing = 0
event = null
gameover = 0
food = 80
fuel = 60
settlers = list("Harry","Larry","Bob")
else if(href_list["slow"]) //slow down
food -= alive*2
fuel -= 5
event = null
else if(href_list["pastblack"]) //slow down
food -= (alive*2)*3
fuel -= 15
turns += 1
event = null
else if(href_list["useengine"]) //use parts
engine -= 1
event = null
else if(href_list["useelec"]) //use parts
electronics -= 1
event = null
else if(href_list["usehull"]) //use parts
hull -= 1
event = null
else if(href_list["wait"]) //wait 3 days
food -= (alive*2)*3
event = null
else if(href_list["keepspeed"]) //keep speed
if(prob(75))
event = "Breakdown"
event()
else
event = null
else if(href_list["blackhole"]) //keep speed past a black hole
if(prob(75))
event = "BlackHole"
event()
else
event = null
turns += 1
else if(href_list["holedeath"])
gameover = 1
event = null
else if(href_list["eventclose"]) //end an event
event = null
src.add_fingerprint(usr)
src.updateUsrDialog()
return
/obj/machinery/computer/arcade/orion_trail/proc/event()
eventdat = "[event]
"
if(event == "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 = pick_n_take(settlers)
eventdat += "
[deadname] tried to fight back but was killed."
alive -= 1
else
eventdat += "
Fortunately you fended them off without any trouble."
eventdat += "Continue
"
eventdat += "Close
"
else if(event == "Interstellar 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
"
else if(event == "Illness")
eventdat += "A deadly illness has been contracted!"
var/deadname = pick_n_take(settlers)
eventdat += "
[deadname] was killed by the disease."
alive -= 1
eventdat += "Continue
"
eventdat += "Close
"
else if(event == "Breakdown")
eventdat += "Oh no! The engine has broken down!"
eventdat += "
You can repair it with an engine part, or you can make reapirs for 3 days."
if(engine >= 1)
eventdat += "Use PartWait
"
else
eventdat += "Wait
"
eventdat += "Close
"
else if(event == "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
"
else if(event == "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 = pick_n_take(settlers)
eventdat += "
[deadname] was killed by rapid depressurization."
alive -= 1
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
"
else if(event == "BlackHole")
eventdat += "You were swept away into the black hole."
eventdat += "Oh...
"
eventdat += "Close
"
settlers = list()
/obj/machinery/computer/arcade/orion_trail/proc/win()
playing = 0
turns = 0
prizevend()