HOW WE BUILT IT

Fight Fantasy: the architecture of a Unity RPG

An RPG starts with a handful of skills and ends up gathering characters, items, status effects, quests and game modes.

If everything depends on one particular scene, every expansion becomes slower and riskier.

Fight Fantasy is the 3D RPG that Androtiyas and OverFuture developed for mobile and PC, with an open beta in 2015 and version 1.0 in 2016. Ten years later we are bringing it back in Unity 6, which has shown us which architecture decisions held up. The characters, the bestiary and the state of its comeback are on the Fight Fantasy product page. The project summary is on its project page (in Spanish).

A group of visitors playtesting Fight Fantasy at the project's stand during an event
Real sessions reveal input, readability and performance problems that never show up in the editor.

One RPG for mobile and PC with one account.

The 2015 idea was ambitious for a small studio. An action RPG with a cartoon look and chibi-style characters, playable on mobile and PC with the same account and the same data.

The plan also included Mac, iOS and Windows Phone.

Players level up to 30. They start with two skills, gain the third at level 10 and the fourth, each character’s Ultimate, at level 20. From that level, the PvP arenas and PvE dungeons open up, played in real time with Photon.

We showed it at events, as the photos in this article show, and version 1.0 reached Google Play in 2016.

Fight Fantasy combat against skeletons, with the health bar and the four skills on screen
A screenshot from the Android beta, July 2015.

Skills defined as data.

Cost, range, effect and cooldown can live in editable configuration. The team tunes those values without duplicating scripts, and the code focuses on interpreting one shared rule.

Fight Fantasy has 40 skills for ten playable characters, each with its own cost, cooldown and range. Stats follow the same idea. Every character has a base value and what it gains per level.

That decision paid off ten years later. The ten characters, their 23 skins and the game’s 73 enemies were all described as data. From them we generated the character sheet and the full bestiary on the product page.

Bosses follow the same rule. There are six, and the last one, Demon Boss, has 148,500 base health points, ten times more than the next. It is meant to be almost impossible to beat, and that design decision lives in the data, not in the code.

Result apart from presentation.

Combat first works out what happens, and only then plays the animation, sound and particles. This separation lets you test damage or a resistance without loading the 3D world, and it stops a delayed effect from changing the result.

In Fight Fantasy, the result of each hit comes from the base value, the level and the critical chance, which is capped at 75%. At least 0.75 seconds pass between hits, and then the animation plays.

A Fight Fantasy character casting an area spell in combat
An area spell, in a screenshot from November 2015.

Input adapters.

Keyboard, gamepad and touchscreen produce the same intentions.

Moving, attacking or dodging mean the same thing on any device, and the character logic never knows which device gave the command.

The PC and mobile interfaces are one single scene. Only the scale of the HUD changes, so an interface change reaches both platforms at once.

The Fight Fantasy interface on mobile, with the HUD adapted to the touchscreen
The mobile interface. The desktop one is the same scene with the HUD at another scale.

An inventory that can grow.

An item should describe what it adds, where it can be equipped and how it looks, without fragile references to a scene. That way you can add new families of gear and migrate saved games without rebuilding the whole system.

In the game, equipment changes a character’s attributes and also their appearance. Items come from quests, from enemies and from the game’s shopkeepers.

Fight Fantasy being presented on a stage in front of an audience
Explaining the system in public forces you to order the pitch and separate the essential from the extras.

A performance budget per platform.

Geometry, memory, shaders and effects are reviewed with real profiles on each device. Lowering quality blindly tends to move the bottleneck elsewhere. Measuring tells you which change wins back performance without making the whole game look worse.

The starting citadel gives an idea of the challenge. It holds 7,553 objects, 357 enemy spawn points and 130 non-player characters, and it had to run on a 2015 phone.

What ages worst is the server.

In March 2024, Google removed the game from Google Play because it lacked the Data safety form. It was not a bug in the game. Store policies change, and an app without maintenance ends up out of the store.

When we opened it again, we saw what had held up and what had not. The 2015 account server no longer exists, but the game world runs locally. Without a server, offline mode reaches the citadel. It is the fourth separation from the list above, local state apart from the network, that lets it run without a server today.

The Fight Fantasy citadel open in Unity 6 during the project's recovery
The citadel, now in Unity 6, in July 2026.

The comeback in Unity 6.

Since July 2026 the project has been on Unity 6, and it compiles without errors in the Editor. It has 104 of its own scripts and just over 24,000 lines of C#.

The interface is the part that needs most work. Almost all of it is built with OnGUI, Unity’s old system, and designed for 960 × 640 pixels. It is being rebuilt screen by screen, and the recovery status, phase by phase, is on the Fight Fantasy product page.

If you have an old game, do not write it off before opening it. First find out what depends on the server and what runs locally, and whether the game data is kept apart from the code.

An architecture born from our own project.

Fight Fantasy brings together the challenges of taking an RPG from a playable prototype to several platforms. It has PvP and PvE combat, an inventory and configurable characters.

What taught us most was the passing of time. The separations in the architecture are what let you return to a project ten years later. Whatever depended on a server or an old format is what has to be rebuilt.

This is the kind of work we do in Unity game development from Zaragoza.

Have a game that needs rescuing?

Tell us what state the project is in and we will tell you what can be saved and how. We reply within 24 business hours.

Let's talk

HAVE A PROJECT IN MIND?

Tell us what you need

We reply within 24 business hours and suggest how to get started.

Your first 30-minute meeting is free.