SlideShare a Scribd company logo
Making (console)
games in the
browser
MIKE ACTON (INSOMNIAC GAMES)
TWITTER @MIKE_ACTON
Making (console) games in the browser
Started
2010…
Why?
Why?
Native
Vs
Browser
1. Inevitability
1. Inevitability
2. UX and UI Research
1. Inevitability
2. UX and UI Research
3. Forcing function
(data separation)
…but
mostly a
bet on the
future
How do
we use
the
browser?
Making (console) games in the browser
Making (console) games in the browser
Chrome only
--harmony (ECMAScript 6)
Chrome only
--harmony (ECMAScript 6)
:(
Model Editor
Vault
Anim Driver Editor
Build Monitor
Particle Editor
Material Editor
Script Editor
Run Game
Curve Editor
cinematic2
cinematic2
game view (it *is* the game – running all update code)
cinematic2
the outliner – shows everything in the cinematic
cinematic2
sound panel – search / create favorites / audition events
cinematic2
properties panel (for currently selected thing)
cinematic2
timeline and playback control
cinematic2
shots list (can be edited and rearranged)
cinematic2
tracks list
performance editor
performance editor 3d view
performance editor clips in the performance set
performance editor animation palette (expressions + gestures)
performance editor phoneme -> viseme map
performance editor timeline
performance editor phonemes (automatically generated)
performance editor expressions
performance editor gestures
What libs
do we
use?
What libs do we use?
 Jquery (less and less)
What libs do we use?
 Jquery (less and less)
 Angular.js (directives good; complexity/obfuscation bad)
What libs do we use?
 Jquery (less and less)
 Angular.js (directives good; complexity/obfuscation bad)
 Q.js (good)
What libs do we use?
 Jquery (less and less)
 Angular.js (directives good; complexity/obfuscation bad)
 Q.js (good)
 Require.js (good)
What libs do we use?
 Jquery (less and less)
 Angular.js (directives good; complexity/obfuscation bad)
 Q.js (good)
 Require.js (good)
 Bootstrap (OK)
What libs do we use?
 Jquery (less and less)
 Angular.js (directives good; complexity/obfuscation bad)
 Q.js (good)
 Require.js (good)
 Bootstrap (OK)
 WebGL? (no)
How do
we put it
together?
Making (console) games in the browser
Making (console) games in the browser
LunaServer
 Native Application (C++) – mongoose server
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
 Session management
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
 Session management
 Undo/Redo
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
 Session management
 Undo/Redo
 File/Asset save/edit/revert
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
 Session management
 Undo/Redo
 File/Asset save/edit/revert
 System and configuration information
LunaServer
 Native Application (C++) – mongoose server
 RESTful (*ish) API
 File I/O
 P4 integration
 Session management
 Undo/Redo
 File/Asset save/edit/revert
 System and configuration information
 Crash proofing
Making (console) games in the browser
LunaServer (JSON)
LunaServer (JSON)
LunaServer (JSON)
DDLC
 Compiler -> JSON, C++, etc.
DDLC
 Compiler -> JSON, C++, etc.
 Node.js script (ejs)
DDLC
 Compiler -> JSON, C++, etc.
 Node.js script (ejs)
 (used to be native application)
DDLC
 Compiler -> JSON, C++, etc.
 Node.js script (ejs)
 (used to be native application)
 ddl.js (captures communication to lunaserver)
Vault
Delta JSON
Delta JSON
Delta JSON
Delta JSON
(undo/redo)
Model Editor
Data change -> ddl.js
-> delta json
/api/save/asset/{assetType}/{assetId}
Current state, undo queue
Canonical asset change
Picks up change
(triggers builder)
Making (console) games in the browser
Requests native built file
Game
(as client)
Polls for changes
What’s
newer?
Node.js scripts
Making (console) games in the browser
Shared code between
node.js and browser
Node.js scripts
Game
(JsonRPC)
Node.js scripts
Game
(JsonRPC)
Game
(RESTful server)
Node.js scripts
Game
(JsonRPC)
Game
(RESTful server)
Node.js scripts
Game
(JsonRPC)
Game
(RESTful server)
Game
(as client)
FAQ#1
File-backed vs DB assets
FAQ#2
WebSockets
UI (javascript) guidelines
UI (javascript) guidelines
Custom controls
DDL (specific)
Custom controls
DDL (specific)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source) Control (Widget)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source) Control (Widget)
Custom Control
Custom Control Group (Manager)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source) Control (Widget)
Custom Control
Custom Control Group (Manager)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source) Control (Widget)
Custom Control
Custom Control Group (Manager)
ddl.js
Custom rules specific to data (constraints)
Custom controls
DDL (specific) Control (Source) Control (Widget)
Custom Control
Custom Control Group (Manager)
ddl.js
Custom rules specific to data (constraints)
Custom controls
Node.js
UI (javascript) guidelines
Editing DOM
Editing DOM
 #1 Minimize editing DOM!
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
 Minimize jquery
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
 Minimize jquery
 jQuery accesses the DOM all the time
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
 Minimize jquery
 jQuery accesses the DOM all the time
 Store selector results if you must use a selector
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
 Minimize jquery
 jQuery accesses the DOM all the time
 Store selector results if you must use a selector
 Minimize angular
Editing DOM
 #1 Minimize editing DOM!
 Group DOM edits into AnimationFrame callback
 Minimize jquery
 jQuery accesses the DOM all the time
 Store selector results if you must use a selector
 Minimize angular
 When does it create the DOM?
FAQ#3
Control Libraries?
UI (javascript) guidelines
Complexity
UI Complexity / Cost
Don’t
underestimate
it!
2010…2014+
Q&A

More Related Content

PPTX
Killzone Shadow Fall: Threading the Entity Update on PS4
DOCX
José de La Mar
PPTX
Anti-Aliasing Methods in CryENGINE 3
PPT
Crysis Next-Gen Effects (GDC 2008)
PPSX
Dx11 performancereloaded
PPTX
#GDC15 Great Management of Technical Leads
PPTX
Great management of technical leads
PPT
Game tools as a webapp (2011)
Killzone Shadow Fall: Threading the Entity Update on PS4
José de La Mar
Anti-Aliasing Methods in CryENGINE 3
Crysis Next-Gen Effects (GDC 2008)
Dx11 performancereloaded
#GDC15 Great Management of Technical Leads
Great management of technical leads
Game tools as a webapp (2011)

Viewers also liked (13)

PDF
Rebooting the insomniac tools pax dev12
PPSX
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
PDF
Promises look into the async future
PDF
Aim higher GCAP11 keynote
PPTX
Gdc2013 macton usability_is_not_random
PPTX
Cinematic quests
PPTX
#GDC15 Code Clinic
PPSX
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
PPTX
Data oriented design and c++
PDF
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
PPTX
W3C Automotive 표준 개발 현황
PPTX
Optimizing the Graphics Pipeline with Compute, GDC 2016
PPTX
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Rebooting the insomniac tools pax dev12
Vertex Shader Tricks by Bill Bilodeau - AMD at GDC14
Promises look into the async future
Aim higher GCAP11 keynote
Gdc2013 macton usability_is_not_random
Cinematic quests
#GDC15 Code Clinic
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Data oriented design and c++
DX12 & Vulkan: Dawn of a New Generation of Graphics APIs
W3C Automotive 표준 개발 현황
Optimizing the Graphics Pipeline with Compute, GDC 2016
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...
Ad

Similar to Making (console) games in the browser (20)

PDF
Hybrid Apps (Native + Web) using WebKit
PDF
Hybrid Apps (Native + Web) using WebKit
ODP
Web program-peformance-optimization
PDF
Hybrid Apps (Native + Web) via QtWebKit
KEY
Optimization of modern web applications
PDF
Intro to HTML5
PDF
APIs, now and in the future
PDF
Introduction to QtWebKit
ODP
Javascript Update May 2013
PPTX
Web browser - How web browsers work?
PDF
Are We Fast Yet? HTML & Javascript Performance - UtahJS
PDF
HTML5 and Google Chrome - DevFest09
PDF
Debugging Web Apps on Real Mobile Devices
PDF
New Features Coming in Browsers (RIT '09)
PPTX
JavaScript on the Desktop
PDF
Intro to-html-backbone-angular
PPTX
Mobile gotcha
KEY
HTML5 and the Future of Apps
KEY
PDF
Performance Improvements In Browsers
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
Web program-peformance-optimization
Hybrid Apps (Native + Web) via QtWebKit
Optimization of modern web applications
Intro to HTML5
APIs, now and in the future
Introduction to QtWebKit
Javascript Update May 2013
Web browser - How web browsers work?
Are We Fast Yet? HTML & Javascript Performance - UtahJS
HTML5 and Google Chrome - DevFest09
Debugging Web Apps on Real Mobile Devices
New Features Coming in Browsers (RIT '09)
JavaScript on the Desktop
Intro to-html-backbone-angular
Mobile gotcha
HTML5 and the Future of Apps
Performance Improvements In Browsers
Ad

Recently uploaded (20)

PPTX
providenetworksystemadministration.pptxhnnhgcbdjckk
PPTX
Other Dance Forms - G10 MAPEH Reporting.pptx
DOCX
Lambutchi Calin Claudiu had a discussion with the Buddha about the restructur...
PDF
Gess1025.pdfdadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PDF
Ct.pdffffffffffffffffffffffffffffffffffff
PPTX
BULAN K3 NASIONAL PowerPt Templates.pptx
PPTX
Safety_Pharmacology_Tier2_Edibbbbbbbbbbbbbbbable.pptx
PDF
Songlyrics.net-website for lyrics song download
DOCX
Elisabeth de Pot, the Witch of Flanders .
PDF
How Old Radio Shows in the 1940s and 1950s Helped Ella Fitzgerald Grow.pdf
PDF
Between the Reels and the Revolution Enzo Zelocchi’s Unscripted Path Through ...
PPTX
What Makes an Entertainment App Addictive?
PDF
WKA #29: "FALLING FOR CUPID" TRANSCRIPT.pdf
PDF
EVs U-5 ONE SHOT Notes_c49f9e68-5eac-4201-bf86-b314ef5930ba.pdf
PPTX
genderandsexuality.pptxjjjjjjjjjjjjjjjjjjjj
PDF
What is Rotoscoping Best Software for Rotoscoping in 2025.pdf
PPTX
the-solar-system.pptxxxxxxxxxxxxxxxxxxxx
PDF
A New Kind of Director for a New Kind of World Why Enzo Zelocchi Matters More...
PDF
Download FL Studio Crack Latest version 2025
PDF
Rakshabandhan – Celebrating the Bond of Siblings - by Meenakshi Khakat
providenetworksystemadministration.pptxhnnhgcbdjckk
Other Dance Forms - G10 MAPEH Reporting.pptx
Lambutchi Calin Claudiu had a discussion with the Buddha about the restructur...
Gess1025.pdfdadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Ct.pdffffffffffffffffffffffffffffffffffff
BULAN K3 NASIONAL PowerPt Templates.pptx
Safety_Pharmacology_Tier2_Edibbbbbbbbbbbbbbbable.pptx
Songlyrics.net-website for lyrics song download
Elisabeth de Pot, the Witch of Flanders .
How Old Radio Shows in the 1940s and 1950s Helped Ella Fitzgerald Grow.pdf
Between the Reels and the Revolution Enzo Zelocchi’s Unscripted Path Through ...
What Makes an Entertainment App Addictive?
WKA #29: "FALLING FOR CUPID" TRANSCRIPT.pdf
EVs U-5 ONE SHOT Notes_c49f9e68-5eac-4201-bf86-b314ef5930ba.pdf
genderandsexuality.pptxjjjjjjjjjjjjjjjjjjjj
What is Rotoscoping Best Software for Rotoscoping in 2025.pdf
the-solar-system.pptxxxxxxxxxxxxxxxxxxxx
A New Kind of Director for a New Kind of World Why Enzo Zelocchi Matters More...
Download FL Studio Crack Latest version 2025
Rakshabandhan – Celebrating the Bond of Siblings - by Meenakshi Khakat

Making (console) games in the browser

Editor's Notes

  • #24: Repeat for additional keys
  • #25: here’s the new cinematics editor
  • #26: game view (it *is* the game – running all update code)
  • #27: the outliner – similar to the scene editor – shows everything in the cinematic
  • #28: sound panel (shows all sound banks and sound events) – search / create favorites / audition events
  • #29: properties panel (for currently selected thing)
  • #30: timeline and playback controll
  • #31: shots list (can be edited and rearranged)
  • #32: tracks list
  • #33: use performance editor to set up the performance (will be integrated into cinematics editor next project)
  • #34: 3d view
  • #35: clips in the performance set
  • #36: animation palette (expressions + gestures)
  • #37: phoneme -> viseme map
  • #38: timeline
  • #39: phonemes (automatically generated)
  • #40: expressions
  • #41: gestures