Monday, December 11, 2017

readable reposts

Reproduced without permission from here Mark Sibly is going great guns as he enters final lap of monkey2 development.

December update
Posted on December 9th, 2017

December update!

Well, it’s being a kind of quiet month in terms of flashy new features, but lots of ongoing ‘under the hood’ work has been done so it’s all good.

The mojo3d entity animation system is now (mostly) usable. All the bits are in place, the actual API just needs a few tweaks. You can now copy animators and ‘slice’ animations which is kind of equivalent to thd old ‘ExtractAnimSeq’ from Blitz3d. Check out the turtle and ninja samples in mojo3d-loaders to get an idea of progress. And thanks to ‘psionic’ yet again for the models (a real blast from the past!) which I have been tinkering with on and off for the last 15 years or so by now surely!

I would actually like to do lot more with animation. I have a very cool ‘game programming’ book by one of the devs of the ‘drakes fortunes’ games (of which I am a big fan) and, true to the drake games, it has an awful lot in there about animation! There’s lots of great stuff about effective animation blending techniques that do things like blending the lower half of a ‘crouching’ pose with, say, the upper half of a ‘firing gun’ pose. But alas, I think to realistically do any work in this direction I’d need to collaborate with an actual animator. And it’s not like I haven’t got a ton of other stuff to be working on too! But I am starting to get a bit desparate for quality media in general though. I feel like mojo3d *could* be producing some great results already, but I’m still stuck with ‘freeware’ media, much of over 15 years ago from the blitz3d glory days! Nothing with bump/metalic/roughness maps which I think is when things should starting look looking sweet. Oh well, patience…

And some big news! Simon Armstrong (‘skidracer’ to those in the know…) has commissioned me to write a vr system for use with mojo3d! He has set me up with a vive vr kit and I’ve been going nuts with it, it’s great! I did have an oculus dk2 a few years back, but vive is really quite a step up in terms of responsiveness and image quality (as I assume are the latest oculus units). And as many people have discovered, one of the coolest things about it is simply the ability to ‘wave your hands’ in VR space which IMO really does improve the feeling of ‘being there’ significantly. I am using vive’s openvr SDK for a mojo3d-vr module and already have some stuff going in the form of a little demo that features a ‘sea of rubber ducks’ floating around your head (the urge to ‘swat them away’ is really strong!) complete with simple primitives to represent the base stations and controllers. I have found the openvr SDK to be very clean and easy to work with, and it *should* work with oculus rift out of the box, although I have no idea if that’s really true or not. Here’s hoping… I’ll have more of a rant about vr in a later blog, there’s a lot to go into really.

There also plans afoot to get monkey2 onto steam, something I have long though was generally a good idea, as long as it didn’t have to actually involve me as I suck at that sort of thing. Simon has offered to help out here so I’m basically just gonna let him go for it. I’m afraid I can’t be any less vague than that right now though – more news as we make it up!

Apologies to the patreon supporters but there will be no ‘prebuilt’ release this month, as there really isn’t all that much in the way of ‘new’ APIs or anything like that. Plus, there is a pretty major overhaul of the opengl subsystem in there that couold potentially cause problems (although it hasn’t so far) so I’d really like to give it a bit more of a workout before declaring it ‘release ready’. Hopefully, there should be a really cool new years release instead (I hope – although it’s already the 10th!). And you can of course still just build monkey2 from source as easily (if slowly) as ever.

As for the new opengl system, the old ‘gles20’ module has been deprecated in favor of a new ‘opengl’ module. This means that, whereas previously monkey2 was more or less emulating gles20 on targets that didn’t support it natively (macos, linux…), monkey2 now emulates opengl on targets that only support gles20. For most users, this should have NO practical effect as this is all behind the scenes stuff. But if you are using ‘raw’ gl in any way, please use the opengl module instead of gles20. The functions should be the same (there are just more of them) except for glClearDepthf which is now just glClearDepth.

I did initially try to use ‘glew’ for this. Glew is a library that provides support for a ton of opengl extensions, and it almost worked as is except it couldn’t handle extensions (or the basic v1.1 gl functions) for angle, webgl and basically any ‘weird’ gl setups. On the other hand, SDL2 does this really well via SDL_GL_GetProcAddress which seems to work on all targets and with all flavors of GL drivers. So I basically converted glew to a version that uses SDL_GL_GetProcAddress to fill in all the GL function pointers and it works well. I’m only using the bits of glew up to opengl2.1, but it supports up to opengl4.5 or something and I’ll eventually add these too. I’m also only adding extensions on a ‘new to use’ basis too though.

I also had a hack at the icky ‘app config’ system. Previously, if you wanted to do something like use set the depth buffer bit depth, you needs to pass a StringMap to the AppInstance ctor, typically in Main. This meant only the app really got a shot at passing config to AppInstance which sucked, so I replaced it with a very simple, env var-like SetConfig/GetConfig system.

So the code to set depth buffer depth is now:

Function Main()
   SetConfig( "MOJO_OPENGL_DEPTH_BUFFER_BITS",16 ) 'want at least 16 bits depth buffer...
   New AppInstance

Currently, config for GL type setting must generally be done before AppInstance is created, but this will likely eventually change to before first window is created (not a whole lot difference) or maybe even optionally leave GL context creation up to the user. But the important point here is really that not just the app but ANY module can now set app config vars. For example, the mojo3d module can set default renderer, depth buffer config etc, so if you import mojo3d you automatically get sane defaults but can still override them if necessary.

Have a look at docs for std.filesystem.SetConfig for a list of current config settings.

Finally, you now create a ‘real’ opengl context on windows. To date, all opengl on Windows has gone through the ‘angle’ library ( which actually translates opengl->d3d9/11) but you can now do this to create a ‘real’ opengl context:
Function Main()
   SetConfig( "MOJO_OPENGL_PROFILE","compatibility" )
   New AppInstance

This should, in theory, ‘just work’ for all existing mojo/mojo3d apps on windows without messing anything up. It will likely be a little ‘less compatible’ so I’ve left “es” (ie: angle on Windows) as the default on Windows for mojo 2d apps. Also, you still currently need to ship the angle dlls without your app even if your app doesn’t actually use angle. This will be fixed ASAP. I’m hoping upgrading SDL2 to the latest version will magically fix several issues here, if not I’ll have to hack SDL2.

The main motivation for adding real opengl support was initially to support openvr (I didn’t think angle would work, and it didn’t) but it also turns out to be faster at some things. Not quite the ‘3 times’ speed up I proclaimed on twitter a while back, but it’s definitely about 3 times faster at instancing. Raw pixel rendering of course is the same as it’s the same GPU after all regardless of driver (ie: bunnymark’s about the same), but I suspect driver overhead is considerably less with real opengl vs angle.

Also of course, real opengl is way more powerful than gles20, although I will probably be limiting myself to gles20 features for now for the sake of as much cross-target compatibility as possible.

Also still a bit WIP but I just pushed to github yesterday is 64 bit support for windows. You’ll need to use visual c++ community edition 2017 for this (vs expresses doesn’t have 64 bit support?) and it’s currently implemented as a ‘global’ setting (see env_windows.txt) much the way MX2_USE_MSVC works so it’s kind of all or nothing right now, but it seems to work OK so far! I had to add 64 bit builds of openal.dll to the repos but apart from that there wasn’t too much drama involved. Still, you might want to give it a few days to ‘settle’ – I did push a version yesterday which wrote the ‘.o’ files to the root monkey2 dir! Should be fixed now, but I’m taking the day off dammit and if there’s anything else screwy in there it wont be fixed until tomorrow!



Sunday, October 22, 2017


DirectX12 scratch and sniff

The mouse hover treatment on source code may well be a precursor for future novel enrichment schemes.

My Visual Studio muscle memory is slowly returning as break points are added and watch variables unfolded. Stereo = false FTW.

Mixed reality is coming.

I had the insight to install Visual Studio 2017 onto D: and am as usual awestruck with the volume of updates but after binging season 1 of the bridge and a short sleep I am up and running.

note to self #2 - extend dx12 timer and add jitter diagnostic 

Also from the dominant desktop department we check out the gltf display pipelines and smile out loud.

Grey Rainbows

This morning my wide color gamut world view goes in search of HDR control.

As we look forward to curb-siding the 12 bit family (bravia) telly and it's 0 dither rainbows of grey (RIP Fat Agnus 2).


Back on the home computer I am spending most of my time either developing or playing with Project V(icious) Synth.

A new release of vsynth will feature connectivity with Touch OSC surfaces and Midi controllers.

It was a surprise to find the Akai and Yamaha pitch wheels rest at different center points. The pitch wheel in midi uses a 14 bit value and having keyboard player start playing out of tune after touching a pitch wheel seems possible if not probable with one of these devices.

The scientist in me says I need to add another keyboard manufacturer to the lab / studio.

note to self #1 - scan all known midi files for pitch wheel rest value


After processing the new XInput deadzone description here the deadzone implementation strategy on the midi pitch wheel front seems more clear.

Nice to see bass guitar getting it's own entry.

After visiting 17 different solutions for reading the keyboard it is looking a little likely the most complex solution is the way to go. As with a lot of modern life the simplest things done take the most effort.

and no

After a bit of head scratching we end up linking to user32.lib and defining WINAPI_PARTITION_DESKTOP for x64 builds and raw mouse and keyboard devices magically appear courtesy GetRawInputDeviceList.

and no

Wednesday, October 4, 2017

wall meet fly

a typical jam session from the tat, mellows in second half

Tuesday, October 3, 2017

project vsynth

Distortion courtesy e to the negative V from triangle oscillators bent by humans.

Local v:=samples[s]
If v>0 v=1-Exp(-v) Else v=-1+Exp(v)

Tuesday, August 29, 2017

lambdacore help

Programmers Manual

@help spoofing
There are several commands available to determine the origins of messages and to check that your communications with other players are secure. Help is available on the following topics:

@paranoid -- keeping a record of messages your character hears.
@check    -- looking at that record to determine responsibility for messages.
@sweep    -- checking who is listening in on your conversation.

@help full-index

Mail Commands Help Db (#85)
---- -------- ---- -- -----
@add-notify         mail-index          @qsend              @rn
@answer             @mail-options       @quickreply         @send
@copymail           @mailoptions        @quicksend          @skip
@forward            message-sequences   @read               @subscribe
@keep-mail          @netforward         @read-all-new-mail  @subscribed
@keepmail           @next               @refile             @unrmmail
mail                @nn                 @renumber           @unsubscribe
@mail               @peek               @reply              zombie-messages
@mail-all-new-mail  @prev               @resend             
mail-forwarding     @qreply             @rmmail             

Help Database (#60)
---- -------- -----
 name               @eject!             @linelength         remove
"                   emote               @listgag            @remove-feature
:                   encrypt             look                @rename
::                  erase               manipulation        @request-character
?                   examine             @memory             @rmalias
@add-alias          @examine            messages            say
@add-feature        features            @messages           security
@addalias           @features           miscellaneous       @sethome
@addfeature         full-index          @mode               spivak
@age                @gag                @more               spoofing
alias               gagging             @move               @suggest
aliases             @gaglist            movement            summary
backspace           gen-index           news                @sweep
@bug                @gender             @notedit            take
burn                get                 notes               throw
@check              give                objects             tinymud
@check-full         go                  options             @typo
commands            gopher              page                @ungag
@comment            @gripe              @pagelength         @uptime
communication       hand                @paranoid           @users
decrypt             help                @password           @version
delete              home                player-names        whereis
@describe           @idea               players             whisper
descriptions        index               privacy             @who
drop                information         programming         wizard-list
@edit               insert              pronouns            wizard-names
@edit-options       introduction        put                 @wrap
@editoptions        inventory           @quit               write
editors             @lastlog            read                
@eject              letters             @registerme         

Tuesday, July 11, 2017


My current collection of legacy post Amiga (RIP) game development equipment.

Links and more background coming soon.

Playstation Yaroze with Action Replay flash expansion and original RS232 programming cable.

Sega Megadrive with multi port Super Skidmarks cartridge.

Playstation2 scientific computer, aka EU games console tax avoidance Sony scheme #3

Post purple GBA awaits promised connection to Pi2 using no$gba tools.

Sunday, June 25, 2017

Mirror mirror

SiSOP week 3

Relocate php and database from old server - complete.
Merge monkey-x and blitzbasic db forums - mostly complete.
Find poets on twitter - ongoing.
Tune site for googlebot - mostly complete.
Meta enrichment - plan.

Grid Assault by Wiebo as featured on page 6 of the gallery 

Relocate php and database from old server - complete.

The 108 thousand blitz topics including  more than 1.3 million posts are now available as and the spiders on bots continue to index the site.

To optimize the crawling the server was moved from Tokyo to Virginia with a better spec of EC2 instance from Amazon Web Services to boot.

Posts by topic also required an additional index to speed up mysql and some tweaks to the php code. Last but not least, Apache configs such as KeepConnectionOpen=True were applied.

A huge thanks to the Chrome team for the most excellent network diagnostics included in the browser's developer tools!

Merge monkey-x and blitzbasic db forums - mostly complete.

The decision to merge the two sites is now complete. Bots are crawling. Indexes are incomplete.

Find poets on twitter - ongoing.

They use great fonts. Did you just ask me my favorite font face? You're a font face!

Speaking of fonts, here is a favorite, If you are not a Blitz3D or BlitzPlus user download, right button, install this guy, a multiple of 10 points for the win - blitz.fon

BlitzMax looking hot with 10pt Blitz.fon

Tune site for googlebot - mostly complete.

Tuning the google bot crawl rate is very odd. The original numbers were Tokyo with non indexed topics so now we are in Virginia and running optimal on a t2.nano instance. The recent drop in volumes due to googlebot being put back in don't tell me what to do mode.

Google says you must be mobile friendly. Reduction in mobile hostilities complete.

now mobile friendly without touching a single device

Meta enrichment

Using structured data extra fields are planned.

More standards applicable for this step with some more time required studying some of the definitions at

Initially a code / mime tag of bb2, bb, bmx, etc. is planned for all topics and code archives.

Extra step could be a popularity by reference count field, the most referenced code archive etc.

The gallery is in with simplified historical ordering for now and manuals when they make an appearance will hopefully both benefit from a popularity party.

Sunday, June 11, 2017

Mirror constellation for legacy engineering

The Blitz Basic universe is experiencing some disruption this month as Blitz Research Limited moves to streamline their operations.

To free BRL from unrequited burden of hosting legacy support services User 5 is busy sharpening his php skills, and with written permission, is moving the site to his own server, allowing a costly premium grade service commitment to end after an extraordinary 16 years.

mirror status - in due course minus 1

the mirror is feature complete, here being tested with some branding and the best Code archives ever to be assembled by an outstanding community of coders

next steps are being discussed between interested parties so stay tuned.

Sunday, May 28, 2017

Blitz Legacy

The Blitz legacy is alive. Blitz3D + BlitzMax

Requests for BlitzPlus continue to fall on deaf ears. RIP BlitzPlus, survived by two loving kids Blitz Max and Max Gui.

New search tab for remains work in progress, but there is much gold thar in thee Code Archives. Search tab

The number of eyeballs remains a mystery of history.

One of these days there will be an event and the counters will be there.

Speaking of legacy, found this in the archives this morning.

same old issues

Friday, May 19, 2017

Thursday, May 18, 2017

Game Design 3

Interestingly the latest AI circuits recognise themselves as human settlements.  

Wednesday, May 17, 2017

Tuesday, April 25, 2017

Game Design

Play at circuit level to defend the 80's synthesizer from a rapidly mutating electron feeding cyber virus.

The following reference are images of Yamaha YS200 synthesizer main logic board circa 1988.

Saturday, April 15, 2017

evolutionary pathways for language vendor

After some lively banter last weekend ranging from the stupidest idea ever to finders fees on sale of gold plated middleware tech from the heavens aka MonkeyX my current inclination is to consider pathways of evolution.

Applications have roadmaps, language vendors need evolution plans.

Not that there are that many language vendors left in the world.

That our local vendor is considering sale of equity outside it's sovereign reality (at bargain basement price) in terms of technology ownership makes me pause. So I left it a week...

Earlier I had linked in an unrelated email, monkey products from Blitz Research Limited to pooh and I suspect some of that may have wiped off on me. BlitzMax embraced the windows developer with a superior stack of DirectX, OpenGL desktop gadget drivers.

In terms of mobile, BlitzMax is so good, it did the arguably most correct thing, and ignored it.

Instead, MonkeyX transpiler technology was built (using BlitzMax) garnering high praise for it's flexible multi-target versatility. Even bespoke markets like Windows phone could now be plundered by blitzed vendors using keyboards not mice to code their addictive edge.

It is a bit sad that a product called MonkeyX doesn't support DirectX, either rename it MonkeyGL or drop the primate tag altogether I say.

Ignoring the source code licensing shredder / giant recycle bin of github we come to the present in which a small band of merry investors drop their coins in the developers purse to bootstrap an entirely separate strain of transpiler technology welded firmly to the underlying C++ compiler beneath.

Alongside, a small collection of new studios built on the blend of addictive edge and MonkeyX described above operate in the "vendor class" with their own specific requirements, technologies and potential.

Even after accepting many cold ales in the past I don't speak for Blitz Research. However, as an independent but most interested party I have been offered commission should the opportunity arise to secure MonkeyX as a vendor class tool for the approaching decade by way of technology transfer.

Those with an interest, acting independently or as part of a consortium, in the purchase of commercial rights to the MonkeyX technology stack are invited to contact me to discuss.

Simon Armstrong

Sunday, March 5, 2017

maunga junrei

musings of augmented reality project during month long pilgrimage of local volcanic peaks

fitter, healthier,

ohinerau 143m

maungarei 135m

maungakiekie 182m

maungawhau 196m

Te kĊpuke 126m

Te Pane-o-Mataoho 106m

 Auckland Art Gallery