There is an annual Nokia Jam which challenges participants to make a game with the limitations of the Nokia 3310 phone. These limitations are severe and fun — only 1-bit color, and only 84x48 (or 48x84) pixels!
Mini Micro would be a great environment to make a game for this jam. To help you get started, here is some code that sets up the display in either portrait or landscape mode. The gfx
display is scaled and positioned appropriately, and display 1 is used as an overlay to mask out everything outside the display area. So, if you want, you could make gfx
much bigger and scroll it around (just be sure to scroll in increments of scale
; no sub-pixel scrolling is allowed!)
// Nokia display can only use two colors:
// "#C7F0D8" (light) and "#43523d" (dark).
// And the display must be either 84x48 or 48x84.
// We'll set up display 5 (gfx) scaled appropriately,
// and also set up an overlay in display 1 to mask
// off everything outside the allowed area. If
// debug == true, this mask will be translucent so
// you can see any error text, etc. For submission,
// you should set debug = false so it is opaque.
debug = true
color.dark = "#43523D"
color.light = "#C7F0D8"
setupNokia = function(portraitMode=false)
clear
if portraitMode then // 48 pixels wide, 84 pixels high
globals.scale = floor(640 / 84)
globals.width = 48
globals.height = 84
else
globals.scale = floor(960 / 84)
globals.width = 84
globals.height = 48
end if
gfx.clear color.black, width, height
gfx.color = color.light
gfx.fillRect 0, 0, width, height, color.dark
gfx.scale = scale
gfx.scrollX = -(480 - width*scale/2)
gfx.scrollY = -(320 - height*scale/2)
display(1).mode = displayMode.pixel
outer.overlay = display(1)
overlay.clear color.black * (not debug) + "#00000088" * debug
overlay.fillRect 480-width*scale/2, 320-height*scale/2,
width*scale, height*scale, color.clear
end function
printCentered = function(s, y)
gfx.print s, width/2 - s.len*4, y, gfx.color, "small"
end function
if locals == globals then
setupNokia true
y = height - 15
for word in "Nokia Display Ready!".split
printCentered word, y
y = y - 15
end for
end if
You could also use the sprite display if you like, but you must be careful that your sprites have only the allowed two colors, are scaled by scale
, and are positioned in even multiples of scale
and rotated in even multiples of 90.
Here's what the result of this setup looks like in portrait mode:
and in landscape mode:
I hope this gets you started. Be sure to let us know, here or on Discord, if you decide to enter, so we can all cheer you on!