Monkey speculator

Community Forums/Monkey Talk/Monkey speculator

JeeyD(Posted 2013) [#1]
Hi, we've been trying Monkey for some time now, what's available and so on. Trying to get the feeling for it...

So far we got the picture that,

Max has the same more c++/java like syntax.

Blitz3D has BASIC syntax, though 3D in focus.

BlitzPlus has BASIC syntax, with UI in focus.

Monkey has UI elements for sure? and leans towards Max in its syntax?
And might or might not have much 3D focus?

We compare these things as we know those well indepth (except MAX and Monkey)

And now we're seriosly are considering Monkey, and learn that instead.
And would like have input what others feels about Monkey, differences and pluses and minuses.

Is there anything more one need to know about differences Monkey has from these?


Who was John Galt?(Posted 2013) [#2]
Bar a few minor tweaks, BlitzMax syntax is pretty much a superset of BlitzPlus/Blitz3D (without the 3D commands, with out-of-the-box '2D in 3D'). Monkey syntax is similar to Max. I would say the syntax is BASIC on steroids.

You want to develop only for PC/Mac/PC-Linux? Max is your best bet.
You want to develop for all the above, plus XBox360, web and a range of mobile devices? Monkey does that.


GfK(Posted 2013) [#3]
You want to develop only for PC/Mac/PC-Linux? Max is your best bet.
You want to develop for all the above, plus XBox360, web and a range of mobile devices? Monkey does that.
...and while you can develop for PC/Mac in Monkey, there are several reasons why you probably shouldn't.

Not dissing Monkey, but there exists some shortfalls which for me, make it a non-starter. First, you can't switch between fullscreen/windowed mode at runtime - I make casual games and any game that has this limitation will fail QA instantly. Second, you're limited to OpenGL, whereas Blitzmax allows you to use DirectX 7/9, or OpenGL. I favour DX9. Also, the last time I used Monkey, saving game data was limited to LoadState/SaveState (which basically loads the saved data into a massive string object). All well and good, except certain characters weren't allowed and resulted in the string being truncated, or being completely empty. The effects varied from target to target. This *might* have been improved by now. There is a debugger now, but only for the GLFW target I believe. So expect to be tearing out handfuls of your own hair if you're planning on developing exclusively for any other platform.

If you want to develop for mobile platforms then it's a really good option, but don't expect it to be as advanced and flexible as Blitzmax.


Tricky(Posted 2013) [#4]
What kept me away from Monkey is that it's pretty expensive, and what do I get back for it? The fact that Monkey works on a call-back basis is a big no-no for me. That may work great for writing routines that enhance a website but not for games and utilities. The lack of a proper function reference is a big eyesore for me and a BuildDocs tool, like BMax has, doesn't appear to be there.

With some analysis of the source code of the modules you get for that money I see a lot of features that I use in BMax all the time not even present in Monkey at all. Perhaps compatibility with all platforms is my guess why it should be that way, or maybe the demo version of Monkey shows me so little that I get a wrong picture of the real deal.

Now I am a person who's willing to pay for quality, but I not sure I get what I pay for. And I really wonder if tablets and phones (what Monkey aims for) are really the future, or if they are nothing more than a hype that will die in a few years if not shorter. Running the game on a game console like XBox360 sounds cool (and I wonder if Monkey will also be able to handle OUYA in the future), though, but I'm not convinced Monkey is the right language for that given my note above.

Perhaps you are more optimistic than I am, and my apologies for saying this on the OFFICIAL website, but I like to be honest on this topic. I've given Monkey a long thought and this is my reason why I still didn't buy it.


JeeyD(Posted 2013) [#5]
Bar a few minor tweaks, BlitzMax syntax is pretty much a superset of BlitzPlus/Blitz3D (without the 3D commands, with out-of-the-box '2D in 3D'). Monkey syntax is similar to Max. I would say the syntax is BASIC on steroids.

You want to develop only for PC/Mac/PC-Linux? Max is your best bet.
You want to develop for all the above, plus XBox360, web and a range of mobile devices? Monkey does that.



Okay, BASIC on stereoids sounds really nice. Android is primary but also iOS is interesting, Desktop such as Windows and Macos secondary but still interesting well worthwhile targets having.



...and while you can develop for PC/Mac in Monkey, there are several reasons why you probably shouldn't.

Not dissing Monkey, but there exists some shortfalls which for me, make it a non-starter. First, you can't switch between fullscreen/windowed mode at runtime - I make casual games and any game that has this limitation will fail QA instantly. Second, you're limited to OpenGL, whereas Blitzmax allows you to use DirectX 7/9, or OpenGL. I favour DX9. Also, the last time I used Monkey, saving game data was limited to LoadState/SaveState (which basically loads the saved data into a massive string object). All well and good, except certain characters weren't allowed and resulted in the string being truncated, or being completely empty. The effects varied from target to target. This *might* have been improved by now. There is a debugger now, but only for the GLFW target I believe. So expect to be tearing out handfuls of your own hair if you're planning on developing exclusively for any other platform.

If you want to develop for mobile platforms then it's a really good option, but don't expect it to be as advanced and flexible as Blitzmax.



Fullscreen - windows at runtime could be a drawback but probably not a stopper. But it feels abit like a pig in a sack even after trying around the demos and such.. OpenGL feels like the best bet as it svery open and general, but on Windows, recozignized it sometimes comes 2nd to DX in performance and perhaps features, so that's understandable, just a bit of preference there. I saw last update of Monkey had Playstation mobile 60fps and such, that feels promising. Debugger is not much of downer here not using those kind of tools much actually. Could one at least see it as scalable growing projects as for example Blitzmax one wonders.


What kept me away from Monkey is that it's pretty expensive, and what do I get back for it? The fact that Monkey works on a call-back basis is a big no-no for me. That may work great for writing routines that enhance a website but not for games and utilities. The lack of a proper function reference is a big eyesore for me and a BuildDocs tool, like BMax has, doesn't appear to be there.

With some analysis of the source code of the modules you get for that money I see a lot of features that I use in BMax all the time not even present in Monkey at all. Perhaps compatibility with all platforms is my guess why it should be that way, or maybe the demo version of Monkey shows me so little that I get a wrong picture of the real deal.

Now I am a person who's willing to pay for quality, but I not sure I get what I pay for. And I really wonder if tablets and phones (what Monkey aims for) are really the future, or if they are nothing more than a hype that will die in a few years if not shorter. Running the game on a game console like XBox360 sounds cool (and I wonder if Monkey will also be able to handle OUYA in the future), though, but I'm not convinced Monkey is the right language for that given my note above.

Perhaps you are more optimistic than I am, and my apologies for saying this on the OFFICIAL website, but I like to be honest on this topic. I've given Monkey a long thought and this is my reason why I still didn't buy it.


Been looking at Monkey long bc it IS abit expansive, and changing language and be dissapointed is not very tempting. But if it really truly works it must defintily be worthwhile having. What you mean by call-back basis?

Demos and documentation and trial could be alot better probably it's tough to get an overview, for exmaple also interested in native details and for exmaple OUYA (which seem to might be there soon in discusssions but no 100% certain answers yet ) but it IS Android so very plausible idea. There's that hype-is-it-worth-it that comes to mind, there's alot of multiplatofrms now thats the true hype thing to have, most are bad glue with missing. Appcelerator (price per period I think... way too much), app.js and monkey is up there so far for us, but app.js has same as Blitzmax, no mobile, not yet, so its a nono. With you on Monkey, and been thinking a long time. The perfect platform langauge would be web itself, js which has, its and amazing lanaguge and platform when its useed correctly, but its not there yet. Monkey is the best seen so far. Missing things such as opengl 2.0 shaders.. and all native things in platforms...

Thanks, and appriciating every input


ziggy(Posted 2013) [#6]
I would recommend Monkey over BlitzMax right now. The language is far better and it's very open and easy to integrate with thirdparty modules. Also, current experimental version should bring some platform specific things to the party, and make targetting plaforms even easier.
Also, to the saving data issue Gfk was mentioned, the save based on strings is the true cross plaform way to do it, including html5 on a browser, but you can use the os module to write real files on the os when using a c++ based target such as GLFW, so in case you're developing for the desktop and willing to support file I/O operations, you can do it out of the box.

The only 2 things I miss is a way to toggle full screen on/off in GLFW and a DX driver for windows, but this is arguabe, as there's a specific windows 8 target on latest version, wich uses the DX windows 8 API for its rendering, so it's sort of solved.

Also, it's hard to believe that BlitzMax will take the ARM route anytime soon, while this could be trivial for Monkey.


Wiebo(Posted 2013) [#7]
I also miss the Long type in Monkey.


Oddball(Posted 2013) [#8]
Each update I give monkey another try, and every time I have to start kludging stuff and finding workarounds within the first 10 minutes. There's nothing wrong with the language per se, but having to cater to the lowest common denominator means that it's light on functionality. That's fine if you are coding for the low end targets like html5 or mobiles, but when you want to push things with an ambitious desktop game it's hard going.

I think as mobile and web targets become more advanced then monkey will be able to include more advanced functionality, but until then I'll probably use monkey for small desktop/web/mobile games, and find something more complete for my larger projects.


Who was John Galt?(Posted 2013) [#9]
There's nothing wrong with the language per se, but having to cater to the lowest common denominator means that it's light on functionality.
That's the crux of the matter. If only there was some extra PC/Mac/Linux only functionality that brought it inline with the capabilities of Max, it would be the best of all worlds.

The fact that Monkey works on a call-back basis is a big no-no for me.
Unless you're doing something really specialist (and I can't think of such an example), this is a very minor irritation at worst. Slap a few lines of boilerplate code in one file, then the rest of it works just like Max.


ziggy(Posted 2013) [#10]
but having to cater to the lowest common denominator means that it's light on functionality
C++ does not have overloading, interfaces, reflection, generics or a built-in GC and Monkey does. JavaScript does not have generics, or compile-time type safeness (some will considere it a good thing), just a a quick example of how Monkey does not limit you to the lower common denominator and adds functionality instead.


Oddball(Posted 2013) [#11]
I was actually talking about real functionality, not pointless programming buzzwords. For example, mobile and html5 can't have resizable windows so in monkey neither do the desktop targets. Like I said the language itself is fine, it just lacks some practical functionality of the more advanced targets.

Last edited 2013


ziggy(Posted 2013) [#12]
I was actually talking about real functionality, not pointless programming buzzwords.
Of course, some of use do use those pointles programming buzzwords to actualy do things. For me, saying that reflection or generics is something pointless, sounds a bit weird. Is like saying arrays are pointles, or inheritance is a word and not something that you can beneffit from on your daily coding. Those technologies help reducind development time and maintenance costs by making things a lot easier once you know what they are.

For example, mobile and html5 can't have resizable windows so in monkey neither do the desktop targets.
Unless Monkey does have resizable and fullscreen windows on all desktop targets and, by the way, you can also make the HTML5 target be resizable. However, I haven't seen any resizable Android phone yet, so it's not resizable on that.

As instance, this very simple sample of the GUI library I'm writing for Monkey shows an auto-resized html5 target that also make its contents auto-fit the window size as you resize the browser.

EDIT: This is the sample I was talking about: http://www.jungleide.com/samples/junglegui02/

Last edited 2013

Last edited 2013


Oddball(Posted 2013) [#13]
So you're saying that monkey does have resizable windows and fullscreen switching on windows and mac? They should mention that somewhere coz I couldn't find the functions for it.

Edit Is it new in v67? I'm looking at the docs for v66 and I can't find it. Have you got some example code for the glfw target coz I'd like to be able to have resizable windows for my games?

Last edited 2013


shinkiro1(Posted 2013) [#14]
Monkey can have resizable windows for glfw/xna (it's done via preprocessor)

As others have said, BlitzMax may be the better choice if you are targeting desktops.
For anything else I would recommend monkey as it is far superior as a language and it's advancing nicely.


JeeyD(Posted 2013) [#15]
Knowing Mac is needed for ios /mac platforms, but is windows and everything else possible on mac?


AdamRedwoods(Posted 2013) [#16]

Missing things such as opengl 2.0 shaders..

it's in there, but not for the mojo engine yet. (but it's in the minib3d engine)

it is REALLY hard to keep up with all the targets and make sure Monkey is working for each. i commend Mark on his efforts.

As others have said, BlitzMax may be the better choice if you are targeting desktops.

True. Monkey's PC/OSX/Linux targets is based on GLFW, so if you look at the GLFW roadmap you'll see all that nice stuff is coming down the pipe (multi windows, window switching, 64-bit).


Who was John Galt?(Posted 2013) [#17]
One thing that springs to mind is the lack of alpha'd sprites in Monkey.


AdamRedwoods(Posted 2013) [#18]
One thing that springs to mind is the lack of alpha'd sprites in Monkey.

by alpha'd, what do you mean? monkey supports alpha in sprites, fading of sprites, etc. monkey also supports dynamic sprite creation.


Who was John Galt?(Posted 2013) [#19]
I mean as per BlitzMax setalpha command. I guess this has been added since I last looked. My reasons for coding in Max are becoming fewer and fewer.


therevills(Posted 2013) [#20]
SetAlpha has been in Monkey since day one, maybe you are thinking of SetColor... Which wasn't but now is...

Last edited 2013


Oddball(Posted 2013) [#21]
ziggy wrote:
Monkey does have resizable and fullscreen windows on all desktop targets
shinkiro1 wrote:
Monkey can have resizable windows for glfw/xna


I'm sorry to derail this thread but I can't find the functions to resize the window. Could someone write a quick piece of monkey code that starts out at 640x480 windowed, then switches to 800x600, then switches to fullscreen, and then back again. I'd really appreciate that. I've looked over the docs again and still can't seem to find it.

Last edited 2013


ziggy(Posted 2013) [#22]
You can use this preprocessor directives:

#GLFW_WINDOW_TITLE:String="Monkey Game"
#GLFW_WINDOW_WIDTH:Int=640
#GLFW_WINDOW_HEIGHT:Int=480
#GLFW_WINDOW_RESIZABLE:Bool=false
#GLFW_WINDOW_FULLSCREEN:Bool=false

And change them. what you can't do is switch from fullscreen to windowed at runtime becouse that's not possible (AFAIK) on current GLFW but it's being developed, so it may be possible soon. Other than that, you csn easily make a resizable GLFW window, and give it a default size. Or you can set a given fullscreen resolution and make the app fullscreen.


Oddball(Posted 2013) [#23]
So now you're saying you can't resize the window? I already know how to set the window's initial resolution.


ziggy(Posted 2013) [#24]
I'm saying the same I said, you can make resizable windows, and you can make fullscreen applications on desktop.
I'll quote it, just in case:

Monkey does have resizable and fullscreen windows on all desktop targets and, by the way, you can also make the HTML5 target be resizable.


It's fun to self-quote. That said, I've always said the same I'm saying now.

To make a GLFW window resizable, just set the resizable boolean to true. To make it fullscree, set the fullscreen to true.

If you want to resize it during runtime, programatically, I don't know how to do it, but I supose it should not be too complicated to find out. On windows, a SetWindowPos call would do it, and I'm pretty sure there's a corresponding command on native MacOs APIs and XWindows, etc.


Oddball(Posted 2013) [#25]
So there isn't a function to resize the window or to toggle fullscreen? Glad we cleared that up.

Sorry for the derail, you can all carry on with your discussion now.


JeeyD(Posted 2013) [#26]
Tried to figure what platforms are compilable for MAC respectivley PC with Monkey?

What platforms could get with a PC or Mac? The pages doesn't say promptly?


ziggy(Posted 2013) [#27]
AFAIK, iOS and MacOsX are the only platforms that are Mac exclusive, while XNA, and Windows 8 is the only platform that is Windows exclusive.

Haven't spend time in checking out if the Playstation target works on a Mac, but it dows work properly on windows.

Also, to sumarize the blitzMax versus monkey etc.. Don't forget that you can use BlitzMax as a Monkey target, so it generates a BlitzMax compiled executable where you can add all the BlitzMax native stuff, so get any resizable and whatever to the desktop build, and also later on publish the game for all kind of devices. So if you already own BlitzMax, going to monkey does not mean loosing anything, you can add some final bits on BlitzMax (like device configuration) to the game, and leave the rest on Monkey for the sake of being portable to almost anywhere.


therevills(Posted 2013) [#28]
So there isn't a function to resize the window or to toggle fullscreen? Glad we cleared that up

You can resize the window if you use extern commands which are included in Diddy, but due to GLFW you can not go toggle between window and fullscreen easily (I tried several ways and always lost the image data). A new version of GLFW is meant to be in the works which adds this.

Also you can use MonkeyMax, which converts Monkey to Max and then you could add externs to toggle between fullscreen mode yourself.


MikeHart(Posted 2013) [#29]
If you plan on doing only desktop apps, then I would recomment BlitzMax as long as it runs on your targeted platforms. The beauty in Monkey I see because of...

1) Sources are available to me. If Mark ditches it, I still can work on it myself.
2) I can do bugfixing myself and don't have to wait for the language creator to release it.
3) The target system, which is becoming more flexible with the next version. EVERYONE can add new target platforms.
4) Its language, simply but VERY effective.

Mark just stated that he is working on Admob, Flurry and GameCenter related targets/modules for the next version. The MonkeyMax target let's you use BlitzMAx instead of GLFW. There is already a MiniB3D module which supports D3D11 I read. Again, the flexibility that Monkey provides, is pure Gold. If you are after something that caters you 100% and you are willing to wait for its creator to release new updates, then go with BLitzMax or AGK imho. But we know that BlitzMAX is not getting any new functionality atm.


ziggy(Posted 2013) [#30]
@MikeHeart: I agree 100% on your statements. I would just add that the language is simple and VERY efective, but BlitzMax is simpler than it (no overloading, no generics, no self-contained imports structure, no interfaces)

Last edited 2013


JeeyD(Posted 2013) [#31]
So, developing for Windows7 and older is possible with Mac and Monkey?


JeeyD(Posted 2013) [#32]
If developing for Android , things like specific SDK's which need include JAR files. Is that possible too?


MikeHart(Posted 2013) [#33]
JeeyD, on OSX you can not compile windows based targets. Same goes when you are on windows, you can't compile for OSX or IOS there.


MikeHart(Posted 2013) [#34]
JeeyD, you can interface with native stuff easily via extern calls as long as it is just a simply call. You might need to add extra libs and extra source code to a build project first. Mark said at one time that he has ideas about giving Monkey the ability to link native libs via monkey itself but who knows when that will be.

Last edited 2013


JeeyD(Posted 2013) [#35]
Now very interested in using Monkey for Android; and understanding that you still need tried install developments for most platforms for example Android to ahave that platform accessible target in Monkey.

New at Android development and Eclipse and the lot, but understanding programming as such very well, gave it a go, both on Mac and on PC, downloaded the Android SDK package. It was a terrible experience. The windows somewhat worse with creashes. But also on the Mac. But actually setting up serttings and understanding what was going on and so on was the worst bit. Not done yet.

Wanting to try Monkey, and FORGET about whats behind. If one was to start on a clean slate from a fresh windows install, explained to as to a a complete knitwit at techhnolody, is there a installation thats understandable to get Monkey working on a fresh setup of Windows?


The Android texts are extremely sparse, and all settings that are needed ontop to even get something working seem to be assumed knowdledge, its crazy.

But as it is... VERY tempted to buy Monkey now. Just need to know theres a way to install it correctly on Windows. Any help on makeing a newbie (at Android, Java, Eclipse etc) would be so much helpful. Been programming for 30 years, still this is such a new area...


Its very tempting to give it a shot, and gladful for any help getting thigns started properly.

Last edited 2013

Last edited 2013


MikeHart(Posted 2013) [#36]
Sorry, i am on Osx. There you just install Android in the right path, make sure you run all its patches and then you go. If you bought Monkey. The free version is html5 only. Also have a look at the config files in monkeys bin folder, so the paths match your sdk location. And make sure you have the sdk installed in the default places.


ziggy(Posted 2013) [#37]
Well, you can compile for windows on the mac ( http://crossgcc.rts-software.org/doku.php?id=mingwformac ) but I would not recommend it, it's easier to intall parallels or any other VM on mac to do this, if you happen to have any windows license.


JeeyD(Posted 2013) [#38]

Sorry, i am on Osx. There you just install Android in the right path, make sure you run all its patches and then you go. If you bought Monkey. The free version is html5 only. Also have a look at the config files in monkeys bin folder, so the paths match your sdk location. And make sure you have the sdk installed in the default places.





Let's say I try Mac, bc I have that one installed aswell, according to most installs they install Eclipse separately but recently they Android site seem to have made great effort making a single download. So that's what is on my desk, and had to learn bugs and faults how to deal with them and how to update the SDK etc. Got 1 or two downloaded examples from github actually going (in a slow debugger but today I got my hands on a Android phone so that might change if I got THAT Working). No patches manually no editing done the Path seemed okay out of the box too. But its a strange beast. Yesterday it asked med to hold down the mac power and shaded the entire screen redndering everything forever locked, never happended on Apple before. That was when trying to compile Frodo 64 Android version from gituhub ( https://github.com/shagr4th/FrodoC64 ) . As many examples that just didn' t work out of the box? This kind of mess makes me worried about adding Monkey without knowing these kinds of things?

What steps to take learning all this so one is prepared to do stable development for Android? Both Macos and windows ways are so very welcome.



Well, you can compile for windows on the mac ( http://crossgcc.rts-software.org/doku.php?id=mingwformac ) but I would not recommend it, it's easier to intall parallels or any other VM on mac to do this, if you happen to have any windows license.


I see, thanks, thats good to know.


Yan(Posted 2013) [#39]
Ever so slightly off topic, but...

Does anyone else keep reading the title of this thread as 'Monkey Spectacular' and instantly gets a mental image of twelve monkeys on unicycles juggling pineapples?

Yeahhhhh...Probably just me then...


Goodlookinguy(Posted 2013) [#40]
I don't get the same mental image, but I do keep accidentally reading it as 'Monkey Spectacular.'


Neuro(Posted 2013) [#41]
but I do keep accidentally reading it as 'Monkey Spectacular.'

lol, thats what i thought it said.


Who was John Galt?(Posted 2013) [#42]
Does anyone else keep reading the title of this thread as 'Monkey Spectacular' and instantly gets a mental image of twelve monkeys on unicycles juggling pineapples?
LoL! No, oranges.


JeeyD(Posted 2013) [#43]
Yes indeed and who knows? Monkey might juggle both Oranges, Pineapples completely through the window, along with apples. And might very well be spectacular.

It's that juggling part that's tricky.

Let's pray and see.


JeeyD(Posted 2013) [#44]
Finally got some people from a company to show off how to use Android SDK properly use and also some introductionary of Monkey on top of it everything. Very impressive. Some lacking bits but those will probably be filled in with time if history repeats itself.