TEKKENSCRIPT — S2 Edition Release Notes - Tekkenscript
TEKKENSCRIPT — S2 Edition Release Notes is the official release document for the TekkenScript S2 update. It summarizes key changes and usage notes, including required launcher (injector) updates, S2-exclusive features, engine and scripting improvements, stability fixes, and the developer-script licensing workflow. This is the initial public release; some scripts are still being refined and will continue to be improved in upcoming updates.
Release note:
This is the initial public release. Some scripts are still being refined, and we will continue improving them in future updates.
IMPORTANT — UPDATE THE LAUNCHER (INJECTOR) THIS RELEASE
-------------------------------------------------------
This build updates BOTH components. You must update the injector (launcher), not only engine.dll.
• Use “Check for Updates” in the launcher, or install the latest TekkenScript package.
• Replace inject.exe together with engine.dll in your launcher folder.
• If engine.dll is missing after update, restore it from antivirus quarantine or re-run Check for Updates.
Why the injector matters this time:
• New UI, languages, auto-inject, anti-screenshot, and Lua IDE live in the injector.
• Startup/login and first-window rendering were reworked (fixes white screen and UI lag).
• S2 cloud config sync is managed from the injector settings page.
After updating, restart the launcher once so auto-inject and language settings reload correctly.
INJECTOR (LAUNCHER) — NEW & IMPROVED
------------------------------------
• Redesigned launcher UI.
• Multi-language support (switch language in settings).
• Auto-inject: keep the launcher running; no need to reopen it for each game session.
• Anti-screenshot / capture protection: overlay can be excluded from OBS and similar capture tools (WDA_EXCLUDEFROMCAPTURE).
• In-game menu uses anti-screenshot by default (same protection model as the launcher).
• Built-in Lua script editor (S2 license required).
• S2 cloud config: save/load your client settings to the cloud (auto-fetch once per login session).
• Improved false-positive handling with antivirus (engine.dll delivery / update flow).
• Faster startup: non-blocking login, deferred heavy UI refresh, no blocking DNS at launch.
S2 EXCLUSIVE — ENGINE & SCRIPTS
-------------------------------
Unlocks & cosmetics
• Unlock all costumes (character / avatar / player / jukebox-related custom items, including shop & DLC / Fight Pass entries where supported locally).
• Local shop item availability unlock.
• Rank frame local unlock is now a SEPARATE toggle (“Shop / rank frame local unlock”) — no longer tied to “Unlock all costumes”.
- Uses dedicated ShopItemAvailable hooks; persisted as shopItemAvailableLocalUnlock in config.json.
- Lets you equip rank frames locally without enabling full costume unlock.
- Some frames may still fail server validation — use default frames if sync errors appear.
• Requires S2 license (IsS2EditionFlag). “Unlock all costumes” also enables save integrity bypass automatically.
Online match automation (S2 only) — NEW MODULE
• Full UE SDK automation module (match_automation.cpp): runs every menu frame via TickMatchAutomation().
• Auto-accept VS dialog (ranked / quick match confirm).
• Auto-accept Player Match lobby confirm (Cosmos ID aware).
• Auto rematch on result screen: ResultNew widget → SetRematchStatus → InvokeSelect/Decide.
• Each ResultNew instance requests rematch only once (prevents spam / double-confirm).
• If the opponent leaves or declines rematch, automatically calls AnywhereMatchingStart() to return to matchmaking wait (queue recovery).
• Menu toggles (Settings page, S2 only):
- Auto accept match (autoAcceptMatch)
- Auto rematch (autoRematch)
- Match automation debug log (matchAutoDebug) — writes to Load Console / DebugView with [match_auto] prefix.
• All three settings persist in config.json; disabled automatically for non-S2 licenses.
• SEH-safe ProcessEvent wrappers to avoid crashes when UE widgets are mid-transition.
Evasion script (S2)
• New “Evasion” script: UE world-coordinate sidestep dodging with geometry-aware positioning.
• Per-character MoveID adaptive learning (Evasion.learn.json).
• S2-only sidestep evasion using real attack limb / HitBox positions via bone world queries.
• New Lua helper getEvasionState(): returns stage bounds, wall list, fighter positions, nearest-wall distance, back-to-wall flag, directional clearance rays (left/right/forward/back), and inter-fighter distance — built on TryGetRadarSnapshot().
Cloud & VIP
• S2 cloud configuration sync (injector UI).
• S2 VIP script pack (in development).
Developer / paid scripts — NEW
• Developer Center: paid script licensing flow for third-party script authors.
• New dev_license module (dev_license.cpp):
- Server verify via /api/v1/dev/verify with device-bound encrypted disk cache (script\licenses\*.lic).
- In-memory cache survives lua_State rebuild on character reload (avoids repeated auth popups during T8 rank calibration).
- One-time license-code ImGui modal (RenderPendingPrompt): shows server-fetched script name/description, async verify, auto-close on success.
- Rendered every frame BEFORE script-load early return so the prompt stays visible during reload.
• Encrypted .luae script loader:
- Custom package.loaders entry decrypts TKLE blobs (AES-256-CBC + HMAC) using per-script script_secret.
- Locked modules fail with a clear “[luae] locked: verifyDeveloperScript required” error until verified.
• New Lua APIs:
- verifyDeveloperScript(scriptKey [, displayName [, displayDesc]])
- isDeveloperScriptVerified(scriptKey)
• devlicense::Init() wired on engine startup (script_hook.cpp + dllmain.cpp standalone build).
GENERAL — ENGINE (S1 & S2)
--------------------------
Overlays & visuals
• FOV / aspect ratio changer (wider FOV, optional aspect unlock).
• Skeleton overlay and foot-position circles for distance / spacing reference.
• Combat minimap: player positions, stage walls, breakable wall HP/state, draggable panel, debug readouts.
• Minimap positioning overhaul:
- Uses ImGui main viewport origin/size (correct on multi-monitor and DPI scaling).
- Default anchor: top-right flush (6 px inset); position persists in config.json.
- Auto re-snaps when saved position is stale after resolution/DPI change (detects old 24 px margin layout).
• Minimap debug mode (minimapDebug toggle + config persistence):
- Footer shows per-fighter distance to nearest wall and distance to stage edge (world units).
• Minimap wall interaction:
- Hover highlight with pulsing outline on the wall under the cursor.
- Tooltip shows wall name, breakable state, and HP.
- Right-click context menu on hovered wall → copy actor name to clipboard (useful for stage research / script tuning).
• HLSL-based advantage frame overlay; frame numbers follow the fighter (fixed offset drift vs. character position).
Lua / UE SDK
• Expanded UE battle data for scripts: radar snapshot, bone world positions, bone-by-name lookup, overlay-ready coordinates.
• Four new bone-based attack queries to identify which body part initiated an attack.
• New Lua APIs:
- getGameFrameCount() — exposes engine frame counter (g_FrameCount).
- getFighterBoneWorld(slot, nameSub) — substring bone lookup (case-insensitive), 1-based slot.
- getFighterBoneWorlds(slot) — bulk bone name + world coordinate table.
- getEvasionState() — full evasion geometry snapshot (see S2 Evasion section).
• Thread-safe bone snapshot cache (RefreshBoneSnapshotCache):
- Mesh / ProcessEvent bone queries run ONLY on the battle-frame hook thread.
- Overlay draw and Lua read a locked cache — no cross-thread UE calls (prevents random crashes).
• RadarWall now includes cz / halfZ for fuller 3D collision bounds during wall collection.
• Fixed opponent info panel error (r.size / empty table display).
• Fixed opponent name display:
- Player names read as UE5 FString (ReadFString) instead of raw C-string (fixes garbled names when pointer chain is not ready).
- IsPlausiblePlayerName() filters garbage reads (JSON error fragments, control chars, “which is”, “.size”, etc.).
- Steam ID change clears cached opponent name/character to force refresh.
- Panel shows “-” when name is invalid instead of leaking memory junk.
• Fixed Lua print() UTF-8 handling: no longer routes through stu/ACP conversion — Chinese script logs display correctly in console and ImGui.
• CoreMenuAPI / SDK site refresh with Lua function reference and samples.
• Standalone engine.exe stub coverage expanded (ue_stubs.cpp): match automation, bone APIs, IsBattleActive, IsOverlaySdkReady, TryGetRadarSnapshot, RefreshBoneSnapshotCache — non-inject builds link cleanly.
Scripts & tools
• Guard 2.0 sample updated with multi-language (i18n) template (guard_i18n.lua).
• Character confirm / whiff-punish routines updated with randomized timing (reduces fixed-pattern repeats and multi-input bugs).
• Tekken Feng script (major update):
- Randomized punish selection: multiple punish options per frame tier (10f / 13f / 15f / 16f / 21f / 24f+).
- Configurable “Punish Randomizer (%)” and “Max Random Punish Delay (frames)” in script menu.
- Per-step frame jitter (randFrames) and random startup delay to reduce predictable patterns.
- Fixed broken auto-combo hotkeys: full async macro sequences (queueCombo) instead of incomplete onTick continuations.
Standard combo: uf+4 → df+4,3 → df+4,2 → Heat(f,f,1+2,f) → uf+3 → b+1+2.
- Uses engine isCounterAttackPossible() directly (no extra Lua-side block checks that previously broke counterattacks).
• Auto Tool recorder: more accurate capture; printed output can be used directly.
BUG FIXES & STABILITY
---------------------
• Fixed injection / hook crashes on Windows 11 and some high-end GPUs (D3D12 Present path, GPU resource lifetime).
• Fixed advantage-frame HUD misalignment (now tracks character screen position).
• Fixed menu flicker while scripts run (Lua state machine / menu draw interaction).
• Fixed script execution randomly stopping due to unhandled Lua errors (errors are caught and logged).
• Script tick priority raised so automation stays responsive under load.
• Injector: white screen on first open, UI stutter, blocking login, and IDE refresh lag.
• Fixed isCounterAttackPossible() returning false for all punish windows after an overly strict rewrite; restored original block-state / ActionTime / RecoveryTime dual-path logic (ComplexMoveState == 11, ±7f recovery window, ActionTime <= 0 fallback).
• Fixed duplicate counterattack inputs: isCounterAttackPossible() now deduplicates per frame-advantage event (g_localFrameAdvantageSeq) so onTick scripts fire once per block instead of every frame inside the punish window.
• Fixed S2 license login double-submit: atomic g_isLoggingIn guard + dedicated RenderLicensePopup modal (DPI-scaled, styled header, inline success/error feedback).
• Fixed feedback tab double-submit and missing login gate: requires S2 login, disables fields when logged out, shows server error messages inline, clears form only on success.
• Fixed popups disappearing during script reload: developer auth prompt, S2 license popup, and match automation tick now run at the top of menuDraw() before g_loadover early return.
• Fixed opponent name garbling when FString pointer was not ready (ReadFString + validation filter).
• Fixed Lua console / ImGui garbled Chinese in print() output (removed ACP round-trip).
NOTES
-----
• Rank frame local edit: if the server reports data validation failure, switch unavailable frames back to default and keep “save integrity bypass” enabled when using local unlocks.
• Match automation, costume unlock, cloud config, Lua IDE, and developer script licensing require an active S2 license.
• Developer scripts: call verifyDeveloperScript() once at script load; .luae modules stay locked until verified. Cached license survives character swap within the same session.
• Match automation debug: enable “Match auto debug” in Settings, then watch Load Console or DebugView for lines starting with [match_auto].
• S1 users receive engine improvements (FOV, overlays, SDK, stability, opponent name fix, isCounterAttackPossible dedup) but not S2-only features listed above.