The 3D for 2D Javascript Game Framework (for FE1)

pic of FE javascript framework pic of FE javascript framework pic of FE javascript framework

During the development of early versions of Fragile Equilibrium Phelps was tinkering with a toolkit to build '2D using 3D' games - i.e. games that utilize 3D assets and rendering techniques, but that are essentially 2D in their play and interaction. To explore this he adapted and integrated a number of prior techniques in a javascript/html environment built on top of the Three.js library. The framework is a bit out of date now, but may one day be revived - at the time (2018) it was novel for utilizing worker threads in javascript to provide parallelism for tasks such as collision detection (which was implemented using a modified form of the polygon armature implementation Phelps co-developed with A. Clouter). He also developed some nice debugging tools (as shown above) including an on-screen console, framerate and performance graphics, and input tracker. You can see it working here with 'c' being the commend to bring up the collision overlay, and 'q' being the command to bring up the debug screens. You can also grab it as a .zip file if you want. [5.4MB .zip file]

The XOTIC MAGIC Spell Studios Showcase Laptop

pic of lego computer pic of lego computer pic of lego computer pic of lego computer pic of lego computer

In 2017 Phelps worked with the materials designers at XOTIC PC to help create a showcase laptop for MAGIC Spell Studios that (a) would be capable of running recent work in games and media, and (b) had enough 'cool factor' to attract folks to the booth. The end product surpassed everyone's imagination: a cool arctic white atop a black etched design, the final machine is truly one of a kind. The machine is paired with controllers, mice, headphones, and headsets that match both the unparalleled technical excellence as well as the black-and-white motif of the design.

The Lego Computer

In 2012 or so, Phelps' decided to use some of his early childhood 'space legos' and build a computer case out of them. Eventually this proved unworkable given weight and materials strength constraints, so instead he encased his computer in a custom lego skin, utilizing bits of RIT signage from various offices, custom Lego pieces from Games+Learnign+Society and MAGIC Spell Studios, and other odds and ends of import. The results are below:

pic of lego computer pic of lego computer
pic of lego computer pic of lego computer pic of lego computer pic of lego computer pic of lego computer
pic of lego computer pic of lego computer pic of lego computer

Top row: (left) the final original build, (right) the MAGIC logo in Lego. Middle row: (far left) the addition of title plates, (mid left) a shot mid-construction, (middle) detailing around liquid cooling readouts and Blu-Ray tray, (middle right) the 'console', (middle far right) close up of the 'clean room observation deck' which was a play on the old Intel Inside campaign using Lego space figurines instead of clean suites. Bottom row: (left) original space set serial number, (middle) early construction, (right) the so-called 'wireless adapter'.

Experiments with HTML & Web Technologies

thumbnail for twine hackeThis is a Twine hack to support image maps as a navigation element I wrote as for students in my digital narrative class who wanted to add this functionality to Twine. THere are probably multiple ways to do this, and I took a sort of 'brute force' approach through the 'scope elevation hack' to access the Harlowe engine, as I had already been messing around with this for an auto-save feature in a larger project. See the source for notes and comments.

thumbnail for javascript 3D pageThis is a small Javascript 3D Engine I wrote as an effect for the MAGIC Center website. The basic concept is to track a 'turtle' in 3 dimensions and scale a 2D sprite based on distance. The code is adapted from an old version of the 'turtle engine' that Professor Kurtz and I co-authored in the early 2000s in Director, which was based on Abelsons' turtle geometry concepts from the Media Lab. While the demo doesn't do it justice, you can essentially steer a turtle any-which-way in X/Y/Z coordinate space (more than just loop them around a logo at varying rates which is what I did for the demo).

thumbnail for javascript raytracerHere is a Javascript raytracer that I wrote once upon a time. When I wrote it, it worked in all the browsers of the day. It doesn't anymore, particularly on a Mac. But the point of the thing stands: it was an example to get students in a web design class to stop saying the javascrips wasn't 'real programming' - it's a silly distinction. So I wrote the most ridiculous thing I could think of to write in javascript/DHTML. If you don't want to watch it's blinding speed in calculating ever smaller bits of stylesheet, then check out the screengrab to the left. Or load it up and watch the paint dry...

thumbnail for castle creatorThis is the SVG Castle Creator I wrote as an effect for the original MAGIC Center website. The idea here is essentially to take small pits of pre-formed polygons that look like castles and randomly combine them into larger structures such that you get a different castle every time you get a different page. Whenever you want a new castle just reload the page.

thumbnail for castle creatorThis are the Javascript Snowflakes I wrote as an effect for the old holiday parties at the MAGIC Center. We would project these all over the round walls in the main area, and it would have this wonderful soft glowy effect: a little digital media to make your season that much more merry. Note that when they initialize they kind of all 'fall at once' but stabilize after they run a few seconds.

thumbnail for magic SVG logoThis is an attempt to recreate the MAGIC Center Logo in pure Scalable Vector Graphics (SVG) format. So there are literally no pixels, just the reproduceable code. This allows you to rotate it around and paste it on things or show it in 3D. (Note that the first link is to the 'pure' version in 2D and the second to a page demonstrating a simple rotation).

The Splattershmup Technology Tests

In the early days developing Splattershmup: A Game of Art & Motion (see the gallery for details on that project), there were a lot of individual little tech tests on movement, drawing, weapons, etc. and whether or not any of these things could be "dong" in HTML/Canvas, prior to attempting to integrate them into WebGL. These are some of those early tests. Ironically, mid-way through the development process the team returned to these tests as a goal for how to change direction and get the game we wanted when we weren't getting there with more a more advanced technology stack.

splattershmup early tech tests image

bullet_image Experiment 2 Early drawing with color.
bullet_image Experiment 3 Drawing with blobs and speed.
bullet_image Experiment 4 Drawing with blobs and speed (again).
bullet_image Experiment 5 Drawing on a scrolling canvas.
bullet_image Movement Experiment 1 Early work on player ship movement patterns.
bullet_image Movement Experiment 2 More early work on player ship movement patterns.
bullet_image Movement Experiment 3 Early work 'flipping' on change of direction.
bullet_image Movement Experiment 4 Adding a paint trail to the movement...
bullet_image Movement Experiment 5 Refining the trail with blobs and streaks.
bullet_image Movement Experiment 6 Adding back a scrollable play field.
bullet_image Movement Experiment 7 Grayscale version, playing with line and form.
bullet_image Movement Experiment 8 Mouse targeting while moving with keyboard.
bullet_image Movement Experiment 9 Messing around with colors and line thickness.
bullet_image Paintr Game 1 Early lighting test and scrolling canvas.
bullet_image Paintr Game 2 More messing around with color schemes.
bullet_image Paintr Game 3 Giving some viscosity and history to the paint trail.
bullet_image Paintr Game 4 Early addition of player weapon visuals.
bullet_image Paintr Game 5 Adding in some things to dodge to see if it is interesting...
bullet_image Paintr Game Weapons Test 1 Exploring some enemy weapon types
bullet_image Paintr Game Weapons Test 2 Exploring player beam weapons
bullet_image Paintr Game Weapons Test 3 Exploring player shields
bullet_image Paintr Game Weapons Test 3 Grayscale Same experiment without color
bullet_image Paintr Game Weapons Test 4 Tests updated with basic collision

Old Experiments and Articles on Macromedia Director & Shockwave (2002-2012)

thumbnail for javascript 3D pageABSTRACT: This paper represents an overview of recent work in the Shockwave 3D environment that seeks to implement a ‘scrolling’ game engine in a truly 3D environment. Specifically this engine seeks to adapt to 3D the following 2 axioms that are the basis of optimization in Isometric Game Engines: (a) It is possible to simulate a very large world by using a map of the world-space in memory which does not involve using either images or geometry, and (b) any tile that is more or less identical can use the same geometry and texture map, which further reduces the size needed to represent the world as a whole.

In explanation of the engine presented here this text also provides background information on general scrolling theory and in particular the Isometric perspective as appropriate, along with what is intended to be an informative literature review of recent relevant material. In addition this engine is presented with the background Isometric code-base that was used to design a similar engine in a completely 2D environment, as a point of reference for developers hoping to adapt existing 2D solutions to more robust 3D environments. Collision detection, path-finding algorithms, and path culling are also discussed as appropriate. Both of these engines are presented in a primarily un-optimized form to aid in ease of understanding. Optimized versions of the same engines will be made publicly available. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: The new and expanding interdisciplinary field of artificial life (Alife) is not yet well defined and will mean various things to different people. [2000] states broadly “The term Artificial Life is used to describe research into human-made systems that possess some of the essential properties of life.“ This article details the simulation of one such life-like system implemented using Macromedia Director. Though many of the ideas and techniques relating to alife that are explored in this project have been studied for many years, this project breaks new ground as it uses Director to allow the user to easily visualize the life-like processes occuring within the simulation.

Speciffically, this project aims to explore the visualisation of two components of complex, life-like systems: decision making and evolution. This article contains four main sections, the first describing the simulation interface and it’s components, the second detailing the underlying representation of individual life forms and their environment, the third exploring the mechanism for decison making along with other life like features and the last concerned with the use of a genetic algorithim for the evolution of artificial life. Additionally, possible future explorations for the project are proposed.. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: Project Broadsword is a demonstration implementation of a complete 2D game engine in Shockwave 3D. NOTE: this is not intended to represent a completely playable game. The primary purpose of using S3D in this fashion is to gain access to hardware-accelerated low-level drawing routines, as opposed to using Flash or Director’s standard sprite engine. By using the 3D engine, the demo also gains access to lighting, additive texture blending and integrated 3D models in much the same way as a D3DXSprite class in Direct3D. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: Collision detection is a technique used in several areas related to computer graphics. This paper focuses on collision detection as it relates to sprite-based engines, or more precisely engines that incorporate the use of non-geometric shapes in a two-dimensional view. The theories presented here are applicable to projects produced in Macromedia Director® using the built-in “sprite-based” engine, as well as “Imaging Lingo” and Shockwave-3D® environments (the last of which can operate as a 2D engine when the camera for the scene employs the use of orthographic rather than perspective projection). Of particular interest is the focus on multi-tiered approaches to collision detection, which is especially critical in the Director / Lingo environment due to the fact that Lingo is an interpreted language, and performs like one. Several theories central to computer graphics and collision detection are briefly discussed and dissected, with appropriate references to more complete explanations provided as appropriate. A final implementation of a system using polygon-armatures is then shown as it relates to the development of the authors’ 3D Game Engine. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: There are several instances in arcade games and similar entertainment titles where it is desirable to simulate the expansion of an explosion or similar event (plasma ring, dust cloud, etc). While some modern engines can devote processor cycles to calculating the real-time expansion of a simple cloud, more often than not in web and downloadable games the resources are not available. We describe a reasonable approximation of expansion that seems to stand up to the ‘visibility test’, meaning that users find such effects to be believable within the game world, and richer than a single animated sequence. These techniques are in no way physically accurate to the expansion of a cloud due to explosive force, nor are they based on any physical model whatsoever.

Instead, we propose the use of classical tree algorithms, and describe both Lindenmayer- Systems and random fractal trees as competing methodologies. Using these trees as layout mechanisms has been largely successful in producing visually acceptable results within our own engines, and the techniques should be adaptable to a range of other games and applications. We provide an example of a random fractal tree explosion and the accompanying code-base. L-System explosions are discussed but are not presented as a demonstration due to the wealth of existing materials on their creation. Finally, several basic special effects are explored, as well as adaptation from two-dimensional test environments to Shockwave 3D. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: This article outlines the process of creating a typical ‘maze game’ in which characters move around via the arrow keys, and must navigate passages defined by the walls of the maze. Further, the view that the character is presented with is one based in first person perspective, meaning that they see the maze as if they were in it. This type of system was popularized by adventure games in the early 1980’s like Bard’s Tale, Wizardry, and Might & Magic, and has remained a staple of the genre to this day. This paper is split into two major sections, the first describing the basics of the program, including the relevant data structures and engine setup, and the second linking the underlying engine to the display system producing the illusion of perspective. There is also a future work section describing a few uses for an engine such as this, and links and references to other maze-game implementations.. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: The Deep Ocean Wave Simulator is based upon a technique called “Gerstner Waves,” which is a popular method for wave simulation within the graphics community. Several resources exist for implementing these algorithms, and there is even material available to implement these algorithms on real-time programmable graphics hardware.

The look-and-feel of the ocean water is accomplished primarily through the Ocean_Shader, which is an object built around a standard Shockwave 3D shader. Several layers are composited to compose the final render. As a part of the simulation, a basic vertex color is derived for each point on the mesh in reference to whether that vertex is rising or falling relative to the previous frame. These colors are used as the diffuse base for the mesh. Next, an animated grayscale caustics map is projected onto the mesh from the perspective of the point light in the scene. A second animated caustics map is projected as a reflection map on the surface. Next a base water texture if blended over the scene at a high level of transparency. Finally a foam map is added using additive texture blending. Appropriate values for emissive glow and specular falloff complete the shading. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: “Lightmapping” refers to the concept of pre-rendering a light/shadow map into the texture of an object, and then using this texture instead of, or in addition to, the normal scene lighting. Typically, these maps are done to display shadows, which are notoriously expensive on all but the latest graphics cards (and even then, the typical methods of stencil shadow volumes are exceedingly more expensive than a simple texture map). While the generation of a lightmap can take hours, the performance of the end-user is not affected at all, beyond the slight penalty of additional graphics memory overhead. This technique has been a staple of the games industry for quite some time, and has been extensively documented.

The lightmapper demo here makes use of a relatively new technique called “photon mapping” which simulates the transport of light from surface to surface. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: This article describes the implementation of a fully featured ray-tracing system within the Director programming environment, complete with shadows, reflection, specular highlights, and transparency. Much of this engine is adapted from earlier work by Stephens [1997] with additional feature set and reorganization of code by the author, based primarily on graphics formalisms presented in what now are classic texts by Glassner [1989] and Foley [1987, 1996]. The discussion of formal (and well published) algorithms will be kept to a minimum, except where the particular implementation in the Lingo language is noteworthy. Further, this article assumes basic knowledge of the Lingo programming environment, Object Oriented Programming (OOP) techniques of the Lingo language, and basic mastery of programming constructs such as functions and if/then/else logic.

The article is split into 4 major sections, the first describing the mathematical basics of the raytracer itself, the second concerned with the display mechanism of a render window and the process of color calculation, the third which discusses advanced or additional growth of the algorithms for additional features, and the fourth which talks about sampling mechanisms. Also included is a ‘Future Work’ section describing directions for this project to grow.. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: This article describes the implementation of a simple terrain generation system in Lingo. This material was used to teach the basics of lists and objects at the Rochester Institute of Technology to a graduate class of students pursuing a Multimedia Programming track. As such, while it implements a fully featured 3D Engine, the engine is not optimized to its fullest extent, and the data structures used are the most logical, not necessarily the fastest. Optimization techniques will be discussed at the end of this document, and references given to faster simulation environments written in Lingo.

In sprite of this focus, the engine does perform soundly, offering implementation of traditional computer graphics approaches to rotation, translation, and scale as well as basic lighting. Additionally it offers a trails based solution to overcome the limitation of the upper limit of a thousand sprites in Macromedia’s Director.. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: This article outlines the process of creating a water simulation with semi-realistic properties for use in a typical game engine or other realtime 3D environment. Water simulation is broken down into three major areas: wave propagation, refraction, and reflection. Also discussed are additional solutions for multitexturing and tiling of the textures needed to produce the simulation, as well as discussion of a technique to incorporate a projection into texture space to simulate a cubic container such as a pool or trough without the underlying geometry. An example of the simulation is provided using a Shockwave3D implementation. This file is written in the Lingo language for backwards compatibility only: it is wholly capable of being ported to the Javascript like syntax in DMX 2004. [ PDF DOWNLOAD ]

thumbnail for javascript 3D pageABSTRACT: An article describing the debugging process for the Lingo Lightmapper, and focusing on the creation of visual debugging tools. [ PDF DOWNLOAD ]

Other Things At Andyworld