| | Click here to read about how Simon Read made a smash hit game with Monkey | | Over 20 million plays! |
|
| | Users Online: | 1 | | Guests Online: | 8 | | Total Online: | 9 |
|
|
Monkey is a next-generation games programming language that allows you to create apps on multiple platforms with the greatest of ease.
Monkey works by translating Monkey code to one of a different number of languages at compile time - including C++, C#, Java, Javascript and Actionscript.
Monkey games can then be run on potentially hundreds of different devices - including mobile phones, tablets, desktop computers and even videogame consoles.
Monkey saves you time and allows you to target your apps at multiple markets and app stores at once, potentially mutiplying sales several times over.
So what are you waiting for? Get started with Monkey!
Monkey NewsExperimental v71c now up! (submitted by marksibly 1 week ago) | |
| Hi,
[edit]Just uploaded v71b - see VERSIONS.TXT below for details[/edit]
[edit]Just uploaded v71c - see VERSIONS.TXT below for details[/edit]
Highly experimental!
Ok, the main change here is that I've added a new Socket class and nuked pretty much all of the existing tcp/async stuff. See bananas/mak/echoserver_tcp, echoserver_udp and brl.httprequest code for examples of using Socket.
tcp client/server and udp sockets all seem to be going ok, *except* on 'win store 8' apps, which only currently support tcp client sockets. Win phone 8 is OK though - yes, udp echo server runs on win phone 8!
tcpstream survives, but it's now just a wrapper around a socket and can only be used synchronously. Not sure if having this is even a good idea if it can cause apps to be rejected? Perhaps it could be glfw/stdcpp only?
In addition, brl.asyncdataloader has been replaced by DataBuffer.LoadAsync.
These are some pretty major changes, but I think they're for the best and worth getting out of the way *now* instead of later. This kind of represents a 'clean start' for the network stuff, but if I've removed something you were using, and can't find a way to do the same thing with a Socket, please let me know and we'll see what can be done.
There's also a new continuous GC mode (see CPP_GC_MODE below) and a few changes to the GC system. GC now occurs every CPP_GC_TRIGGER bytes allocated (defaults to 8Meg) and the algorithm used to determine how much to mark incrementally has been tweaked/improved/simplified.
***** V71c *****
Fixed Win8 mouse event handling.
Fixed Win8 device orientation issues.
Added PeekShorts, PokeShorts, PeekInts, PokeInts, PeekFloats, PokeFloats to DataBuffer.
***** V71b *****
Added ReceiveAll and ReceiveAllAsync to Socket for receiving known length messages. ReceiveFrom, Send and SendTo are already implictly 'all'...
Version 1 of WinRT UDP sockets implemented - nasty stuff thanks MS, may not be 100% right!
Fixed flash Print security exception.
Fixed trans "Unsafe call!!!!!" bug.
***** V71a *****
Update admob SDKs to android=6.4.1, ios=6.4.2.
Removed modules: brl.asyncdataloader, brl.asyncstream, brl.asynctcpstream, brl.asynctcpconnector.
Added DataBuffer.LoadAsync.
Changed brl.httprequest to use a brl.socket under the hood.
Changed brl.tcpstream to use a brl.socket under the hood.
Added brl.socket for all your tcp/udp needs.
Fixed filestream on stdcpp target.
Fixed win8 tcpstream.
Added CPP_GC_MODE app config setting, one of:
#CPP_GC_MODE=0 'Disable GC #CPP_GC_MODE=1 'Incremental collect every OnWhatever (default) #CPP_GC_MODE=2 'Incremental collect every GC allocation (adds some runtime overhead).
CPP_GC_TRIGGER now controls how much memory is allocated before a GC 'sweep' occurs. Increase this for faster GC at the cost of more 'wasted' memory. Defaults to 8M.
Added CPP_GC_MAX_LOCALS app config settings. This is used with GC_MODE 2 to track local object vars and defaults to 8192. Trans uses 445 locals to build itself, so this should be plenty for most apps but if you're doing something very recursive you might want to bump this.
Tweaked makedocs.
Discuss in forum - 34 posts |
Monkey v70f now up! (submitted by marksibly 1 month ago) | |
| Hi,
I've just uploaded V70f to the 'experimental' section.
It's hopefully fairly mature...well, it would be if I hadn't added a few 'big ticket' features along the way. In particular, the translator now does a better job of auto detecting what's virtual/final etc, which allows for some nifty C++/C/Java optimizations. This was kind of simple to implement and works fine with everything I've tested so far, but it's the kind of tweak that will affect A LOT of code so it's hard to say with absolute certainty that no one will experience any problems. Actually, looking at VERSION.TXT belong, I've added a LOT of 'not strictly necessary for a minor version bump'! Which leads me to...
So when will V70 become stable? And when's V71 happening? My fault - I should have been making more 'hotfixes' (important fixes to a release version) to releases lately, but I've been a bit lazy in that respect, probably because I'm used to doing hotfixes 'manually' (ie: you just fix both the release and current versions by hand!) which has tended to make me avoid hotfixes altogether. However, git has a very cool way of handling hotfixes which I plan to try out soon, so hopefully V70G will be *it*!
There's also a little demo of a simple 'module manager' in this release. To try it out, you'll need to build/run src/modman/modman.monkey in glfw mode. Some notes:
* It's really just a simple driver for hg/git checkout/update ops. hg and/or git must be in your PATH for it to work.
* One repos=one top-level module.
* The repos list is hardcoded into modman.data/repost_list.txt.
* It doesn't handle the built in modules or the monkey package itself in any way.
* It looks for a 'modules_ext' dir in your bin/config file MODPATH to install/update modules to. I've added a default ${MONKEYDIR}/modules_ext path to MODPATH, but feel free to change this to ${SYSTEMDRIVE}/modules_ext or whatever.
Lots to be improved on and I want to give it a tidy up before general release, but I think it's pretty cool! If you've got any modules you'd like added to the repos list, please let me know here.
HttpRequest: Merged devolonter's html5 version addition.
Ted: Console utf8 friendlier.
C++ lang: Print outputs utf8.
Url: Fixed default scheme/port issue.
ios target: Fixed admob not building problem.
MServer: Fixed content type for wav files confusing Firefox.
Android: Fixed ANDRIOD_VERSON_NAME in target config.txt.
Trans: Added debug index checking for String[blah] exprs to cpp/js/as.
Mojo: Added experimental DrawPoly overload with textured image (vertex format is x,y,u,v) - undocced and only available on glfw, ios, android, win8.
Trans: Improved detection of virtual/final etc methods for C++, C# and Java translators.
Trans: Fixed float Mod op bugs.
FileStream: Fixed c++ "u" mode, added "a" for append.
IosGame: Fixed weird virtual keyboard bug.
Ted/Makedocs: Added Alias keyword.
Mojo: Fixed flash LoadState bug.
Mojo: Added Siread's magic ios code for mixing game audio with user music.
Trans: Fixed String(0)<>"0" bug.
Mojo: Fixed win8 DrawLine bug.
Makedocs: Fixed issue with camelCase module names.
Makedocs: Now searches all modules in MODPATH in bin/config.blah.txt files.
Ted: Tweaked win32 proc killer to detect cycles in procs.
Discuss in forum - 28 posts |
Monkey v70c now up! (submitted by marksibly 1 month ago) | |
| Hi,
Latest Monkey is now up (see bottom of product updates page), featuring an improved doc system and lots of minor tweaks.
You can now add docs to modules via separate monkeydoc files in the same dir (or in a monkeydoc/ subdir) as the main module file, or via #Rem monkeydoc comments in module source .monkey files. 'Rebuild Docs' is back in Ted (see Help menu) and you can add doc themes in the docs/templates dir. To change the theme used by Makedocs, edit bin/docstyle.txt. Currently, there's only devolonter and blitzmunter to choose from. See MonkeyDoc tool docs.
I've added Mojo OnClose/OnBack handlers mainly to keep win8 happy - as far as I can work out, there's no way to programatically close a win8 app. All you can do is NOT cancel an OnBack event inside an OnBack handler, so on Win8, you must Error "" (or use new EndApp) inside OnBack or it wont work.
Android/Winphone8 apps will call OnBack when back button is pressed, and Glfw apps will call OnClose when window close gadget is pressed. By default, OnBack calls OnClose, and OnClose calls EndApp, so by default, apps will now just 'end' when back/close is pressed.
I've got the virtual keyboard mostly going in winphone8, the only snag being there's no way to stop it closing when 'back' is pressed. See EnableKeyboard docs for more info on this. This is proving MUCH trickier to achieve for win 'store' apps and I'm still a bit stuck on this one.
Winphone8 apps can also now use TCP modules as winphone8 supports the widely used/understood etc sockets API. Alas, for some bizarre reason the sockets API is not available to win store apps, and has been replaced by something 'modern' (that no doubt uses sockets underneath) and I haven't quite got my head around Monkeyizing that yet.
[edit] v70e now up! Another fix for ios device size issues [/edit]
[edit] v70d now up! Fixes an android manifest problem AND adds Win8 multitouch support! [/edit]
Updated glfw linux makefile.
Fixed bool const evalutor bug in trans.
Fixed Invalid DeviceWidth/DeviceHeight in OnCreate on iOS.
Added ANDROID_VERSION_CODE and ANDROID_VERSION_NAME app config settings.
Fixed winrt threads and winphone8 sockets.
Added Rebuild Help to Ted - can't get QWebPage reload working though, so you'll have to manually right-click/reload the page.
Added Makedocs to rebuildall.bmx/bin.
Added Close Others to Ted.
Added Stack.Sort.
Added brl.filesystem module.
Added Check/Update to Ted's build menu.
Added OnClose and OnBack to mojo App class - on window phone 8, these are the ONLY places you can call EndApp. By default, OnBack calls OnClose and OnClose calls EndApp, so by default back/close will both end an app.
Added EndApp to Mojo. Use this instead of Error "" if you're using Mojo. Error "" still works.
Added monkeydoc as a textfile type to Ted so you get wordwrap.
Html5 Mojo now handles Audio-less DOMs.
Ted rebuilt with Qt4.8.4 on Windows/Mac - tried on Linux: too hard...
Ted console no longer htmlizes app output.
Fixed JoyHit not reseting.
Added temp SaveState_V66b().
Merged mwtb's html5 SetScissor fix.
Merged Devolonter's bananas tweaks.
Added WIN8_PRINT_ENABLED app config var - defaults to 'false', due to apps with print failing 'app store' guidelines.
Added EnabledKeyboard/DisableKeyboard support to windows phone 8 - not yet windows (store?) 8. Note: 'back' on windows phone 8 ALWAYS clears virtual keyboard, whether or not you call DisableKeyboard in response to GetChar()=27. See EnableKeyboard/DisableKeyboard docs for how to handle this.
Fixed Select in generic code causing internal error.
Fixed Android LoadBitmap so it returns Null instead of throwing exception.
Added file path to 'invalid utf8' warning in os.LoadString; rebuilt trans.
Added "screenSize" to android target manifest android:configChanges setting so apps with targetSdkVersion>=12 don't reset when orientation changes.
Merged Ziggy's mserver tweaks.
Discuss in forum - 55 posts |
Monkey V70 now up! (submitted by marksibly 2 months ago) | |
| Hi,
Monkey V70 is now available.
This is my first attempt at creating a release from the Github 'master' branch (which I'm yet to 'tag' as such) so I've uploaded it to the experimental section for now.
Slowly getting my head around github, but there's a lot to learn!
Souped up win8 VB performance; fixed several win8 bugs.
Moved all input related constants to mojo.keycodes module.
Put all native code imports inside #If target/lang conditional blocks.
Added some BLAH_IMPLEMENTED checking to extern class decls in brl.
Added InsertBefore, InsertAfter, InsertBeforeEach and InsertAfterEach methods to List.
Semi major Android target change: moved Activity suspend/resume handling code from onSuspend/onResume to onWindowFocusChanged( boolean ).
Discuss in forum - 43 posts |
Monkey V69 now up! (submitted by marksibly 3 months ago) | |
| Hi,
Featuring a few overdue additions to the win8 target...
Added WIN8_SCREEN_ORIENTATION app config setting; use a bitwise OR of: 1=Portrait, 2=Landscape, 4=Portrait flipped, 8=Landscape flipped.
Added win8/winphone8 ReadPixels, Image.WritePixels to mojo graphics.
Tweaked httprequest, removed httpgetter.
Discuss in forum - 25 posts |
Monkey V68 now up! (submitted by marksibly 3 months ago) | |
| Hi,
V68 is now up, while V67f has been promoted from 'experimental' to 'usable'.
Just a few fixes/additions for V68:
Fixed some reflection bugs causing build errors.
Added Mac (iOS and glfw) versions of OpenUrl.
Added PeekString/PokeString to DataBuffer.
Added brl.httpgetter module for ios/android/glfw.
[edit] V68b is now up - mainly to get glfw on Mac working again, but also including...
Fixed DataBuffer.PeekString in ascii mode return negative char values.
Fixed glfw shift/ctrl keys not working.
Fixed mojo openal audio panning.
Added ApplicationServices.h include to glfw target main.h for NSURL.
Fixed html5 'susended' misspelling!
[/edit]
Discuss in forum - 46 posts |
Mini-update for v66 now available! (submitted by marksibly 5 months ago) | |
| Hi,
I've just uploaded a V66b 'mini update' that fixes a few issues in V66 that are IMO pretty critical:
* The Android v4.2 'vertex buffer' fix. This is a critical fix necessary to be able to run Monkey apps on Android 4.2 devices. You can apply this fix manually to pre-v66 versions of Monkey if you want - see bug reports forum.
* A fix for iOS 5.1.1 orientation woes. Turns out you can't use Interface Builder to connect up an app's 'rootViewController' - it has to be done programatically, or weird things happen in 5.1.1.
* A fix for images not discarding themselves quickly enough due to incremental GC. Also copied some of the new v67 GC in...
* A fix for the iOS GLFW bug that caused builds to fail in release mode.
* Changed the 'Base SDK' setting in iOS GLFW target to 'current', hopefully preventing the freaky '<stdlib.h> not found' style errors that keep popping up.
Note: This release does not include recent fixes to trans, Linux builds or indeed any new binaries. This stuff will remain in v67 which is what I'll be concentrating on from here on in.
Discuss in forum - 26 posts |
MonkeyPro V66 now up! (submitted by marksibly 9 months ago) | |
| Hi,
MonkeyPro V66 is now up!
File streams have been added to the brl module (not supported in html5/flash). Use standard file paths on desktop targets, or prefix file paths with "monkey://internal/" to access internal storage on android, ios, xna and psm. Note that you wont be able to open files in "monkey://data/" on all targets, so this will mainly be of use for caching data etc on non-desktop targets.
I've also had a bit of a play around with update rates and syncing, particularly on the PSM where things will hopefully run a bit smoother now.
It turns out the PSM appears to have a slightly strange vsync mechanism - it will vsync, unless 1/60 of a second has passed since the last render, in which case it wont! Or something. Anyway, Monkey should deal with this better now, but please note that the PSM target (and XNA if you have #XNA_VSYNC_ENABLED=True) will no longer issue multiple updates per render if things appear to be slowing down - I just couldn't work out how to get it working usefully/cleanly with the PSM's vsync mechanism.
I'm starting to think the whole 'multiple updates to catch up' idea isn't so hot anyway - esp. when things are vsynced. With vsync on, there's a chance executing extra updates will just cause the next render to miss the next vsync, and therefore be forced to wait for the one after that, resulting in an even bigger lag.
I'll think about this a bit more, but right now I'm tempted to make update rate a 'max FPS' rate, and leave it up to clients to deal with slowdowns - ie: as long as your code executes within the given update rate, everything works. If not, you're own your own! In a lot of cases, you may not give a stuff if things chug a bit here and there, and NOT doing the multiple updates thing will mean it gets back to normal sooner.
Finally, there are some Mac fixes in there and the opengl samples should work again. I also had a quick hack at minib3d and got the demos going although I had to prefix file paths with "monkey://data/".
Modules:
brl - added filestream module.
psm/xna - tweaked update rate logic, should be a bit 'cleaner' now esp. on PSM. Added XNA_VSYNC_ENABLED config var (defaults to false) to XNA. Use this + 60FPS update rate to get 60FPS on WP7.
xna/psm mojo - changed SaveState/LoadState filename to '.mojostate'.
Targets:
Added monkey://internal/ support to glfw, stdcpp, android, ios, xna and psm targets.
Fixed ios view controller orientation issue with ios6.0.
Trans (V1.42):
Improved support for spaces in preprocessor stmts.
ios target now creates a Documents dir on simulator for use by //internal/.
Discuss in forum - 63 posts |
MonkeyPro V65 now up! (submitted by marksibly 9 months ago) | |
| Hi,
MonkeyPro65 is now available - lots of changes so highly experimental!
More details can be found here...
http://marksibly.blogspot.co.nz/
Modules:
mojo - Added async loaders.
mojo - fixed dependancies on bool config settings - changed lots of =="true" to =="1".
reflection - no longer sets reflection filter to '*', so by default nothing will be reflected even if you import reflection.
brl.databuffer - android version no longer supports 'direct' ByteBuffers.
Added brl modules: brl.asyncevent, brl.asyncstream, brl.asynctcpstream, brl.asynctcpconnector, brl.ringbuffer.
Targets:
Updated GLFW to 2.7.6 for Mac joypad support - added IOKit framework to glfw xcode project.
Converted all CONFIG.TXT files to monkey preprocessor source.
Trans (V1.41):
Target CONFIG.TXT files are now monkey files that are preprocessed only. This means you will need to prefix each CONFIG.TXT line with '#' and enquote params. This is a definite 'delete/update' .build dir change.
Added preprocessor config var += operator, mainly for use with adding reflection filters.
Preprocessor config vars can now be modified, UNTIL they are used - ie: once a config var is evaluated for use with #If, #Print, #Error #blah= etc, it cannot be modified.
Added String.ToChars:Int[]() method.
Discuss in forum - 41 posts |
MonkeyPro64 now up! (submitted by marksibly 9 months ago) | |
| Hi,
[edit]64b now up - fixes a bug with loading databuffer/strings on Android[/edit]
MonkeyPro64 is now available featuring databuffers (again), streams, datastreams and tcpstreams, all wrapped in a new brl module.
To import all the new stuff, just use "Import brl".
Databuffers are pretty much the same as the opengl version (and the opengl version is still there and still used by opengl for now - will change soon) except that Size has been renamed Length ('coz that's what I kept wanting to type!). I generally like to use Size when referring to 'number of bytes' and Length when referring to 'number of elements', but in this case they're the same...
There's a new BINARY_FILES filetype filter in CONFIG.TXT you can use to decide what files should be considered raw data. Such files can be loaded directly into a databuffer via DataBuffer.Load. The filter defaults to "*.bin|*.dat".
You can 'read' a binary file using something like:
Local stream:=New DataStream( DataBuffer.Load( "GameLevel1.bin" ) ) Local mapWidth:=stream.ReadInt() local mapHeight:=stream.ReadInt() ...etc....
TCP streams are synchronous and no doubt some timeout mechanism will need to be introduced at some point, but they seem to work well enough if you're connected up. Certainly well enough for doing an HttpGET every now and then. UDP isn't in yet though.
See the bananas/mak/httpget sample for a quick demo of tcpstreams. Note: tcp streams only work on C++/Java targets.
[edit]Oh yeah, you can now use mingw to build glfw apps, just set the app config setting GLFW_USE_MINGW to true - in fact, I probably left it in several of the samples!
Note: There's a mingw distro out there with gcc v4.7.1, but Monkey doesn't seem to like it - it's caused a few unexpected crashes here and there. Everything works fine on MSVC, gcc 4.61 and MacOS gcc/llvm, so it doesn't appear to be anything to do with Monkey. If you're using mingw, I recommend using gcc 4.6.1 - here's the one I'm using: http://tdm-gcc.tdragon.net/
Discuss in forum - 29 posts |
|
|