[W10PDaP] on the adm gallery

The most evident and most flattering component of the exhibition, in my opinion, is the visual continuity. You have lines of text running across the walls, lines of rope trailing across the rooms, lines of wires scattered all around.


As I’ve mentioned before, I think it’s quite evident that the overall Singapore Biennale theme is intentionally designed to be broad and vague, such that practically any artwork can justifiably fit within it. So, I won’t bother going into depth on how it fits the theme: besides, the time and/or movement-based link between “future of islands” and “every step in the right direction” is pretty clear.

Tomorrow Is An Island, as inland, a sin land is an artist-led project that speculates on the future of islands, deep time, the fate of ‘crisis’ as a frame of our predictions and conceptions of future time, and the exchanges between bodies and cities. The title deploys a sequence of anagrams that rescrambles with each new phrase, suggesting that the ways in which the next moment could retain recognizable components of the present but to disruptive effect. (link)

Nevertheless, the existence of the secondary theme distinguishes this exhibition from that of Gillman Barracks. This secondary theme of “Tomorrow Is An Island, as inland, a sinland”, is exemplified by two characteristics.

Firstly, the artists are all of “islands”. In this context, the two islands are Singapore and Switzerland. While a bit of a stretch, it’s justifiable when considering how small both are in comparison to nations like China or the United States.

Secondly, many of the works focus on systems, sequences, the like, as exampled by the shifting anagrams. The “visual continuity of lines” play into this. All the works also play with this in various forms, be it the shadows cast onto the floor, the shifting sediments, the flow of sounds and videos, so on.

For example, an (un?)intended (mis?)placing of the projector causes lines to manifest on walls.

Of course, this consolidated theme is possible only because of the small size of the exhibition. A bigger exhibition would inevitably have to resort to a generalised theme, to be able to cover everything.


The most eye-catching work, for me, was Forest Tales and Emerald Fictions by Monica Ursina Jäger.

An artist-in-residence with NTU, her presented work focuses on the “shifting topography of Singapore and Southern Malaysia”. Consequently, much of it involves urban infrastructure and natural scenery. Here’re videos: the first has the accompanying audio (from headphones), and the second, details close up:

Regardless, its attractiveness is due very much to the curation, where this work is complete and isolated. The leftmost area feels lacking, where I was there for the opening night, and thus can’t disassociate the “absence of the performance” from an “absence in the space”. The first area is slightly awkward, where it seems to contain “everything which doesn’t fit in the other rooms”.

As such, the singular space provided to this work stands out, where it feels intimate: there’s a seating area, the screens don’t feel overwhelmingly magnificent, the space is dark. Also, the setup is interesting, where it’s not even screens, and the throw distance is exceedingly small:

For me, the biggest takeaway is probably on how limited resources can actually be a boon. After all, it’s easier to consolidate with a smaller pool, and easier to know what you can’t do. At the same time, however, one must be aware of where they ought to allocate resources, such as in building walls and shelves, than trying outright to aim for complete minimisation.

[W10IfD] a final post for assignment 2

← Previous Post ||

Again, you can generate a copy here!

* if it doesn’t seem to be working after about 5 seconds of the page have loaded, try refreshing.

Variations, since it will always return a slightly different result:

(Please see previous posts for concepts, drafts, and processes.)

It also takes an ungodly amount of time to explain the code, so I’ve made a video:


After watching videos on how to code jumping, I realised there’s a lot more depth to jumping than I thought: for example, it can mean a world of difference if you allow the player to control movement while in air, or not. So, I decided to focus on jumping exclusively.

It’s playable-ish up to the 3rd or so bug, but I haven’t built the maps for the rest. I also haven’t actually tied the bug effects to the picking up of bugs; in this video, it’s literally just pressing the relevant key when you get the bug.

I’ve coded in all the required variables, except for dropping through platforms (i haven’t figured that part out yet, so watch out, prof, i’m coming to your inbox). Here’s another video to show the effects:

Issues which I have not figured out how to solve:

  • Aforementioned dropping through platforms
    • I can’t seem to find a suitable code which works with what I have, and me trying to hack at it doesn’t really work
  • Jumping lines when dialogue is ongoing (e.g. even though there’s 5 lines, only the first line shows)
    • Apparently tied to number of other dialogue box-using objects; when I reduce to only 1 Person, the dialogue plays fine
  • If I disable movement while the dialogue box is open, if the player is moving when dialogue is triggered, they will slide on forever until the dialogue box closes
    • I have.. No solution. It’s definitely related to the playerMovement() function, but I don’t even know why it would happen.


I know I had a timeline, but I realise I greatly underestimated how important sprites are: the sizing will definitely be off once I implement them. Of the aforementioned issues, too, the only really significant one for now is the 1st one. So, I’ve decided to change it slightly:

I can see quite a few issues cropping up, like a) the sizing going haywire, b) the block tiling for platforms failing, c) failing to reference the correct bug, despawn it properly, or change the correct value, or d) the fact that my current Player has a really fun spin, to the extent that there’s no “right side up”: if I add a proper sprite, I might have to include code which stops it from doing so. (Unless I actively decide to make it have no right-side-up.)

What’s that about “game endings”? Well,


My stretch goal is to amplify the emotional aspect, in terms of the parallels between “a buggy game” and “sadness over being incompetent”. As such, I’m thinking of having 3 endings, which have different activation conditions, and which correlates to “your relationship with bugs”.

I don’t know if I should spoil it, but I’m likely to forgo it since no time, so I’ll only talk about it if it comes to it, and just stick to the ~happy village life where you help the villagers catch bugs~ story.

The villagers may or may not have a role to play in this, which is why I’ve added them. That’s quite tedious, though, so I might leave them as hint-givers, as per right now. (They also don’t have changing dialogue based on changing progression rates, because I did that before, and boy, it was not fun.)

(It’s also kind of boring to only reach places just to get bugs, so I put people as hint-givers to mediate that.)


  • Code Monkey series on Jumping (link)
  • How to make a Dialogue System in Unity (link)
  • Super Mario Maker 2: No Jumping Allowed (link)
  • IDK it was a cute square so I was reminded of this (link)
  • And like 3711748 Unity forum questions

[W9IfD] turning data into forms

← Previous Post | Next Post →

(You can generate the cover here.)

Last week, I came to class with multiple instances of code. The downside was that I genuinely had no idea how it would turn out, or any direction to guide me towards that end, so I figured that Lisa’s suggestion to incorporate data visualisation was a good idea.

Again, the theme of Fantasy is with respect to the fantasy of actualising impossibilities through technology, but I also used a more innocuous data set, in honour of something which is coming soon:

Yes, it’s a visualisation of the Final Fantasy franchise.


I have never touched data visualisation in my life, so I looked up tutorials by, once again, Coding Train. I decided against using real-time data, since it’s complicated, and there’re no API resources for the entire franchise (only FFXIV has a dedicated following). Instead, I created a JSON-based dataset; in total, there’s about 850++ lines of code.

I ran some tests to ensure that the data could be accessed properly, as well, and properly incorporated into other codes:

After which, I began testing different ways to combine data with visuals, and put them all together in a not-painful-to-look-at way:

The details regarding which data set corresponds to what visuals are available on the page. Nevertheless, there’re some fun facts which are fun only if you understand Math and Final Fantasy, such as that a) patterns are easily observable once you know what drives it, and b) that outliers make for… Interesting visuals.

Also, interestingly, a previously mentioned possible guiding philosophy was how basic elements come together to create complex forms. Due to that ellipses were used for practically everything, it surprisingly came to fruition as well.

(mockup credits) (data credits, and a lot of wikipedia pages)

[W8IE] hi i’m not coming to class and i don’t even have a proper poster because i’m just like that™,

but it was really difficult to try to capture in a static medium, because my concept requires things which don’t exist yet, and it’s definitely hard to understand without context; so, I did some world-building, and here is a really short and really lo-fi thing which tries to capture the kind of time and space in which it exists

it’s better to view at the link ↑↑

if you’re reading this, i’m fully aware that this isn’t the kind of thing you should present to a potential client, so advice on how to properly capture the idea in a poster / infographic without subjecting people to abstract confusion would be loved

anyway the cringe is real

[W7IfD] making pencil comps for a digital generation is, uh,

← Previous Post | Next Post →

As per the last post, I decided to work with generative illustrations. Where the theme is something like “the Fantasy of actualising impossibilities through technology”. And, of course, I don’t have pencil compositions, or even drafts of what I want. Here are the two main reasons why:


As summarised by Spittel, there are two approaches to generative art: a) have no results, and let the computer generate as you play around, and b) have a very finalised idea, only allowing little randomisation.

I wanted to go for a mix of the two: keeping a vague idea of what I want the overall form to be like, while allowing the computer freedom to generate the exacts of what it turns out to be.

Automatic line makings, to get a gist for the overall form. As can be seen, it will likely involve many arcs, curves and loops, and a tall form which isn’t symmetrical.

But, intention probably won’t match up to action, because


I can draw decently well, but coding full-fledged physics is……. While I wanted to aim for something like Shvembldr and/or Nick Taylor‘s emergent, organic forms, I’m not sure that it’s possible at my current level. The most I can do is probably to work with basic elements, like lines and circles, and randomise their colours, positions, and sizes.

As such, it seems unlikely that I can find a way to code the piece to be particularly close to whatever I would envision. Still, I’ll outlaw patterned works like cccbtt, where I think it’s too structured: the point is to show off how amazing technology is, which is more evident when more complex functions like sin() is involved.


After looking into different scripting languages, I decided to go with P5.js.

Their tagline aptly summarises why: it has “the power of Processing times the reach of JavaScript”. In other words, it can achieve more than web-based Javascript alone, while being more accessible to creators and audiences, since it’s for web.


As I’ve said, I don’t have pencil sketches, because it depends on how fast I learn. Instead, I just experimented wildly with codes that I learned, using random() and noise() on parameters like the x-y coordinates, or scale().

Here are some things I learned (or refreshed, it’s been a while since I’ve touched Java/Script) during the spring break:

From there, I picked out elements I liked, and tried combining them, or messing around even more. Half of this were not intentional, just that I didn’t really do object-oriented programming, so, uh.

I guess my first “pencil composition” would thus be something like this:


My second pencil composition tried to be more aware of the working style for generative pieces. Interestingly, there’s a sense in which coding is a “collage”, because you rarely write code from scratch: it’s usually about modifying other people’s codes to suit your needs.

As such, you’ll see that most of the practices here are based off codes that I grabbed elsewhere, like by The Coding Train:


[W7.5GD] Suffering

i submitted at 0943, checked again around 1330, and was disappointed, as always, that i uploaded the wrong file, there’re bugs. life is suffer


  • Implemented base version of Tetris
    • Includes generating blocks, falling mechanic, movement, rotation, play area, line clear, collison
  • Implemented variations
    • Assigned to Key Pressing
      • Changed constants to variables
      • Included variations for falling speed, reverse controls, auto-rotation, camera zooming, changing block types


  • Cleared up unnecessary code
    • Compiled into a single script, than attached to multiple objects
  • Removed GetOutOfJailFree & HOLD indicators
  • Implemented HISTORY indicator of past variations

200221 Shah (player) & Mus (key presser)

    • Shah is visibly done with Mus, who is abusing his abilities
    • It’s quite funny nevertheless
    • Falling Speed of Blocks is outrageous at 0.1f
    • Impossible to play at all after a certain point
    • An additional suggestion to go the route of a key presser who has to fulfil certain tasks before he can ruin the player’s life, e.g. minigames, or a timeout

200221 Kee Yong (player) & Shah (key presser)

    • Pretty much exactly the same sentiments

200221 Wei Ting (player) & Me (key presser)

    • Wei Ting is doing acceptably alright, since I try to act like an impartial algorithm
    • Not enough variations to be intriguing

In other words, rerouting the variations to activate through an impartial algorithm at specific invervals, than a partial algorithm at random intervals


  • Modified variations to a random algorithm, from key pressing
  • Implemented UI
    • A NEXT indicator area, to show the upcoming piece
    • SCORE tally of various items, such as total time elapsed
    • HISTORY indicator of last 5 variations
  • Fixed bug where I Piece didn’t rotate around the correct point
  • Fixed bug where O Piece rotates
  • Fixed bug where Zoomed Camera doesn’t follow the falling piece
  • Cleared up unnecessary code
    • Removed variations for changing height and width of play area


  • Modified algorithm to be weighted, than 100% random algorithm
    • Instead of picking a random variation, the algorithm now picks a type of variation, then rolls for an outcome. 75% odds of getting a favourable outcome for that variation
  • Implemented new variation types
    • ~2% chance for in-game music to change to 1 of 4 songs
    • ~4% chance for in-game background to change to 1 of 5 backgrounds
  • Implemented SCORE system
    • Implemented counters for things like Total Number of Blocks, Total Time Elapsed, and so on
    • Implemented score algorithm, giving different weights to different segments contributing to score
  • Implemented Tutorial at start of game
  • Implemented Restart option (R) & Tutorial Skipping option (S)
  • Implemented Speed Up (Q and/or W)
  • Fixed bug where counter and visible grid didn’t align

200301 Prof (player)

    • Confused by names of variations,
    • Can’t tell what variation is occurring,
    • Doesn’t know that effects stack (than being dispelled),
    • Despises the auto-rotation (especially in conjunction with high falling speed)
    • Confused by information overload of UI
    • Total score of about 8.6k

200301 Wei Ting (player)

    • Too focused on playing the game itself,
    • Doesn’t notice that variations are occurring and affecting gameplay,
    • Just thinks she’s not good at Tetris
    • Total score of about 1.3k

In other words, fix the UI and information hierarchies.


  • Modified algorithm conditions and weights
    • If the same variation is called up, instead of having no effect, it may reroll to give another another variation
    • Impossible to get absolutely no effect for a round. Increased chance of failing a roll to 40%, from 25%
  • Modified Rotation Lock, from auto-rotating clockwise once per second, to rotating clockwise once per left/right keys pressed
  • Modified SPD function
    • Pressing Q and/or W will cause falling speed of blocks to increase, not just the countdown to variations
  • Modified UI by, like, a lot
    • Modified HISTORY segment to ACTIVE segment, which states presently-active variations than past variations
    • Modified SCORE indicator area, to only show at the end of a game
    • Modified text for about everything to be less Debug.Log-based
    • Implemented bar (and removed text) in indicating countdown
    • Implemented icons and animations for Key Press functions (Q, W, S, R)
    • Implemented tutorial image for Movement keys
  • Modified activation conditions for certain keys
    • Restarting (R) and Skipping Tutorial (S) now requires holding for 1 second, than pressing the related key once
  • Modified SCORE counters
    • Reduced max Score to 99 999, than 9 999 999
    • Reduced Speed Up bonus
    • Increased Line Clear bonus
  • Implemented Game Over condition
  • Fixed bug where I Pieces and O Pieces weren’t centralised in the NEXT indicator area


  • Music
    • ff5_bigbridge (link)
    • Tetris – A Theme (link)
    • Tetris Attack – Poochy’s Theme (corrected errors – final submission) (link)
    • Video_Game_Themes_-_Zelda__Ocarina_Of_Time (link)
  • All background images from Pixabay