Android port

Edit by Tow:
The pelya’s port of VCMI never worked properly and has been abandoned.
Please check the xyz’s port that is active and much more stable:


I’m in the process of creating Android port of VCMI.
It runs main menu, but the game cannot be started, because it cannot run the server (some obscure problems with shared memory on Android), so I have a request - can you please do some compiler flag to link both client, server and AI libraries into a single binary?
Or at least make the client/server communicate over TCP socket?

There is Android-specific shared memory implementation available, it will require some effort to integrate it into boost::interprocess though.

Installer file
Sources diff
You should copy the Heroes 3 data files to directory app-data/eu.vcmi on your SD card (it will get created after first app launch).

I’m almost sure linking everything into one executable would be quite hard and undesirable. Client and server communicate over TCP even is single player, there would be some problems with multithreading… good luck if you wish to implement it but don’t expect us to do it in predictable future.

BTW, I hope you are aware that VCMI needs 800x600+ display and 256+ MB of RAM in your device. We are not going to work on it soon either.

Sorry if you’re disappointed but currently we focus on recreating the game for PC. We will think about mobile platforms when we make VCMI playable.

That’s perfectly fine for me, just tell me how to make client use TCP instead of a shared memory.

All new devices sold today are matching these specs (the screen is however 800x480, but VCMI interface has nice big buttons, so it’s not big issue as for me).

Can you please give me some overall status, what is playable and what is not?
I mean, can you complete campaign? Or play multi-player games? Or just play single maps? I saw some AI implementation in the code, can it hire heroes, build castles etc?

I’m sure it’s impossible. Tow has written this code long time ago and I’m sure he would bother with shared memory if it weren’t necessary.

VCMI is not playable on 800x480. See here: [ for details.

Look here: .
Campaigns are partially done (no hero crossover yet), hotseat is done but MP over network not yet (although a lot of progress has been done in this area). The main reason why single player is not playable is lack of adventure map AI (but it’s going to change in several months - Tow will create one). You can hire heroes, build buildign in castles etc.

Also not a problem - SDL will provide proper 800x600 display surface, and then shrink it on-the-fly to the 800x480 device screen, using hardware-accelerated OpenGL stuff. So there’s no need to redesign the GUI, the pixels won’t be square though.

Well okay, then I’ll go and hack boost::interprocess so it will support Android implementation of shared memory - nothing too complicated, it will require another week of coding though.

Interesting possibility. I didn’t know it’s possible in SDL. Anyway, Heroes III uses tiny fonts in several places and they won’t be readable. But it would be great if it worked.

Good luck!

That feature with screen resize is specific for Android SDL port.

After some code inspection I’ve found that shared memory is used only to signal to client that the server is started, so I’ve replaced it with a simple flag-file created on disk, so the server starts now, however the game does not start anyway, with several messages to console:

The same code works on my Linux, so I suspect some memory alignment errors.
BTW I’ve updated both sources and installer in the first post.
Here’s full console output

I’ve finished porting, it can be downloaded from Android Market or from here.
Diff and compilation instructions here (I ifdef-ed all Android stuff, so it can be applied on SVN, if you think it’s worthy)

Double post BTW :stuck_out_tongue:

Thanks for the patch.

I’ve committed the erm fix.

I’ll check the patch to the console in more detail (since it’s linux related) and commit that later in the day.

I think the change to replace the shared memory with a file is not right. That should probably be a handshake between the server and the client instead. But I guess the file will do in the meantime (if it doesn’t break on windows).

The changes to CMT.cpp are rather intrusive and may change the behavior of the code on non android platforms.

Also your patch has many blank lines insertion/removal. It would make review easier if they were not there. I’d say the same for the traces you added (“tlog1 << …”).

On gingerbread 2.3.3 and Samsung Galaxy Tab the app loads, iti presents the SDL screen with option to change settings and then quits to homescreen.
I tried using aLogCat to view reported logs but i can’t make any sense of it, apparently the app makes it all the way to loading unit models, then calls a function for OpaqueWindow that results in error, after which the Homescreen loads.
Can you tell me if you have any clues what I should look for in order to make it load?

Thank you for all your effort and all the nice ports :slight_smile:

I have the same problem on the Nexus S, I also got the SDL screen, before a black screen, then crashed to home screen.
Is it possible that there’s something wrong with my Heroes files? As I followed the instructions on the Android Market (I even tried twice just to make sure).
My Heroes is HoMM3 Complete Edition, from the ‘Ultimate Heroes Pack’.

Really looking forward to getting this working, so any ideas that might help would be greatly appreciated.

Keep up the great work, thanks!

Well… the same again… SDL starts and then crashes on HTC Desire with Android 2.3.4 … log is saying not found

@pelya: i sent you an email earlier with my log file… if necessary i will attach it here too

and again… nice work for pelya and the vcmi team too :wink:

I’ve bumped into some nasty crashes when testing on the device - I’ve got it back just today, on emulator everything worked so good :frowning: seems like memory alignment problems. So I’ve unpublished it for now.
I’ve also fixed troubles with unpacking on some devices.

Ok, if there’s something we can do to help just say the word

HTC Desire Z, 2.3.4 (Cyanogen)
Getting the “ not found” crash as well.
If it would help you getting a full logcat drop me a line at Christoph(Dot)Wagner(at)gmail.]com

Appreciate the work you are doing:)

Pelya, i’ve saved the logfile from a Galaxy Tab output onto pastebin:

The tablet’s characteristics are
Galaxy Tab P1000, Overcome 2.0.0 Gold ROM on Gingerbread 2.3.3 android, Koxuaxi’s 3.0.8 kernel.

As far as i can tell, VCMI makes it as far as loading after which it crashes. No missing file errors, apparently. :unamused:

for those with missing… pelya has fixed this, but as far as i know he didnt release it yet, because of the other more major bugs he found… so … if you would like to try going pass the not found message find where your chmod binary is and link it to /system/bin/… for example mine was in /system/xbin… and here it goes:

ln -s /system/xbin/chmod /system/bin

afterwards try starting the game… mine didnt work :slight_smile: but hey… you might get lucky :wink: at least you could “pastebin” the log then, because it might be more helpful

It looks like publishing VCMI on android market caused some stir. It’s still not playable though and I’m afraid many people will be disappointed with the game. I think you should wait at least for an AI before VCMI is officially out there again (it should be ready by the end of the year).

Anyway, I think we should consider releasing VCMI under different name when it gets stable and playable so bad fame of VCMI is not necessarily something to avoid at any cost.

It would be good to provide some brief info about what VCMI is, otherwise people start propagating incomplete or totally false view of the game. So far I’ve seen threating the port as an alternative to VCMI, providing original H3 screenshots and general threating this game as complete H3 port.

Yeah… Just found Russian thread about Android port.
Rough translation:

Which makes me wonder - what is original game? VCMI or HOMM?
There is also interesting statement: “The game is ready on 97%”. Where they found that number?
And no mentioning of incomplete game.
There is nice page on the wiki regarding this: but I don’t think that a lot of people saw it. This page should be mentioned more often to prevent confusion regarding current state of the game.