Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Join the Playtest on Steam Now: SpiritVale

Module:GameInfo/Skills: Difference between revisions

From SpiritVale Wiki
No edit summary
Tags: Mobile edit Mobile web edit
No edit summary
Tags: Mobile edit Mobile web edit
Line 1: Line 1:
-- Module:GameInfo/Skills
-- Module:GameInfo/Skills
-- Phase 4.1 — Native Schema 2 rendering (Schema 1 + Schema 2, NO adapter glue)
-- Phase 4.1 — Native format rendering (format 1 + format 2, no adapter glue)
--
--
-- DEFINITIONS POLICY (strict):
-- DEFINITIONS POLICY (strict):
Line 13: Line 13:
-- - Meta row has its own icon slot, so meta labels always use noicon=1.
-- - Meta row has its own icon slot, so meta labels always use noicon=1.
-- - Keyword pills also use noicon=1 (no extra icons in pills).
-- - Keyword pills also use noicon=1 (no extra icons in pills).
-- - Schema2 skill_scaling stat pills render visible short labels/icons,
-- - Native-format scaling stat pills render visible short labels/icons,
--  and use a full-pill invisible Definitions hitbox only when active.
--  and use a full-pill invisible Definitions hitbox only when active.
--
--
Line 21: Line 21:
--
--
-- Requirements / Users (dynamic headers):
-- Requirements / Users (dynamic headers):
-- - Schema2 accepts requirements/users as maps (title -> items[]).
-- - Native format accepts requirements/users as maps (title -> items[]).
-- - Titles are treated as dynamic display text (no hardcoded header logic).
-- - Titles are treated as dynamic display text (no hardcoded header logic).
-- - Optional __order = ["Title A","Title B", ...] may be provided to force section order.
-- - Optional __order = ["Title A","Title B", ...] may be provided to force section order.
Line 816: Line 816:
end
end


local function _build_meta_row_schema2(frame, skill_meta)
local function _build_meta_row_native(frame, skill_meta)
skill_meta = _safe_tbl(skill_meta)
skill_meta = _safe_tbl(skill_meta)


Line 879: Line 879:
end
end


local function _normalize_level_schema2(level_obj)
local function _normalize_level_native(level_obj)
level_obj = _safe_tbl(level_obj)
level_obj = _safe_tbl(level_obj)


Line 1,095: Line 1,095:
end
end


local function _build_skill_scaling_schema2(frame, root_id, skill_scaling, default_level, max_level, min_level, overcap_obj)
local function _build_skill_scaling_native(frame, root_id, skill_scaling, default_level, max_level, min_level, overcap_obj)
skill_scaling = _safe_tbl(skill_scaling)
skill_scaling = _safe_tbl(skill_scaling)


Line 1,111: Line 1,111:


local body = root:tag("div"):addClass("sv_skill_scaling__body")
local body = root:tag("div"):addClass("sv_skill_scaling__body")
-- One-unit wrapper for damage + stat chips
local cluster = body:tag("div"):addClass("sv_skill_scaling__cluster")


local damage = _safe_tbl(skill_scaling.damage)
local damage = _safe_tbl(skill_scaling.damage)
Line 1,117: Line 1,120:


do
do
local primary = body:tag("div")
local primary = cluster:tag("div")
:addClass("sv_skill_scaling__column")
:addClass("sv_skill_scaling__column")
:addClass("sv_skill_scaling__column--primary")
:addClass("sv_skill_scaling__column--primary")
Line 1,131: Line 1,134:


do
do
local stats_col = body:tag("div")
local stats_col = cluster:tag("div")
:addClass("sv_skill_scaling__column")
:addClass("sv_skill_scaling__column")
:addClass("sv_skill_scaling__column--stats")
:addClass("sv_skill_scaling__column--stats")
Line 1,143: Line 1,146:
end
end
end
end
-- Reserved right-side column (empty for now)
body:tag("div"):addClass("sv_skill_scaling__side")


do
do
Line 1,371: Line 1,377:
end
end


local function _build_req_users_schema2(root_id, requirements_map, users_map)
local function _build_req_users_native(root_id, requirements_map, users_map)
local req_groups = _map_to_groups(requirements_map, { "Skills", "Weapon Types", "Stances" })
local req_groups = _map_to_groups(requirements_map, { "Skills", "Weapon Types", "Stances" })
local usr_groups = _map_to_groups(users_map,        { "Classes", "Summons" })
local usr_groups = _map_to_groups(users_map,        { "Classes", "Summons" })
Line 1,405: Line 1,411:
end
end


local function _render_schema1(frame, payload, notes_wt)
local function _render_legacy(frame, payload, notes_wt)
local identity = _safe_tbl(payload.identity)
local identity = _safe_tbl(payload.identity)
local display_name = _safe_str(identity.display_name, "Unknown Skill")
local display_name = _safe_str(identity.display_name, "Unknown Skill")
Line 1,446: Line 1,452:
end
end


local function _render_schema2(frame, payload, notes_wt)
local function _render_native(frame, payload, notes_wt)
local identity = _safe_tbl(payload.identity)
local identity = _safe_tbl(payload.identity)
local display_name = _safe_str(identity.display_name, "Unknown Skill")
local display_name = _safe_str(identity.display_name, "Unknown Skill")
Line 1,458: Line 1,464:
end
end


local min_level, default_level, max_level = _normalize_level_schema2(payload.level)
local min_level, default_level, max_level = _normalize_level_native(payload.level)


local box = GI.box({
local box = GI.box({
Line 1,481: Line 1,487:


box.top:node(_build_identity(frame, root_id, identity, notes_wt))
box.top:node(_build_identity(frame, root_id, identity, notes_wt))
box.top:node(_build_meta_row_schema2(frame, payload.skill_meta))
box.top:node(_build_meta_row_native(frame, payload.skill_meta))


local reqrow = _build_req_users_schema2(root_id, payload.requirements, payload.users)
local reqrow = _build_req_users_native(root_id, payload.requirements, payload.users)
if reqrow then box.top:node(reqrow) end
if reqrow then box.top:node(reqrow) end


local scaling_block, actual_default = _build_skill_scaling_schema2(
local scaling_block, actual_default = _build_skill_scaling_native(
frame,
frame,
root_id,
root_id,
Line 1,513: Line 1,519:


if payload.schema == 2 then
if payload.schema == 2 then
return _render_schema2(frame, payload, notes_wt)
return _render_native(frame, payload, notes_wt)
end
end


return _render_schema1(frame, payload, notes_wt)
return _render_legacy(frame, payload, notes_wt)
end
end


return p
return p