diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 200b21d441d..43c42ac19bf 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -890,6 +890,15 @@ obj/item/weapon/circuitboard/rdserver
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
+/obj/item/weapon/circuitboard/gameboard
+ name = "circuit board (Virtual Gameboard)"
+ build_path = /obj/machinery/gameboard
+ board_type = "machine"
+ origin_tech = "programming=2"
+ req_components = list(
+ /obj/item/weapon/stock_parts/micro_laser = 1,
+ /obj/item/stack/cable_coil = 3,
+ /obj/item/stack/sheet/glass = 1)
//Selectable mode board, like vending machine boards
/obj/item/weapon/circuitboard/logic_gate
diff --git a/code/game/machinery/gameboard.dm b/code/game/machinery/gameboard.dm
index a3870b40d76..b331930b325 100644
--- a/code/game/machinery/gameboard.dm
+++ b/code/game/machinery/gameboard.dm
@@ -7,6 +7,15 @@
anchored = 1
use_power = 1
+/obj/machinery/gameboard/New()
+ ..()
+ component_parts = list()
+ component_parts += new /obj/item/weapon/circuitboard/gameboard(null)
+ component_parts += new /obj/item/weapon/stock_parts/micro_laser(null)
+ component_parts += new /obj/item/stack/cable_coil(null, 3)
+ component_parts += new /obj/item/stack/sheet/glass(null, 1)
+ RefreshParts()
+
/obj/machinery/gameboard/power_change()
. = ..()
update_icon()
@@ -19,25 +28,52 @@
/obj/machinery/gameboard/attack_hand(mob/user)
. = ..()
- if (.)
+ if(.)
+ return
+ if(src.in_use)
+ to_chat(user, "This gameboard is already in use!")
return
interact(user)
/obj/machinery/gameboard/interact(mob/user)
. = ..()
- if (.)
+ if(.)
return
var/dat
- dat = file2text('html/chess.html')
+ dat = replacetext(file2text('html/chess.html'), "\[hsrc]", "\ref[src]")
var/datum/asset/simple/chess/assets = get_asset_datum(/datum/asset/simple/chess)
assets.send(user)
- var/datum/browser/popup = new(user, "SpessChess", name, 500, 800)
+ var/datum/browser/popup = new(user, "SpessChess", name, 500, 800, src)
popup.set_content(dat)
popup.add_stylesheet("chess.css", 'html/browser/chess.css')
popup.add_script("garbochess.js", 'html/browser/garbochess.js')
- popup.add_script("boardui.js", 'html/browser/boardui.js')
+ //popup.add_script("boardui.js", 'html/browser/boardui.js')
popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js')
popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js')
- popup.open()
\ No newline at end of file
+ popup.set_window_options("titlebar=0")
+ popup.open()
+ user.set_machine(src)
+
+/obj/machinery/gameboard/proc/close_game() //yes, shamelessly copied over from arcade_base
+ in_use = 0
+ for(var/mob/user in viewers(world.view, src)) // I don't know who you are.
+ if(user.client && user.machine == src) // I will look for you,
+ user.unset_machine() // I will find you,
+ user << browse(null, "window=SpessChess") // And I will kill you.
+ return
+
+/obj/machinery/gameboard/Topic(var/href, var/list/href_list)
+ . = ..()
+ var/prize = /obj/item/stack/tickets
+ if (.)
+ return
+
+ if (href_list["checkmate"])
+ visible_message("[src.name] beeps, \"WINNER!\"")
+ new prize(get_turf(src), 80)
+ close_game()
+
+ if (href_list["close"])
+ close_game()
\ No newline at end of file
diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm
index 79a4bb552ae..ac4a426fe08 100644
--- a/code/modules/client/asset_cache.dm
+++ b/code/modules/client/asset_cache.dm
@@ -221,7 +221,8 @@ proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE)
"sprites.png" = 'icons/chess_pieces/sprites.png',
"blank.gif" = 'icons/chess_pieces/blank.gif',
"background.png" = 'nano/images/uiBackground.png',
- "garbochess.js" = 'html/browser/garbochess.js'
+ "garbochess.js" = 'html/browser/garbochess.js',
+ "boardui.js" = 'html/browser/boardui.js'
)
/datum/asset/nanoui
diff --git a/html/browser/boardui.js b/html/browser/boardui.js
index b8e1166e941..68ee667a355 100644
--- a/html/browser/boardui.js
+++ b/html/browser/boardui.js
@@ -29,6 +29,10 @@ function UINewGame() {
}
}
+function UIClose() {
+ window.location = "byond://?src=" + hSrc + ";close=1";
+}
+
function EnsureAnalysisStopped() {
if (g_analyzing && g_backgroundEngine != null) {
g_backgroundEngine.terminate();
@@ -95,7 +99,7 @@ function FinishMove(bestMove, value, timeTaken, ply) {
if (bestMove != null) {
UIPlayMove(bestMove, BuildPVMessage(bestMove, value, timeTaken, ply));
} else {
- alert("Checkmate!");
+ window.location = "byond://?src=" + hSrc + ";checkmate=1";
}
}
diff --git a/html/chess.html b/html/chess.html
index 7bf08d04034..d135be94ac7 100644
--- a/html/chess.html
+++ b/html/chess.html
@@ -1,3 +1,5 @@
+
+