in development

pavo: a first look

One thing I buy RPGs for—aside from the thrill of leveling up, and reading through endless accounts of how the People of the Thrane took Belmoor Keep from the Elves in the Battle of Bethelisgor in the Year of the Spotted Nyrd—is exploration. I love wandering through a world, picking out little details, odd characters, secret places. (Which makes it all the more frustrating that Bethesda still hasn’t fixed that halt-every-five-seconds bug in Skyrim, but that’s another, longer, angrier post.)

I’m also fascinated by procedural generation, which kind of puts me at odds with myself regarding RPGs. In its modern form, the RPG is the apex of “designed” content—from artwork to scripting to voice acting to mapping. There is little left to chance.

So: I’m conflicted. I’d like to write a game that includes RPG elements I like, but is also procedurally generated, and that’s what pavo is going to try to be.

My god, it’s full of pastels. In fact, the name pavo originated as a contraction of “pastel voxels”. Borderlands and its cell-shaded look inspired the sharp black outlines of the world, but I’m afraid I’m solely responsible for the pastels. The world itself is made of a three-dimensional noise field, and at some point I’ll write a post about that.

The world is explorable in all three dimensions. You can jump up onto surfaces to explore higher levels, and jump back down again.

Some areas can be a little spooky, especially when you run into ghosts.

And they’re not just any ghosts. They’re robot ghosts. But don’t be afraid. They’re friendly, and even a little talkative.

That’s all the screenshots I’ve got for now. There’s a story about why this place is, somewhere in the back of my head, but I’ll leave it there. Maybe you can ask the ghosts.

15 Comments

  1. i know this is one of your older works but i’m really interested in it. i am working on a fairly simple but long game, which requires many 3d spaces. when i saw pavo, i thought how much it looked like the interior of a house or building, and if the walls could be decorated, or objects placed inside, the players could sim decorating a house.

    in addition i had already developed a theme where the homes of the players would have a “homebot”, who would give them quests when clicked on and tell the occasional joke. imagine my surprise that you had coded that function into your pavo game ghosts, already – an interesting bit of synchronicity.

    anyway, i would love to learn how to modify this beyond changing the walls and the appearance of the “ghosts”, and find out if there are any solutions yet, to the webgl problems inherent in this type of game. for example, some computers without webgl graphics cards, have problems, some without webgl browsers (internet explorer is the bane of human existence) also can’t see it.

    i’m not a “coder”. i build web pages, i design graphics and i can do some very rudimentary scripting (and i mean very rudimentary). but what you have done in pavo, is above my pay grade by a great deal. still i’m determined to learn how to use this successfully. like how do i make it have a different floor graphic or the ceiling? how do i change the lighting? could it be coded to accept the placement of objects inside by a person playing it in their browser ? could an area be defined as a linkable exit? (clearly it’s possible as you have your link in the upper right hand corner, but is it possible, right inside the game itself, 3dimensionally?

    i downloaded and tinkered with pavo.
    i thought you might like to see what i did to barley hehe
    http;//thelivingmoon.com/undomiel/game/homes/pavo.htm

    • Wow, I’d almost forgotten about pavo…nice trip down memory lane. The changes you’ve made to it so far look fine; you’ve worked out how to substitute the wall and ghost graphics, cool!

      I hate to say it, but pavo might not be the best thing to build on. It’s not like a real game engine where you can swap out textures and scripts and behaviors; so much of it is hard-coded and difficult to untangle. (For example, the lighting is actually procedurally generated in the code.) The things you’re asking are possible but require programming skills. I’m not trying to discourage you–spend some time tinkering with the code, see what you come up with. You might also look into other (better written) game engines. I know they’re out there and they might have construction tools that would minimize the coding you’d have to do. Best of luck!

      • other, better written game engines?! that was one of the reasons i wanted to use your work. it never causes my graphics card fan to kick on and there’s never any lag! it’s very browser friendly (once you get passed the webgl issues. why are browser and graphics card companies so unfriendly to webgl? makes no sense) and very computer friendly. my graphics card says THANKS CHRIS!

        i have yet to explore a 3d environment in my browser that didn’t cause my graphics card fan to kick on, till your work. that means, you are doing something right that all those other people, are not!
        i also loved your easy does it, your gas food and lodging, golden thread, and was interested in your 4est (my game is a space-related game so naturally that grabbed my interest!).

        • Well, thanks! That’s lovely to hear. By better written I meant made for expansion and future development. All my games were written to implement a specific idea. Maybe that’s why they’re more efficient! I hope you can make use of them.

          • ideally, what we need is a program that can take any 3d room or object, and transform it into 3d noise that can be scanned and rendered by a pavo-like function, as a solid, collision-able object. then we could put any model, be it a building, a ship or a character/npc model, a ground texture/height map (such as a planetary map with its associated height/depth image map) in the game and it would immediately inherit the same characteristics you see in pavo, such as collision, coloring and lighting, all done with nothing but noise. of course the program would need to interpret if the space was solid or empty. hehe

            what makes that important is that many planet textures, even in c++ engines, have no collison and some, just have simple collision. simple collision makes the ground solid, but buildings/walls and ships and other things that should be solid, are not. pavo’s noise + function, renders solid objects, but can also render things like color and light, which is not solid.

            and this brings me to the really big question that has been bugging me for awhile now. why are there no games, where you can fly thru space, right down to the surface of a planet/moon, get out of your vehicle and walk around on the surface, enter 3d buildings and so on? it’s so frustrating being a game fanatic, without the ability to program the ideas in my head.

  2. p.s. at least on the internet, when the player has finished with the information on one page (for example the pavo room), they can go to an entirely new page, almost like switching zones in an mmo.

    • Regarding scanning objects into 3D noise: yeah, that sounds like the Holy Grail of procedural generation. :) Before I stopped working on games, I was experimenting with some ideas about grabbing real-world textures (grass, rocks, sky, fur, whatever) from photos and putting them into a sort of algorithmic “blender” that could generate new stuff by putting the bits together in creative ways. Never got very far but maybe I’ll pick it up again someday.

      Regarding the “big question” about games that take you from space to ground: have you heard of No Man’s Sky? That’s a procedurally generated game that sounds like an attempt to do just what you’re taking about. I don’t think it’s out yet but I’ll certainly be keeping an eye on it.

      • yeah there was one called infinity space game (here’s youtube https://www.youtube.com/watch?v=yrcEUO7TC28 ) but i haven’t heard anything new about it since well, 2011. and you couldn’t get out of your ship and walk around. you could just fly from space, down to the surface and fly above the surface.

        star wars galaxies handled it by having a space station you “docked” with and then were given the option to go to the surface, which would then materialize you on the ground of the planet, which was just a big zone, not a rendered globe. there was no “flying down to the surface”.

        anyway, thought you might like to see the silly stick figure (2d painted character, in an animated absolutely positioned div, glued to the window) walking in your pavo game. hehe
        http://thelivingmoon.com/undomiel/game/homes/

        see those images in the bottom right hand corner? i want to make those into image links, but everytime i read up on how to insert links onto canvas, it always sounds like charlie brown’s teacher https://www.youtube.com/watch?v=ss2hULhXf04
        i can read up on how to draw images on canvas or how to draw links onto canvas but i can’t find image links on canvas . it’s driving me kabonkers.

        • p.s. it’s only 2 frames of animation so it no look so good lol. (not to mention, it’s 2 pngs with a javascript animating them back and forth on w keypress).

          we are currently trying to nudge pavo into doing extra things. like: i want an editor for moving blocks around after they’ve been generated. trying to figure out how to make the blocks larger, even one large block for floor, one for ceiling and one for walls, so we can generate a pavo that can look like an outdoor scene. etc . in other words, trying to build an entire game environment with nothing but reiterations of pavo (in different folders/pages), with maybe some “easy does it” and “gas food and lodging” tossed in for good measure. 😀

          i like easy does it “zoning” from one part of the cave to the next. that could be useful. by the way, how did you figure out the matrices for the model meshes? were you using a specific modeling program? cause i think we can import models in and place them in the game world, but we need to know how to make the meshes like you did for panel and ghosts.

          • eep, one more thing. since your blocks are made out of 3d noise, would it be possible to create a sphere out of 3d noise and make it traversable by the camera at ground level? i mean, your collision seems to work fine with cubes but what about with spheres (made of small blocks perhaps?) ? too processor heavy? require a different set of calculations for staying on the sphere? that was the hold up on space to planet stuff – gravity and physics had to be calculated from the center of the sphere ( planet), but if you’ve already created a way to solidify as it were, blocks and make them collision-able with 3d noise, seems to me that a traversable sphere made of the same thing (3d noise blocks, would be easy peasy. (i realize that as a non-programmer, i’m probably way off on that but a bunch 3d noise blocks whether in a sphere or a flat plane, is still a 3d noise block. )

          • All the models are handmade or generated in code, that’s why they’re so simple. 😉 This is another reason I thought you might want to build on a different platform–so much of pavo is generated by fiddly little bits of code instead of loading models and textures from authoring tools. At this point, there isn’t even a method for importing a model. I know work has been done in this area, though. There should be a JavaScript library out there to do it.

        • Nice! What’s the reason for wanting the images in the bottom right hand corner to involve the canvas? You should be able to make them absolute positioned divs and put them wherever you want. If the z-order is specified properly they will “float” over the canvas; I use the same principle for my home page link in the original pavo.

          • yeah i tried to z-order them and probably did it wrong, thus it wasn’t working. i didn’t try again and probably should have. my programmer friend has given up trying to adapt pavo to my game concept. i’m disappointed, to be honest, cause it has so much promise, but he didn’t want to try to write a bunch of new code to get it to do stuff i asked for. i blame myself lol

  3. Regarding the sphere questions: It’s not too difficult to model a sphere (though texturing it is another matter). Collision wise, you can use the 3D distance formula d2 = (dx)2 + (dy)2 + (dz)2 to determine how close you are. Somewhere on the blog I know I have some code to generate the sphere model.

    (Edit) right here: http://www.wordsaretoys.com/2012/10/10/the-index-of-the-spheres/

Comments are closed.