Fetching contributors…
Cannot retrieve contributors at this time
1534 lines (1401 sloc) 52.7 KB


AAA production values all the way through

manage oxygen, battery, ammo

dual analog stick control

z-depth fog, blur, and mask out a binocular circle, lensflare, liquid creatures w tentacles, projection

more maneuverability on ground? indoor locales

descend, lay nuke bomb, rise, detonate

[#A] MODELINE: more subtle handles/menus on the listener bar, show wiki page modeline etc

[#A] clickable project menu on modeline

[#A] clickable buffer id menu

[#A] show object data right-justified when selected

visually indicate which layer something is in

[#B] turn X and Y into separate labeled entries?

doing things that insert a command in the repl?

[#A] select rectangle

[#A] better way of showing multi select

[#A] groups

[#A] graceful rejection of listener eof

[#A] clean up select keybindings

[#A] better listener menu

[#C] better ability to resume if wrong method compiled

Programmable, better documented microxong!

[#C] check out contextl

[#B] fix socket text baseline behavior, also for entries

[#B] good universal arrow/keypad nav in widget fields

[#B] local variable palettes with add-variable etc

[#B] (browse-method … some command from listener

[#A] Navigate to a prototype’s page to make a method or derived block

[#C] allow replacing field as computed method using (defstruct computed-field

[#A] local variables in ROOK defworld are the fields of ROOK and body is initializer?

locked to 0,0 position

[#A] Generic + handle to add message

Keybinding for add-foo in current list SHIFT-F1 etc

[#B] wiki browser: substring match as you type , for choosing what to define methods on (or blocks from)

[#B] scrolling list box

Possibly F1 system/help, F2 browser, F3 browser, F4 browser

[#A] add schemata to more methods

[#A] arbitrary lisp function message wrapper

[#B] improve defresource and call it define-resource

resource-defining block-ui , each

auto finding of new resources (.png, .wav handlers etc) in a dir

[#B] lisp literal variables as targets

[#B] flesh out basic Projects operations dialogs

test save project dialog

test load project dialog

accept pathnames so that you can run a blocky module no matter what the dir name is

recent projects persistent variable

[#B] define-block PALETTE so that there’s a place to pull useful objects from

[#B] Improve error handling in shell

isolate/trap all block errors and display them grayed out with an inspectable error

define-method error shell

better error handling for menu methods

define-method warning shell

redirect messages to message bar. optionally fading notifications with widgets in them

[#B] Universal access

How to handle Translations? keywords in most languages are in English even if comments/variable names are French or Japanese or whatever)


Visual theme-ability for the color-blind and visually-impaired users (larger font, higher contrast etc)

Braille keyboard and speech synthesis integration for blind users

[#B] complete credits file and ensure all docs/license copies in place.

[#B] Adapt line-of-sight code to new collision system

[#B] Adapt pathfinding code to new collision system

[#B] prevent objects leaving quadtree

[#B] Show basic workflow in a video

[#B] lispdoc mode support

[#B] Show how to make worlds programmatically

[#B] Fix able to pull out system menus

[#B] create unified error handling dialog

[#B] explicit pull-up handle instead of auto-pullup

[#B] Pretty sexy black rounded corner notifications

notifications and a “notify” function

smile/frown emoticon status

simple ok notification box

generic question dialog box shortcut function

[#B] buttons for toggle pin,freeze

[#B] hotkey for moving objects down into world

[#B] visually indicate button blink

[#B] better hlist packing

[#B] fix being able to pull out menu components

[#B] basic help

[#C] other keyboard accels like Alt-enter for adding a new message

[#C] keyboard point movement with M-arrow

[#C] hotkey for moving objects up from world



move to

move onto

[#C] glide

change <var> <amount>

set <var> <value>

get <var>

my <var>

turn left

turn right

point at


think <text> <time>

display <image>





move to front

play sound

play music

stop sound

[#C] play note/drum/tempo etc

[#B] defblock event, the script tests events on them

on play

on click

on event





send (to some other object explicitly)




display true and false

use question marks and occasional symbols


[#C] wait until <condition>

stop script

stop all


ask <question>

mouse y

mouse x

mouse down <number>

key down <key>

distance to

common mathematical operations/relations

common logical connectives

concatenate <strings>

[#C] loudness, loud, sensor value

random <min> <max>

list ops: length, append, add, delete, insert


[#B] defblock with (introduce local vars)

[#B] defblock defresource (a stand-in reference to a resource)

defblock let (with drag-off variable refs)

Win32 build tips

[#B] sys menu should remember relative screen loc

[#B] fix being able to pull out pinned items

[#B] F1-F10 select desktop screens, i.e. a flipper with configurability

[#B] UUID filenames for worlds?

[#B] rectangle select for bounding box cut paste

[#B] bounding-box args can go into a function such as create-brick or select-region

[#B] named bounding boxes as world-local vars with blocks to refer to them

[#B] send message to all blocks in selection

[#B] value printer block, evaluates its argument and prints the value

[#B] shortcut macros for defresource foo foo.png auto-typed

[#B] Start unit-testing

[#B] DEFINE-DIALOG with method-buttons

[#C] VAR entry

[#C] project settings dialog for configuring vars like screen-width and resizable etc

[#C] Dialogs for all basic project save/load stuff

[#C] “quit without saving?” dialog

[#C] “empty trash before save?” dialog

[#B] visually indicate clicked send blocks

desktop wall morphic

COOL FEATURE: gnome-do/anything.el style search/operate, for quick access to everything

[#B] file selector dialog (only choosing from project dir at first)

[#B] pin toggle button

[#B] explicit “save” and “compile” buttons

[#B] Bring back old/forms.lisp spreadsheet

compilation options

[#B] allow any font size to be requested


** TODO [#C] naming objects in Talk To Me style

[#C] ephemeral context menu that disappears when you click the background2

[#C] subtree dividers for which class methods came from (union field)

[#C] generic lock/unlock halo?

[#C] 8 vdesktops by default on f1-f8 (switcher showing title)

[#C] Open browsers on multiple vdesktops each visiting own page

[#C] Palette on right side

[#C] Ability to scroll the world with the mouse wheel

[#C] Better explanation of blocks

[#C] don’t change layers when dragging an object

[#C] rewrite prototype explanation to include more clear language, relevant to games, and more

[#C] fix crash on deleting system menu

[#C] Think and review ALL this todo list

[#C] use swank:eval-in-emacs

via SLIME, to issue a command back to emacs to go to a particular buffer location and/or raise the emacs window?

[#C] copyright notice

[#C] Fancy credits

[#C] load all 00- blx files in alphanumeric order

[#C] editor with split screen view and tools mentality (like old/forms.lisp)

[#C] Language tutorial project

[#C] Basic context-sensitive help

[#C] defblock selection

[#C] Undo framework:

[#C] Audio test widget (“left, right”)

[#C] Plus-button decorator for lists to add objects (fields, methods, etc)

[#C] Read me first: F1, then click on any object for help

[#C] animate text box cursor and highlight current line / or show textbox border

[#C] general purpose resizer/scroller decorator thinger

[#C] Allow user to move entries easier via yellow triangle tab

[#C] joystick menu to find connected devices x3

[#C] popup tape-flag/balloons to show you where you are, like hints about M-x window

[#C] list-scroll-decorator

[#C] reasonable emacs configuration for ioforms dev (imenu etc)

[#C] send unfocused input to terminal?

[#C] button to add arguments to + etc (just drop onto block list)

[#C] Show lisp implementation name etc

[#C] explanatory tooltips

[#C] collapse halo handle

[#C] Explicit menu option to turn off debug handling and get a backtrace

[#C] Empty list could display type label?

[#C] Default location for new dialogs/widgets from menu: the command-line listener

[#C] buttons on palette

[#C] incorporate turtle graphics code into base block prototype (for implementing move/turn/point-in-direction

[#C] DEFINITION indicator (three dots in a triangle like Therefore, or an EQUAL?)

[#C] Turn windows-lisp into a cool window widget

[#C] Make textbox recompile as multi-line string so that defmethod docstrings work naturally

[#C] pick up halo handle

[#C] debug halo handle

[#C] “evaluate” and “evaluate and show” buttons

[#C] defblock self

should resources be full-fledged objects?

[#C] color code syntax, not semantics?

[#C] GUI for closures

[#C] add generic xbox controller support for analog bumpers (emulate buttons)

[#C] introduce with-font macro and stop using block-font explicitly

[#C] defface with bold, italic, etc

[#C] Change submenu ellipsis to a nice triangle

[#C] universal (row,column) ref interface for buffers/blocks

basic buffer is a free-roaming space a la squeak

generic proportional and table layouts

world implements buffer interface its own way, with grid

generic buffer similarly

general widget embed layout thing. formatter –> but instead of rich text, it’s all widgets (textboxes + img)

[#C] duplicate objects / selection

[#C] use turtle to program polygon vertices and stuff, like in fluxus

oh, and on windows at least, you’ll need to call %gl:reset-gl-pointers after you set that, when starting the new image you’ve built if you want it to work on windows, you’ll need to set %gl::*gl-get-proc-address* I think sdl has a get-proc-address, or you can bind to the windows one yourself I use #’glfw:get-proc-address , I add “.” and “%CD%” to cffi’s foreign directory search list… (04:20:28 AM) : and just dump them in the folder with the image :) (04:20:40 AM) : and change the OS working directory, too

[#C] general svg image support

Creating a cool game editor/IDE with tight emacs integration, and then growing it into a standalone MIT-Scratch-squared!

[#C] ALPHA issues for PNG images

<|3b|> you want ‘save color values from transparent pixels’, and need to make sure the pixels are white with 0 alpha <|3b|> also, looks like you weren’t passing blend to draw-circle from draw-solid-circle, not that it matters here [23:46]

[#C] automatically generate blocky friend faces with given body/face shapes

[#C] pretty rubberband movement

API Beta checklist

Story ideas for Sanctuary

weaving of spell tapestries relies on the secrets of the weaving guild, who thereby control all magic and society

threat of machines that can weave… punched cards, information age

[#B] Fix shell not responding to window resize properly

[#B] Finish MicroXONG

add documentation in game source

use bouncing ball and glass bricks

finish level generation scheme

replace glass sound with something better

get line-of-sight working again

[#A] Fix key release handling

[#C] later-when checks a condition (whether some other method returns non-nil) (also later-until)

[#C] “later” macros should evaluate the timer forms

XONG 2.0

[#A] Define level generators

Four level types each with an integer difficulty parameter (1-4)

Each level type has a theme plus unique layout and twists

Three music tracks per type.

[#A] Make objects that spawn enemies.

[#B] Fix enemies that shoot before moving disappearing after shot

[#B] fences red/magenta flash

[#B] pick up chips as pac pellets

chip = currency as XP to pick up after kills

[#B] bombs in the level that blow up stuff

[#B] Break bricks to find items

[#C] splitting green turtle bullets

[#C] more crazy corruption worms and stuff

[#C] symmetrical monadic procedural turtle designed aliens with png pieces laid down by turtles.

[#C] Growing mismunch corruption clouds

[#C] universe = quadtree turtle based world gen/management

[#C] Vaults with special layouts

[#C] fictional emails

[#C] can push objects like bombs into place to be shot to destroy bricks

notify tigtesters: cpw, tacoxtreme, increpare


[#B] Fix bad circle artifacts on rounded corner patches on OSX

[#B] Fix crash when error in init file

[#C] Fix crash on wrong color names

[#C] Fix not traversing line break with C-f and C-b



i’m going to learn some of this:

go for a straight space fantasy, skip the arecibo-message angle

the planet is actually a benevolent female intelligence who announces she is dying by taking on too much mass from the surrounding clouds, which will trigger fusion in her core

so she calls on certain people to safely store her memories in bubbles

recursive bubble universes , where you explore her memories and retrieve them

female synth voice?

bring in sanctuary monks?

depth of field mipmapping to color distant objects with atmosphere distance/haze?

recovering ancient memory bubbles

story dialog buttons like Ultima

think about game design / story

smooth scrolling to follow player

smoother speed changes w/analog stick

health bar

hot zone bubbles

collectible bubbles

bubbles that you need to leave flares inside of.

discover which bubbles resonate with each other

drop flares inside those bubbles

[#C] Graph UI vmacro notes

Say you want a nice interface helping a designer to explore various choices of values for two variables—such as a function y=f(x), or perhaps choose a color interactively from a 2D color field (possibly via the mouse) while seeing corresponding R/G/B values update (and vice versa when you edit the RGB values individually.) So we want to make a rectangle with a clickable/draggable point in it, whose X,Y position reflects the values of the variables, plus axis labels.

You could write a “native” widget to do this with native drawing commands, but extending that in various ways (to choosing multiple points, for example) might be harder—whatever the case, if you want to make a variation or improvement on this widget, the “native” coders have to do it.

But, assume for the moment that we’ve got the following prebuilt visual blocks, with argument or “socket” names listed in parentheses after the block name.

sprite(x,y,z,image,…) a sprite with operations such as “move :north 5 :pixels” and “on-click :x 50 :y 29”

world(height,width,sprites,…) a rectangular gameworld where objects can exist and collide. operations are things like draw-background() and add-sprite(sprite, x, y,…)

label(x,y,text) this can be just a specialized sprite() block.

number(value,format,…) an editable number widget.

text(value) editable plaintext string

send(object,message,{arguments}) invoke a method on the OBJECT

set(name,value) locally set the variable named NAME to the value VALUE.

the(name) find the value of the variable named NAME. graphically, this may be abbreviated *NAME, or by color.

my(name) find the value of this object’s NAME field. this is distinct from any local variable with that name.

new(name) create a new block of the type NAME, i.e. new(“number”)

defblock(name,definition) define a new block in terms of other blocks

method(name, block, args) define a method named NAME on the block BLOCK

(As in Scratch, the “sockets” are the places in the block’s onscreen representation that you plug other blocks into.)

I have actually implemented all the prebuilt blocks mentioned, except for the last two—defblock exists as a Lisp macro to define blocks, but there isn’t yet a visual block CALLED defblock that does this visually. And similarly with DEFINE-METHOD. But this isn’t hard. All the basics of what I’ve described above are shown in the youtube demo I put up, I just need to revise the graphics parts now that I moved to OpenGL, plus some layout changes.

Anyway, given these blocks, the rough outline of the visual solution, starting with a blank page:

  1. Add a DEFBLOCK to the blank page.
  2. Type “point-chooser” into the NAME socket of the DEFBLOCK.
  3. Add a blank WORLD to the page. It shows up as a white 256x256 unit square by default, but can be resized, change its background image, and add sprites using various commands.
  4. Add a new SET block. Enter “graph” in the NAME socket.
  5. Drag the blank WORLD into the VALUE socket of the SET block.

    (The idea here is that you now have a WORLD object named “graph”)

  6. Drag the resulting SET block into the DEFINITION part of the


  1. Now you have a DEFBLOCK whose body (so far) creates a blank WORLD and makes it available as the value of the local variable named GRAPH.
  2. By steps similar to steps 4-6 above, create a few more SET blocks:


    Add SEND(THE(GRAPH) ADD THE(SPRITE) 0 0) to the main DEFBLOCK, so that the graph starts out with the interactive sprite dot in it.

Now, It’s probably not hard to make a simple two-column table widget with the variable names on the left and the values on the right, instead of having to make each SET statement individually. But you get the idea—you have something that looks like a dialog box-ish user interface already, with labels on the left, interactive value widgets on the right.

But the graph doesn’t yet actually work, so we must continue.

  1. Add a SEND block. For the OBJECT (i.e recipient) socket, put in THE(POINT), and enter MOVE-TO as the message name. Add THE(X) and THE(Y) as the arguments.

    You now have a block which, when triggered, moves the sprite POINT to the location given by the values of the local variables X and Y.

    Switching to a Lispy notation, we now have:


  2. Add (METHOD UPDATE (THE X)), and as the definition give the SEND block from the previous step.

    And similarly with (METHOD UPDATE (THE Y)).

  3. Add (METHOD CLICK (THE POINT)) and give this as a definition:


  4. It’s clear we could continue on and improve this with label axes and such.
  5. It’s easier for people to change this defblock’s behavior because its logic is expressed entirely in blocks. Well, you don’t want to encourage copy-and-tweak reuse, but on the other hand requiring conceptual coordination between everyone on these frequently-customized editing tools would be an object-librarian’s nightmare. Better to err on the side of people adapting the available “scripts” to their immediate tasks-at-hand.

[#C] (defmacro define

[#C] allow (setf (^field object) value) ??

Re-examine “invader tactics” source and see what blocks are required to reimplement it

re-release “Invader”!

(swank:eval-in-emacs ‘(progn (make-frame-command) nil)) there is swank:eval-in-emacs and slime-eval but you’ve to set slime-enable-evaluate-in-emacs to T

[#C] GAME IDEA: nested puzzle blox? got to drag your guy through various boxes of different sizes and shapes

use recursive collision detection of some kind, to enable boxes to only fit certain things

Archived Entries

[#A] rename RUN to EVALUATE

[#A] Read whitepaper: “Programming as an Experience: The Inspiration for Self”

[#A] fix on-select listener not working to get keystrokes to the prompt

[#A] Fix focus model — first click/drag does not pull, only after mouseup

[#B] fix erroneous double click of last element when clicking (white background)

[#A] Turn on UNICODE key translation

Fix funny unicode characters getting used instead of SDL keys for bindings like RET and BACKSPACE

fix make-block regression on (list 1 2 3) –> null list

fix newline not working in textbox

add style variable with flat rect option?

[#B] use a non-rounded box layout and appearance for program elements, with very thin margins?

retain rounded rectangles for UI/workspace/etc

[#B] em-dash and en-dash (optionally font-metric-dependent) for uniform declarative layout

[#A] Fix context-menu: method schema not being found when it’s inherited

[#A] trigger context menu items with left click, make block with control-click/right-click

[#B] pop up shell on M-x

ALPHA RELEASE with a few working examples

[#B] Use Alt-drag to move objects

[#B] FIX trash drawing children during drag

[#B] Fix the way wiki page resources are stored into separate files…

Fix init file name (use blocky-init.lisp or ~/.blocky)

Fix command-line cursor alignment

Fix being able to drag top-level menus out of menubar

Fix main menu bar title layout(too tight)

[#A] Fix %VALUE not being updated

[#A] halos

trash (top left)


resize (bottom right)



Lightning talk

hello and welcome

brief demo (smalltalk borrow)

copyright notice; trash it with halo

listener with history

lists of numbers and stuff


halos for resizing, menus, references


[#A] Fix listener prompt not laying out after character insertion

[#A] Fix STRING not being set properly without quotes

[#B] Fix ENTER%%ENTRY being called twice because of ON-LOSE-FOCUS

[#B] Fix reference halo dropping new ref in wrong position

[#A] Merge sprites into basic block type

review vmacs.lisp and get basics working

[#A] Fix list %frozen not working

[#A] Fix first drag of object after creating halo causes jump in position

[#A] Fix missing labels on defblock’s child entries (eval going wrong?)

make this into a horizontal layout for the main args, vert as-is for the fields (tighter layout)

[#A] Fix string entry printing with extra quotes

[#A] Fix layout lags, not updating in list after accept

define block

later-do and do-at-time macros evolve to a closure block that sends the supplied method

[#B] Revise and simplify menus, more like Squeak

[#A] complete and test define-method block

[#B] Fix can’t grab define-block via the labels

[#B] Fix window resize issues with disappearing text on MacOSX

[#A] visually indicate lists that can accept

discard halos when object loses focus

[#B] Revise doc.lisp extractor tool

[#B] Write a description of Blocky/morphic model

[#A] change compass-directions to just directions, up down upright downleft… as in dance.lisp

[#A] ensure uniform x y ordering for all math funcs (some old ones use row/col)

[#A] Fix occasional quadtree deletion search assertion failure

update define-visual-macro to accept optional names for inputs and have it auto-make accessor functions

use %%foo for input foo

use symbol-macrolet instead of tree transformation

change %% to %

make (%fieldname thing)

move menu listener into tree

no-background on top menu tree, with Terminal, Menu, Tools closeable thingies

[#A] indicator icons for tree open/closed

show project name

[#C] normalize all is-foo to foo-p

[#A] allow untitled project

fix actually creating dir

[#A] save project dialog

[#A] overwrite protect

evaluating-inputs macro

[#A] Don’t require .blocky suffix for project dir

[#A] create project dialog

make menu work again

easy wrap titlebar

[#A] Fix dialog closing leftovers

[#A] allow empty project

[#A] dragging world object results in moving it within world, not to top layer

fix broken dialog box dismiss

find why window%after-unplug-hook is not called

fix centering of dialogs

[#A] Fix collision issues

[#B] use clos-style ‘foo symbols for prototype names, change NEW from macro to function

[#B] Fix null history crash on uparrow

[#B] merge windows.lisp

[#B] standardize on “ABXY” for the face buttons, LB RB LT RT for the shoulder buttons

blank block

don’t draw background on readonly entry

right click for edit (if there’s only one :methods)

simplify header title line for context menu

renaming message triggers schema lookup / argument change

disable drawing of message label

“new” is a method

allow message stacking

new block macro with:

allow inline editing of message name (via better context popups)

dynamic arguments gui by replacing message block

left-squarey-socket messages (with implicit self?)

“message” becomes simply a way of building a simple (or complex) argument GUI, not a scratch-style block

rework message syntax in a more smalltalk-like direction

Lisp literals

disable browser for now

[#A] socket argument type in schema

[#B] socket labels

[#A] REF simple block reference for “self” “world” and arbitrary ones

[#A] <— assignment method << or “is”

make list of things to show in video

show lisp data and printer

show copyright

show phrases

show toggle-orientation

show color and resize

show resizing of color while in parent

turtle var turtle square

make video

[#B] tighten up message layout

make variables use does-not-understand

[#A] review smalltalk-elements

[#A] review byob

[#A] CONTROL 1 place message 2 place phrase 3 place var 4 place literal

place message at pointer

[#A] add new objects in the foreground

[#A] fix Control keybindings

hitting Lambda handle for a var ref

[#C] right click on world objects to bring them back into top layer

[#A] blocks a la carte, some methods can be visual some can be textual as needed

[#A] Restore basic collision detection functionality

ephemeral white title-less (yet nested) popup menus

Drag entire top-level block via right-drag

self reference

[#A] field references as pseudo-messages

fix key events not working in deserialized worlds

[#A] being able to replace/augment any arguments entry with a labeled socket

refactor initialize arguments to allow individual updating





multiple select

move as a group

cut, copy, paste, paste-here

copy paste player

show browsing methods with imenu


update with C-c C-c

VISIT level, editing of wiki page

return to other level

paste other world into terminal

Working map editor; maps are wiki page/worlds

[#B] highly visible error block notifications to right-of browser

choose simple syntax for wiki page name scoping which allows default to project package

[#B] selecting multiple objects

[#B] the clipboard is a world, paste/duplicate