Files
erqiwang_youle/client/js/01_SubGame/codes/config/Sprites_Table.js
T
joywayerandClaude Opus 5 ccc41ce092 二七王:修正 Sprites_Table/Cards 注释里 ASCII 版式图的对齐
上两个提交的三处版式图在等宽字体下右边框错位(手牌区示意框、结算底牌区
文案行、已出牌区的牌角标小图)。按「CJK 双宽、其余单宽」重排到等宽,
不改任何数据。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 01:48:14 +08:00

334 lines
22 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////
////////// EQW_Sprites: 精灵结构(清单 §5.1 牌桌常驻)/////////
///////////////////////////////////////////////////////////////
// 子游戏精灵段 1001–2999(段内仅 3000 被平台占用)。
// 以 UI View 为组织单位:View 下 Layer 为图层声明(一个 View 恰好一个图层),
// 其余键一律是「group 容器」——容器内 id 为群组 ID、其余键才是精灵 id。
// 每个精灵注明:类型(图片/文字)+ 用途 + 资源键 + 帧说明——
// 后期即照这些注释在编辑器里逐个创建。
var EQW_Sprites = EQW_Sprites || {};
// ============================================================================
// 顶部信息条 - Layer 101 (TABLE_STATIC), Group 201 (TOP_INFO)
// ============================================================================
/**
* 顶部信息条 - TopInfoView
*
* 用途: 屏幕顶部正中常驻的三列小表格,展示本局的「主牌花色 / 庄家叫分 / 闲家抓分」。
* 发牌起出现、整局不收起;收到 fapai 时三列清零(主=无、叫分=0、抓分=0)。
*
* 布局说明(参考图 docs_dev/uiref/等待叫分.png 顶部中央;
* 位置见 EQW_Layout.TOP_INFO_BG = point(486, 4, 276×68)):
*
* ┌────────┬───────────────┬───────────────┐ y=4
* │ 主 │ 叫分 │ 抓分 │ ← 表头三列:已画在底图上,无独立精灵
* ├────────┼───────────────┼───────────────┤
* │ [花] │ 60 [1子] │ 45 [1倍] │ ← 数据行(图中数值均为填充假数据)
* └────────┴───────────────┴───────────────┘ y=72
* ^ ^ ^ ^ ^
* │ │ │ │ └ TOP_GRADE_BADGE_BG(1007) + TOP_GRADE_BADGE_TEXT(1008)
* │ │ │ └─── TOP_GRADE_TEXT(1006)
* │ │ └──────────────── TOP_CALL_BADGE_BG(1004) + TOP_CALL_BADGE_TEXT(1005)
* │ └─────────────────── TOP_CALL_TEXT(1003)
* └──────────────────────────── TOP_SUIT_ICON(1002)
*
* TOP_INFO_BG(1001) 铺满整块(含表头文字与竖分隔线),其余 7 个精灵叠在其上。
*
* 元素说明:
* - 「主」列花色图标: 帧 = flower(1方块 2梅花 3红心 4黑桃,服务端编号),选主前隐藏;
* 贴信息条内部左下角(EQW_Layout.TOP_SUIT_ICON: attach TOP_INFO_BG left/bottom, 30×30)。
* - 「叫分」列: 数值取 shangzhuang.grade,角标「N子」取 multiple(随房间「爬坡」开关变)。
* - 「抓分」列: 数值为闲家累计捡分(逐轮 chupai3.grade 累加,结算时以 aset.grade 为准);
* 角标取 Math.abs(curmultiple)(T-16/S-8:curmultiple 带符号,角标只显示大小)。
* - 两个角标底都贴各自数值文字的 topRight(EQW_Layout.TOP_CALL_BADGE_BG / TOP_GRADE_BADGE_BG),
* 角标内的文字精灵复用同一矩形、不单独配布局。
* - 【待设计稿】TOP_CALL_TEXT / TOP_GRADE_TEXT 两处数值文字的 x/y/w/h 清单 §6.5 未给,
* 布局里标为 runtime 注入,设计稿到位后回填成定点值。
*
* 资源说明:
* - 面板底: EQW_Images.PANEL_TOP_INFO (601), 1 帧, 276×68
* - 花色图标: EQW_Images.SUIT_ICON_S (511), 4 帧, 30×30, 帧序按 flower 编号(与牌面资源的
* 花色顺序不同,两套互不换算)
* - 角标底: EQW_Images.BADGE_MULTIPLE (575), 2 帧, 34×18, 帧1=蓝底(叫分) 帧2=橙底(抓分)
*
* 精灵ID分配: 1001–1008(群组 201 号段 1001–1029)
*
* @see docs_dev/二七王-UI资源与精灵清单.md §2.1 顶部信息条 / §5.1 Layer 101 牌桌常驻
* @see docs_dev/uiref/等待叫分.png
*/
//顶部信息条:主 / 叫分 / 抓分 三列(清单 §5.1 群组 201)
EQW_Sprites.TopInfoView = {
Layer: EQW_Layers.TABLE_STATIC, //101
TopInfo: {
id: EQW_Groups.TOP_INFO, //201
TOP_INFO_BG: 1001, //图片:三列表格底,资源 EQW_Images.PANEL_TOP_INFO
TOP_SUIT_ICON: 1002, //图片:「主」列花色图标,资源 EQW_Images.SUIT_ICON_S,帧 = flower(1方块 2梅花 3红心 4黑桃,服务端 flower 编号)
TOP_CALL_TEXT: 1003, //文字:叫分数值
TOP_CALL_BADGE_BG: 1004, //图片:叫分角标底,资源 EQW_Images.BADGE_MULTIPLE 帧1(蓝底)
TOP_CALL_BADGE_TEXT: 1005, //文字:「N子」
TOP_GRADE_TEXT: 1006, //文字:抓分数值
TOP_GRADE_BADGE_BG: 1007, //图片:抓分角标底,资源 EQW_Images.BADGE_MULTIPLE 帧2(橙底)
TOP_GRADE_BADGE_TEXT: 1008 //文字:「N倍」,取 Math.abs(curmultiple)(T-16/S-8:curmultiple 带符号,展示取绝对值)
}
};
// ============================================================================
// 玩家位附加标记 - Layer 101 (TABLE_STATIC), Group 202 / 203 / 204
// ============================================================================
/**
* 三家玩家位附加标记 - PlayerMarkView
*
* 用途: 在【平台画的头像框】旁叠加子游戏自己的标记——庄印章、余主公示的「主N/对N」角标、
* 叫分阶段的状态文字。三个座位各一个群组,结构对称。
*
* 布局说明(参考图 docs_dev/uiref/等待叫分.png;三人局座位映射见清单 §0.2:
* ind0=南=自己 / ind1=东=右上家 / ind3=西=左上家):
*
* 全屏 1280×720 的三处落点 ——
* ┌──────────────────────────────────────────────────────────────┐ y=0
* │ ┌ 顶部信息条 ┐ │
* │ [左上家] [右上家] │ y≈122
* │ │
* │ (桌面牌 / 操作区) │
* │ │
* │ [自己·底栏] │ y≈648
* └──────────────────────────────────────────────────────────────┘ y=720
*
* 左上家近景(EQW_Layout.PLAYER_AVATAR_FRAME_REF.LEFT = 22,122, 91×118,平台精灵 379):
*
* ┌─────────┐┌──┐
* │ ││庄│ ← P_LEFT_BANKER(1100) attach 头像框 topRight, offset(+7,+8), 40×40
* │ 头像 │└──┘
* │ (平台) │ 60分 ← P_LEFT_STATUS_TEXT(1105) point(170,165) 130×70
* │ │ 12 ← 同一块区域也是倒计时 CD_LEFT 的位置(见 CountdownView)
* ├─────────┤
* │ 10 │ ← 昵称/分数,平台渲染,子游戏不碰
* └─────────┘
* ┌────┐┌────┐
* │主 1││对 0│ ← P_LEFT_ZHU_BG(1101)+P_LEFT_ZHU_TEXT(1102)
* └────┘└────┘ P_LEFT_PAIR_BG(1103)+P_LEFT_PAIR_TEXT(1104)
* 主N 贴头像框 bottomLeft(0,+6) 40×19;对N 再贴主N 右侧 +44
*
* 右上家(PLAYER_AVATAR_FRAME_REF.RIGHT = 1160,122,平台精灵 377)与左上家【左右镜像】:
* 庄印章改贴 topLeft(-40,+8),状态文字改到 point(980,165);主N/对N 仍贴 bottomLeft。
*
* 自己(P_SELF_MARK, 群组 204)只有两个精灵,且落在【底栏】而非头像框旁:
* P_SELF_BANKER(1120) = point(338,668) 32×34(EQW_Layout.P_BANKER_MARK.SELF 把 kind
* 覆盖成 point,不贴附任何目标,与两个上家的 attach 定位方式不同,非笔误);
* 该位置与底栏「踩/有分/没分」按钮【互斥共用】,见 FooterView。
*
* 元素说明:
* - 庄印章: 数据取 shangzhuang.banker / aset.banker,三家三个独立精灵、按 banker 显隐其一。
* - 主N / 对N 角标: 数据取 seatlist[seat][4] = [剩余主牌数, 剩余主对数];
* 【仅可查牌模式 + 场上已有人报无主】才出现,初始 [-1,-1] 时隐藏;不可查牌模式下永不出现。
* 自己没有这组角标——自己的主/对数在手牌区旁的统计条上已经可见(见 LiangPaiView)。
* - 状态文字: 叫分阶段显示「60分」(金) / 「不叫」(白),进入选主后清空;
* 样式 EQW_Layout.TEXT_STYLE.STATUS_BIG (46px 白字居中)。自己(204)也有一个状态文字精灵
* P_SELF_STATUS_TEXT(1121),但清单 §6.6 未给它独立坐标(自己叫的分显示在中央大字区)。
* - ⚠ 参考图上三家同时挂着「庄」印章,是叠画示意(清单 §0.5),实际同时只有一家是庄。
*
* 资源说明:
* - 庄印章: EQW_Images.MARK_BANKER (571), 1 帧, 40×40
* - 主N/对N 角标底: EQW_Images.BADGE_ZHU_PAIR (574), 2 帧, 44×20, 帧1=黄底(主) 帧2=白底(对)
* - 头像框本身由平台提供,子游戏【不建】,仅登记 ID 供 attach 引用——见本文件末尾
* EQW_PlatformSprites(376+ind,落在框架保留段 1–1000)。
*
* 精灵ID分配: 1100–1105(左)/ 1110–1115(右)/ 1120–1121(自己),群组号段 1100–1149
*
* @see docs_dev/二七王-UI资源与精灵清单.md §2.2 玩家位附加标记 / §2.5 余主公示 / §6.6 玩家位配置
* @see docs_dev/uiref/等待叫分.png
*/
//三家玩家位附加标记:庄印章 + 主N/对N 角标 + 状态文字,跨三个群组
//(头像框本身是平台提供,登记见本文件末尾 EQW_PlatformSprites;本 View 的精灵全部 attach 到平台头像框上,见清单 §6.6)
EQW_Sprites.PlayerMarkView = {
Layer: EQW_Layers.TABLE_STATIC, //101
LeftMark: {
id: EQW_Groups.P_LEFT_MARK, //202 左上家
P_LEFT_BANKER: 1100, //图片:「庄」印章,资源 EQW_Images.MARK_BANKER,attach 头像框 topRight
P_LEFT_ZHU_BG: 1101, //图片:「主N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧1(黄底),attach 头像框 bottomLeft
P_LEFT_ZHU_TEXT: 1102, //文字:剩余主牌数
P_LEFT_PAIR_BG: 1103, //图片:「对N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧2(白底),attach 主N角标右侧
P_LEFT_PAIR_TEXT: 1104, //文字:剩余主对数
P_LEFT_STATUS_TEXT: 1105 //文字:「60分」/「不叫」
},
RightMark: {
id: EQW_Groups.P_RIGHT_MARK, //203 右上家,结构同 202
P_RIGHT_BANKER: 1110, //图片:「庄」印章,资源 EQW_Images.MARK_BANKER,attach 头像框 topLeft
P_RIGHT_ZHU_BG: 1111, //图片:「主N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧1(黄底),attach 头像框 bottomLeft
P_RIGHT_ZHU_TEXT: 1112, //文字:剩余主牌数
P_RIGHT_PAIR_BG: 1113, //图片:「对N」角标底,资源 EQW_Images.BADGE_ZHU_PAIR 帧2(白底),attach 主N角标右侧
P_RIGHT_PAIR_TEXT: 1114, //文字:剩余主对数
P_RIGHT_STATUS_TEXT: 1115 //文字:「60分」/「不叫」
},
SelfMark: {
id: EQW_Groups.P_SELF_MARK, //204 自己,无主N/对N角标——自己主/对数已在手牌区可见
P_SELF_BANKER: 1120, //图片:底栏「庄」印章,资源 EQW_Images.MARK_BANKER,point (338,668)
P_SELF_STATUS_TEXT: 1121 //文字:「50分」/「不叫」
}
};
// ============================================================================
// 手牌上方的统计信息条 - Layer 101 (TABLE_STATIC), Group 206 (LIANGPAI_BAR)
// ============================================================================
/**
* 亮牌 / 主牌统计信息条 - LiangPaiView
*
* 用途: 手牌区【上方偏左】的一条半透明圆角小条,显示一行统计文案。
*
* 布局说明(参考图 docs_dev/uiref/等待叫分.png 左侧「主牌对子: 1对」那条;
* 位置见 EQW_Layout.LIANGPAI_BG = point(35, 400, 210×35)):
*
* x=35 x=245
* ┌──────────────────────────────┐ y=400
* │ 主牌对子: 1对 │ ← LIANGPAI_TEXT(1031),居中白字
* └──────────────────────────────┘ y=435
* ↑ LIANGPAI_BG(1030) 半透圆角条底,210×35
* ┌──────────────────────────────────────────────────── … ─┐ y=455
* │ 自己手牌区(单排) │
* └──────────────────────────────────────────────────── … ─┘ y=645
*
* 即:紧贴手牌区上沿、左对齐到手牌左边缘附近,整局常驻不遮牌。
*
* 元素说明:
* - 文案为【前端据 flower 本地统计自己手牌】得出,不需要服务端下发,也不受查牌模式与
* 报无主影响;有手牌时始终显示。文案格式暂定「x对 x主」(清单 §7.2 T-9 未定案,
* 参考图写的是「主牌对子: 1对」)——文案进配置,不在代码里写死字符串。
* - 【命名待统一】本 View 与 EQW_Groups.LIANGPAI_BAR、清单 §5.1 都叫「亮牌条」,
* 但它的位置(x35 y400)与用途对应的是清单 §2.5 的「自己的主牌统计条」;
* §1.6 的「亮牌」(庄家向闲家亮固定主牌)走的是遮罩面板、复用 §5.7b 的 HistoryView 精灵,
* 与本条不是一回事。两者不要混用,命名以清单定案为准。
*
* 资源说明:
* - 条底: EQW_Images.BAR_LIANGPAI (605), 1 帧, 210×35, 半透明圆角
*
* 精灵ID分配: 1030–1031(群组 206)
*
* @see docs_dev/二七王-UI资源与精灵清单.md §2.5 自己的主牌统计 + 余主公示 / §5.1
* @see docs_dev/uiref/等待叫分.png
*/
//亮牌信息条(清单 §5.1 群组 206)
EQW_Sprites.LiangPaiView = {
Layer: EQW_Layers.TABLE_STATIC, //101
LiangPaiBar: {
id: EQW_Groups.LIANGPAI_BAR, //206
LIANGPAI_BG: 1030, //图片:半透圆角条,资源 EQW_Images.BAR_LIANGPAI
LIANGPAI_TEXT: 1031 //文字:亮牌统计文案
}
};
// ============================================================================
// 底栏 - Layer 101 (TABLE_STATIC), Group 205 (FOOTER)
// ============================================================================
/**
* 底栏 - FooterView
*
* 用途: 屏幕最下方一条深色横条(整局常驻),承载局数、右侧功能按钮组、
* 以及闲家专用的「踩/有分/没分」提示按钮。左侧头像/昵称/分数由平台渲染。
*
* 布局说明(参考图 docs_dev/uiref/等待叫分.png 底栏 +
* docs_dev/uiref/自己是闲家时,底下的踩有分没分按钮.png;
* 条底见 EQW_Layout.FOOTER_BG = point(0, 648, 1280×72)):
*
* y=648 ┌──────────────────────────────────────────────────────────────────┐
* │ ┌────┐ │
* │ │头像│ 玩家昵称 10 [庄] 1/4 局 [明牌][已出牌][上一轮][底牌] │
* │ └────┘ │
* y=720 └──────────────────────────────────────────────────────────────────┘
* └── 平台渲染,子游戏不碰 ──┘
* (A) (B) (C)
*
* (A) x≈335–573:庄印章与三个提示按钮【互斥】共用同一块区域(清单 §1.7)——
* 自己是庄 → P_SELF_BANKER(1120)(属 PlayerMarkView),point(338,668) 32×34
* 自己是闲 → 三个提示按钮,EQW_Layout.FOOTER_TISHI_BUTTONS:
* line/horizontal, anchor left, anchorX=335, anchorY=672,
* itemWidth=52, itemHeight=30, spacing=26
* ┌────┐ ┌────┐ ┌────┐
* │ 踩 │ │有分│ │没分│
* └────┘ └────┘ └────┘
* BTN_TISHI_CAI BTN_TISHI_HAS BTN_TISHI_NONE
* (1050) (1052) (1054)
* ⚠ 按钮顺序是 踩→有分→没分,与协议 tip 编号(1踩 2没分 3有分)
* 【不同序】,映射不要按位置下标推。
* (B) FOOTER_ASET_TEXT(1041)「1/4 局」,point(635,672) 65×26,
* 样式 EQW_Layout.TEXT_STYLE.ASET_COUNT (20px 白字居中),常驻,取 asetidx/asetcount。
* (C) 右侧功能钮组 EQW_Layout.FOOTER_FUNC_BUTTONS:line/horizontal,右对齐到 x=1250,
* anchorY=672,itemHeight=30,spacing=15,【逐项不等宽】(T-25):
* BTN_MINGPAI(1042) 74 / BTN_HISTORY(1044) 87 / BTN_LAST_ROUND(1046) 93 /
* BTN_BOTTOM_CARDS(1048) 78
* 四个按钮各按条件显隐、不全常驻(清单 §2.6);参考图里同时画出属叠画示意。
*
* 元素说明:
* - 每个按钮 = 一个图片精灵(按钮底)+ 一个文字精灵(按钮文案),成对出现。
* - 显隐条件(服务端权威字段驱动,前端不自行推导):
* 明牌 —— 可查牌 + 出牌阶段 + 场上已有人报无主(baozhu==1),三家都显示
* 已出牌 —— 可查牌 + 出牌阶段
* 上一轮 —— 可查牌 + 出牌阶段 + 已打过至少一轮
* 底牌 —— 庄家全程;闲家仅开底过的局(70 分坐庄),见 S-3
* 踩/有分/没分 —— 自己是闲家 + 出牌阶段
* - 【缺口】清单 §2.6 列的右侧功能按钮共 5 个(多一个「扣底」= 看庄家埋的 8 张),
* §5.1 精灵表与本文件只登记了 4 个,「扣底」按钮尚未分配精灵,号段 1056–1069 留有空位。
*
* 资源说明:
* - 底栏条: EQW_Images.BAR_FOOTER (608), 1 帧, 1280×72
* - 功能钮底: EQW_Images.BTN_BOTTOM_FUNC (538), 1 帧, 88×30, 深色圆角(4 个按钮共用)
* - 提示钮底: EQW_Images.BTN_TISHI (540), 1 帧, 52×30, 同风格但更窄(3 个按钮共用)
*
* 精灵ID分配: 1040–1055(群组 205 号段 1040–1069)
*
* @see docs_dev/二七王-UI资源与精灵清单.md §2.6 底栏 / §1.7 闲家提示 / §5.1 / §6.5
* @see docs_dev/uiref/等待叫分.png
* @see docs_dev/uiref/自己是闲家时,底下的踩有分没分按钮.png
*/
//底栏:局数 + 功能按钮(明牌/已出牌/上一轮/底牌)+ 提示按钮(清单 §5.1 群组 205)
EQW_Sprites.FooterView = {
Layer: EQW_Layers.TABLE_STATIC, //101
Footer: {
id: EQW_Groups.FOOTER, //205
FOOTER_BG: 1040, //图片:底栏深色条,资源 EQW_Images.BAR_FOOTER
FOOTER_ASET_TEXT: 1041, //文字:「1/4 局」
BTN_MINGPAI: 1042, //图片:「明牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC
BTN_MINGPAI_TEXT: 1043, //文字:按钮文案「明牌」
BTN_HISTORY: 1044, //图片:「已出牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC
BTN_HISTORY_TEXT: 1045, //文字:按钮文案「已出牌」
BTN_LAST_ROUND: 1046, //图片:「上一轮」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC
BTN_LAST_ROUND_TEXT: 1047, //文字:按钮文案「上一轮」
BTN_BOTTOM_CARDS: 1048, //图片:「底牌」按钮,资源 EQW_Images.BTN_BOTTOM_FUNC
BTN_BOTTOM_CARDS_TEXT: 1049, //文字:按钮文案「底牌」
BTN_TISHI_CAI: 1050, //图片:「踩」按钮(闲家,占庄标区),资源 EQW_Images.BTN_TISHI
BTN_TISHI_CAI_TEXT: 1051, //文字:「踩」
BTN_TISHI_HAS: 1052, //图片:「有分」按钮,资源 EQW_Images.BTN_TISHI
BTN_TISHI_HAS_TEXT: 1053, //文字:「有分」
BTN_TISHI_NONE: 1054, //图片:「没分」按钮,资源 EQW_Images.BTN_TISHI
BTN_TISHI_NONE_TEXT: 1055 //文字:「没分」
}
};
///////////////////////////////////////////////////////////////
////////// EQW_PlatformSprites: 平台提供精灵登记表 //////////////
///////////////////////////////////////////////////////////////
//平台提供的精灵,子游戏【不建】,仅登记 ID 供布局 attach 引用。
//落在框架保留段 1–1000,故独立于 EQW_Sprites、不参与子游戏号段校验。
//三人局座位映射(清单 §0.2):ind0=南=自己 ind1=东=右上家 ind3=西=左上家;
//头像框基址 376+ind(清单 §6.6)。
var EQW_PlatformSprites = EQW_PlatformSprites || {
P_SELF_AVATAR: 376, //平台头像框 376+ind0,自己(南)
P_RIGHT_AVATAR: 377, //平台头像框 376+ind1,右上家(东)
P_LEFT_AVATAR: 379 //平台头像框 376+ind3,左上家(西)
};