View Older Posts
Here's my entry for the 1k jam!
After the image renders, hit "z" to make a new one.
PicoShop Pro is an exciting new offering from ElectricGryphon Industries, enabling realistic full 16-color dithered images to be developed directly on the Pico8 microcomputer.
--18-bit color rendering (using dithering), with 6 bit transparency.
--Moveable Toolbars (Collapse with double-click. Show/Hide with Tab key.)
--Two rendering modes: Fast Pattern and 64-level Bayer (Toggle with 'R')
----Brush Tool with feathering
----Gradient Tool (Draws from foreground color to transparent)
--Mask Functionality (You can only draw where image is not masks.)
--Path Functionality (Paths can be converted to masks.)
--Quick-key functionality (See instructions / type 'H' for keys.)
--Save Pic: Saves a PNG of your image in the current render mode to the desktop.
--Export: Save a text file of the image in 24-bit hex format to the desktop
--Import: To import image, copy the text of the text file. Select Import. Paste the text into Pico8.
-Tab- Show/Hide all Toolbars
-R- Toggle Bayer Render Mode
-H- Toggle Keypad Help
Double Click on Title Bars to Collapse/Expand Toolbars
-D- Set Color to Black
-Q- Set Color to Erase
-B- Select Brush Tool
-N- Select Pencil Tool
-G- Select Gradient Tool
-L- Select Path Draw Tool
-E- Select Path Edit Tool
-W- Select Path Select/Move Tool
-9- Show/Hide Paths
-K- Mask Current Path
-M- Select Rectangle/Marquee Mask Tool
-CTRL Backspace- Fill Mask
-Backspace- Erase Mask
-I- Invert Mask
-A- Clear Mask
-0- Show/Hide Mask
Hold Shift while making masks for ADD mode
Hold CTRL while making masks for SUB mode
WARNING FLASHING IMAGES
I wanted to try out the new extended (32 color) low res palette mode.
Use left and right arrows to cycle image rendering methods.
(Some of these methods take a while to draw, especially with the extended "flicker palette"--it's a slow dither.)
Your mileage may vary with the flicker color modes. I think it's a nifty way to get more colors, but many people find it to be distracting / uncomfortable to look at.
1) Floyd Steinberg: Standard Palette
2) Floyd Steinberg: Optimized Palette (basically just swapped some greens and blues)
3) Low Res with all 32 colors at once!
4) Low Res with "flicker palette" built up from all 32 colors mixed (be patient)
5) Floyd Steinberg with "flicker palette" with standard colors (be patient)
6) Floyd Steinberg with "flicker palette" with optimized colors (be patient)
--Actual image data is stored as 4-bit RGB channels, with Red in the sprite sheet, Green in the music blocks, and Blue stored as a string. There is no reason for Pico8 to be able to store 4096 color images. But, if you ever want to, this is one way.
--The low res mode with 32 colors is interesting, but I don't think the extended palette colors complement the standard palette very well--definitely not enough to make up for the loss of resolution. Dithering with 16 colors looks better to me.
Take off and explore the mountains and lakes of Picotopia!
-- left, right: Roll + Yaw
-- up, down: Pitch
-- z, x: Throttle
-- p: Pause and set time of day
Hold down Z to increase speed on the runway before pulling up (down arrow) to take off.
If you look around, you will see houses, buildings, and ships.
Flight model should be "somewhat realistic" in that it models thrust, lift, drag and weight--Of course all the numbers are made up, and things are grossly simplified.
Landscape uses a smooth noise function and can go on forever without repeating. (Well, not forever--it uses a 4095 long list of random numbers-- but longer than I have patience or memory for.)
Water is drawn using a marching squares algorithm in order to have more organic shapes, which I think is kinda neat even if it does take cycles and tokens.
Saw some unexpected behavior today with pset(x,y,c) when c negative and fractional.
cls(6) for i=0,127 do for j=0,127 do pset(i,j,(i-16)/32) end end
If I add a floor command, then the funny stippling goes away. e.g. pset(i,j,flr((i-16)/32))
The world needs more metablobs. 'Nuff said.
Here's a quick demo of a 6 degree of freedom 3D engine that I have been working on.
You can just explore a small space station in a Descent-like style.
Arrow Keys: Turn
The map is stored in a long string and is generated from a Blender OBJ file. The station is as complex as I can make it before running out of compressed code space. To make something larger, I think I would have to switch to more of a 3D tile system with room building blocks that snap together.
The engine uses a simplified portal system paired with convex sectors to determine room visibility and draw order.
Thanks to Fred72 for the polyfill code. (https://www.lexaloffle.com/bbs/?tid=3393)
Updates: fixed some code that broke with version 2.5g
I've found an issue in a recent cart where if I exceed CPU of 2, the reported CPU in stat(1) goes back to being less than 1. (Basically looks like stat(1) is reporting CPU%2.)
And here I was being excited about being able to handle 100 objects without breaking a sweat. :-D
Rescue Blocklandia from the evil clutches of Duke Cube. Find the nine golden keys to unlock the gate to the magic portal and recover the crown.
--Move the Sphero with the arrow keys
--Interact with special blocks by rolling over them
--Collect keys to open locked doors
--Collect floating coins
--Grab the crown to win the game!
If you beat the game, please post a picture!
There are some tidbits in this cart that might be interesting/useful to other pico8 programmers.
8X8 rooms are stored in a compressed format within a long string contained at the end of the P8 file. Blocks are stored in a manner that is closer to a drawing format-- e.g. change current tile, place tile at location x or fill a given region with tile. These instructions are tightly bit packed and then saved a single line of hex for each room.
This allowed for 117 unique rooms in the game with a reasonable level of detail before hitting the code compression limit. (15438/15616 in the end!)
I have tool to allow for rooms to also be stored in the cart data as well, but it didn't end up being necessary. (I got tired of designing rooms before I got ran out of space.)
I have a level editor (also made in pico8), which outputs levels to a text file, that I can share.
This game uses two sprite sheets worth of a sprites by mashing them together-- e.g. the first 2 bits code for sprite sheet one and the second 2 bits code for sprite sheet 2. I posted a demo cart of this earlier, and there are a couple of other carts on the bbs that explain this in more detail.
Collisions are handled using signed distance fields for the blocks in the local area of the ball, which make it really easy to check for where and when the sphere of the ball hits something--or multiple somethings. As a bonus, they also make it easy to find the normal at the intersection point, so bouncing type collisions are pretty straight forward.
I can do more of a write-up for these things if folks want.
Here's a quick and dirty cart that will merge 2 PNGs into 1.
Assumptions: Use black, white, with Pink for transparent.
Drag first image onto cart.
Drag second image onto cart.
Output is saved in the sprite sheet.
This will only work on desktop pico8.
PicoVox is a voxel art creation program for Pico8.
--Use your mouse to add, remove, and recolor blocks on an isometric grid.
--Render ray-traced images and rotation animations of your pieces
--Save and share your creations in the form of data PNGs
--Import data PNGs from others by dragging them onto PicoVox
Click the disk icon to save your work. A PNG will be generated that contains the voxel data for your scene. This file can be posted on the BBS or social media.
To open a file, simply drag the image on top of the running PicoVox application window.
(Saving and opening may require standalone Pico8 and not work on the BBS web-player. TBD)
See example save image below:
PicoVox requires a mouse to function properly, though it may work "ok" with a touch screen. With a mouse and the block tool selected, left mouse places blocks and the right mouse deletes them. The scroll wheel can be used to zoom in and out and clicking and holding the scroll wheel will cause the model to rotate.
If you do not have a right mouse button, you can delete blocks by selecting the black color with the red slash in the color palette.
PicoVox can render images in a dithered Pico8 palette using ray-tracing. Special rendering features include transparency, reflection, glowing, as well as shadows and ambient occlusion.
Click the camera tool to start a render, which will save to the desktop by default when complete. (Generally rendering takes around 10 seconds and will be interactively displayed while it progresses.)
The loop icon will render a rotation animation as a gif to your desktop by default. Please note that this will take a long time to render all of the frames. Currently, the animation render cannot be canceled so please remember to save your work before starting.
To change the width, depth and height of the scene, click the "clear scene" tool. Note that this will erase your current file.
block: add blocks
brush: paint color
floor: toggle floor
bucket: fill color
loop: render animation
doc: clear scene
?: info text
black is erase
arrow keys rotate view
x: quick render
left: add block
right: del block
scroll wheel: zoom
shift+middle: look at
I've seen a significant performance difference between the latest v0.2.2 and v0.2.1b.
For this particular cart, it runs significantly slower on the latest version when measured with a stop watch, but when using the stat(1), the system claims the opposite--i.e. that it's faster. (These are both being run from the .exe on Windows.)
Version stat(1) Stopwatch Timed v0.2.1b 285 30 seconds v0.2.2 219 8 minutes, 14 seconds
I've included the cart for reference.
Brought to you by the same productivity-focused team as Hypercolor Paint, PICO-RAY offers state of the art 3D modeling and rendering capabilities for the Pico-8 computer system.
--Ray marched, photo-realistic 3D graphics
--Soft shadows, ambient occlusion, reflection, refraction
--Materials properties, including: color, gloss, reflection, refraction, patterns
--Primitives including: box, sphere, torus, cone, plane, sponge, and landscape
--Realtime wireframe box previews
--Quick render modes for preview
--2x2 anti-aliased high-quality mode
PICO-RAY requires the pico-mouse to operate. Click on menus and increment widgets to create and edit geometric primitives.
-REND- Control rendering options
1x1:No skipped pixels
2x2:Render 2x2 blocks
4x4:Render 4x4 blocks (faster)
QUICK: Render in fast grayscale with no shadows/materials (only 2X2 and 4X4)
NORMAL: Render with shadows, materials
HIGH: Render with anti-aliasing on (slowest)
OUTLINE: Show bounding boxes for all objects (selected object highlighted in blue)
HIDE MENUS: Hide menus for saving screenshots (click to turn menus on
-PARAM- Create new objects and change the dimensional properties and shape of objects.
[OBJECT TYPE] Type of the selected object primitive. Click left/right to change type.
[Properties] Depends on the object type (e.g. height, width, depth of box)
MAT: Material number (can also change form MAT menu)
NEW: Click to create a new object--defaults to location 0,0,0
DELETE: Delete selected object. Scene must contain one object, so last object cannot be deleted. (However it's object type can be changed.)
-LOC- Adjust object position and orientation
Z:Click on arrow buttons to move selected object along axis. Hold down to repeat.
AZ: Click on arrow buttons to rotate selected object about axis.
-CAM- Control the camera location and orientation
CAM Z: Control the camera location
CAM AZ: Control the camera angle
-SCENE- Adjust the scene properties
L AY: Direction of light source. (Infinite, directional light)
SKY1 R,G,B: First sky gradiant color. RGB goes from 0 to 1 for colors
SKY2 R,G,B: Second sky gradiant color.
SUN RGB: Color of sun glow (seen when looking into the light source)
-MAT- Material properties
MAT: Material number of selected object. (Also, number of material currently being edited.)
COL R,G,B: Base color of material.
SPEC: Specularity of material.
GLOSS: Glossiness of material.
SHINY: Shine of material. (SPEC, GLOSS, and SHINY work together to create matte or glossy surfaces)
REFL: Reflectivity (0 to 1)
TRANS: Transparency of mateiral from 0 to 1 (completely transparent). This is affected by color of material. A value other than 0 will also enable refraction, which slows rendering.
IOR: Index of Refractin. A value of 1.5 is approximately equal to glass. A value of 1.0 is equal to air. Refraction slows rendering.
13--Black and White Tile (works best on planes)
BOX: Box with Width, Height, Depth
SPHERE: Sphere with Radius
TORUS: Donut with R1 Major Radius and R2 Minor Radius
CYLINDER: Cylinder with Radius and Height
PLANE: Plane -- no properties. Note that the plane defaults to to 0,0,0 which may block the camera.
SPONGE: Menger Sponge fractal
TERRAIN: Mountain range
Explore alien lands with a high-color world generator.
This is a new take on Postcards From the Fringe, which I made a few years ago. https://www.lexaloffle.com/bbs/?tid=28026
Press "z" to visit a new, random planet.
--High-color flicker dither technology with 4,096 indexed colors/patterns [Warning flashing lights]
--Endless bicubic noise mountains
--Mountain shape variations: islands, hills, spires, etc.
--Alien sunset sky with clouds
--Water with ripples and sky reflection
--Preview render in standard (non flicker) mode
--Anti-aliased image composing with alpha channel
--Ability to save / share worlds
--Controls to tweak variables
This is a voxel landscape engine, actually adapted from Pico Kart but with height added. The system is not very optimized for speed right now... definitely room to make it a lot faster even if not real-time.
Color handling is taken from my Hypercolor Paint cart. The palettes of colors and patterns are loaded from cart memory and generated by another cart that takes ages to run.
Introducing Hypercolor Paint, a high-color painting application for the PICO-8.
Paint in either high color mode (flicker) or standard (dithered) mode.
While editing, pixels are treated as 56,535 level 3-channel color.
Use a variety of brushes, with control of color, size and pressure to achieve desired effects.
Save images (requires download)
Export images (requires download)
Example Images: (High color mode is simulated)
Z: Switch between paint mode and palette mode
Tab: Switch between high color and standard color mode
Mouse: Paint with left mouse button
?: Show splash screen
Color: Switch between paint mode and palette mode
Save: Save image locally to hyper_color_save.p8 (image will be cropped)
Load: Load image locally from hyper_color_save.p8
Export: Export image to hyper_color_export.p8
For standard color images, the sprite sheet will capture the full image.
For high color images, data is stored in sprite sheet as well as map and sound effect locations.
In order to view images, paste the following code into hyper_color_export.p8:
Two different 16X16X16 color look up tables are used to achieve responsive paint effects with dithering at 60 fps. In order to avoid a massive slow down (it takes a number of minutes to build the color cube) the look up table is generated by a different cart and loaded into sprite, map and sound memory.
Example exported cart:
Been playing with cubic smoothing of simple noise for endless landscape generation.
It's definitely slower than lerping, but I think it creates more realistic looking shapes. In order to get a nice interactive frame rate, I had to rely on scrolling the screen and just updating the top portion. It kinda works although the textures smear vertically.
Press "z" to randomize parameters.
Use your personal Pico-8 computer to create professional-quality image morphing effects as seen in blockbusters such as "Willow" and "Terminator 2". Use the power of Pico Image Moprh 2000 to seamlessly transform one person into another or even change a cat into a dog!
Pico Image Morph 2000 can even be used to create wacky deformations! The possibilities are endless!
Pico Image Morph 2000 requires the use of the Pico Mouse Accessory.
While in "Position Mode", locate deform points along critical portions of the image, such as centers of eyes or the edges of lips.
Switch to "Deform Mode" to drag deform points to new locations.
Use the "Onion Skin" button to switch between viewing the Start Image, Target Image, or a blended overlay of both.
Click the "Animate" button to loop the animation
The system include 5 different image to morph between.
Morphing is done by using affine triangle transformations, and blending control point and texture coordinate positions for a source and a destination image and then compositing them together. This is a naive way to morph images, but at this resolution it actually works pretty well.
Images are store in strings within the code--they are simply 64X64 16 level grayscale images. I can share the python script if anyone wants it.
Totally worth watching is the demo real for Elastic Reality from the early 90's. https://www.youtube.com/watch?v=AD5R7dJM4eU
Mine your way to fame and fortune in a continuously generated 3D voxel world. But keep an eye on your energy level and make sure you can find your way back through the deep and twisted caves.
s,f: turn left and right
e,d: move forward and backwards
lshift or z: jump (hold to jump higher if upgraded)
The mouse is required for mining and building.
Click on shop computer to enter store menu. Ore and gems will auto-sell.
With laser selected, click and hold on a block to mine it. Circular progress bar will indicate how long is left. Precious ores will take longer to mine.
With a placeable block selected, click on the side of an existing block to place a new block.
Energy will deplete when moving, jumping or mining. The battery can be recharged by standing on the glowing yellow charge squares near the shop. When your energy goes to zero, you will lose most of your money and be teleported back to the starting point.
This game uses a modified ray-casting engine based on tutorials from (https://lodev.org/cgtutor/raycasting.html). This was extended to work with voxels, reading in a local 3-dimensional map array.
The map is generated dynamically as the player moves around. However, it is set up such that the same block will always exist at the same x,y,z coordinates. In addition, there is a user map that is used to store the locations of blocks that the user added or removed. These are essentially stored in a sparse matrix.
There is currently no way to save your constructions. It might be possible to save some aspects of the world with the persistent cart data, but I don't know that 256 bytes will be sufficient. Clipboard import and export might be a better way to allow folks to share creations.
The code is a dog's breakfast. Token count wasn't really a problem for me on this one, but it was a struggle to keep frame rate acceptable with the world rendering code. I'd love to be able to increase the view depth without dropping to 15 FPS.
--Image size: 1536X128, 2 bit
--Scanned from a drawing and imported into Pico8.
--Utilizes RLE encoding as well as storage in both strings and sprite page
Here's a Pico-8 ray tracer with the amazing ability to render both spheres AND planes.
Let it run all the way through even though the colors will be funky at first. After it renders the image, it will switch to high-color mode.
-NEW High Color Mode
-Diffuse and Specular Shading