Killer Engine for Remixing Games Jesse Himmelstein - - PowerPoint PPT Presentation

killer engine for remixing games jesse himmelstein cri
SMART_READER_LITE
LIVE PREVIEW

Killer Engine for Remixing Games Jesse Himmelstein - - PowerPoint PPT Presentation

Killer Engine for Remixing Games Jesse Himmelstein CRI-Paris New game engine, with different goals Made for remixing games and mashups


slide-1
SLIDE 1

Killer ¡Engine ¡for ¡Remixing ¡Games ¡ ¡ ¡ Jesse ¡Himmelstein ¡ CRI-­‑Paris ¡

slide-2
SLIDE 2

¡ New ¡game ¡engine, ¡with ¡different ¡goals ¡ ¡ Made ¡for ¡remixing ¡games ¡and ¡mashups ¡ ¡ Electronics-­‑inspired ¡visual ¡programming ¡ ¡ Excellent ¡debugging ¡and ¡live ¡coding ¡tools ¡ ¡ All ¡done ¡in ¡the ¡browser ¡ ¡

slide-3
SLIDE 3

¡ Interdisciplinary ¡science ¡and ¡engineering ¡

Higher ¡education ¡ School ¡and ¡after-­‑school ¡programs ¡

slide-4
SLIDE 4

¡ Education ¡technology ¡

CoIdea ¡ Knownodes ¡

slide-5
SLIDE 5

¡ Scientific ¡and ¡Educational ¡Games ¡

Archimedes' ¡Escape ¡ Leap ¡ Weizmann ¡Institute ¡

slide-6
SLIDE 6

¡ Citizen ¡Science ¡Games ¡

FoldIt ¡ Univ ¡of ¡Washington ¡ Fraxinus ¡ The ¡Sainsbury ¡Laboratory ¡

slide-7
SLIDE 7

A ¡scientist ¡should ¡just ¡be ¡able ¡to ¡take ¡part ¡of ¡

  • ne ¡game, ¡mix ¡it ¡with ¡another ¡one, ¡and ¡

then ¡modify ¡it ¡to ¡make ¡a ¡new ¡one ¡ That’s ¡impossible ¡ Why? ¡

MY ¡BOSS ¡ ME ¡

slide-8
SLIDE 8

¡ We ¡have: ¡

A ¡kabillion ¡libraries ¡ A ¡billion ¡game ¡engines ¡ A ¡million ¡programming ¡languages ¡

Classes ¡ Unit ¡tests ¡ Entity ¡Component ¡Systems ¡ Blocks ¡ Distributed ¡Version ¡Control ¡ Virtual ¡machines ¡ Functions ¡ End ¡to ¡end ¡tests ¡ Metaclasses ¡

slide-9
SLIDE 9
slide-10
SLIDE 10

¡ Interleaving ¡-­‑> ¡incomprehension ¡ ¡ Lessons ¡ ¡ § Avoid ¡tangling ¡ § Leave ¡data ¡alone ¡ § Sane ¡abstractions ¡for ¡state ¡and ¡time ¡

Rich ¡Hickey ¡ "Simple ¡made ¡Easy" ¡

slide-11
SLIDE 11

¡ Breadboard ¡ § Connect ¡anything ¡ § Measure ¡anywhere ¡ § Replace ¡everything ¡

slide-12
SLIDE 12

¡ Been ¡done ¡before… ¡

Data ¡flow ¡ flowhub ¡

slide-13
SLIDE 13

Unreal ¡Kismet ¡

slide-14
SLIDE 14

Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Memory ¡ ¡ <data> ¡ ¡ <data> ¡ ¡ <data> ¡ ¡

  • 1. Memory ¡-­‑> ¡Chips ¡
  • 2. Chips ¡compute ¡
  • 3. Chips ¡-­‑> ¡Memory ¡

constant ¡ in ¡

  • ut ¡
slide-15
SLIDE 15

Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Memory ¡ ¡ <data> ¡ ¡ <data> ¡ ¡ <data> ¡ ¡

  • 1. IO ¡& ¡Memory ¡-­‑> ¡Chips ¡
  • 2. Chips ¡compute ¡
  • 3. Chips ¡-­‑> ¡IO ¡& ¡Memory ¡

IO ¡ ¡ mouse ¡ ¡ keyboard ¡ ¡ graphics ¡ ¡

slide-16
SLIDE 16

Move ¡ ¡ speed ¡ ¡ position ¡ Memory ¡ ¡ speed ¡ ¡ position ¡ ¡ ¡ IO ¡ ¡ mouse ¡ ¡ keyboard ¡ ¡ graphics ¡ ¡ Draw ¡ ¡ position ¡ ¡ shape ¡ ¡

slide-17
SLIDE 17

Emitter ¡ Switch ¡ Processor ¡ Splitter ¡

slide-18
SLIDE 18

Switch ¡ ¡ <pin> ¡ ¡ <pin> ¡ Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡ Chip ¡ ¡ <pin> ¡ ¡ <pin> ¡

slide-19
SLIDE 19

¡ “What ¡would ¡have ¡happened” ¡ ¡ “Mute” ¡chips ¡ ¡ Find ¡chips ¡from ¡memory ¡or ¡IO ¡ ¡ Test ¡each ¡chip ¡in ¡isolation ¡

Brett ¡Victor ¡ ”Inventing ¡on ¡Principle” ¡

slide-20
SLIDE 20
slide-21
SLIDE 21

¡ User ¡code ¡is ¡dangerous ¡ ¡ Contain ¡within ¡iframe ¡

with ¡sandbox ¡attribute ¡

¡ Messages ¡replace ¡

function ¡calls ¡ ¡

Parent ¡page ¡-­‑ ¡Editor ¡ Sandbox ¡-­‑ ¡Game ¡exuecution ¡ ¡ iFrame ¡ ¡ ¡sandbox="allow-­‑scripts" ¡

slide-22
SLIDE 22

¡ Two ¡chips ¡modifying ¡the ¡same ¡array/object? ¡ ¡ Like ¡version ¡control ¡ ¡

  • 1. Create ¡patches ¡from ¡a ¡common ¡ancestor ¡
  • 2. Merge ¡patches ¡

¡ Some ¡merges ¡are ¡hard ¡ § LCS ¡(Longest ¡Common ¡Subsequence) ¡ ¡ § Operational ¡transforms ¡

slide-23
SLIDE 23

¡ Track ¡all ¡past ¡state ¡ ¡ Cloning ¡data ¡takes ¡space! ¡ ¡ Better ¡solutions ¡ § Store ¡mostly ¡patches ¡

Full ¡ Patch ¡ Patch ¡ Patch ¡ Patch ¡ Full ¡

slide-24
SLIDE 24

¡ Persistant ¡data ¡structures ¡ § Applies ¡to ¡lists, ¡trees, ¡hash ¡maps, ¡etc. ¡

1 ¡ 2 ¡ 3 ¡ 4 ¡ 5 ¡

List ¡A ¡ [1, ¡2, ¡3, ¡4] ¡ ¡ List ¡B ¡ [5, ¡2, ¡3, ¡4] ¡

slide-25
SLIDE 25

¡ Treat ¡IO ¡as ¡a ¡buffer ¡instead ¡of ¡a ¡set ¡of ¡methods ¡ ¡ Input ¡

§ Mouse ¡(getMousePos() ¡-­‑> ¡mouse.position) ¡ § Keyboard ¡(isKeyDown() ¡-­‑> ¡keyboard.keysDown) ¡

¡ Output ¡

§ Canvas ¡ ¡

ctx.fillStyle ¡= ¡ ¡”black”; ¡ ctx.fillRect(0, ¡0, ¡100, ¡100); ¡ canvas.shapes ¡= ¡[{ ¡ ¡ ¡fillStyle: ¡“black”, ¡ ¡position: ¡[0, ¡0], ¡ ¡size: ¡[100, ¡100] ¡ ¡ }]; ¡ ¡

slide-26
SLIDE 26

¡ Input/Output ¡ § HTML ¡using ¡Rivets.js ¡ ¡

▪ Template ¡+ ¡values ¡ ▪ 2-­‑way ¡data ¡binding ¡

¡

§ HTTP ¡

▪ Data ¡replaces ¡events ¡and ¡callbacks! ¡

slide-27
SLIDE 27
slide-28
SLIDE 28

¡ New ¡version ¡landing ¡Feb ¡14th ¡ ¡ Looking ¡for ¡new ¡and ¡different ¡games ¡ ¡

¡

¡ Developers ¡and ¡designers ¡always ¡welcome! ¡ § Lots ¡of ¡new ¡features ¡to ¡work ¡on ¡

slide-29
SLIDE 29

Paris ¡Game ¡Club ¡-­‑ ¡Making, ¡playing, ¡learning ¡ ¡ ¡

¡ Invited ¡speakers ¡ ¡ Micro-­‑game ¡jams ¡ ¡ Videos ¡+ ¡agenda ¡at ¡ ¡

gamelier.org ¡ ¡

slide-30
SLIDE 30

github.com/CyberCRI/RedWire ¡ @RedWireIO ¡ ¡ jesse.himmelstein@parisdescartes.fr ¡ ¡ +JesseHimmelstein ¡ @himmelattack ¡