Experimental V67b now up!

Monkey Forums/Monkey Programming/Experimental V67b now up!

marksibly(Posted 2012) [#1]
Hi,

Experimental version 67b is now up!

You can now build Flash and Android targets on Linux. You will need to install the SDKs (and Java JDK) and probably ant (try: 'sudo apt-get ant') and make sure the bin/config.linux.txt file is correct.

I refactored the bbgame stuff considerably, so it should be possible to customize target behavior by editing the smallish native monkeytarget files alone (eg: targets/glfw/modules/native/monkeytarget.cpp) and overriding BBGame methods and/or modifying app startup etc. I'm starting to think this is fast reaching the point of overkill and I'll probably have a go at (maybe) adding some stuff like gamecenter directly to the Monkey package. Hopefully this new target stuff will still be useful for people wanting to make their own esoteric changes...


Added SetScissor to win8 targets.

Added some rectangle/array error checking to DrawImageRect, ReadPixels, Image.WritePixels.

Ted changes: http:// links in docs now open in external browser.

'monkeytarget' module now always imported - targets should always include a monkeytarget module, even if it's a NOP. No top-level monkeytarget modules outside of targets please!

Print now a NOP in win8/winphone8 so apps validate - will fix.

Fixed the winphone8 target project ARM settings.

Refactored the new target stuff.

Fixed the reflection bug in transcc.




tiresius(Posted 2012) [#2]
We all appreciate the efforts of these fast quality updates. I must be truly spoiled when 2 months go by and I feel neglected. Thanks for making a great language even more fantastic!


therevills(Posted 2012) [#3]
Thanks for the update Mark!

Is the new functionality of Millisecs() permanent?
http://www.monkeycoder.co.nz/Community/post.php?topic=4061&post=43859


marksibly(Posted 2012) [#4]
> Is the new functionality of Millisecs() permanent?

I think it probably should be as it's more useful for rnd numbers.

There was one platform I originally had problems with getting a 'real' Millisecs on though, can't remember which one. I'll double check, but I'm more confident now that I can come up with something for all targets than I was a year ago.


therevills(Posted 2012) [#5]
I think it probably should be as it's more useful for rnd numbers.
Yep! That's why it was one of the first things I added to Diddy!

For most targets its pretty easy to get, apart from C++ and C# where I had to get the seconds instead of milliseconds...

Java:
int ms = (int)System.currentTimeMillis();

Flash:
(new Date).getTime();

JavaScript:
new Date().getTime();

C#:
DateTime centuryBegin = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long elapsedTicks = currentDate.Ticks - centuryBegin.Ticks;
TimeSpan elapsedSpan = new TimeSpan(elapsedTicks);
int millisecs = (int)elapsedSpan.TotalSeconds * 1000;

C++:
#include <time.h>
#include <math.h> 

time_t seconds;
seconds = time (NULL);
return seconds * 1000; 



marksibly(Posted 2012) [#6]
Thanks for that, will keep these in mind!

Another thing to consider is the precision of the various timer functions, eg: it turned out the XNA Millisecs I was originally using had crappy precision on Winphone7 but not on Windows (or the other way around) so I ended up with 2 different Millisecs in XNA.

Have you check the precision of the above methods?


therevills(Posted 2012) [#7]
Have you check the precision of the above methods?

Not really, I was just using them for my "random" seed and was using Monkey's Millisecs for any other timings.

I wonder if you create a start variable using the above and add on the old Monkey Millisecs would be any better?


MikeHart(Posted 2012) [#8]
Is the html bug fixed, where when you click in the middle of the canvas, the ap freezes? I am not at a comp so i cant test myself. Try bouncyaliens.monkey. i posted about this in the v67a topic before.


therevills(Posted 2012) [#9]
@Mike, it wasn't bug, it was coded that way, see my response in the last thread. In this version it now opens a webpage when you click the middle.


skid(Posted 2012) [#10]
For C# please use Environment.TickCount.


MikeHart(Posted 2012) [#11]
oh, i will check that next time i am on a computer.


dragon(Posted 2012) [#12]
Mark do not forget to update DrawImage and other functions!

In graphics.monkey, tformed is always used



	If context.tformed
		PushMatrix
		
		Translate x-image.tx,y-image.ty

		context.Validate

		If image.flags & Image.FullFrame
			renderDevice.DrawSurface image.surface,0,0
		Else
			renderDevice.DrawSurface2 image.surface,0,0,f.x,f.y,image.width,image.height
		Endif
		
		PopMatrix
	Else




Translate generate tformed-state, and native code use always tformed

Should changed to something like this



	If context.tformed
		context.Validate

		If image.flags & Image.FullFrame
			renderDevice.DrawSurface image.surface,x-image.tx,y-image.ty
		Else
			renderDevice.DrawSurface2 image.surface,x-image.tx,y-image.ty,f.x,f.y,image.width,image.height
		Endif
	Else
...



EdzUp(Posted 2012) [#13]
excellent will have a look :-)


Skn3(Posted 2012) [#14]
Good stuff! Will look next week.


therevills(Posted 2012) [#15]
For C# please use Environment.TickCount.

Interesting...

According to here: http://stackoverflow.com/questions/243351/environment-tickcount-vs-datetime-now

Environment.TickCount has a precision of about 15.6 ms (so you cant measure shorter time periods).

DateTime.Ticks should have a precision of 100s nanoseconds, but it depends on the OS. On XP its about 15.6 ms, on Win7 its about 1ms.


Tibit(Posted 2012) [#16]
I'll probably have a go at (maybe) adding some stuff like gamecenter directly to the Monkey package

Maybe Ads too? Chartboost and Revmob, they are the two top ADs for games on iOS and Android!

Adding them should only be a few lines of code. They both monetize like crazy! And have very good return rates. Use them in all my "free" games.

https://chartboost.com/
http://www.revmob.com/

Documentation & SDK:
http://sdk.revmob.com/
https://help.chartboost.com/downloads/ios


marksibly(Posted 2012) [#17]
> In graphics.monkey, tformed is always used

Bah! Thought I'd fixed that...will do.


slenkar(Posted 2012) [#18]
everything works now :)_

It seems that in linux
xdg-open is used so here is how to get the browser opening on other versions of linux:
https://wiki.archlinux.org/index.php/Xdg-open


EdzUp(Posted 2012) [#19]
Ted works ok on Ubuntu 12.10, just had to chmod monkey, ted, trans_linux and mserver_linux just adding the executable flag and it works flawlessly :D

forgot to add the mod to trans and I had no build targets took a couple of seconds to work that out but now its done its fine :D

you could do a sh for it something like:
sudo chmod +x monkey
sudo chmod +x bin/Ted
sudo chmod +x bin/transcc_linux
sudo chmod +x bin/mserver_linux

save it as setlinux.sh in the monkey directory

then all you would have to do is go into Terminal and then type sh setlinux.sh and enter your root password and it sorts it for ya :)

[EDIT]I have also tested on 12.04 on me netbook (old asus eeepc 701SD, 2Gb RAM etc) and apart from the executable permissions it all works beautifully :). Havent tried android yet as I havent installed it that will follow.


michaelcontento(Posted 2012) [#20]
Mark:
I'll probably have a go at (maybe) adding some stuff like gamecenter directly to the Monkey package


Hmm .. IMHO the core of Monkey should be slim, stable, usable on all targets and only contain important core features. The integration of third party libs is a good example of what can be done by the community. And I'd love to see some improvements here - like some kind of dependency resolution tool (think: pip/easy_install in python, npm in nodejs etc.).

Because those big engines like diddy, fantomEngine or even my own baby bono are nice but big and bulky. Yes, I can use only some parts of it. But, again IMHO, it would benefit the whole community if we split those "big block" into small parts. Small libs are easy to maintain, easy to understand and easy to mix and match with other things :)

Tibit:
Maybe Ads too? Chartboost and Revmob, they are the two top ADs for games on iOS and Android!

Adding them should only be a few lines of code. They both monetize like crazy! And have very good return rates. Use them in all my "free" games.


Can you share some code? My implementation of Revmob (iOS and Android) can be found here.


benmc(Posted 2012) [#21]
I'm of the opinion that GameCenter, IAP, and Ad Networks should be a necessary and critical piece of the main Monkey package.


skid(Posted 2012) [#22]
I agree on them being included.

I would prefer ad-free network-free / privacy respecting targets were included as default, and targets including third party services be named after said service.


michaelcontento(Posted 2012) [#23]
@skid: So there would be a "ios-revmob", "ios-gamecenter" and "ios-iap" target? What if I would like to use revmob, gamecenter and IAP in my game? Or are there targets for all 6 ways I could mix them up? Sounds crazy ..

For the same problem I've started a small "wizard" tool within bono. Just take a look at the code here. Currently there is only support for Google/IAP but more stuff (Flurry/iOS, Revmob/iOS, Revmob/Android and Amazon/IAP) is about to be pushed. The basic usage of this tool is:

./wizard.py --target android --module payment src.build/android

Where wizard.py is just a dispatcher that calls TARGET.MODULE.run, so for the example above this file is executed. This allows me to a) stick with plain monkey and b) setup all required third party libs within seconds.

Maybe this approach can be used by @marksibly too? Because creating different targets just to include third party sounds wrong to me :/


skid(Posted 2012) [#24]
IMHO default monkey games should not require network access or trigger any other kind of privacy invasion. I assume there will be a way of enabling disabling them and I'm still getting my head around trans and the template folders so yes, multiple targets not the best idea.


marksibly(Posted 2012) [#25]
Patching targets is a pretty interesting idea...

My concern would be conflicts between the patches, but I haven't had much experience with using patches this way - or at all really, eg: what happens if 2 patches need to override the same view method? Unlikely I guess...

Ideally of course, it'd be nice to have as much as possible in modules, but until Monkey gets better 'linking' features that's just not possible. Even when it is, there will always be corner cases where something needs access to something that isn't 'API-ized' like the Activity or main.xml, ie: something highly project specific.

I'm actually OK with the 'every possible combination' approach to ad systems right now - it was kind of intended more as something people could customize for their own internal/company needs, as I guess they're having to do with targets already. Hopefully though, people would publish 'gamecenter' etc code that others could use.

But it'll be interesting to see how far you get with the patches idea...I'm starting to like the idea more and more.


maverick69(Posted 2012) [#26]
This patch idea sounds way better to me than various targets. And it seems easy to implement.


Tibit(Posted 2012) [#27]
Can you share some code?

I'm happy to share all my IAP code. Please see if you can download it using here, I made it public:
https://bitbucket.org/tibitinteractive/monkeytize/get/32468be69b2c.zip
Feel free to use for whatever you want, even OK if you claim that code to be your own or integrate it into a framework. If it even has the chance of improving the process of adding extensions in Monkey I'm super happy for that! :)

Bono sounds cool, do you have docs for it?

At the end of the day the only WISH I have is that it is simple to add chartboost, revMob, flurry, gamecenter and other extensions to Monkey. A system that "pastes" the right code at the right place. A tool that ads the req libraries and dependancies so it "just works". That would be cool :)


michaelcontento(Posted 2012) [#28]
@marksibly You're right that plain patching could be problematic in the future. But it was the fastest way to get it running ;)

I already thought about replacing those patches with a more flexible / intelligent way. Something like:
* Search for "<uses-permission android:name="com.android.vending.BILLING" />" in AndroidManifest.xml
* If present? Done with this part of the patch
* Else: Search for the first "<uses-permission" entry and add the new permission before / after that

If we stick close to this approach and add good error messages, this could be, IMHO, a very good way to go. And I love the idea of a huge list with checkboxes in Ted -- simply the second step after selecting the target. "Target? GLFW. Config? debug. Third party modules? Revmob, IAP and gamecenter. Go!" :)


AdamRedwoods(Posted 2012) [#29]
I already thought about replacing those patches with a more flexible / intelligent way.

I dont see why a simple find/replace patch function can't be added to Transcc's #config preprocessor commands.


michaelcontento(Posted 2012) [#30]
That would not solve the case if we have to add new files (e.g. the revmob.jar) and it would require that all possible cases are prepared beforehand. It's also not that flexible in terms of creating / sharing new patches with the community.


marksibly(Posted 2012) [#31]
> This patch idea sounds way better to me than various targets. And it seems easy to implement.

Well, the patch system effectively *is* various targets, it just auto generates them. I suspect it will run into 'similar yet different' problems than you'd get with multiple (ie: 'prepatched') targets when the target project starts diverging, as it inevitably will.

And could someone give me a crash course on what all these freakin' addons actually do? I mean, RevMob, fine, I assume it lets you put ads in your games, but Chartboost? All that stands out for me on this page https://www.chartboost.com/ is that you can 'broker direct deals with game developers and get 100% of the profit'!?! As a potential game developer, that doesn't actually sound that hot to me...And Flurry? IAP (doesn't even google!)?

Aren't these all ultimately ad/analytic systems? Do we *really* need to be able to support both Revmob and Chartboost and IAP and Flurry and whatever in the same target?

In which case, wouldn't adding gamecenter support to the base/official target (and perhaps even providing a platform neutral mojo api? With a view to the inevitable android-alike to come...) and allowing people to add whatever ad/analytic system they wanted via customized targets pretty much do the trick?


NoOdle(Posted 2012) [#32]
Flurry sounds good as it appears to be multi platform:
Flurry Analytics is available for iOS, Android, Windows Phone, HTML5, BlackBerry and JavaME.

I don't think having the option to choose between multiple ad/analytic systems for each target would gain much. I would be more than happy with one good system implementation for each target or, where possible, utilise the same multi platform system.


Tibit(Posted 2012) [#33]
> And could someone give me a crash course on what all these addons.

There are certainly many views. Here are my arguments:

Analytics
Analytics might seem pointless, but it actually is very pointfull! It helpd you learn how long you users stay, when in average they drop-off, how often they come back and what they do, what they like and buy in your app - bottom line it lets you make more money. Even for a simple paid-only App this is important since happy-customers means they tell more of their friends.

Here is a article that I think is quite spot on:
http://mobithinking.com/webtrends-mobile-anlytics-interview

For Analytics I have found (and I have consulted with many other Game Developers on this as well) that Flurry is the number one for games (+free).

Ads
Ads is one way to get cash (aka monetize users). On iOS this is huge atm, Android is growing, web html5/flash games get way less dollars from ads in my experience.

The reason this works so great on iOS/Android is because some of the BIG game developers are paying a lot to boost their games to the charts, while we indies can be thankful for that.

RevMob, Tapjoy and Chartboost all three show game related ads - developers get money per install. Google/Apple's ads usually return much less in Games in my experience - I assume it is because people playing games are also happy to play other games (you give the users what they want) - plus it is the bigger game developers that usually pay a lot to stay on top.

Chartboost brags that you can "Trade" Ads=Traffic with other developers, that however is part of their online Ads dashboard and has nothing to do with the thing you put into your games.

Tapjoy brags about their incentive system that can be added to games with an "economy". The purpose is the developer getting more money from users installing game "trough" you app, just like chartboost and revMob, but Tapjoy offer a reward to the player for clicking.

RevMob are the simplest, but they are also the Ad-provider that tends to get the highest paying deals and manages to be good at getting relevant games to the right users, which often means more money to developers - but not always.

Flurry also has Ads & VideoAds that can monetize very well (haven't used them myself yet!).

At the end of the day each of these monetize more or less in different games and on different days - that is why it is optimal to have all three and toggle Ads based on which does best for the day, or easily be able to try each of them out in a specific app.

So there is a big cash-in benefit to be able to do add these easily!

IAP - InAppPurchases
Allows a developer to sell "Ads FREE" or "Get 10 coins" or "buy a gold Tank" or this "super cool gun".

IAP in combination with Ads tends to be one of the best ways for game to generate good amount of $$$.

It is a KEY way to monetize games and are a good combination with Ads & video - to be effective at IAP analytics is also KEY.

Game Center
Game center is a quite easy way to add a highscore and share with friends feature to a game on iOS. There are similar services on Android.

Personally I find this to be less important that IAP, and Ads and analytics, however it can be a way to increase virality of a game.

Viral and Social Addons
There is a lot of libraries that ads Social and Viral features. Often these are not key, but can help. Top game usually do well without them, or by just having Facebook integration. These are quite "individual" and I would argue not for everyone.

Summary
I can't see how a single indy developer would not want to monetize their game. Obviously using Ads/Videos/IAP should be on a ethical level! However such a balance can easily be found and that means real cash-in - which is why I argue Analytics/Ads/IAP all are essential, and in relation to that I also argue that other "viral" extensions are more a flavor of the month.


Tibit(Posted 2012) [#34]
And I love the idea of a huge list with checkboxes in Ted

And me too, very much soo!

If it is also something that can be shared with others easily, then that would be brilliant :)


marksibly(Posted 2012) [#35]
Thanks for the rundown!

I think adding more 'modularity' features to Monkey will definitely help. I did actually have something like this going at one point...

#SRCS+="${CD}/native/blah.cpp"
#LIBS+="${CD}/lib/blah.lib"

...but it's on the back burner for now as to do it properly is a big job (it needs to be able to handle src files, lib files, header dirs, jars, packages, classes, assemblies(?) etc - for all build systems, I only had GCC going) - perhaps my next job though?

This will definitely help in some cases, but as soon as you hit a module that needs to do something like 'open a window' you seem to run into trouble, as these always seem to require low level hacking of core classes/delegates and/or XML/project files etc. Perhaps a patch system is not such a crazy idea here, eg: perhaps you could import 'patches' into an app! Sounds a bit scary really...

I also feel like more could be done with ${MACRO}s - as pointed out above, canvas width and height could use ${HTML5_CANVAS_WIDTH} etc. But it'd be nice to automate this instead of manually tweaking the build code to replace JUST the tags it knows about. The android target already does something like this to a degree - ie: the 'templates' dir is copied to the 'real' project dir, with macros replaced en-route, just before the java project is built. Theoretically, the entire project for every target could be preprocessed like this allowing you to use macros for all sorts of things (I'm thinking mainly of HTML/XML etc hacks here).

But the new target system *is* significantly cleaner, and I'd encourage people to have a play with creating their own targets that use gamecenter or chartboost or whatever.

It should now be possible to customize a target simply by modifying the monkeytarget.${LANG} files in the various target modules/native dirs. These files are only about a page long, and really just start the app up. You should be able to extend every class/delegate used by Monkey here...

There are also now a bunch of ${TARGET}game.${LANG} files in modules/native dirs. These could theoretically be moved to brl or something, but I'm reluctant to do that just yet as it effectively 'freezes' them. As things stand, if you manage to customize a target purely by modifying monkeytarget.${LANG}, you'll still need to update ${TARGET}game.${LANG} when I change it - but this is just a file copy, better at least than having to merge.


michaelcontento(Posted 2012) [#36]
Hi,

I've just ported my first attempts with the wizard over to monkey and the result can be found here. There is currently only one patch (AndroidPayment) and the source is in this file. It's very easy to add new commands just .. well .. take a look at the readme ;)

Let me know what you think about this!

/EDIT: Second command AndroidRevmob is now available too


dragon(Posted 2012) [#37]
@marksibly

1) Haxe have magic functions like __java__()
it is possible to inline a native code...
i think we should be able to do same
http://haxe.org/doc/advanced/magic

2) We need also real inline "INCLUDE" (like C)
#Include "mycode.monkey"
or advanced like this:
#CUSTOMVAR = "blabla.monkey"
#Include CUSTOMVAR '<optional with variable

3) what about this?
#CUSTOMCODE = Print("test")
${CUSTOMCODE}

yes this is more like C,
but hey this complex stuff need this...



It is also important to define preprocessor-variables as placeholders to "inject" own values (ID or so)

so we need Include + Inline both



and better if we could have this over all languages (monkey, c, java, js...) - all code files should preprocessed by monkey...

so we need special keywords that do not exist in other languages

${BLAH} is nice to replace a placeholder by own code/value (like c defne)
${"file.monkey"} could work as a include


slenkar(Posted 2012) [#38]
request:
please make a keyboard shortcut for 'find in files' in Ted


dragon(Posted 2012) [#39]
gcc can preprocess all files:
http://www.cs.tut.fi/~jkorpela/html/cpre.html



some other preprocessors:

http://saf.bio.caltech.edu/miniproc.html

http://www.cabaret.demon.co.uk/filepp/

http://www.macroexpressions.com/unimal.html

http://www.math.polytechnique.fr/cmat/auroux/prog/gpp.html

http://fmpp.sourceforge.net/

http://en.nothingisreal.com/wiki/GPP#Documentation


AdamRedwoods(Posted 2012) [#40]

1) Haxe have magic functions like __java__()
it is possible to inline a native code...
i think we should be able to do same

No, we can already do this:
Extern
  Function Magic() = "//do a bunch of stuff here~n //do more here ~n//"
Public

Function Main()
  Magic()
End



dragon(Posted 2012) [#41]
cool, thank you


dragon(Posted 2012) [#42]
marksibly,
i think really, why do not use gcc-preprocessor for all languages?
gcc can process every file (js, java, c#...)
(not needed for c++, because this is alredy done)

monkey should collect preprocessor-variables, convert them and then use with gcc-preprocessor...

for example:


monkey should use own current preprocessor:
#MYVAR=123

now, the variable is collected and converted to gcc MONKEY_MYVAR

in any native code file, we can now use MONKEY_MYVAR with gcc


imagine, you can use #include or #define or #if in java-code or in js-code...
fantastic!


fsoft(Posted 2012) [#43]
Mark,

it is great to see that now Monkey binaries are compiled for Linux natively :-)

You made the best Xmas gift I'll receive this year. :-)

Just a quick request: is it possible for you to compile Ted also on Ubuntu 64bit? With today systems with more than 4GB it is very difficult to find a 32bit install nowadays (expecially on development machines) :-)

Thanks!!!


Corum(Posted 2012) [#44]
Awesome! This experimental version brings me back the Snow Leopard love. :-)
With my configuration (Macbook 2GHz Core 2 Duo - Mac OS X 10.6.8 - XCode 4.2) I can compile GLFW target again!
Regarding iOS, Ted returns some errors and fails to build, but opening the XCode project I can fix a couple of issues (regarding device orientation) by picking the XCode suggestions and get iOS Simulator running the working app!
I'm so happy! This is more than a Christmas gift for me! :)

Having the sole iOS SDK 5.0, maybe I need to install some older iOS SDK but, anyway, in case it could be useful, I paste the issues related messages:

main.mm:2506:93: error: use of undeclared identifier 'UIInterfaceOrientationMaskPortrait'; did you mean 'UIInterfaceOrientationPortrait'? [3]
if( CFArrayContainsValue( array,range,CFSTR("UIInterfaceOrientationPortrait") ) ) mask|=UIInterfaceOrientationMaskPortrait;

fix-it:"main.mm":{2506:93-2506:127}:"UIInterfaceOrientationPortrait"


main.mm:2507:103: error: use of undeclared identifier 'UIInterfaceOrientationMaskPortraitUpsideDown'; did you mean 'UIInterfaceOrientationPortraitUpsideDown'? [3]
if( CFArrayContainsValue( array,range,CFSTR("UIInterfaceOrientationPortraitUpsideDown") ) ) mask|=UIInterfaceOrientationMaskPortraitUpsideDown;

fix-it:"main.mm":{2507:103-2507:147}:"UIInterfaceOrientationPortraitUpsideDown"


main.mm:2508:98: error: use of undeclared identifier 'UIInterfaceOrientationMaskLandscapeLeft'; did you mean 'UIInterfaceOrientationLandscapeLeft'? [3]
if( CFArrayContainsValue( array,range,CFSTR("UIInterfaceOrientationLandscapeLeft") ) ) mask|=UIInterfaceOrientationMaskLandscapeLeft;

fix-it:"main.mm":{2508:98-2508:137}:"UIInterfaceOrientationLandscapeLeft"


main.mm:2509:99: error: use of undeclared identifier 'UIInterfaceOrientationMaskLandscapeRight'; did you mean 'UIInterfaceOrientationLandscapeRight'? [3]
if( CFArrayContainsValue( array,range,CFSTR("UIInterfaceOrientationLandscapeRight") ) ) mask|=UIInterfaceOrientationMaskLandscapeRight;

fix-it:"main.mm":{2509:99-2509:139}:"UIInterfaceOrientationLandscapeRight"




Rushino(Posted 2012) [#45]
Hi there.

Nice update Mark. Wasn't around for a few weeks.. was working on my website mostly and had tons of stuff to do. I should give it a try but i was sticking to version 65 for now, i might update soon.. are there breaking changes regardings how native code are used ? (Not talking about monkey code)


MikeHart(Posted 2012) [#46]
Ok, I hope it isn't intended in V67b:

DeviceHeight and DeviceWidth don't report correct values in OnCreate on my new Kindle Fire HD. In V66 they do.


frank(Posted 2012) [#47]
Repost because I had the wrong thread: I would try it myself but I don't know how to start compiling these 'BMX' files on ARM?

Has anyone been able to get the toolchain (compiler/server etc) running on ARM ? Is it even possible? Ted compiles and works for me, but the rest... So now I can edit Monkey code but not compile / test it :)

(I code on my Openpandora on the road a lot and it would be great if Monkey is an option there...)


ziggy(Posted 2012) [#48]
I supose those "BMX" files should have to be rewritten as monkey files at some point. Maybe there are still some missing modules on Monkey.


marksibly(Posted 2012) [#49]
> DeviceHeight and DeviceWidth don't report correct values in OnCreate on my new Kindle Fire HD. In V66 they do.

Nice find!

Suggested fix if it's holding you up: Move mojo/app.monkey GameDelegate 'New' code to StartGame method, just before _app.OnCreate is called.

This means the graphics/audio/input drivers are created before OnCreate is called, but after underlying BBGame is created (not currently the case).


MikeHart(Posted 2012) [#50]
Thanks Mark for the info on the workaround. I am glad you could make it working like before again.


EdzUp(Posted 2012) [#51]
@Mark: is there any chance of a Date/Time command its the only thing missing from basic monkey and one thing that would allow for LOADS of things to be done for example:

1) Working out unix time for facebook and online games so you dont have to sit at the computer for eight hours whilst something is building.

2) Random new generation on the fly by date - this was in the original Star Flight 2000 so the news was linked to the date so every time you visited that system the news was the same until the date changed.

3) Calendar apps, log apps the possibilities are endless

What I was looking for is a complete cross platform approach something like two commands CurrentDate$() and CurrentTime$() that would return the date and time as something like:
12 January 2012
14:23:12

it would be brilliant if these could finally be added and its the one thing holding me back from creating Star Rogue's BBS system.


dragon(Posted 2012) [#52]
yep, we need date+time

GetTime(type)
type for: year, month, day, hour, min, sec, day of week, day of year


therevills(Posted 2012) [#53]
Date and time can be easily added yourself, Diddy has had it for ages now... but it would be nice for it to be included into Monkey as standard though.


matt(Posted 2013) [#54]
Great to see Linux support. Thanks!


EdzUp(Posted 2013) [#55]
@therevills: yeah its been in diddy and dont get me wrong i like the idea of diddy buy wanted it in standard monkey. With diddy iirc your app extends a diddy app what i wanted was it in standard code so its usable by all right from install. Does diddy support ALL available platforms with the functions?


golomp(Posted 2013) [#56]
Thank you Mark !

You work much faster than me.

(and certainly much better)

:)


therevills(Posted 2013) [#57]
With diddy iirc your app extends a diddy app what i wanted was it in standard code so its usable by all right from install.


You only need to extend "DiddyApp" if you want to use the framework part, you can use most of the other modules without it (eg Tiled, XML, Functions etc).

Does diddy support ALL available platforms with the functions?

At the moment, the only target it doesnt do the date/time functions is iOS.


Amon(Posted 2013) [#58]
Any news on when 67b will be official and not experimental?


Rone(Posted 2013) [#59]
BUG:

just tried to build junglegui with v67b. Monkey generates invalid c# code on xna target:

following
_scrollbar._pos.SetValues(Size.X - _scrollbar.DefaultWidth, 0)

becomes
m__scrollbar;		
m__scrollbar.m__pos.p_SetValues(p_Size().p_X()-17,0);


other targets works fine


Armitage1982(Posted 2013) [#60]
Any news on when 67b will be official and not experimental?

A simple roadmap would be welcome! No dates needed.
At least you could communicate on this to people who support you...

Cause right now I feel lost about Monkey and because of that I can't recommend it to anyone.


Aman(Posted 2013) [#61]
A simple roadmap would be welcome! No dates needed.
At least you could communicate on this to people who support you...


+1 to that. I have put Monkey on the shelf and been waiting for months til 67 becomes official. Do not get me wrong, I am grateful for Monkey and know that Mark is working hard to deliver these updates but it is taking longer than usual and not knowing when the wait will end is kinda frustrating.


DruggedBunny(Posted 2013) [#62]

been waiting for months til 67 becomes official


That's weird, it only came out 1 month ago.


Midimaster(Posted 2013) [#63]
why frustrating? why not recommending?

It is an advantage that Mark offers us a first view in coming V67, but he also tells us, that it is experimental. I think he does it to get feedback from the inner circle of monkey users.

Not to use the features immediately for commercial project? And not for to be "under the gun"!

As a experienced programmer you should know how to do your projects with the given features of V66.

On the shelf?

What will you do, if tomorrow the V67 becomes official and a early V68 appears? Waiting again?


MikeHart(Posted 2013) [#64]
Yup, what is holding them back? I don't understand it.


Amon(Posted 2013) [#65]
Oops! Apologies for what I seem to have started. My question about 67b was never meant as a complaint; just merely a general 'is it going well' sort of question.

I've been a blitzer for over 13 years and I know better than to complain about releases nor would I want to. Mark is doing a fantastic job with Monkey and in no way was my question meant to stir things up.

Apologies!


siread(Posted 2013) [#66]
Going back to the earlier discussion, I would love to see an official or at least comprehensive, all-in-one solution for analytics, IAPs, cloud and ads across Android and iOS at least. Flurry would be a good start seeing as though it covers analytics, cloud data and ads across both platforms. At the moment it's all a bit messy. The current mods for iOS iaps and Gamecenter aren't up to date, Android iaps are a pain, no iCloud, no analytics... Make all this stuff easy and it will make Monkey even more attractive to mobile devs. I know that there are a lot of people sitting on the fence at the moment. This could sway them. I would certainly be willing to pay for it - hell, I'd even be willing to pay someone to do it!


Tibit(Posted 2013) [#67]
I would also happily pay for iOS and Android integrations! Having those would be very valuable to me.


marksibly(Posted 2013) [#68]
Hi,

Ok, I've already got simple admob and gamecenter targets/modules going, and I've just had a quick look at Flurry and it doesn't look like it would be hard to integrate.

But I'm not good with this stuff - I'm more a compiler/game coder! - so I'm not really sure what all the bits are supposed to do. For example, this page lists 3 main bits:

http://support.flurry.com/index.php?title=Main_Page

I assume it's the 'analytics' and 'publisher' bits people are interested in? 'api' appears to be for accessing your flurry data from web pages/non-game apps etc...correct?

So, both 'analytics' and 'publisher' appear to use a single FlurryAgent class:

http://support.flurry.com/index.php?title=Analytics/Code/Doc/Android
http://support.flurry.com/index.php?title=Publisher/Code/Doc/Android

Is this single class people want implemented? Is there more somewhere?

What are the priorities, ie: what are the 'interesting' methods?


c.k.(Posted 2013) [#69]
How about one or two of these? :-)

http://www.Deployd.com
http://www.RoarEngine.com
http://www.StackMob.com
http://www.kumulos.com
http://www.buddy.com
http://api.shephertz.com/index.php
http://www.quickblox.com
http://www.kinvey.com
http://www.Clay.io
http://www.Scoreoid.net
http://www.Playtomic.com
http://www.applicasa.com
http://www.playphone.com
http://www.apiomat.com/
http://www.kinvey.com/
http://www.ftw.co/
http://fatfractal.com/
https://simperium.com/
https://cloudmine.me/
https://www.parse.com/
https://www.mobdb.net/home
http://playerio.com/features/
https://singly.com/
http://www.baasbox.com/
https://developer.kii.com/
http://www.apstrata.com/
http://www.proxomo.com/


secondgear(Posted 2013) [#70]
c.k.: wow! Shovel sellers will soon outnumber us gold diggers :) Any of them help you make more money? My wounds from OpenFeint demise are still fresh.

Integrating third-party APIs is not that difficult. I think it is wrong to expect Mark to do it for us: while it is relatively easy to integrate, it becomes a PITA maintenance problem when you have a number of those APIs as a part of the core product - Mark will have to keep it current with the latest versions of those APIs.

Personally, I'd prefer to see him work on what he is so good at: developing rock-solid multi-platform base and making it easily extensible.


c.k.(Posted 2013) [#71]
secondgear, I agree with you about mark's efforts. And several of those listed to provide functionality to help make more money. (OpenFeint just switched over to GREE, so it shouldn't have been that painful... so they tell me. :-))

Who can I get to develop a third-party API for me that will work across all platforms that monkey supports? Or where can I find step-by-step docs to do that? :-)

Many of those APIs I listed above are RESTful, meaning we can just make HTTPS calls from within our apps. I've got basic Scoreoid and Roar Engine functionality working, but I'm probably going to switch (again) to something else (that's cheaper, more capable, and has more gamedev-friendly features).


Erik(Posted 2013) [#72]
I would really like to see a working windows 8 target and some touch support for desktop other than html5, the only target that supports it now. It's quite cumbersome to move the code to a mac and compile to a real ipad just to try some touch features.


MikeHart(Posted 2013) [#73]
Ok, I've already got simple admob ... going


That is all I need. On Android please!


anawiki(Posted 2013) [#74]
@Mark and Flurry: yes, Flurry is a very nice thing. We used it in Avalon Legends Solitaire and it tells you a lot of data, although it was implemented for iOS by our publisher, so I don't know what they used. For sure analytics, but maybe publishers too. I was just calling functions like report this or that.


Timmy(Posted 2013) [#75]
I have the same problem with GLFW on Linux as impixi mentioned here (glfwOpenWindow failed when I'm trying to run it on Ubuntu 12.10 64-bit). libglfw2 and libglfw-dev are installed. Any solution?


Tibit(Posted 2013) [#76]
1. RevMob (fullscreen)
2. Chartboost (fullscreen)

Those two are the best Ads providers (If we measure profit for developer) I know of for Games for iOS. AirPush (Ad only) is recommended on Android.

4. Flurry for the Analytics part.

5+. IAP for iOS and Android. This is the things that integrate to the stores from Apple, Amazon and Google.

I ranked them by my experience of cash-flow potential for small games, of course nr5 is the biggest cash-in for a medium to big game.

More specific. For RevMob and Chartboost it is very useful for the Ads to pre-load, else they will load async and display 30 seconds later - often when it is inappropriate mid game. Also fullscreen is the only Ads I use since they generate the most money. I also have a button called "play more games" or "play another game" - and I open the Ads when people click those buttons, that works really well for me and also takes away the annoying edge ads can have - you see new games, if you want to.


pantson(Posted 2013) [#77]
Sorry to change the topic, but I've been using some of the features on v67b
They work fine in HTML, but when I compile to Android, all my builds (emulator and Sony Play) are just a blank screen and nothing happens.
I've upgraded ant, java sdk and android sdk to the latest and still nothing.
Any tips?


marksibly(Posted 2013) [#78]
Does it happen with bananas? Some/all? If not, can you post something runnable?


pantson(Posted 2013) [#79]
I'll do some more testing. I think its my installation of Android SDK. Sometimes monkey says the emulator isn't there (yet ant can see it)