Late February Update!

[Note: This post has been copied from a post made to the Patreon site in early Februrary. I have also since decided to continue making prebuild versions a ‘Patreon supporter only’ thing for now.]

Greetings to all patreon supporters and any innocent passers by,

Well, first up, a bit of bad news – funding for the VR stuff fell through so that’s on hold for a while. Ditto monkey2 wont be coming to steam in the near future, but IMO that’s less of a bummer as I am quite happy with and always thought steam was a weird match for a coding language anyway.

I did enjoy my little blat with VR very much though, and have added the results of my work to the public monkey2 repos – big thanks to Simon for gifting the code to the monkey2 project! There’s not really much in there right now, but you can track the users head, controllers and base stations, in either sitting or standing mode. Check out the mojo3d-vr/tests dir (see mojo3d-vr/README.TXT first) for some little demos. It has been mostly tested on windows 10+msvc x64+vive but James has also had it going on an oculus rift. It has not been tested on macos or linux at all. My plan for now is to keep mojo3d-vr at least functional, but there probably wont be too many changes beyond what’s there for a while yet.

Anyway, monkey2 v1.1.10 (including mojo3d-vr) is up at now (but not the usual page – see below) and features a number of ‘at last’ additions to mojo3d. In particular, transparent materials are now supported and you can set entity alpha via the new Entity.Alpha property. However, note that transparent materials only currently support one light (the first created). This will be fixed soon, once I get some better culling going. Note that sprite/particle materials are not lit anyway, so this only really affects transparent pbr materials. The gltf2 loader should also now support transparent materials, ie: materials with alphaMode:BLEND.

But pbr+transparency *does* look immensely cool – check out the new toy-plane banana with the shiny cockpit. I was hoping to implement something clever-ish here (depth peeling? might return to this later…) but gave up in the interests of ‘just getting it bloody working first’ and implemented a simpler forward rendering solution. Transparent surfaces are currently sorted by simple entity->camera distance (ala blitz3d) but I do plan to improve on this a bit by using mesh bounding box origin instead of just entity origin so it should be possible to at least break the transparent components of a model into separate ‘surfaces’ and have them sort properly/better.

On the mobile front, I have decided to open source the admob and iap modules for android/ios and these are also included in v1.1.10. They’re not selling spectacularly well and I have never really been totally comfortable with these being commercial products in the first place – it’s open source all the way now baby! But another important factor is the difficulty in develop for mobile in the first place, and really just the sheer usefulness of having it out there for as many people as possible to test and tweak and improve etc. This was certainly the case with monkey-x where people frequently made suggestions for improvements to admob/iap that solved problems that only they (or their users) were actually experiencing, and I don’t see why this wont be the case for monkey2.

All in all, I will try my best with mobile but I do think if it’s to be successful it will require a community effort. I have one ios device (an old ipad2) and one android device (an nvidia shield) both of which are likely to stop receiving updates fairly soon, and it’s hard to develop for mobile purely via simulators so realistically, I *will* need community help with the plethora of devices out there. So consider this a bit of a gentle warning – if you want a super-reliable mobile solution that you know 100% is gonna work just right on every device out there ever made etc, you should probably go with a bigger player than monkey2 right now.

Finally, I want to try the ‘preview release for patreon supporters’ thing again so v1.1.10 is gonna be for patreon supporters only for (at least) a couple of weeks. The simple fact is that it’s only really thanks to my patreon supporters that the monkey2 project is still going – thanks yet again! Yes, there are a few sales/donations, but all in all, patreon is where most of my monkey2 income is coming from right now. If you have forked out for monkey2 at and want to get your hands on the v1.1.10 release, please feel free to email me at marksibly at gmail dot com and I’ll fix you up. Or, you can always just build monkey2 yourself from the source at github – it’s pretty easy!

Here’s the latest from VERSIONS.TXT for v1.1.10:

Cleaned up dependency system in mx2cc a bit – you’ll need to rebuild all.

Added simple support for iphone simulator. Alas, I’ve had to implement this as a sort of pseudo target: set MX2_IOS_USE_SIMULATOR=1 in env_macos.txt to enable simulator and rebuild modules. You’ll need to change this env var to switch between simulator/hardware builds, you don’t have to rebuild modules each time you switch though. Also note that apps builds to the same product project. Far from elegant sorry, I may be able to do something with lipo etc eventually.

Mojo3d camera’s can now be attached to a view, which will take care of autoresizing camera viewport etc.

Camera param removed from Scene.Render. Scene.Render now renders all cameras in a scene. Add Camera.Render for just rendering a single camera – this is now recommended way to render a scene, multiple cameras not dealt with yet.

Moved fog settings to Scene, ie: FogColor, FogNear, FogFar. Fog is now built-in and FogEffect has been removed.

Added Scene.ShadowAlpha for faking soft shadows. Set to <1 for softer shadows.

Added experimental Entity.Alpha for master entity alpha control.

Merged forward/deferred renderers into single Renderer class. Added transparency support: materials with non opaque blend modes are depth sorted (only by instance for now) and rendered in a separate forward pass. Note: transparent materials can only currently be lit by a single light and are unshadowed.

Fixed some potentially serious GC issues that have have not, surprisingly, caused any issues so far. But it was just a matter of time… Hopefully no ones code will be affected – rebuildall2go recommend for this one.

Added Window.OnCreateWindow() virtual method. If Window.ClearEnabled is true (the default), the window is also cleared to Window.ClearColor before OnCreate is called. OnCreateWindow is where any slow initialization code should be placed instead of in Window constructor.

Fixed dots in filenames problems.

Added reflection support for type extensions and enum. Add reflection helper module – see modules/reflection/tests. Still WIP!

Changed default behaviour of Typeinfo.ExtendsType to do a plain compare instead of runtime error. Makes param matching easier.



Liked it? Take a second to support Monkey 2 on Patreon!