Unity 6000.0.62f1 · Complete offline documentation

Guess Five
Developer Guide

Install. Edit. Reskin. Build your release.

szekipapa77@gmail.com
Guess Five cover
CHAPTER 01

Start here: Guess Five

Guess Five is a complete editable Unity game template. Use the onscreen keyboard or physical A–Z keys; Enter submits and Backspace deletes. Blue marks correct position, orange marks present elsewhere, and muted marks absent. Solve within the row budget and any enabled timer. Duplicate letters are counted against the answer. Classic uses endless five-letter words; the level path supports four to six letters.

Included: 25 curated levels, seeded continuation, visual level editor and validation, four guided helpers and portrait/landscape scenes. Saving is local. No multiplayer server, purchases, HLK, cloud accounts or remote LiveOps backend is included. Keep the required private game Kit. Szekipapa77 Ads is publisher-owned integration code; provider SDK binaries are excluded. Import only one game Kit per project because they share class names.

CHAPTER 02

Installation and first play

Use Unity 6000.0.62f1, URP 17.0.4 and Unity UI 2.0.0. Retain the supplied official manifest and ProjectSettings. Install Android SDK/NDK/OpenJDK and WebGL support through matching Unity Hub modules.

  1. Extract the standalone project to a short writable path and open it with the matching editor. Let package import finish.
  2. For native package import, create a matching URP project, choose Assets > Import Package > Custom Package and import every game, Kit, Ads and WebGL template entry.
  3. Run Szekipapa77 > Guess Five > Setup. This configures rendering and player settings; inspect changes when combining with an existing project.
  4. Set Active Input Handling to Input Manager (Old), or Both if your project also has the Input System. New Input System only is insufficient.
  5. Open Assets/Games/GuessFive/Scenes/GuessFive_Mobile.unity, press Play, dismiss the level card and follow the first-level guidance.
  6. Stop Play mode before data editing. Retain .meta files/GUIDs. No separate TextMesh Pro import is needed by the classic Unity UI Text path.
CHAPTER 03

Project map and actual scripts

All paths here are under Assets/Games/GuessFive. Scripts owns gameplay; Editor owns visual tools; Kit supplies UI, audio, saving and platform code; Resources contains data/art/audio; Settings contains URP; Scenes contains mobile and WebGL entry points. The UI is created in code at runtime, not authored as a persistent Canvas prefab.

Read GuessFiveGame.cs for input/flow, GuessFiveScreens.cs for menus/popups, GuessFiveBoard.cs for the board/view, G5Logic.cs for the model and G5Levels.cs for level loading. Advertising settings are outside the game at Assets/Szekipapa77Ads.

CHAPTER 04

Gameplay, input and progression

Use the onscreen keyboard or physical A–Z keys; Enter submits and Backspace deletes. Blue marks correct position, orange marks present elsewhere, and muted marks absent. Solve within the row budget and any enabled timer. Duplicate letters are counted against the answer. Classic uses endless five-letter words; the level path supports four to six letters.

The curated bank contains 25 authored levels followed by generated continuation. The mobile scene requests portrait, while the WebGL-named scene requests landscape. Supplied build menu targets currently choose the portrait scene for both platforms; choose the landscape scene explicitly in a Build Profile if desired. Test layouts and controls after a near-startup scene replacement as well as after a finished round.

CHAPTER 05

Tutorials and all four helpers

The first level includes guided controls; helper unlocks introduce each helper and its first use. Restart with fresh local progress to test first-launch guidance. Open in-game help to review controls.

HelperUnlockFree chargesEffect
Reveal33Locks a correct letter into its position.
Erase63Greys out up to four absent letters.
Extra Row102Adds a guessing row, capped at nine rows.
Vowels152Shows vowel membership in the hidden answer.

A guided first use can be free and is not the same as spending a normal saved charge. Exhausted charges may request a rewarded placement. Confirm success/cancel/failure callbacks and grant rewards exactly once. Test each helper with valid preconditions: armed shots need a subsequent shot, Undo needs an unmatched pick and Bucket needs occupied tray slots.

CHAPTER 06

Visual editor: your first edited level

Open Szekipapa77 > Guess Five > Level Editor. Exact implementation: Editor/GuessFiveLevelEditor.cs.

Enter a valid lowercase answer and matching length, then set attempts, theme, optional Timed bonus (30–240 seconds), Head start letters (0–2), Strict (reuse found letters) and Breather. The editor includes word suggestions and feedback previews. Use Play this level after saving.

  1. Back up levels.json and duplicate a simple early level.
  2. Make one small change and use a distinctive visible name/note where supported.
  3. Validate using the editor and fix every reported issue.
  4. Save explicitly, stop and restart Play mode and open the edited index.
  5. Check both supplied scenes and rebuild demos after data changes.
CHAPTER 07

Generation, insertion and replacement

Append to the end or Replace a range, Count (1–60), Start level for replacement, Seed, Start/End difficulty, Sawtooth height (0–0.6), Breather every (3–8), Timed bonus every (0–12), Theme cadence (0–8) and Strict from difficulty (0–1). Append adds after the bank. Replace overwrites selected positions and extends beyond the end. Generated answers avoid repetition; Save explicitly.

Worked extension: keep a backup, generate five candidates after the original 25, use a moderate difficulty curve, validate every candidate, then Save. Reload JSON to confirm the count changed. Deliberately choose replacement only when you intend to overwrite those records. Runtime generated continuation does not write new project JSON assets. Solver/bot validation does not replace manual play testing.

CHAPTER 08

Actual level schema

Canonical file: Assets/Games/GuessFive/Resources/guessfive/Levels/levels.json. Root levels array order defines visible level numbering; preserve version/type fields and numeric indices. The following is the actual first record, not a hypothetical schema:

{
  "answer": "store",
  "length": 5,
  "tries": 6,
  "theme": "",
  "timeLimit": 0,
  "reveal": 0,
  "strict": false,
  "breather": false,
  "maxRank": 0,
  "note": "First word: plain five letters"
}

Use the visual editor to create structured coordinates, arrays and indices. Keep JSON valid and preserve booleans/numbers. Validate through GuessFiveLevelEditor.cs before playing. Do not rename resource IDs or save keys during a display-text change.

CHAPTER 09

Worked reskin: interface colours

Open Scripts/GuessFiveGame.cs, find Correct with current hex #2F6FDB. Stop Play mode and back up the file. Change only that value to #42C9B0, keep the symbol/type, allow compilation and restart the scene. Review HUD, buttons, helper captions, result/settings popups and landscape layout. For Guess Five, check Night and Day and maintain clear clue contrast. Editor preview palettes can be separate; change them deliberately if matching is needed.

Exact runtime palette/material assignments follow. These show which file and assignment owns a colour; editing an editor-only colour does not reskin the runtime. Rebuild after accepting the change.

Exact source referenceCurrent assignment
GuessFiveBoard.cs:122parts.Add($"<color=#FFC23D>3 stars</color>: solve in {three} tries or fewer.");
GuessFiveBoard.cs:455var bg = HzUI.Panel("Note", Overlay, accent ?? HzUI.Hex("#1C1638"), 34);
GuessFiveGame.cs:27static readonly Color Correct = HzUI.Hex("#2F6FDB"), Present = HzUI.Hex("#E8811E"), Danger = HzUI.Hex("#D8435B"),
GuessFiveGame.cs:28Gold = HzUI.Hex("#FFC23D"), Plum = HzUI.Hex("#7B61FF"), Green = HzUI.Hex("#2FB57A");
GuessFiveGame.cs:31bgTop = HzUI.Hex("#2A2158"), bgBot = HzUI.Hex("#110D26"), tile = HzUI.Hex("#221B46"), ring = HzUI.Hex("#3E3672"),
GuessFiveGame.cs:32ringFilled = HzUI.Hex("#9C93DA"), text = Color.white, sub = HzUI.Hex("#B7B0E0"), key = HzUI.Hex("#4B4384"),
GuessFiveGame.cs:33keyText = Color.white, keyAbsent = HzUI.Hex("#272143"), absent = HzUI.Hex("#585375"), card = HzUI.Hex("#2B2452"),
GuessFiveGame.cs:34cardText = Color.white, deco = new Color(1, 1, 1, 0.012f), muted = HzUI.Hex("#5E5891"), panel = new Color(1, 1, 1, 0.06f),
GuessFiveGame.cs:38bgTop = HzUI.Hex("#FBF9FF"), bgBot = HzUI.Hex("#E2DAF6"), tile = Color.white, ring = HzUI.Hex("#D6CFEB"),
GuessFiveGame.cs:39ringFilled = HzUI.Hex("#7D74B3"), text = HzUI.Hex("#2B2547"), sub = HzUI.Hex("#6E6890"), key = HzUI.Hex("#D9D2EF"),
GuessFiveGame.cs:40keyText = HzUI.Hex("#2B2547"), keyAbsent = HzUI.Hex("#ABA5C4"), absent = HzUI.Hex("#8E88AB"), card = Color.white,
GuessFiveGame.cs:41cardText = HzUI.Hex("#2B2547"), deco = new Color(0.42f, 0.37f, 0.71f, 0.025f), muted = HzUI.Hex("#A39CC6"), panel = new Color(0.3f, 0.25f, 0.6f, 0.07f),
GuessFiveScreens.cs:263string sub = DayMode ? "#6E6890" : "#B7B0E0";
GuessFiveScreens.cs:286sound = CardButton(m, SoundLabel(), HzUI.Hex("#4C9EEB"), 320, 560, 108, null);
GuessFiveScreens.cs:288music = CardButton(m, MusicLabel(), HzUI.Hex("#3DBE9E"), 450, 560, 108, null);
GuessFiveScreens.cs:292if (playing) { CardButton(m, "Home", HzUI.Hex("#8B5CF6"), y, 560, 108, () => { CloseModal(m, false); GoHome(); }); y += 130; }
CHAPTER 10

Worked reskin: visible text

Open Scripts/GuessFiveScreens.cs, find the displayed literal "FIVE" and replace it with "WORDS". In HzUI.Label/Button, the first string can be the hierarchy object name; change the displayed text argument. Keep object identifiers, GameId, save/resource keys and asset filenames stable.

Preserve interpolation, numeric ToString formatting, line breaks and ON/OFF refresh logic. Update initial construction and later refresh assignments. Helper name/help sources are G5Helpers.Name and G5Helpers.Info in G5Logic.cs. Level names and hints are separate JSON content. Visible title appears in the game Title property, HzGameInfo and sometimes separate screen lettering/art; review all branding deliberately.

There is no automatic translation of hard-coded game strings. A translation table must be called by each assignment. Word dictionaries/answer banks are gameplay data and do not translate Guess Five menus. Test title, tutorial, helper unlocks, HUD, settings/result popups and refreshed labels in both orientations.

Exact source referenceCurrent assignment
GuessFiveBoard.cs:144var t = HzUI.Label("T", chip.transform, text, (int)(font * scale), Color.white, TextAnchor.MiddleLeft, false);
GuessFiveBoard.cs:164_timerText = HzUI.Label("Secs", back.transform, "", (int)(h * 0.62f), Color.white, TextAnchor.MiddleRight);
GuessFiveBoard.cs:176_timerText.text = (s / 60) + ":" + (s % 60).ToString("00");
GuessFiveBoard.cs:194var t = HzUI.Label("Title", _layer, title, 76, T.text); At(t.rectTransform, W / 2, hy - 20, 560, 90);
GuessFiveBoard.cs:196var st = HzUI.Label("Sub", _layer, sub, 30, T.sub, TextAnchor.MiddleCenter, false); st.fontStyle = FontStyle.Bold;
GuessFiveBoard.cs:202var t = HzUI.Label("Title", _layer, title, 68, T.text, TextAnchor.MiddleLeft); At(t.rectTransform, tx + 300, hy - 18, 600, 80);
GuessFiveBoard.cs:204var st = HzUI.Label("Sub", _layer, sub, 28, T.sub, TextAnchor.MiddleLeft, false); st.fontStyle = FontStyle.Bold;
GuessFiveBoard.cs:238var rules = HzUI.Label("Rules", _layer, RulesText(), 32, T.sub, TextAnchor.MiddleCenter, false);
GuessFiveBoard.cs:271t.txt = HzUI.Label("L", t.rt, "", (int)(tile * 0.56f), T.text);
GuessFiveBoard.cs:332v.lockText = HzUI.Label("Lv", lockBg.transform, "LV " + G5Helpers.UnlockLevel[h], (int)(bs * 0.22f), Color.white);
GuessFiveBoard.cs:339v.badgeText = HzUI.Label("N", v.badge.transform, "", (int)(bs * 0.26f), Color.white); v.badgeText.rectTransform.Stretch();
GuessFiveBoard.cs:341v.label = HzUI.Label("Name", _layer, G5Helpers.Name[h].ToUpperInvariant(), (int)(bs * 0.2f), T.sub, TextAnchor.MiddleCenter, false);
GuessFiveBoard.cs:360v.badgeText.text = n > 0 ? n.ToString() : "AD";
GuessFiveBoard.cs:383k.txt = HzUI.Label("K", img.transform, char.ToUpperInvariant(c).ToString(), (int)(h * 0.44f), T.keyText);
GuessFiveBoard.cs:395t.txt.text = letter == '.' || letter == '\0' ? "" : char.ToUpperInvariant(letter).ToString();
GuessFiveBoard.cs:459var l = HzUI.Label("T", bg.transform, text, 46, Color.white); l.rectTransform.Stretch(8);
GuessFiveBoard.cs:476var t = HzUI.Label("T", root, title, 104, Color.white); t.rectTransform.Place(new Vector2(0.5f, 0.5f), new Vector2(cs.x, 130), new Vector2(0, 30));
GuessFiveBoard.cs:479var s = HzUI.Label("S", root, sub, 46, Gold, TextAnchor.MiddleCenter, false); s.fontStyle = FontStyle.Bold;
GuessFiveGame.cs:282Note("Unlocks at level " + G5Helpers.UnlockLevel[h]);
GuessFiveGame.cs:293HzPlatform.Rewarded(GameId, "helper_" + G5Helpers.Name[h].ToLowerInvariant().Replace(' ', '_'), ok =>
GuessFiveGame.cs:306case G5Helpers.Reveal: return R.HintColumn() < 0 ? "All letters found!" : null;
GuessFiveGame.cs:307case G5Helpers.Eliminate: return R.EliminateCandidates().Count == 0 ? "Nothing left to erase" : null;
GuessFiveGame.cs:308case G5Helpers.ExtraRow: return R.extraUsed ? "One extra row per word" : R.maxRows >= G5Rules.MaxRowsCap ? "No room for more rows" : null;
GuessFiveGame.cs:309case G5Helpers.Vowels: return R.CanVowelScan() ? null : "Vowels already known";
GuessFiveGame.cs:422case "unlockall": for (int h = 0; h < G5Helpers.Count; h++) { P.unlockedMask |= 1 << h; P.charges[h] = Mathf.Max(P.charges[h], 3); } SaveProgress(); RefreshHelpers(); return "ok";
GuessFiveScreens.cs:31var st = HzUI.Label("N", pill.transform, P.TotalStars.ToString(), 50, Color.white, TextAnchor.MiddleLeft); st.rectTransform.Stretch(); st.rectTransform.offsetMin = new Vector2(96, 0);
GuessFiveScreens.cs:37string word = "GUESS"; Color[] cols = { Correct, Present, T.absent, Correct, Present };
GuessFiveScreens.cs:43var l = HzUI.Label("L", t.transform, word[i].ToString(), (int)(ts * 0.62f), Color.white); l.rectTransform.Stretch();
GuessFiveScreens.cs:48var five = HzUI.Label("Five", _layer, "FIVE", port ? 120 : 96, T.text);
GuessFiveScreens.cs:75var play = HzUI.Button("Play", _layer, "Level " + cur, Correct, Color.white, PlayLevel, port ? 80 : 68, 44);
GuessFiveScreens.cs:79var ps = HzUI.Label("Kind", play.transform, lvNow.KindLabel().ToUpperInvariant(), 30, new Color(1, 1, 1, 0.85f), TextAnchor.MiddleCenter, false);
GuessFiveScreens.cs:82var classic = HzUI.Button("Classic", _layer, "Classic", Present, Color.white, PlayClassic, port ? 58 : 52, 40);
GuessFiveScreens.cs:86var cs2 = HzUI.Label("Sub", classic.transform, "WORD #" + P.classicWord + " · STREAK " + S.streak, 26, new Color(1, 1, 1, 0.85f), TextAnchor.MiddleCenter, false);
GuessFiveScreens.cs:101var t = HzUI.Label("N", node.transform, n.ToString(), (int)(size * 0.42f), Color.white); t.rectTransform.Stretch();
GuessFiveScreens.cs:118var lbl = HzUI.Label("Kind", _layer, lv.KindLabel().ToUpperInvariant(), current ? 28 : 24, T.sub, TextAnchor.MiddleCenter, false);
GuessFiveScreens.cs:142var five = HzUI.Label("Five", cover.transform, "GUESS FIVE", 120, T.text);
GuessFiveScreens.cs:168var tl = HzUI.Label("Title", ribbon.transform, title, 64, Color.white); tl.rectTransform.Stretch(6);
GuessFiveScreens.cs:217var t = HzUI.Label("Txt", m.card, text, size, color, TextAnchor.MiddleCenter, display);
GuessFiveScreens.cs:240res[c] = HzUI.Label("L", p.transform, ch == '.' ? "" : char.ToUpperInvariant(ch).ToString(), (int)(size * 0.56f), mk == Mark.None ? T.text : Color.white);
GuessFiveScreens.cs:285theme.onClick.AddListener(() => { HzAudio.Play("toggle", 0.5f); DayMode = !DayMode; theme.SetText(ThemeLabel()); BuildView(); m.card.GetComponent<Image>().color = T.card; });
GuessFiveScreens.cs:286sound = CardButton(m, SoundLabel(), HzUI.Hex("#4C9EEB"), 320, 560, 108, null);
GuessFiveScreens.cs:287sound.onClick.AddListener(() => { HzAudio.Muted = !HzAudio.Muted; sound.SetText(SoundLabel()); HzAudio.Play("toggle", 0.5f); });
GuessFiveScreens.cs:288music = CardButton(m, MusicLabel(), HzUI.Hex("#3DBE9E"), 450, 560, 108, null);
GuessFiveScreens.cs:289music.onClick.AddListener(() => { HzAudio.MusicMuted = !HzAudio.MusicMuted; music.SetText(MusicLabel()); HzAudio.Play("toggle", 0.5f); });
GuessFiveScreens.cs:296static string SoundLabel() => HzAudio.Muted ? "Sound: OFF" : "Sound: ON";
GuessFiveScreens.cs:297static string MusicLabel() => HzAudio.MusicMuted ? "Music: OFF" : "Music: ON";
GuessFiveScreens.cs:318HzUI.Label("t", chip.transform, "+" + G5Helpers.FreeCharges[h] + " FREE", 36, Color.white).rectTransform.Stretch();
GuessFiveScreens.cs:358Note(G5Helpers.Name[h] + " used: it was free!", Green, 1.6f);
GuessFiveScreens.cs:373var ct = HzUI.Label("T", cap.transform, "Tap <color=" + HexOf(Present) + ">" + G5Helpers.Name[h] + "</color> to try it.\nThis first use is free!", 38, T.cardText, TextAnchor.MiddleCenter, false);
GuessFiveScreens.cs:375var skip = HzUI.Button("Later", dim.transform, "Later", T.muted, Color.white, () => { CloseCoach(); P.coachedMask |= 1 << h; SaveProgress(); HzTween.Delay(0.2f, Pump); }, 36, 26);
GuessFiveScreens.cs:445HzUI.Label("t", tag.transform, "AD", 28, Color.white).rectTransform.Stretch();
GuessFiveScreens.cs:617HzUI.Label("t", ad.transform, "AD", 24, Color.white).rectTransform.Stretch();
GuessFiveScreens.cs:640var bl = HzUI.Label("v", bar.transform, S.dist[i].ToString(), 28, Color.white, TextAnchor.MiddleRight);
CHAPTER 11

Artwork, fonts and audio

Game assets live in Resources/guessfive. Replace images through Unity while retaining resource keys, .meta GUIDs, Sprite/UI importer settings, alpha, pivots and slicing. Procedural fallbacks live in the view/art sources and may need their own changes; replacing a PNG does not automatically alter fallback graphics.

The private Kit supplies fonts and UI helpers. Retain included font licence notices and verify glyph coverage for new languages. Music resource: calm.ogg. Preserve load keys when replacing clips, review compression/loop boundaries, and test Sound and Music toggles separately. Inspect the Sfx/HzAudio code for current sound bindings.

CHAPTER 12

Saving and resets

HzSave wraps PlayerPrefs, coalesces writes and flushes on focus loss/quit. WebGL uses browser IndexedDB tied to the hosting origin. Clearing site data or using a new origin starts a new save; this is not cloud synchronization. GameId-prefixed keys and some JSON progress hold levels, stars, helper counts, tutorial flags, audio options and statistics where implemented.

Test fresh launch, a completed level, helper consumption, audio toggles, focus loss, quit and relaunch. Use a separate development profile for resets. Preserve existing save keys for a visual reskin; changing them discards continuity. Inspect calls to HzSave in the listed scripts before adding a custom migration.

CHAPTER 13

Advertising setup and scope

Settings asset: Assets/Szekipapa77Ads/Resources/AdsSettings.asset. Inspect backend, useGoogleTestIds and missingSdkFallback through the publisher Ads editor. This buyer contains integration/adapter code, not external provider SDK binaries. Missing-provider fallback and WebGL ads are simulated, not live commercial impressions.

For native real ads, obtain the supported provider from its official source in your working project, configure your own app/placement IDs and test with test IDs. Verify banner/interstitial/rewarded success, cancel and failure. Before production, supply your own IDs and disable simulated missing-SDK fallback. The build tools reject unsafe production fallback settings. No purchases or remote backend is supplied.

CHAPTER 14

Android release

Install matching Android support in Unity Hub. Select Android, use the mobile scene, run Setup and review application ID com.szekipapa77.guessfive, version, orientation and signing. Build Android writes Builds/Android/guessfive.apk. Configure your own keystore and distribution settings; a demo APK is not a signed production release.

A provider-free build simulates ads. A supplied test-provider demo is not evidence of production account configuration. Use a Build Profile for your distribution format. On real hardware test touch, safe areas, audio focus, restart and ad callbacks. Keep signing passwords/keystores/private service files outside buyer archives. Successful compilation is not a physical-device play test.

CHAPTER 15

WebGL release and hosting

Install WebGL support, select the WebGL target and run Setup and Build WebGL. Output: Builds/WebGL/guessfive/. Serve index.html and every Build/StreamingAssets payload over HTTPS, not file://. Match compression, MIME and Content-Encoding to the host. The shell template controls the outer page; scene selection controls game orientation.

The publisher demo uses HyperCodeStore. Upload actual loader/framework/data/WASM files, not just a link; include the TemplateData shell required by the host. Test in a fresh anonymous session: loading, real pointer/keyboard input, audio after interaction, save/reload and mobile sizing. Rebuild and re-upload every changed game artifact.

CHAPTER 16

Troubleshooting

Compilation errors: restore matching packages and import the entire private Kit/Ads layer; keep only one game Kit. Pink or invisible objects: run Setup and inspect Graphics and every Quality URP assignment. No input: check classic input handling, canvas focus and blocking modal. Missing resources: restore exact keys/importers/GUIDs.

Edited level absent: stop Play, Save, reload the canonical JSON and check saved progress/play overrides. No real ads: provider SDK is intentionally absent; inspect installed adapter and fallback. Text reverts: change both build and refresh assignments from the reference table. Scene reload exception: retain owner-lifetime and generation checks on delayed callbacks; do not remove those guards.

CHAPTER 17

Support and release checklist

Support: szekipapa77@gmail.com. Include game title, exact Unity version, platform, first Console error and reproduction steps; never send credentials.

  1. Pass a clean import and play both scenes.
  2. Play tutorial, normal win/failure and every helper activation/effect.
  3. Check reskin strings, settings, save/reload and both layouts.
  4. Rebuild Android/WebGL after code or data changes and verify final output bytes.
  5. Verify public APK, browser demo and full documentation links before publishing.
  6. Keep licences and exclude private tooling/capture/workflow material from customers.