Next: video on the EpL report.
- August, 2024
- Added "sort capture" to the "remove/add items" select-list of procedures.
This sorts the pucks in the capture and renames pucks, springs, and joints with an increasing index.
This provides a nomenclature cleanup, indexes starting at #1 and consecutive.
- July, 2024
- Enlisted shot-lock (ctrl-shift-L keys) and shot-speeds (z key) in captures.
- June, 2024
- Added cloud storage of captures:
post (P button),
update (P button with shift key down),
delete (P button with shift and ctrl keys down),
a subset list for the current demo index (? button),
and a full listing (? button with shift key down).
Click the links in the list table to download and run a capture (cloud storage facilitated by a Cloudflare worker and their KV storage).
- In Bipartisan Hoops, all but the last shot are now limited to 2
minutes. There's a one-minute warning, then a message at two-minutes indicating
that one last shot can be taken.
- Added an "edit" column to the leaderboard report. This tracks
editing events during each game. A hover tip in the column header
explains the single-letter codes that indicate event types. This is
intended to encourage hacking (editor use facilitating higher scores)
in the time-limited Bipartisan Hoops and the other games too.
- "Align selected" now also applies to the dimensional attributes of pucks and walls.
- May, 2024
- New civics-lesson version of Bipartisan Hoops:
- Players are party mascots with associated historical facts
about the two parties (and one for independents).
- Hired a
better referee. So there are now restrictions on dropping shots
into the basket (goal tending) and being too close to the
basket (too easy).
- Added scoring for trick shots: successful
shots where shooting is to the right (away from the basket).
- Added scoring bonus for "fling" shots (if ctrl-shift-lock is
toggled off). This is simple cursor-spring shooting without
projectile forecasts.
- Submit "noname" in the chat field to go back to being anonymous.
- April, 2024
- Nickname and team-name checks (for similar names already in use)
on the leaderboard and the multiplayer server. Caution messages displayed with color
background in the chat history.
- March, 2024
-
Reference page on mouse, keyboard, and touchscreen usage.
- Team feature for game play: Team name is (optionally) indicated by adding it to the nickname with an @ sign.
Example: bill@green, indicates bill is on the green team.
Team scores are reported to the leaderboard. Friendly fire is prevented between team members.
- Leaderboard query feature: The host can query (from the multiplayer chat field) the leaderboard results for a game
without playing it. Example: lb::7.a
- Updated the network "help" command that runs from the multiplayer chat field (must be connected).
- January, 2024
- December, 2023
- EpL and Speed reports
- Demos illustrating inelastic collisions:
4c.inelastic,
5b,
5b.two, and (5b.four, 5b.five, and 5b.six inside the page fold).
- Closed-form predictions of final state:
These are spreadsheet-like calculators for the 5b, 5b.two, 5b.four, 5b.six, and 5a.orbitingOnSpring demos. After making a final-state
prediction, the engine can be run using the calculator's "run" button and its row of initial conditions.
- History of page-level links:
With the "Ctrl" and "Shift" keys down, use the left/right arrow keys to step through the history of page links that have
been clicked (the up-arrow key jumps to the top of the page).
- The position of attachment and multi-select points update so as to scale well with puck-dimensional edits.
Demos where this helps (i.e. ones with non-COM attachments) include 5a, 5e, and 5f.
Used this feature in making this demo:
5a.threeAndOne
- September, 2023
- An Android update revealed a need for change in the Two-Thumbs
virtual game pad... While functionally the same, it now establishes
state based on events, then repaints the whole canvas each frame
using an animation loop. Previously, sub-section repaints were done
directly in response to events.
- August, 2023
- June, 2023
- Cookie manager on pages with embedded videos.
- May, 2023
- Resolved conflict between box2dweb and versions 3 and 4 of
socket.io.
- March, 2023
- January, 2023
- Network connections to the server are now timed to warn at 20
minutes and shutdown after 40 minutes of idle time (no chat).
- help command from chat field
- November, 2022
- under remove/add items
- shift capture (center a small-canvas capture on a larger
canvas)
- added an hsl object for supporting demos that step through
the HSL color space. To try this, paste "hsl(50, 100%, 0%)" into
a puck's color attribute. Run the modified capture and then
recapture to see the hsl object that gets created for the puck.
In it you can edit the color-step size (default is 2).
- added S & L buttons to save and load captures to the local file
system.
- videos
- twinkle toes
- swingy springs
- October, 2022
- added under remove/add items
- toggle display of SCM (System Center of Mass)
- toggle
display of MSC (Multi-Select Center)
- bullets from pucks (make
all human-client pucks use cannibalization)
- modify
capture (use JSON, like {"color":"yellow"}, in the chat field,
to modifiy the objects in the capture as indicate by the
multi-select.
- videos
- internal shake-up
- cannibalization
- September, 2022
- added under remove/add items
- chain, worm, and springy-chain
- arc selected
- videos
- tears and infinity
- dandelion parachute
- the rack
- tight spots
- August, 2022
- Upgraded Monkey Hunt and Bipartisan Hoops to
be playable games, including connections to the leaderboard. These
projectile games can be fully controlled from a touch screen. A
second-finger touch toggles the fine-moves for precise aiming.
- separate module for Monkey Hunt
- July, 2022
- videos:
- path of the opposition
- the nature of it
- transform
- "Run" button: an alternate way to play a capture
- A capture
can be immediately taken after starting a demo (before the engine
alters the state) by clicking the "Run" button
while holding the shift key down. This can be used to get an updated
copy of an existing capture. This is also a good way to
take an un-altered (0th frame) capture of the "a" versions of the
demos. - separate module for capture and restore
- separate module
for leader board
- June, 2022
- videos:
- ball and chain
- five sides to this story
- under remove/add items:
- add joint limits
- toggle joint limits
- add fixed-length
spring
- separate module for jello madness game
- May, 2022
- Added reporting of pendulum and spring periods (and their ratio)
when the spring is selected in demo 5c.
- shift-alt-s as first step
to produce a capture without softconstraints key
- shift-s now
reports the spring nature of the springs in multiselect.
- Added
features for quantifying the lag of rendered cursor on canvas
relative to system cursor. User must have "lagtest" in chat field
before checking the local-cursor box under multiplayer. This coupled
with p (stop the game loop) and alt-p (inhibit erasing) provide info
on mouse input delay.
- Added feature to automatically restart the
game loop after actions, such as changing to full-screen, that
affect cursor lag.
- "Tab" key steps through a menu for multiselect
operations. For the spring and revolute options in the tab menu, the
"enter" key steps through, and gives focus to individual springs
and revolute joints.
- Monkey Hunt demo, 4e.
- For non-colliding
objects, the top object (drawn last), is always the one that is
cursor selected.
- April, 2022
- Spring report is displayed (including stretch amount), for a selected spring.
- Tab key presents
delete options for multi-selected compound objects.
- Alt-c now
works in two steps: the first alt-c acts to center the selection
point in the middle of the narrowest dimension, the second alt-c
acts to push the selection point out to the nearest end.
- Added
collision detection, shot logic, and corresponding screen comments
to the bipartisan hoops game. See bpHoops.js module.
- videos:
- shock absorber
- a bit of a drag
- someday
- Extracted Puck Popper code to a module: puckPopper.js.
- March, 2022
- videos:
- Pharaoh's not happy
- some restitution please
- it's
almost a party (multi-select)
- pool-shot forecasts
- bullets and the
stepper
- projectile forecast
- bipartisan hoops (application
of the projectile forecast)
- ghost on
host (playing directly with mouse and keyboard)
- January, 2022
- videos
- ghost ball pool (shots aimed from a cell-phone
client)
- grab a puck (a first video on interacting)
- demo
5g
on the wild west...
- new options under the "remove/add items"
control
- "add pyramid" and "add stack"
- "toggle", "reveal", and "hide" bullet options for converting pucks to bullets to avoid
penetration anomalies with high-speed shots.
- add
non-colliding puck grid (7x7)
- alt-c
keyboard shortcut
- when
doing drag rotation to aim and shoot a rectangular puck, this
centers the cursor-spring attachment point along the narrowest
dimension of the puck
- centers multi-select marks along the
narrowest dimension of rectangular pucks
- projectile-path visualization for aiming projectiles (when
shooting with gravity on)
- basketball demo
(a new game). Press the "v" key to view full screen. Read
the on-screen help on how to shoot.
- November, 2021
- Added alignment feature for objects in the multi-select group. See "align selected" under "remove/add items." Alternately, use alt-l to run it.
- October, 2021
- Applied revolute joint in double-compound pendulum (see
5f). Added feature (drawDuringPE attribute) to inhibit drawing
of a specific puck while in pause-erase mode (alt-p).
- Added fixed-length variation of the distance joint. Applied it
for Newton's cradle demos (see demo 5h).
- July, 2021
- "remove/add items" select control for clearing off the canvas
and then adding stuff: springs, pucks, walls, pins etc.
- Added "Joints" prototype in Constructors and Prototypes module.
- Added "revolute joint" and "chain" to the "remove/add items" select
control. Also see demo 5e.
- April, 2021
- Touch-screen play of ghost-ball pool for the host computer,
useful for playing on a tablet.
- Finemove toggle, the b key,
useful for disengaging the ghost-ball from target balls, or turning
finemoves on/off in other demos.
- Shot history stepper, alt-b and
alt-n, step you back and forth through the shot history.
- Refined
the ghost-ball visualization to include indications for:
- non-ideal (non pool-ball) collisions,
- glancing angles,
- around-other-objects shots,
- post-collision path lines.
- Moved ghost-ball code into a module, ghostBall.js.
- February, 2021
- Finemoves algorithm added for Ghost-Ball pool game. When the
ghostball touches an object ball or cushion, the resolution of the
mouse movement is increased by a factor of about 7. This improves
aiming accuracy. After disengaging from the target, ghostball
movement reverts to the normal 1 to 1.
- January, 2021
- Several new network commands (enter in the chat) for the host:
- rr: room report
- dcir:
disconnect all clients in the room
- ping:p2p-uNNN:
ping test along P2P path to user uNNN
- dbrtc:on
or dbrtc:off: turn on/off debug
logging for WebRTC in the browser console (ctrl-shift-i)
- Mapping function for Ghost Ball pool that effectively stretches
out the surface of a cellphone (controlling shots) making it easier
to reach the table cushions
- Changed behavior in Ghost-Ball when
two clients are addressing the same ball. First player
addressing the ball now maintains control.
- Put code for virtual
game pad into separate module.
- September, 2020
- Enlisted the Ghost-Ball Pool game into the leaderboard reporting
and added game-rule governance and feedback that runs during game
play.
- July, 2020
- Dandelion demo: 5d. Demonstration of
image rotation and dissimilar drag characteristics in a compound
object. Also makes a good object to launch into the air (with
gravity on) using the pool-shot feature.
- June, 2020
- Added ghost-ball feature for cue-ball shots off the cushion.
- Touch-screen features added for ghost-ball pool. You can aim and
shoot from your cell phone (use the desktop client from your phone
to connect to a host computer).
- May, 2020
- Pool-shot feature for aiming and shooting a puck:
Try some pool shots in demo
3d,
Ghost-Ball Pool. Instructions are displayed at the beginning of the
game and in the left panel. - Updated the network client to support the features of Ghost-Ball
Pool. Nice!
- April, 2020
- Video walkthrough page and
playlist including
videos on the cell phone interface (virtual game pad) for Puck
Popper.
- The combination of the "alt" and "p" keys toggle the
canvas eraser on/off. The eraser normally precedes each frame. When
toggled off, some drawing features, such as for springs, are
inhibited.
- March, 2020
- Client names (or nicknames) are displayed above the client
pucks, at game start, and when "?" key or client-color square is
touched on the virtual game pad.
- CV checkbox for optionally
displaying the drone pucks as Coronaviruses.
- February, 2020
- Adapted the client page to run in both desktop mode:
triquence.org/client.html, and mobile-friendly mode:
triquence.org/client.html?m.
The mobile version offers the most direct path the Two Thumbs game
pad. The desktop version supports all the streaming and
cursor-related options, and yes, can be used from a cell phone.
- Virtual game pad changes:
- Reversed the jet control so that the touch point sets the
direction of the nose cone, not the jet tube.
- Revised the "scope" control to have a sweep rate indicator.
The result of the sweeping action, the tube angle, is now
transmitted from the host to the client, and rendered there. The
gun and jet tube angles are synced with the host when Puck
Popper is started or when the Two Thumbs game pad is started or
reset.
- The color square on the Two Thumbs game pad now
indicates, with a black dot, whether the client has a puck or
not.
- January, 2020
- Split the main code module into three parts. Links to the new
code modules are in the tour (first topic in the outline).
- November, 2019
- "Canvas" button enlarges the canvas to match the size and aspect
ratio of the screen (view port). When using this button, the
perimeter fence (in the physics world) is enlarged to match the
dimensions of the larger canvas.
- July, 2019
- Added the PiEngine class to gwModule.js. This is a javascript
version of the algorithm for calculating pi digits
originally written in Python. The
1d and 1e demos use PiEngine.
- June, 2019
- Demo 1c presents an unusual method for calculating the first two digits of pi (31) using two elastically colliding pucks.
- Removed the page folds in the left panel. Added an outline of topics
at the top. Should be more context sensitive now and better
summarized by search engines.
- May, 2019
- For demo 2, changed how wave speed is specified, now in units of
pixels per frame (see propSpeed_ppf_px in captures). This gives
consistent rendering, independent of device frame rate.
- Demo
2c makes use of
a new option to specify the object speed in Mach number.
- Demo
2e incorporates hsl( hue, saturation%, lightness%) color
for the pulse rings. The hue level is incremented 3 points between
each pulse ring. The saturation and lightness levels can be edited
in the capture.
- Added a second video to the
Perfect Kiss topic (on the Python page). This demonstrates the
reversibility of the Perfect Kiss algorithm.
- April, 2019
- YouTube video
on the keyboard interface for playing Puck Popper.
- Refined the capture process
to produce a more concise and editable JSON recording.
- The
"Reverse" button flips the velocity and reverses the rotation rate
of each puck.
- Enlisted the Jello Madness game into the
leaderboard reporting. Try untangling 6a and
6d. How does your time
compare?
- Changed the local launching point for the drone bullets
to originate from the center of the drone pucks (not the end of
their guns). This is more compatible with the algorithm that
calculates the leading angle need to anticipate the movement of the
targets. So the drones are even sharper shooters now.
- Changed the
starting puck position and velocity, for the first four network
players in Puck Popper, to be consistent, not random as before. This
provides a more repeatable game. These starting states are editable
in the startingPosAndVels array of the capture.
- Command to
generate a new drone and navigation pin at the location of the local
cursor: depress the shift, d, and p
keys together (shift-d-p).
- March, 2019
- Added new variations of Puck Popper. Click on the #8 button,
then click on the letters in the "Plus" row under the button
cluster. Versions "d", and "e" have no drag force on the
host puck. "c" and "d" have elastic collisions (restitution of 1.0).
"e" applies no recoil when firing bullets and so it's good for
demonstrating the target-leading algorithm.
- Now inhibiting collisions between the bullets, themselves, and their
host. This cleans up the game play somewhat and avoids an anomaly in
the physics engine when shooting at walls at very close range.
- Code revisions:
- Allow the host (local) puck to be treated (edited and
captured) separately from the pucks of the network clients.
Network client pucks are instantiated as copies of the host puck
if it is available.
- Changed treatment of NPC (drone) pucks
that are taken off the navigation pins. The free-floating NPC
pucks are drawn without a jet tube or jet flame.
- Holding the control key down, displays the
position and elasticity properties of a single selected puck.
- December, 2018
- The new "Friendly fire" checkbox (visible when the "Multiplayer"
control is checked) controls whether bullets from real Puck Popper
players can affect the health of other real players. If unchecked,
human bullets can only hit the drones. In this mode multiple players
act as a team to scrub out those nasty drones. Nice.
- November, 2018
- New parameters in the leaderboard records to better characterize
the various ways the games can be played.
- Toggle link (at the end
of the title row for the report) for viewing the two leaderboard
tables (time and score), one at a time.
- The "More" row beneath
the button cluster. For some demos, this row will contain links to
variations on the primary version of the demo.
- September, 2018
- Secured the site (https).
- August, 2018
- Changes in the code:
Revised the Spring class to include the functionality that was in
the client-cursor springs (originally called them cursor strings).
Springs can now be attached at off-center points on pucks (turn off
"Select COM" to establish off-center selection points).
Client-cursor springs are implemented using the revised Spring
class.
- July, 2018
- Leaderboard report: the top 15 scores get reported below the
game score table. The report consists of two query results, one
table sorted by score, the other by time. The backend of the
leaderboard, a Google sheet, is queried depending on the version of
the Puck Popper game (e.g. demo #7 results are reported separate
from #8). Custom versions of Puck Popper, made using the capture
feature, are reported separately as distinguished by a unique
identifier in the capture. Game results where the mouse was used (in
the Canvas area) or the drones are "sleeping", are filtered out of
the reports.
- Editor features to adjust the surface-friction (+/-
keys) and drag (</> keys) of
selected pucks.
- Puck finder: the question-mark key
identifies your puck in demos #7 and #8.
- Pinned-spring
constraints in demo #9 will gently return the three balls to the
triangle orientation. The hidden springs and pins are now visible if
the "Edit walls & pins" feature is enabled.
- A way to enter a
nickname without connecting to the multiplayer server. From the host
page, type the nickname into the chat field,
before starting demos #7 or #8. That nickname will be used when
reporting to the leaderboard.
- June, 2018
- Added scoring features to Puck Popper (demos 7 and 8):
- +200 for last puck-player standing
- +100 for popping
client and drone pucks
- +50 for popping a regular puck
- +10 for hitting a puck with one of your bullets
- -10 for
getting hit by a bullet
- -1 for shooting a bullet that expires
before it hits another puck
- A score summary for each player is reported in the chat panel at
the end of the game (one puck left).
- April, 2018
- Puck popping sound effect.
- Scope control:
Located in the bottom right corner of the virtual gamepad, this
control precisely rotates the pea shooter and shoots from a fixed
position. Touching the center block stops the movement of your puck,
and then shoots without recoil (and no rotation). The surrounding
two blocks rotate the shooter tube. The rotation rate is reduced as
the touch point approaches the center block.
- March, 2018
- Virtual gamepad:
The client interface has been extended to include support for
touch-screen devices. Yes, cell-phone play for Puck Popper, demos 7
and 8. This is accessed via the Two-Thumbs button on the client.
First, from your phone, connect a client page to the host, then
touch the Two-Thumbs button. - Full-screen button (bottom right):
Nice for viewing the demos with nothing but the animation canvas
visible. This works best in Chrome. Once in fullscreen mode, use
ctrl +/- to scale up or down. When hosting, this is the best way to
present a Puck Popper game to a group of viewers.
- Prior to connecting, put a nickname is in the chat field.
This helps to keep track of who's in a multiplayer Puck Popper game.
- January, 2018
- Demo #9: additive color mixing
- Option to put startup info in the URL (the query string). For
example: triquence.org/?7b starts the b version of demo #7,
triquence.org/?8
starts demo #8. This allows the user to post a link to a specific
demo. Related to this, improved the startup process: framerate is
sampled on a blank canvas for about one second.
- Group copy and
paste with multi-select (ctrl-v replicates the selected group or
single object
to the cursor position). A spring-only paste is now done with
ctrl-s.
- Drone copying. Copy operations directed at a drone puck
now replicate the drone client. The copy will simply float (not
navigate) unless you copy and paste a navigation spring from another
drone. See discussion under demo #7.
- December, 2017
- Moved most of the editor's rotation features to be part of
multi-select. Automated the editors use of the COM feature.
- Use "o" key for single stepping and repeatedly (hold "o" key
down) slow stepping the animation (use "p" to resume normal
animation).
- Option to model springs with soft constrains. This is
Erin Catto's spring modeling approach (distance joints) in Box2D.
Please refer to the discussion for demo #5.
- Editing option for
modifying the spring-damping and puck-restitution coefficients:
select object, then use page-up or page-down keys.
- Group-rotation for the editor's multi-select (select multiple
objects, then hold control and shift key down, then mouse drag).
- November, 2017
- Run-it links in the demo topics (follow the more-on-the-demos link
on the main page). The run-it links
automatically feed a capture to the engine and then run it.
- Multi-body drag. Hold control key down, then click and drag to
move all bodies in the multi-select group.
- Automatic setting of the engine's timestep.
- Frame stepper (button)
when animation is paused.
- Box selector for multi-select. Hold alt key down, then click and
drag.
- October, 2017
- P2P video stream from host to client (canvas to video element). This facilitates multiuser play outside the boundaries
of a single physical room.
- September, 2017
- WebRTC peer-to-peer
(P2P) layer added to the socket.io functionality (note that shift-p
acts to toggle P2P on/off from the client page).
- August, 2017
- Ray-casting drones for demos #7 and #8
- Guns lead (aim ahead) to compensate for target-object motion.
- Drone navigation forces render as jets.
- July, 2017
- Modified the spring object to allow for storage on two pins (see
demo #4).
- June, 2017
- Multi-object selection functionality for the editor
- More
editor features for puck objects (resizing)
- An example of a
JSON
capture of a modified version of demo #6
- May, 2017
- Some editor features now apply to
non-wall objects: drag pins, delete pins and pucks, change angle and
rotation rate for pucks.
- April, 2017
- A control for setting the physics-engine timestep. This supports
users running displays at higher (than 60hz) refresh rates.
- March, 2017
- Demo #8 introduces a basic wall editor and a capture feature to
build (and save) terrain for Puck Popper battles.
- A tangle timer for demo #6 (Jello Madness). This coupled with
the capture feature makes for a playable game.
- Sound-field
simulation for demo #2
- February, 2017
- Demo #7 brings in some game-feature objects: jets, guns,
shields, and health indicators. This is similar to the Puck Popper
game from the
tutorial page and helps
to demonstrate receiving keyboard events from the multiplayer clients.
- January, 2017
- Multiplayer features for the demo page
- Client-to-host communication using node.js and socket.io
- Feature for testing latency (ping-to-server and
ping-to-host)
- Chat feature
- A discussion page on the use
of these features and instructions for installing a local node
server
- November, 2016
- A Spring prototype to supplement Box2dWeb
- Modeling of spring-damper systems to determine forces
exerted on objects
- Functionality for representing (drawing) the springs as they
stretch and get thinner
- Demos 5 and 6
- October, 2016
- A start at translating the final topic from the
tutorial page for use in a
web browser
- JavaScript code using a Revealing Module design pattern with
prototypes
- Box2dWeb physics engine
- An initial framework for rendering to the HTML5 Canvas
- Drawing functions for walls, circular and rectangular
pucks, cursor springs
- DOM controls for changing parameters and starting the demos
- A vector prototype
- A Client prototype with cursor-spring functionality for
selecting and moving objects
- Modeling of simple cursor-spring forces and object drag
resistance
- Cursor-spring selection options for center-of-mass (COM)
or other local points on an object
- March, 2016
- Purchased timetocode.org from Google domains. This domain name
seemed about right for me and nicely represents the collision between
my retirement and my interest in coding. (note: in 2024 changed domains, from timetocode to
triquence)
- Started hosting at 50webs and added two subdomains:
- Moved the Physics Engine Tutorial (PET) content from gustavus.edu to the
pet subdomain
- Moved my Waconia weather-gleaner and charting site to inside my
local network at home. The site was most recently hosted on my office
computer at Gustavus. Sorry, it's only for me now. It has
sentimental value as it was a starting point of sorts that got me going
as a developer at PNNL. In a sense I have archived it at
waconia. Some
sample charts from my local network get
pushed out there every hour. I even put together some
installation
instructions. It's a tricky install. Let me know if you get it up and
running on your local network.