Category: BooBoo

  • BooBoo 3.0.10

    • Fix insane amount of extra drawing in custom_black_bars example (there was a 2 * scr_w + 2 * scr_h times too many images being drawn due to a typo)
    • Optimisations. I get an extra 100 FPS in CoinHunt on i5 9500T/Intel UHD 630
    • Add json_remove to remove nodes
    • Add resize_vertex_cache in case you are drawing huge amounts of geometry and want to avoid cache auto-resizing
    • Make set_viewport like set_scissor, taking buffer coordinates

    EDIT: Yes, it was drawing 840,000 images at 1280×720 instead of only the 210 needed. lol.

  • BooBoo’s new license

    It’s free for personal use. If you want to redistribute the binaries you must buy it on Humble. Please only use nooskewl.com to download BooBoo or if you have a license you can include it with your game. BTW autolaunch works if you replace data/ with your own game.

  • BooBoo 3.0.9

    • Make vertex cache increment size 32k instead of 1k. When using image_start/end or start/end_primitives, if you do a lot of drawing between them then resizing the cache was very slow. This change makes the size adjustments 32x larger so there are fewer resizes
    • Allow a fish or expression to start an expression (e.g. vector of functions or function that returns a function)
    • Add ortho, frustum, perspective to core lib. add set_projection, set_default_projection, set_viewport, unset_viewport to game lib.
    • Batch image drawing in custom_black_bars example so it’s not slow
  • I may make a real game with BooBoo

    I’m thinking of making Monster RPG Adventure, an Adventure game set in the world of Monster RPG. I bought a Fire Tablet with pressure sensitive pen for Christmas so I can draw everything. It’ll probably take many months at a minimum to finish.

    If there are any issues with BooBoo, this will be a good way to find and fix them.

  • How BooBoo works

    Everything is broken up into operators and parameters. Each builtin function separates the previous and its parameters. Expressions and fish (what I call container indexes) are slurped up from start ( to end ) as a single unit and parsed into an intermediary format. When it comes time to evaluate an expression all the appropriate handlers are called with a vector of parameters until the final embedded () is done. Expressions return a temporary value, while fish return a reference to the exact location.

    For example, the “for” loop construct in BooBoo is a pretty standard library function except that it knows about the program counter. The C++ backing function gets a list of Tokens, which can be literals, or some form of variable including expressions and fish. You can handle it the simple way and just request a number from a parameter or you may need something more advanced. Same with “if”.

  • BooBoo 3.0.8

    • Remove need for vector/map casts in known instances
    • Fix endless hits on dead bodies in DOOMED
    • Remove op/sec limit. It punishes high framerates/logic rates
    • Add more/most things to example shim5.json
    • Added json_set_*, json_save and booleans to JSON
    • Add depth/stencil/cull graphics operations
    • Render targets including the backbuffer are now created with depth buffers and stencil buffers
  • BooBoo caches textures

    For example if you load the same image twice, the second time it uses the same texture. Same with sprites. So if you run image_update and updates some pixels of one of the images, they all change. There are several ways to get around it, if you want separate images you can _update individually. You can use image_read_texture then image_to_texture to create a new texture. Or image_create then draw the image to the render target.

  • Sprites explained

    Sprites are saved in Aseprite as a spritesheet with a json file and tga/png for each separate animation. Name the json and image the same. Now once you have all your animations saved, put them all in a directory together and in that directory create a file called sprite.json:

    [ walk_e, walk_w, walk_n, walk_s, throw, jump ]

    List all your animations in an array in a json file like above. Now to load a sprite, use the directory name with sprite_load. Make sure to put sprites in data/gfx/sprites.

  • BooBoo 3.0.7

    • Move cfg docs to core docs
    • Add casts to make maps in some examples work.

    As I previously said, now that types aren’t explicitly set, sometimes you need a cast. Example old code:

    map m
    = [m "draw"] my_draw

    This becomes:

    var m
    = m (map m)
    = [m "draw"] my_draw

  • BooBoo License

    BooBooCLI is now free. If you want to distribute BooBoo (game engine) with your game you must buy it on Humble.