Javascript Adblock detector

As most of my games revenue is coming from ads including website ads shown at Pozirk Games, I need to make sure those ads are actually working.
Ad-blockers cause some troubles for website owner like me, and even though I don’t like ads myself, there is nothing free in this world.
If it’s not advertisers who pay, then it should me or players. I prefer advertisers.
I’ve searched and tried different ways to detect ad-blockers, but I couldn’t find an universal javascript snippet that works for any ad-blocker, thus I’ve made my own. 🙂
Continue reading “Javascript Adblock detector”


Admob OpenFL extension v2

In 2015 I’ve made my first version of Admob OpenFL extension.
At that time it only supported Android, so I was happy to abandon it as soon as “official” extension with Android and iOS support became available: https://lib.haxe.org/p/extension-admob/.
Fast forward to 2021 and it was abandoned as well as no one really updated it for 4+ years…
It was working ok until recently when Apple introduced iOS14 and their App Tracking Transparency: https://developers.google.com/admob/ios/ios14?hl=en.

Well, as old saying goes: “If you want something done right, you have to do it yourself”.
So, here is my new version of Admob OpenFL extension, that supports both Android and iOS and has lots of cool features:
https://github.com/pozirk/extension-admob

It took me around a week to make it work. While Android part was quite easy and straightforward, with iOS part I wanted to climb the walls.
Biggest issue was the speed, or rather lack of it, as I was working on iOS part in virtual machine, and it was slooooow. Any small change required me to rebuild the extension and then rebuild my project to test the change.
On virtual machine this procedure could easily take 20-25 minutes and then if I need another small change, I have to repeat everything all over again.
Anyway, extension is out there and I hope to keep it up to date!


Real price of a smartphone

My old BLU Vivo Air test phone became too old, both physically and “mentally”.
The battery is playing tricks showing 40% in one moment and then dropping to 0% another and Android version is 5.0.2, which is soon will become unsupported even by my own games.
At the moment I still set minSdkVersion to 19 (Android 4.4 KitKat), but targetSdkVersion is already forced by Google to be 30.
Btw, in OpenFL it is done in project.xml file:

<config:android minimum-sdk-version="19" target-sdk-version="30" />

A neat list of all the Android/API versions can be found on Wikipedia: https://en.wikipedia.org/wiki/Android_version_history.

Continue reading “Real price of a smartphone”


Google License verification extension

I have completely forgot that I have developed and released a little extension for Haxe/OpenFL.
While in the end I’m not using this extension myself, it was working fine at the time of release and should work in the future, unless Google changes something dramatically, as usual.

Extension can be found at Github and installed through haxelib:
https://github.com/HaxeExtension/extension-lvl


Adobe will stop updating and distributing Flash in 2020

Today’s news: https://blogs.adobe.com/conversations/2017/07/adobe-flash-update.html
Era of Flash games is over. 🙁
I guess, it’s time to start converting all my games to HTML5.
From one side, it’s such a waste of time for me…
But from other side, I can see a good opportunity here, as lots of flash gaming portals will close and all their players can be mine! 😎


Admob OpenFL Extension

As I moved from Flash (Adobe Air) to OpenFL, the same I’m doing with extensions.
First extension, Admob OpenFL Extension could be installed with haxelib:

haxelib install admob-openfl

Full source code and usage instructions could be found on GitHub:
Admob OpenFL Extension

Unfortunately, extension supports only Android, so if anyone wants to add iOS support, please let me know!

з.ы.: Amazon Ads extension is coming soon… 🙂


Integrating Adsense for games into your OpenFL game

I have moved from CPMStar to Adsense for games a month ago and started to earn around 3-5 times more from the same number of clicks/impressions.
Although, it always depends on who plays your games, I suggest to try AFG, if you have such opportunity.

Here is a quick tutorial on how to use AFG with Haxe/OpenFL.

0. “AdSense for games allows you to earn money from your web-based games. AdSense for games uses Google’s Interactive Media Ads (IMA) SDK, the technology used to request ads from within your Flash-based game launcher.”
I have only tried AFG on Flash platform, but IMA SDK also available for iOS, Android and HTML5.

1. Download ima_lib_as3.swc file here: https://developers.google.com/interactive-media-ads/downloads

2. Place ima_lib_as3.swc file in assets folder and add the following line to your application.xml file:

<haxeflag name="-swf-lib assets/ima_lib_as3.swc" if="flash" />

3. Create your Ad Tag at Adsense Dashboard, you can test it here: https://developers.google.com/interactive-media-ads/docs/vastinspector_dual

4. Integrate AFG using this Quick Start Guide: https://developers.google.com/interactive-media-ads/docs/sdks/flash/v3/quickstart
Don’t forget to convert AS3 code to Haxe. 🙂

5. Most likely you won’t see any ads, when you test your game in standalone Flash player.
You have to integrate the game into the web page (and upload it to your website) and set the following flag:

allowScriptAccess="always"

6. If everything’s made correctly you will see ads like in my Rainbow Lines game.

P.S.: One of the requirements for using AFG is to “Have a high volume of games content, i.e., greater than 70% games content with over 2 million games impressions monthly.”
As Google has recently combined Adsense with Admob, your Admob impressions also count. (I suppose 🙂 )


Loading assets from .swf with OpenFL + font embedding

A small tutorial on how to load assets from .swf file with OpenFL.

First, make sure you have the latest version of Haxe and OpenFL.
You can also execute the following command to update your libs to the latest versions:

haxelib upgrade

Second, make sure you have SWF Library, execute:

haxelib install swf

Now, we need to create our SWF library with all the assets.
You can do it with any version Adobe Flash or any other software of your choice.
Creat new flash project, import your assets to the library and make sure that every asset, you want to use, has AS Linkage.

In my example, I have one image with “button” class name:
aslinkage
You should remember class names for all the assets, you will load.
Build .swf file.

Ok, start coding.
Create new Haxe/OpenFL project with FlashDevelop (or whatever you use).
Put your .swf file into assets folder.

Open application.xml file and add the following lines:
1. our SWF Library, so we can use it:

<haxelib name=”swf” />

2. Link to our .swf file:

<library path=”assets/graphics.swf” type=”swf” />

In my case, I have graphics.swf file.
You should remember its name, as you will use it late.

Now we need to load our assets, open your .hx file, where you will load your assets (in my example, it’s Main.hx) and add the following code:

Assets.loadLibrary("graphics", onSwfLoaded); //we load our .swf file by its name "graphics"

After .swf file successfully loaded, we can start using our assets:

private function onSwfLoaded(lib:AssetLibrary):Void
{
	var bmpd:BitmapData = null;
	bmpd = Assets.getBitmapData("graphics:button"); //syntax is [SWF_FILE_NAME]:[ASSETS_CLASS_NAME]
 
	var bmp:Bitmap = new Bitmap(bmpd, PixelSnapping.AUTO);
	bmp.x = 200;
	bmp.y = 100;
	addChild(bmp);
}

The same should work for MovieClips and Sounds.
Worth mentioning, SWF Library doesn’t work for HTML5 target yet.

In order to embed font to you project, we need to do the following steps:
1. Put all the font files into the folder within our project, for example, “assets/fonts/“;
2. Add the following line to application.xml:

<assets path=”assets/fonts” rename=”fonts” />

3. Load and use our font:

var font:Font = Assets.getFont("fonts/arial.ttf"); //load font
var format:TextFormat = new TextFormat(font.fontName, 20, 0xffffff); //create new TextFormat with our font
var text:TextField = new TextField();
text.defaultTextFormat = format;
text.embedFonts = true; //make sure we use our loaded font
text.width = 500;
text.text = "That was easy!";
text.x = 300;
text.y = 400;
addChild(text);

If you build and run sample project, you will see the following result:
result

Sample project source code:
OpenFL_SWF_Font

Have fun! 🙂


Amazon Mobile Ads ANE updated

I have updated Amazon Mobile Ads ANE with the latest version.
It now supports caching and showing of interstitial ads.
In August and September Amazon will provide “a Guaranteed $6 CPM on Interstitial Ads”.
More details here: https://developer.amazon.com/public/apis/earn/mobile-ads

ANE, including source code, could be found on GitHub:
Amazon Mobile Ads ANE

Good luck!


Indie tools

Here is a small list of tools, I’m using in development and in everyday life.
Some of them are well-known, while others are less popular.
Hope, it will be useful to someone.

PuTTY“SSH and telnet client.”
I use it a lot, when I need remotely connect to my VPS.

WinSCP“free SFTP, SCP and FTP client for Windows.”

FlashDevelop“free and open source code editor for every developer.”
One of the best IDEs for developing Flash and OpenFL projects.
And I have recently became a FlashDevelop “sponsor” by donating $100+. Woo-hoo!

HeidiSQL“useful and reliable tool designed for web developers using the popular MySQL server, and Microsoft SQL databases.”
Still has some bugs, but free and works great.

Notepad++“free (as in “free speech” and also as in “free beer”) source code editor and Notepad replacement that supports several languages.”

ShoeBox“free Adobe Air based app for Windows and Mac OSX with game and ui related tools.”
My primary use is to create spritesheets for the games.

Window Movie Maker – yeah, well, simple, easy to use, and free. Just right for me to quickly create game videos/trailers.

Format Factorymultifunctional media converter.

FastStone Image Viewer – similar to ACDSee, but free (for home users, though)

Double Commander“cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas.”
And unlike TC, it’s free!

Audacity“free, open source, cross-platform software for recording and editing sounds.”

Inkscape“professional quality vector graphics software which runs on Windows, Mac OS X and Linux.”
Free!

GIMP“GIMP is the GNU Image Manipulation Program. It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring.”
Here is a nice article on how to make GIMP even more usable. (it’s in Russian, though)

Trillian“modern instant messaging for home and work that prioritizes chat interoperability and security.”
In case, you want to join #haxe or #openfl channels on IRC.

KeePass“free open source password manager.”
Keeps securing my passwords since 2006! 🙂



Rainbow Lines and etc.

Some news…

* I have released Rainbow Lines on Google Play.
I have decide to make two separate versions of the game: with HD graphics and without, otherwise game file size is too big.

* Updated AdMob ANE to comply with the latest AdMob/Google Mobile Ads/Google Play/AdSense changes. New ANE is much heavier and throws numerous warnings, but seems to work fine. 🙂
Old version is deprecated and “Google Play will stop accepting new or updated apps that use the old standalone Google Mobile Ads SDK v6.4.1 or lower. You must upgrade to the Google Play version of the Mobile Ads SDK by then.”
As usual, it is available on GitHub: https://github.com/pozirk/ANEAdMob

* Match Jong is somewhat in freezed state at the moment, but I have a playable demo, and my artist is ready to start preparing graphics. Going to start working on the game soon. 🙂

* Little by little, I’m releasing free version of All-in-One Mahjong 2 with updated AdMob ANE, of course.
All-in-One Mahjong 2 FREE is already available on Google Play.


Amazon Mobile Ads ANE

As I’m going to release free versions of Solitaire and Mahjong games on Amazon AppStore, I’ve decided to use Amazon Mobile Ads (+ AdMob of course, Amazon Mobile Ads only work in USA, I guess).
And, as these games are made with Adobe Air, I had made another ANE…
Here it is: Amazon Mobile Ads ANE, available on Github along with source code.


Publish Adobe Air app to Mac App Store

I have mainly used this guide, it is in Russian and written for Air3.6, also it was updated with my comment about Air3.8.
There is very similar guide in english, but also for Air3.6: http://pigsels.com/2012/04/air-app-store-publishing-guide/

The differences for Air3.8 (maybe for Air3.9 as well) are:
– Following three line are not required anymore:

1
2
3
codesign -f -v -s APPLICATION_CERTIFICATE bundle.app/Contents/Frameworks/Adobe\ AIR.framework/Versions/1.0/Resources/adobecp.plugin
codesign -f -v -s APPLICATION_CERTIFICATE bundle.app
codesign -f -v -s --entitlements entitlements.plist bundle.app/

– Instead you need to use this:

codesign -f -v -s APPLICATION_CERTIFICATE --entitlements entitlements.plist bundle.app/

Some extra things, that might be useful:
– If your app connects to the internet, you need to add the following lines to your entitlements.plist:

<key>com.apple.security.network.client</key>
<true/>

All the possible sandbox keys could be found here: https://developer.apple.com/library/mac/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html#//apple_ref/doc/uid/TP40011195-CH4-SW1

– You can verify, that your app is correctly signed like this:

codesign -v --verify bundle.app

– Take note, that icons file’s name, generated by Air is “Icon.icns” and not “icons.incs”, so you may end up having two files, just mention correct one in your Info.plist.

– Launch your app and check that name in top menu matches the title of the app. In my case they were different, thus game was rejected. See screenshot.
mahjong_mac