Arrow Escape
Developer manual · Version 1.0.0 · SatisVizion · Documentation revised 26 October 2026
Overview and included content
Tap a free arrow to send it off the board along its head direction. A blocked arrow costs a heart; clear every arrow to win. Long-press to preview a flight path.
This is an editable Unity game template and starting point for your own title. Customize the visuals, copy, level progression and release settings for your audience, then test your changes. The included Android demo is a showcase build; it is not a signing key or a production store submission.
Dense arrow boards, picture silhouettes, key-and-lock arrows, sleeping arrows, heart limits, flow streaks and path preview. The campaign contains 25 authored levels and game-specific procedural continuation. The included service kit is HyperCasual LiveOps Kit. Ads ship in Dummy/simulated mode and IAP is Disabled; third-party advertising/billing SDKs are not bundled.
Installation and first successful play
- Back up your project and extract the main ZIP completely. Read
Documentation/Documentation.htmlbefore importing the package. Offline documents do not require the hosted page to be available. - Install Unity
6000.0.62f1through Unity Hub. Add Android Build Support (including the matching SDK, NDK and OpenJDK) if building Android, and WebGL Build Support if building browser demos. A supplied source project can be opened with Add project in Unity Hub. - For package import into a new project, select a Universal Render Pipeline template. Use
Assets > Import Package > Custom Packageand import the complete package. Do not omit the private game Kit, HyperCasualLiveOpsKit, fonts, settings, scenes or their .meta files. - Check
Window > Package Manager: Universal RP17.0.4, Unity UI2.0.0and Input System1.14.2. Standard Unity modules includecom.unity.modules.screencaptureandcom.unity.modules.androidjni. Let Unity finish compilation before opening a scene. - Set
Edit > Project Settings > Player > Other Settings > Active Input HandlingtoBothmanually. Restart if Unity requests it. The documented setup is a user action; do not rely on an import hook changing a buyer's Project Settings. - In
Edit > Project Settings > Graphicsselect the supplied URP asset, and check the pipeline assignment for the active Quality level. Retain the packaged Settings assets and GUID references. A pink scene usually indicates a missing pipeline or shader assignment. - Open
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scenes/ArrowEscape_Mobile.unity. Press Play, focus the Game view, and follow the first-level tutorial: Tap a free arrow to send it off the board along its head direction. A blocked arrow costs a heart; clear every arrow to win. Long-press to preview a flight path. - Stop Play mode before editing source or authored content. Open the landscape scene
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scenes/ArrowEscape_WebGL.unityand verify the alternate layout as well. Runtime-created UI changes made only in Play mode are not a saved reskin.
Folder structure and source reference
The concrete paths in this manual match this standalone/Codester layout. The game root is Assets/SatisVizionArrowEscape/Games/ArrowEscape. Keep .meta files with their assets so scene, font, sprite and material references remain valid.
Assets/SatisVizionArrowEscape/Games/ArrowEscape/
Scenes/ Mobile and landscape entry scenes
Scripts/ Rules, HUD, board view and game data
Editor/ Game-specific authoring tools
Resources/ Level JSON, artwork and game audio
Kit/ Required game runtime and editor helpers
Documentation/ This manual
Assets/SatisVizionArrowEscape/HyperCasualLiveOpsKit/ Included service kit
Assets/SatisVizionArrowEscape/TextMesh Pro/ Required text resources| Exact file | What to edit or inspect |
|---|---|
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeArt.cs | Colour palette, resource artwork loading and generated visual helpers. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeGen.cs | Procedural level creation and seed/difficulty rules. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeLevels.cs | Campaign data loading, level access and procedural continuation. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeLine.cs | Game-specific structures and helpers; inspect the public types and call sites before extending them. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeModel.cs | Logical board representation and rule state. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.cs | Main game lifecycle, progression, input/rule orchestration and booster handlers. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.Hud.cs | Runtime HUD, menu and popup construction, display strings and tutorial presentation. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.View.cs | Scene geometry or board rendering, camera layout and visual feedback. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzUI.cs | Creates the uGUI labels/buttons and resolves the game kit fonts. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzAudio.cs | Named sound resources, music playback where provided and fallback sound synthesis. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzCore.cs | Game-prefixed local persistence helpers. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzCore.cs | Bridge from game calls to simulated/service-kit ads and native haptic hooks. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Editor/ArrowEscapeLevelEditor.cs | The visual level editor and its actual menu commands. |
Arrow Escape reskin: interface colours and visible text
The interface is constructed in C# when the scene runs. There is no single static scene prefab containing every final label. Use the exact game files below; changing only a shared-kit theme or localization table will not replace game-authored HUD/menu strings.
1. Change interface colours
Open Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeArt.cs in your C# editor. Find these declared palette symbols; change only the quoted hexadecimal value in the existing HzUI.Hex(...) assignment. Preserve the symbol, type and surrounding syntax. This keeps every caller using the shared colour in sync.
| File / symbol | Current value | Concrete usage to inspect |
|---|---|---|
Scripts/AeArt.csPaper | #F5EFE2 | ArrowEscapeGame.View.cs: var paper = HzUI.Img("Paper", _layer, HzUI.Gradient(Paper, PaperDeep), Color.white); |
Scripts/AeArt.csSheet | #FFFBF2 | ArrowEscapeGame.View.cs: var sheet = HzUI.Panel("Sheet", _col, Sheet, 36); |
Scripts/AeArt.csInk | #3B3F6B | ArrowEscapeGame.Hud.cs: var leftPill = HzUI.Panel("LeftPill", _col, Ink, 36); leftPill.raycastTarget = false; |
Scripts/AeArt.csInkSoft | #7C7FA3 | ArrowEscapeGame.Hud.cs: _nameTxt = HzUI.Label("Name", _col, "", 30, InkSoft, TextAnchor.MiddleCenter, false); _nameTxt.fontStyle = FontStyle.Bold; |
Scripts/AeArt.csAccent | #E0793F | ArrowEscapeGame.Hud.cs: _levelTxt = HzUI.Label("Level", _col, "", 66, Accent); |
Scripts/AeArt.csHeartC | #E8584A | ArrowEscapeGame.Hud.cs: g.color = g is Text ? (on ? HeartC : new Color(0.5f, 0.45f, 0.4f, 0.25f)) : (on ? Color.white : new Color(0.3f, 0.3f, 0.3f, 0.22f)); |
Scripts/AeArt.csPopupCard | #FFFBF2 | ArrowEscapeGame.Hud.cs: var card = HzUI.Panel("Card", dim.transform, PopupCard, 52); |
Scripts/AeArt.csPopupInk | #3B3F6B | ArrowEscapeGame.Hud.cs: p.Message = HzUI.Label("Msg", card.transform, message, 42, PopupInk, TextAnchor.MiddleCenter, false); |
Concrete first colour edit: in Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeArt.cs, find this fragment within its existing declaration:
Paper = HzUI.Hex("#F5EFE2")Replace only that colour value, for example:
Paper = HzUI.Hex("#24485C")- Save the source and return to Unity. Wait for compilation, resolve any Console errors, and start a fresh Play session so the UI and cached generated artwork are rebuilt.
- Inspect the changed HUD surface, settings menu and a win/lose or booster popup. Verify that text remains readable, selected/disabled states remain distinct, and icons are visible against the new background.
- Check the mobile and landscape scenes. Some popup, world, camera and material colours are separate literal assignments in
Scripts/ArrowEscapeGame.Hud.csor the .View.cs file. If one surface did not change, inspect the colour argument used by that exact control instead of replacing every matching hex value globally. - For a procedural colour change, stop and re-enter Play; if you deliberately disabled domain reload, restart the editor when testing static sprite/material caches. A bitmap with baked-in colours must be edited separately from the C# palette.
2. Change a visible HUD label
Open Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.Hud.cs, find RefreshHud and locate this exact source line:
_levelTxt.text = "Level " + _playLevel.ToString(CultureInfo.InvariantCulture);To call levels stages, change the display string while preserving the level expression and formatting:
_levelTxt.text = "Stage " + _playLevel.ToString(CultureInfo.InvariantCulture);This is a targeted edit to the displayed string, not a global search/replace of object names. HzUI.Label("Lvl", parent, "LEVEL " + Level, ...) uses its first string as a hierarchy/object name and its third argument as visible text. In assignments such as _levelTxt.text = ..., edit only the literal part; retain the number, interpolation braces, arithmetic, conditional branches and formatting.
3. Edit menus, popups, title and booster captions
Use this game-specific lookup table. The snippet is a search target in the named file; it shows the actual display-writing call rather than an assumed localization key. Line numbers are navigation hints for this revision and can shift after your edits.
| Exact file and method | Search for this source |
|---|---|
Scripts/ArrowEscapeGame.Hud.csRefreshHudline 143 | _levelTxt.text = "Level " + _playLevel.ToString(CultureInfo.InvariantCulture); |
Scripts/ArrowEscapeGame.Hud.csShowSettingsPopupline 303 | var p = AePopup("Settings", "", Ink, null, null, |
Scripts/ArrowEscapeGame.Hud.csHelpPageline 331 | AePopup($"How to Play {i + 1}/{HelpPages.Length}", HelpPages[i], Sky, null, null, |
Scripts/ArrowEscapeGame.csclass declarationsline 24 | public override string Title => "Arrow Escape"; |
Scripts/ArrowEscapeGame.csShowPreLevelline 116 | var p = AePopup($"Level {Level}", msg, Accent, PreLevelArt(), D.name + (D.breather ? " (relax level)" : ""), ("Play", Mint, (Action)Begin)); |
- Change the
Titleproperty inScripts/ArrowEscapeGame.csfor the game title exposed by the base game. Also change any separate literal title built by the HUD/view; a Title property is not a universal replacement for all title art. - Change visible menu captions in
ShowSettingsPopupand the help-page strings inArrowEscapeGame.Hud.cs. Keep action callbacks, toggle variables and control object names unchanged. - For booster names edit
BoostNameinAssets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.cs. For booster help editBoostDescinAssets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.Hud.cs. Preserve array lengths/order, booster IDs, unlock logic and charge values. A cosmetic caption must not rename an ad placement, resource lookup or PlayerPrefs key. - For status counters, change the actual refresh method, not only the label initializer; otherwise the next frame or level load may overwrite your new caption. Update singular/plural and portrait/landscape variants together.
- Translate tutorial/help/result text in the game files and level
name/hintfields where used. Keep\nline breaks and{...}interpolations valid, and test long lines in narrow portrait popups.
4. What the shared localization guide does and does not cover
The shared HyperCasual LiveOps Kit localization guide concerns UI and content that use that kit's localization service. This game's literal strings in the files above are not automatically replaced by adding entries to an HLK table. For one-language reskinning, edit the literals and data shown here. For runtime language selection, explicitly route those game display assignments through your chosen lookup service, provide keys for each caption, and refresh active labels when the language changes. That is an integration task, not a delivered translation toggle.
ArrowEscapeGame.Hud.cs writes the Level and Flow prefixes and settings/help popups, while ArrowEscapeGame.cs builds the pre-level Play and out-of-hearts dialogs. AeArt.Paper/Sheet concern the paper surfaces; PopupCard/PopupInk concern overlays. Arrow path coordinates and direction values are rule data, not translation strings. Preserve those identifiers and the ordering of booster arrays.
5. Verify the reskin
- Launch both supplied scenes with a normal player save. Confirm the edited level heading, game title, settings/help buttons, counters and booster names.
- Open a result popup and a refill offer, and replay the first-level and first-booster tutorials using a disposable test profile or the documented developer controls. Confirm that the changed colours remain readable behind all overlays.
- Test one valid move, one invalid action, progression to the next level, a retry and one available booster. A text reskin must not change goals, costs, rule checks or resource IDs.
- Make a new Android/WebGL test build after source edits. Existing hosted demos and videos will continue to show their previously built appearance until rebuilt; editing this manual alone does not change those binaries.
Gameplay and content
Tap a free arrow to send it off the board along its head direction. A blocked arrow costs a heart; clear every arrow to win. Long-press to preview a flight path.
Dense arrow boards, picture silhouettes, key-and-lock arrows, sleeping arrows, heart limits, flow streaks and path preview.
The source includes 25 authored levels and seeded procedural continuation. Progress, settings and charges are stored locally with PlayerPrefs. Browser storage depends on the browser profile. The template includes source and editable level data; generated continuation is not advertised as hundreds of individually authored levels.
Boosters
- Hint unlocks at level 3.
- Shield unlocks at level 6.
- Scissors unlocks at level 10.
- Lantern unlocks at level 15.
First-use guidance introduces each booster. Availability depends on the level, current state and remaining charges. Rewarded placements are simulated by default; only a completed reward callback should grant a refill. Use the DEV panel to unlock boosters for authoring, not as a substitute for real progression testing.
Manual editor and generation
Open Tools > Arrow Escape > Level Editor. Duplicate a level before changing the original tutorial. The authoring file is Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Levels/levels.json.
The editor exposes Name, Hearts, First-time hint, Breather, Shape tag, Difficulty, Columns and Rows. Regenerate (new seed) refills the selected size and keeps its name, hint, hearts and special-arrow counts. Clear board removes the arrows. Paint connected arrow paths with valid head directions; key/lock and sleeper arrows need consistent metadata. For a first edit, select level 3, Dup, change its Name and raise Hearts by one within the allowed range. Validate, Save and Play this level. When changing an arrow path, check that it can leave the board or is unlocked by another legal removal; Validate must find a complete removal order. Seeded generation and the runtime share the arrow solver. Breather boards use picture silhouettes, rather than a different ruleset.
The included editor supports saving, duplication and ordering, and provides generation and validation controls appropriate for this game. Read the actual validation result; a difficulty target is not a guarantee of player success. Use a repeatable seed when comparing generated variants. Test changed boards in Play mode.
First authored level schema
{
"levels": [
{
"name": "First Page",
"shape": "rect",
"w": 4,
"h": 5,
"hearts": 3,
"hint": "",
"difficulty": 4,
"breather": false,
"seed": 1010,
"arrows": [
{
"c": [
7,
3,
2,
1,
0
],
"k": 0,
"n": 0,
"g": 0
},
{
"c": [
4,
8,
12,
16,
17
],
"k": 0,
"n": 0,
"g": 0
},
{
"c": [
19,
18,
14,
10,
6
],
"k": 0,
"n": 0,
"g": 0
},
{
"c": [
15,
11
],
"k": 0,
"n": 0,
"g": 0
},
{
"c": [
9,
5
],
"k": 0,
"n": 0,
"g": 0
}
]
}
]
}
LiveOps, ads and haptics
The publisher-owned HyperCasual LiveOps Kit is included. Read its complete offline manual.
Settings: Assets/SatisVizionArrowEscape/HyperCasualLiveOpsKit/Resources/HLK/HLKSettings.asset. Shipping defaults are Ads Mode Dummy (0) and IAP Mode Disabled (3). Banner, interstitial and rewarded placements are simulations. No Google Mobile Ads, billing or other vendor SDK is included. Automatic vendor-SDK installers are disabled. The game's own Kit is required code, not an advertising SDK.
To enable a real provider, separately install its official SDK, follow the kit manual, configure your own identifiers, consent and privacy policy, then test the selected platform and all cancellation/failure cases. Do not enable SDK symbols without the corresponding dependency. Optional kit modules are capabilities, not production services already configured for this game. Native vibration needs a supported device; browser haptics and other native services have platform limits.
Development controls
Open DEV, press F2/backquote, or use the kit's top-left multi-tap shortcut. The global panel supports level jumps, booster access, ads and haptics controls. Add HZ_RELEASE to scripting defines when you want these development controls excluded from a consumer build. This does not configure real ads or certify store readiness.
Android release
Use the Mobile scene, portrait orientation and ARM64/IL2CPP with matching Unity tools. The provided APK is a debug-signed development demo, not a production store release. For release turn off Development Build and debugging, choose your own application identifier and review current store API requirements.
In Player → Publishing Settings create or select your own keystore and alias. Securely retain the keystore, alias and passwords for future updates; never redistribute signing secrets. Enable Build App Bundle for a Google Play AAB. Install a release candidate on a physical Android device and check touch, audio, haptics, pause/resume, saves and any enabled provider flows. Complete destination-store ads/data declarations and your privacy policy for the services actually enabled.
WebGL
Build the Mobile scene for a portrait-only demo with the built-in Default template and Brotli decompression fallback. Use Tools → Arrow Escape → Create Responsive WebGL Page after building and select the output folder. This generates an original responsive page around the complete Build folder. Serve every loader, framework, data and WASM file over HTTP(S); file:// is unsupported. Audio normally starts after a first click/tap.
The two-scene landscape-first route supports ?mobile=1 to switch to the following Mobile scene. The included WebGL build menu uses HLK's non-development local showcase scope. It supports simulated demos; configure your production providers and resolve the kit build-doctor checks for a real service release.
Troubleshooting
- Missing types: install the required packages and import all three roots, preserving
.metafiles. - Pointer input exception: select Active Input Handling Both and restart Unity.
- Pink materials: use URP 17.0.4 and run the game's Setup command.
- Sparse scene in edit mode: world/UI objects are built at runtime; press Play.
- No real ad revenue: Dummy mode is simulated and no provider SDK is bundled.
- IAP is unavailable: it is deliberately Disabled by default; configure an official billing integration separately if you need it.
- Progress persists: use the development reset controls or deliberately clear this product's PlayerPrefs.
- WebGL does not load from a local file: serve the complete output over HTTP(S).
Artwork, fonts and audio replacement
Game-specific resource directories in this edition:
| Path | Purpose |
|---|---|
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Art | Art assets loaded by the game; keep resource base names stable unless you update every lookup. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Levels | Levels assets loaded by the game; keep resource base names stable unless you update every lookup. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Music | Music assets loaded by the game; keep resource base names stable unless you update every lookup. |
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Sfx | Sfx assets loaded by the game; keep resource base names stable unless you update every lookup. |
- Replace an existing sprite or audio clip through Unity's Project view while keeping its resource base name and .meta/GUID. If you rename or move it, update its
Resources.Loadlookup and any serialized references together. - For a UI icon, find the
Art(...)/ art-classGet(...)call in the HUD script and its base name under the Art directory. Imported sprite colours may be baked into the pixels; palette edits only affect code-applied tint or generated geometry. - For a 3D scene, inspect the
.View.csfile and any game-specific material/import helper before rerunning material generation. Back up custom materials first; generation commands may overwrite generated material settings. - The game kit resolves its fonts in
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzUI.cs. ReadDisplayandBodyfor the current resource paths. Use fonts with redistribution rights, retain their licence notices, and test accented characters/glyph coverage at the existing sizes. - For sound effects, inspect the game's sound-name constants/calls and
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Kit/Runtime/HzAudio.cs. Replace the matching Sfx resource without changing its base name. Named event variants and synthesized fallbacks are handled by the kit; a new filename does nothing unless a caller requests it. - Music is a separate resource/playback path. Match the
PlayMusiclookup if this game supplies a track. Set reasonable clip/volume settings and test mute, focus/background behaviour and device output. Do not infer audio-device testing from a successful build.
Retain the original licence/attribution files for fonts, icons, audio and other included dependencies when distributing your customized game.
Level editor: concrete editing workflow
Open Tools > Arrow Escape > Level Editor. Its implementation is Assets/SatisVizionArrowEscape/Games/ArrowEscape/Editor/ArrowEscapeLevelEditor.cs. The following names are taken from that editor, so use the displayed control name rather than assuming a generic inspector.
| Control / field | Practical use |
|---|---|
Reload | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Validate | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Validate All | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Add | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Dup | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Del | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Up | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Down | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Name | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Shape tag | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Regenerate as | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Clear board | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Draw: drag across empty cells from tail to head. Click an arrow with the other tools. Right-click erases. | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Difficulty curve (validated score, else saved difficulty; blue = breather) | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Count | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Start at level # | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Seed | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
Start difficulty | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
End difficulty | Select the relevant level first; read the adjacent controls/help in the editor before applying it. Save only after validating the changed content. |
- Exit Play mode. Back up
Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Levels/levels.json. Select an authored non-tutorial level to avoid unintentionally rewriting the onboarding sequence. - Use the available duplication/add control to make a working copy when offered. Change its display Name (or Picture name) and one gameplay property using the visual editor. Keep the first tutorial level intact until you understand its scripted guidance.
- Run the editor's validation control and read the concrete warnings/errors. Fix missing references, invalid board geometry, impossible goals or malformed data before saving.
- Save using the editor's Save control. If you intentionally edit JSON externally, save valid JSON, then use Reload/Reload from disk in the editor before continuing. Do not keep two unsaved versions of the same data open.
- Use Play this level when available, or the documented DEV level navigation, to play the exact changed level. A solver/bot result is useful authoring evidence but does not replace checking the human controls, timing, tutorial and reward flow.
Procedural generation and level data reference
The level data used by this game is located here: Assets/SatisVizionArrowEscape/Games/ArrowEscape/Resources/arrowescape/Levels/levels.json. Generation logic is in Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/AeGen.cs. Keep the authored campaign and generated continuation distinct when estimating your content count.
Generation controls exposed by the game editor include: Regenerate as, Difficulty curve (validated score, else saved difficulty; blue = breather), Seed.
- Back up the level JSON before a generation operation. Choose a small trial range and a repeatable seed first, then inspect what is appended or replaced. Do not assume a command is append-only; a selected-level regeneration or Rebuild command can replace authored content.
- Read the game-specific fields in the level editor and generator source. Match generated board dimensions, rule limits and special mechanics to the intended difficulty; do not copy parameters from another game.
- Validate generated output, play several early/mid/late boards, and check that the tutorial still introduces mechanics before the generated content requires them. Keep a saved known-good seed for regressions.
- Treat visual difficulty labels and bot/solver scores as authoring aids. They do not guarantee that every generated board is suitable for every player or that a target completion time is achievable.
| Authored field | Type / value in the included sample |
|---|---|
name | "First Page" |
shape | "rect" |
w | 4 |
h | 5 |
hearts | 3 |
hint | "" |
difficulty | 4 |
breather | false |
seed | 1010 |
arrows | array of 5 entries |
Use these field names exactly. JSON keys are serialized identifiers, not interface captions; changing a field name requires corresponding changes to the serializable model, loader, editor and generator. Duplicate levels through the editor when possible rather than guessing a nested schema.
Authoring controls and booster configuration
Arrow Escape visual editing gestures
Draw: drag across empty cells from tail to head. Click an arrow with the other tools. Right-click erases.
| Actual control | Meaning |
|---|---|
Reload | Reload saved JSON from disk; unsaved edits can be discarded. |
Validate | Check the selected level and read the specific diagnostic. |
Validate All | Check the whole campaign and inspect every failure. |
Add | Create a new entry, configure it and validate before saving. |
Dup | Duplicate the selected level before changing a working copy. |
Del | Delete the selected entry; back up campaign data first. |
Up | Move the selected level earlier in the campaign. |
Down | Move it later in the campaign. |
Name | Player-facing level name; do not rename the serialized field. |
Count | Number of levels requested for generation. |
Start at level # | First campaign number used by the requested operation. |
Seed | A repeatable random seed for reproducing a generated result. |
Start difficulty | Difficulty target at the beginning of the range. |
End difficulty | Difficulty target at its end. |
Effect, unlock and first grant
The descriptions below are the actual game-authored booster help. Unlock and starting inventory are read from Assets/SatisVizionArrowEscape/Games/ArrowEscape/Scripts/ArrowEscapeGame.cs; existing saves keep their previously stored state.
| Booster | Unlock level | Initial grant | Effect / game-authored help |
|---|---|---|---|
| Hint | 3 | 3 | Lights up an arrow that can fly right now and points at it. |
| Shield | 6 | 2 | Your next wrong tap costs no heart. |
| Scissors | 10 | 2 | Tap Scissors, then any arrow: it is snipped off the board, even when it is blocked. |
| Lantern | 15 | 2 | Every arrow that can fly right now glows for 4 seconds. |
To rebalance, edit the matching BoostUnlock and BoostStart values and the corresponding handlers; keep the four entries in the same order. To rename or translate, edit BoostName in Scripts/ArrowEscapeGame.cs and BoostDesc in Scripts/ArrowEscapeGame.Hud.cs. A targeted booster may require a second tap on an eligible object; read its handler and test invalid targets before changing consumption logic. Refills must be granted only after the successful rewarded callback; cancelling an ad must not grant a reward.
Game text versus saved data and service configuration
Game progress, tutorial flags, currency and booster inventory are stored through the private HzSave helper and Unity PlayerPrefs. Search that helper and the main game script for the current key prefix. Changing displayed titles does not require changing those keys. Renaming keys can make an existing player appear to lose progress; plan migration before doing so.
Use a separate test profile when replaying onboarding. Do not use a global DeleteAll operation in a buyer's existing multi-asset project. Developer resets and unlocks should be used deliberately on test saves. Confirm the state after stopping/restarting Play, because an old saved tutorial flag can correctly suppress the popup you expect to see.
The HLK settings asset is Assets/SatisVizionArrowEscape/HyperCasualLiveOpsKit/Resources/HLK/HLKSettings.asset. Ads default to Dummy and IAP to Disabled. Keep those defaults while reskinning. A production provider requires its real, separately installed SDK, IDs, platform configuration and testing. Optional setup documentation does not mean a provider SDK is included or automatically installed. Keep service identifiers, ad-placement IDs and reward callback semantics separate from translated button text.
Reskin troubleshooting and release check
| Symptom | Check |
|---|---|
| A label reverts after one frame | Edit the refresh-time .text = assignment listed above, not only the creation argument. Search the exact visible phrase in Scripts, including portrait and landscape branches. |
| A scene edit disappears after stopping Play | The HUD is generated at runtime. Save the source/data edit outside Play mode, then enter a fresh Play session. |
| A colour changes on the HUD but not a popup | Inspect that popup's colour arguments and the separate popup palette symbols; it may use a different surface/ink pair or a baked bitmap. |
| A translated string clips | Preserve interpolation/line breaks, shorten the caption or intentionally adjust its Text/RectTransform size. Test the narrowest supported portrait layout and any longer language. |
| The HLK language table does not change the game label | That label uses a literal or game data. Edit its actual source/data or implement an explicit localization lookup there. |
| New art or audio is missing | Compare the exact resource base name, folder, importer settings and code lookup. Preserve its .meta file and verify there are no compile errors. |
| The old tutorial still does not appear | Check persisted tutorial/booster-first-use flags with a disposable save. Reaching an already-completed tutorial in an existing profile is not a localization failure. |
| The browser/Android demo looks unchanged | Rebuild and redeploy that demo after source changes. A hosted manual update does not rebuild the game. |
| Production ads or purchases are unavailable | This delivery uses simulated ads and Disabled IAP. Install/configure a supported real provider separately and test the complete result. |
Before your own release: review branding, UI contrast, tutorial wording, authored/generated levels, saved progress, every booster, pause/mute controls and both layouts. Set your own application identifier, icons, version, signing and release privacy/service settings. Perform actual target-device/browser testing; this manual and its documentation-only update do not certify your customized binary.
Licences, support and documentation access
Keep the included font, icon, TextMesh Pro, audio and HyperCasual LiveOps Kit notices with your distribution. Marketing illustrations are separate from authentic gameplay screenshots. Refer to the included licence/AI disclosures for the supplied components; adding your own assets requires checking their distribution terms.
For product support, use the marketplace item support channel. SatisVizion support email: satisvizion@gmail.com. Include the game name, Unity version, target platform, exact Console error, changed files and clear reproduction steps. Do not send signing keys, passwords or private service credentials.
This is the main game manual. It is included offline in the main ZIP and the game's Documentation folder. Shared-kit detail is available in HyperCasualLiveOpsKit.html in the offline documentation bundle; within the Unity project, open the included kit's Documentation folder. The current online manual is linked in the publisher metadata. Installation and basic use do not depend on visiting an external storefront.