Quick Links: Download Gideros Studio | Gideros Documentation | Gideros Development Center | Gideros community chat | DONATE
Gideros 2017.3.1 is OUT NOW! — Gideros Forum

Gideros 2017.3.1 is OUT NOW!

totebototebo Member
edited March 2017 in Announcements
This is the BEST GIDEROS RELEASE EVER. Get it here: http://giderosmobile.com/donate&download

Here's what's new:

General

  • Add MovieClip:getFrame (#214)
  • No longer insert any plugin by default on Android. Be sure to activate the ones you need in Gideros Studio
  • UWP: Remove dependency to SQLite extension to ease deployment to windows phone

Studio

  • Make wrap on search default and saves find settings (fix #306)
  • Allow to disable encryption on a file by file basis

Export system

  • Make APK default android export, and mark former one as deprecated
  • Add possibility to load generated APK to connected device
  • Do not ask store password if no key alias chosen in APK/Android
  • Pack all compiled and run files into a single one, fix use of macro across files
  • Encrypt all files types by default when encryption enabled

Lua

Macro fixes and new "include" directive:
Additional "include" directive can be used as include "filename" to load content of the file at the compilation step, for example:
include "macro_functions"
will try to open the file "macro_functions", load it's content and paste it at the place of include directive. Of course, any content of any file can be included this way, just like in C preprocessor.

New max and min operators:
Use <> for max and >< for min:
a=b<>c -- make a = the larger of b or c
a=b><c -- make a = the smaller of b or c
New DEG and RAD operators:
d=^>pi -- d will be set to 180
a=^<180 -- a will be set to pi

Plugins

  • HTML5 now comes with Ads and Facebook plugins for everyone
  • HTML5: eperimental port of lfs and lsqlite3 plugins
  • HTML5: all converted plugins are automatically inserted when selected in studio
  • Require: Add iOS export regulation stuff checkbox
  • Storekit: Add a currencyString to display the locale price.

Fixes

  • Macros: Fix macro system resetting macro table for each file (macros are GLOBAL, baby!)
  • UWP: Fix various crash cases
  • Android: Fix app lifecycle events triggered when app not yet initialized
  • Ads plugin: Fix Admob integration
  • Media plugin: Fix orientation issue, and remove deprecated apis
  • Iab plugin: Update/Fix Helper
  • Graphics: Fix particle remove criteria
  • Win32: Enable stencil in OpenGL to fix Path2D rendering issues
Now, let's USE this amazing tool to make GREAT GAMES!

My Gideros games: www.totebo.com
+1 -1 (+15 / -0 )Share on Facebook
«1

Comments

  • totebototebo Member
    edited March 2017
    ps. Works great on Mac! :)

    Likes: SinisterSoft

    My Gideros games: www.totebo.com
    +1 -1 (+1 / -0 )Share on Facebook
  • SinisterSoftSinisterSoft Maintainer
    edited March 2017
    The new operators will make your code be both smaller and faster, it will also make it harder for someone to reverse your code (as can be easily done with some other Lua based devkits).

    They won't be able to use off the shelf tools to make a lua program from the bytecode that is in your app (if they somehow figure out how to decrypt the data in the first place).
    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
  • hgy29hgy29 Maintainer
    This new version also comes with support for a new Ads provider: Kiip

    Here's what Kiip can do for you:

    Powering Moments That Matter

    Kiip is a rewards based monetization platform that delivers rewards to users at moments of achievement. Kiip's latest product, Kiip Neon, is a comprehensive developer toolkit that introduces big consumer brands into your app as a way to monetize and engage your users. Kiip Neon delivers rewards based advertising that is respectful to your users. Beautifully-designed units, high quality creatives, customizable elements and a variety of reward formats allow for the ultimate user experience. Kiip’s unique model allows us to offer many exclusive services such as Premium Rewards, something unmatched by our competitors. We offer a variety of integration options that make Kiip Neon one of the easiest solutions on the market to work with.

    Key Features:

    Multiple formats:

    Unlock new inventory via moments
    Sponsored virtual currency
    Real rewards and coupons
    Native video
    In-feed rewards

    Superior user experience:

    Customizable reward notifications
    Designed for all screen sizes
    Ability to white label units

    Value-added services:

    Premium Rewards Sponsorships
    DIY Rewards: deliver your own rewards
    Survey Tool: learn more about your users
    +1 -1 (+4 / -0 )Share on Facebook
  • Is there a demo of how to use kiip?
    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
  • One thing that is important to note:

    If you use 'require' to load in lua files at a specific point then be sure to right-click those files in the list and exclude them from execution.

    This didn't used to be important, but it really should have been done before and is important now. :)

    Likes: hgy29, pie

    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
    +1 -1 (+2 / -0 )Share on Facebook
  • Also now, regarding encryption, all files are encrypted if you tick the encrypted box (unless they HAVE to be plain (not encrypted) on the platform, eg mp3 for Android).

    To force a file not to be encrypted (if encryption is turned on) then right-click it in the list of files and force the encryption off.

    Sorry if this all sounds a bit cryptic! ;)

    Likes: hgy29, john26, pie

    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
    +1 -1 (+3 / -0 )Share on Facebook
  • hgy29hgy29 Maintainer
    edited March 2017
    Here is a quick sample code to show you how to use kiip.
    You need to register for a Kiip account here beforehand: http://www.kiip.me
    require "ads"
     
    ads = Ads.new("kiip")
    ads:setKey("<secret key>") -- replace with your app's secret key
    ads:enableTesting() -- Required for test mode, remove this for production
     
    ads:addEventListener(Event.AD_DISPLAYED, function()
    	print("ads AD_DISPLAYED")
    end)
     
    ads:addEventListener(Event.AD_RECEIVED, function()
    	print("ads AD_RECEIVED")
    end)
     
    ads:addEventListener(Event.AD_FAILED, function(e)
    	print("ads AD_FAILED", e.error)
    end)
     
    ads:addEventListener(Event.AD_ACTION_BEGIN, function()
    	print("ads AD_ACTION_BEGIN")
    end)
     
    ads:addEventListener(Event.AD_ACTION_END, function()
    	print("ads AD_ACTION_END")
    end)
     
    ads:addEventListener(Event.AD_DISMISSED, function()
    	print("ads AD_DISMISSED")
    end)
     
    ads:addEventListener(Event.AD_ERROR, function(e)
    	print("ads AD_ERROR", e.error)
    end)
     
    ads:addEventListener(Event.AD_REWARDED, function(e)
    	print("ads AD_REWARDED",e.amount)
    end)
     
     
    local function onVideo(btn, event)
    	if btn:hitTestPoint(event.x, event.y)then
    		ads:showAd("interstitial") -- Use your kiip moment name here
    	end
    end
     
    video = TextField.new(nil, "VIDEO")
    video:addEventListener(Event.MOUSE_DOWN, onVideo, video)
    video:setScale(5, 5)
    video:setPosition(10, 200)
    stage:addChild(video)
    +1 -1 (+3 / -0 )Share on Facebook
  • if someone wants anyway an android studio project then he can safely use the 'old' android export later too? or do you plan to remove that option altogether at some point?
  • antixantix Member
    Just a note about exporting directly to device. On my Nexus 4 connected with USB2 cable it works. On my Pixel C connected with USB-C it does not work. So, your mileage may vary with this feature :)

    Likes: SinisterSoft

    +1 -1 (+1 / -0 )Share on Facebook
  • Great work guys! Will be hitting the donate button in the morning :D Thanks for fixing that sqlite bug in windows rt export too.
    +1 -1 (+2 / -0 )Share on Facebook
  • @keszegh Just untick the build apk option to keep the files for loading into Android Studio.

    Likes: keszegh, saeys

    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
    +1 -1 (+2 / -0 )Share on Facebook
  • Any idea or example how to implement ads in HTML5 exported apps? and who provides the actual ads?
  • hgy29hgy29 Maintainer
    @MobAmuse,

    HTML5 ads are provided by Google (AdSense), and should work pretty much the same way as admob. Here is the init code:
    require "ads"
     
    ads = Ads.new("adsense")
    ads:setKey("<ad-client>","<ad-slot>") -- replace with your adsense ids
    ads:showAd("300x250") -- replace with the correct ad format or leave empty for default 300x250
    +1 -1 (+2 / -0 )Share on Facebook
  • Does the luasocket work for HTML 5 ? @hgy29
  • hgy29hgy29 Maintainer
    @mertocan, yes but with a limitations:
    - udp won't work
    - tcp will be emulated through websockets
    - dns won't work

    so basically it is useful for WebSockets and Base64 encoding/decoding


  • SinisterSoftSinisterSoft Maintainer
    edited March 2017
    @mertocan my game (html5 export) talks to xtralife.cloud to store leaderboards, etc...
    Coder, video game industry veteran (since the '80s, ❤'s assembler), arrested - never convicted hacker (in the '90s), dad of five, he/him (if that even matters!).
    https://deluxepixel.com
  • I am getting error messages for local socket = require("socket.core") in socket.lua class. Is there a solution for it?
  • hgy29hgy29 Maintainer
    @mertocan, did you tick luasocket plugin in plugin selection page before export ?
  • hgy29hgy29 Maintainer
    About Kiip plugin, anyone looking for more information or support about Kiip can contact Justin by email: justin@kiip.me . Don't hesitate to contact him, he actually asked me to tell you that.
    +1 -1 (+2 / -0 )Share on Facebook
  • @hgy29 yes, Luasocket plugin is included but in socket.lua class it is called as "socket.core" should it be "luasocket" or something? It is working on desktop player.
  • MobAmuseMobAmuse Member
    edited March 2017
    Just tested this release of Gideros (windows export) with new Visual Studio 2017 and all works OK.

    Thanks again!
    +1 -1 (+2 / -0 )Share on Facebook
  • mertocanmertocan Member
    edited March 2017
    Hi again @hgy29, I was able to add luasocket plugin. I think I have missed to copying required files to server. Anyway, Now application can include socket.core but I am not able to connect web socket. I have tested with javascript client and websocket server is working for sure. I am getting this error.

    WebSocket connection to 'ws://****:108/' failed: WebSocket is closed before the connection is established.

    And from the game (noobhub) : "Noobhub connection error: timeout"

    Thanks
  • I have a similar trouble connecting with websocket in a test app (works in JS but not Gideros > HTML5).

    Likes: mertocan

    My Gideros games: www.totebo.com
    +1 -1 (+1 / -0 )Share on Facebook
  • I got crash after closing my game on latest build:
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    Build fingerprint: 'samsung/hero2ltexx/hero2lte:7.0/NRD90M/G935FXXU1DQB7:user/release-keys'
    Revision: '9'
    ABI: 'arm'
    pid: 21016, tid: 21053, name: GLThread 3192  >>> com.debia.associate2 <<<
    signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xdb7822b0
        r0 bb7822ac  r1 f05829b4  r2 80000000  r3 07ffffff
        r4 ffffffff  r5 ffffffff  r6 ef9006c8  r7 00000003
        r8 00000000  r9 0000001c  sl bb74e688  fp 00000002
        ip 0000001f  sp e591f82c  lr db7822a8  pc f0545112  cpsr 20030030
     
    backtrace:
        #00 pc 00054112  /system/lib/libc.so (arena_run_reg_alloc+101)
        #01 pc 00054769  /system/lib/libc.so (je_arena_malloc_hard+76)
        #02 pc 0006306f  /system/lib/libc.so (je_malloc+234)
        #03 pc 005a0800  /system/vendor/lib/egl/libGLES_mali.so (eglGetError+148)
        #04 pc 0000cf61  /system/lib/libEGL.so (eglGetError+20)
        #05 pc 0000dc87  /system/lib/libEGL.so (eglReleaseThread+2)
        #06 pc 000477cd  /system/lib/libc.so (_Z21pthread_key_clean_allv+80)
        #07 pc 000474e7  /system/lib/libc.so (pthread_exit+36)
        #08 pc 00047425  /system/lib/libc.so (_ZL15__pthread_startPv+24)
        #09 pc 00019efd  /system/lib/libc.so (__start_thread+6)
  • Any solution for Websocket issue?
  • totebototebo Member
    edited March 2017
    The legendary @hgy29 has created a genius JavaScript bridge to allow WebSockets in Gideros. Without further ado:
    WebSocket = Core.class( Object )
     
    function WebSocket:init(uri)
     
    	local loadJSEval =
    		function()
    			JS.eval([[ 
    				GiderosWebSockets=[];
    				GiderosWebSocketId=0;
    			]]) -- Init Websocket structure	
    		end
     
    	local js_eval_available = pcall( loadJSEval )
     
    	self.wsid = JS.eval([[
    		var connect = function(){		
    			var w = new WebSocket("]]..uri..[[");
    			var wid=GiderosWebSocketId+1;
    			var queue=[];
    			var ws={ w:w, queue:queue };
    			GiderosWebSocketId=wid;
    			GiderosWebSockets[wid]=ws;
    			w.onmessage=function(e)
    			{
    				queue.push(e.data);
    			};
    			w.onclose=function(e)
    			{
    				var data = "close"
    				queue.push(data);
    			};
    			w.onerror=function(e)
    			{
    				var data = "error"
    				queue.push(data);
    			};
    			return wid;
    		}
    		connect()
    		]])
     
    end
     
    function WebSocket:send(data)
     
    	JS.eval([[ GiderosWebSockets[]]..self.wsid..[[].w.send(']]..data..[[\n') ]])
     
    end
     
    function WebSocket:receive()
     
    	return JS.eval([[ GiderosWebSockets[]]..self.wsid..[[].queue.shift() ]])
     
    end
    To be used like so:
    local ws=WebSocket.new("ws://xxx")
    ws:send("Stuff")
    print(ws:receive())
    My Gideros games: www.totebo.com
    +1 -1 (+4 / -0 )Share on Facebook
  • hgy29hgy29 Maintainer
    I get that you managed to make it work at last. :)
  • Yeah, this is magic. @mertocan, try it out!

    Likes: antix

    My Gideros games: www.totebo.com
    +1 -1 (+1 / -0 )Share on Facebook
  • keszeghkeszegh Member
    edited March 2017
    @totebo and others,
    when i install this release, my giderosandroidplayer.apk (and all the other players in fact) have still creation date 2017.01.08, and it is indeed v 2016.12.1 when i run it on my tablet. so it won't run magic code including <> and >< with which i flooded my code recently.
Sign In or Register to comment.