From e2a74cc8f054013d54c2d5def5f171cbb502bb63 Mon Sep 17 00:00:00 2001 From: troytt <47798984@qq.com> Date: Mon, 21 Sep 2026 11:09:10 +0000 Subject: [PATCH] =?UTF-8?q?feat(ui/controls):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=AE=8C=E6=95=B4=20UI/HUD=20=E7=B3=BB=E7=BB=9F=E3=80=81?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E5=BF=AB=E6=8D=B7=E9=94=AE=E5=AF=B9=E9=BD=90?= =?UTF-8?q?=E4=B8=8E=E8=A3=85=E5=A4=87=E8=AF=8D=E6=9D=A1=E6=9F=93=E8=89=B2?= =?UTF-8?q?=20(fixes=20#134,=20fixes=20#135,=20fixes=20#136,=20fixes=20#13?= =?UTF-8?q?7,=20fixes=20#138,=20fixes=20#139,=20fixes=20#140)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - R1 (Issue #134): 离线烘焙预生成 UI 图集 (public/ui/) 与 embedded DropTables,彻底消除 2 秒纯色占位回退,实现零运行期 MPQ/DLL 依赖 - R2 (Issue #135): 修复地图缩放 (0.4x~8.0x) 及多 DPR 下 NPC 名称标签与模型顶部的投影对齐 - R3 (Issue #136): HUD 与全屏画布采用 1:1 纵横比等比缩放与居中,彻底修复宽屏下红蓝球被横向拉伸为椭圆的问题 - R4 (Issue #137): 传送点菜单 (Waypoint Menu) 支持点击无缝跨场景传送,随机选取地图变体并平稳降落在对应小站子网格 - R5 (Issue #138): 角色属性面板 (InvChar6) 文本与数字完美对准背景凹槽石框,加点按钮对齐 - R6 (Issue #139): 物品栏 5 级回退 DC6 图标渲染,消灭空白占位框;装备 Tooltip 等比缩放与视口翻折防遮挡 - R7 (Issue #140): 任务日志界面集成 1~5 幕全量 27 个任务图标 (a1q1..a5q6) 及 27 帧已完成印章,第 4 幕自动进行插槽钳制保护 - Controls Parity: 还原原版左键移动/NPC交互/小站/攻击,Shift 强制原地站立攻击,右键释放技能与被动/无技能移动回退,解除 A/W/S/1..4 快捷键与移动冲突 - Tooltips & Dyes: 基于 1.13c PL2 调色板 Table 104 (cgrn) 渲染翡翠绿军帽,战争召唤按 descpriority 完整呈现 11 行符文之语属性与三行正统标题 --- .gitignore | 13 +- acts.html | 18 +- boss.html | 26 +- package.json | 1 + public/skills/bg_ama_0.png | Bin 0 -> 72978 bytes public/skills/bg_ama_1.png | Bin 0 -> 72686 bytes public/skills/bg_ama_2.png | Bin 0 -> 72815 bytes public/skills/bg_ass_0.png | Bin 0 -> 62147 bytes public/skills/bg_ass_1.png | Bin 0 -> 62094 bytes public/skills/bg_ass_2.png | Bin 0 -> 61416 bytes public/skills/bg_bar_0.png | Bin 0 -> 72751 bytes public/skills/bg_bar_1.png | Bin 0 -> 73263 bytes public/skills/bg_bar_2.png | Bin 0 -> 72930 bytes public/skills/bg_dru_0.png | Bin 0 -> 60623 bytes public/skills/bg_dru_1.png | Bin 0 -> 62999 bytes public/skills/bg_dru_2.png | Bin 0 -> 61760 bytes public/skills/bg_nec_0.png | Bin 0 -> 72776 bytes public/skills/bg_nec_1.png | Bin 0 -> 73004 bytes public/skills/bg_nec_2.png | Bin 0 -> 72934 bytes public/skills/bg_pal_0.png | Bin 0 -> 73033 bytes public/skills/bg_pal_1.png | Bin 0 -> 73068 bytes public/skills/bg_pal_2.png | Bin 0 -> 73213 bytes public/skills/bg_sor_0.png | Bin 0 -> 72955 bytes public/skills/bg_sor_1.png | Bin 0 -> 73151 bytes public/skills/bg_sor_2.png | Bin 0 -> 73173 bytes public/skills/icon_10.png | Bin 0 -> 2833 bytes public/skills/icon_100.png | Bin 0 -> 2673 bytes public/skills/icon_100_active.png | Bin 0 -> 2574 bytes public/skills/icon_101.png | Bin 0 -> 2915 bytes public/skills/icon_101_active.png | Bin 0 -> 2812 bytes public/skills/icon_102.png | Bin 0 -> 2921 bytes public/skills/icon_102_active.png | Bin 0 -> 2830 bytes public/skills/icon_103.png | Bin 0 -> 2891 bytes public/skills/icon_103_active.png | Bin 0 -> 2816 bytes public/skills/icon_104.png | Bin 0 -> 2859 bytes public/skills/icon_104_active.png | Bin 0 -> 2761 bytes public/skills/icon_105.png | Bin 0 -> 2788 bytes public/skills/icon_105_active.png | Bin 0 -> 2714 bytes public/skills/icon_106.png | Bin 0 -> 2897 bytes public/skills/icon_106_active.png | Bin 0 -> 2814 bytes public/skills/icon_107.png | Bin 0 -> 2897 bytes public/skills/icon_107_active.png | Bin 0 -> 2809 bytes public/skills/icon_108.png | Bin 0 -> 2954 bytes public/skills/icon_108_active.png | Bin 0 -> 2851 bytes public/skills/icon_109.png | Bin 0 -> 2826 bytes public/skills/icon_109_active.png | Bin 0 -> 2736 bytes public/skills/icon_10_active.png | Bin 0 -> 2781 bytes public/skills/icon_11.png | Bin 0 -> 2943 bytes public/skills/icon_110.png | Bin 0 -> 2786 bytes public/skills/icon_110_active.png | Bin 0 -> 2700 bytes public/skills/icon_111.png | Bin 0 -> 2780 bytes public/skills/icon_111_active.png | Bin 0 -> 2683 bytes public/skills/icon_112.png | Bin 0 -> 2860 bytes public/skills/icon_112_active.png | Bin 0 -> 2760 bytes public/skills/icon_113.png | Bin 0 -> 2912 bytes public/skills/icon_113_active.png | Bin 0 -> 2828 bytes public/skills/icon_114.png | Bin 0 -> 2961 bytes public/skills/icon_114_active.png | Bin 0 -> 2868 bytes public/skills/icon_115.png | Bin 0 -> 2767 bytes public/skills/icon_115_active.png | Bin 0 -> 2685 bytes public/skills/icon_116.png | Bin 0 -> 2947 bytes public/skills/icon_116_active.png | Bin 0 -> 2836 bytes public/skills/icon_117.png | Bin 0 -> 2751 bytes public/skills/icon_117_active.png | Bin 0 -> 2643 bytes public/skills/icon_118.png | Bin 0 -> 2908 bytes public/skills/icon_118_active.png | Bin 0 -> 2819 bytes public/skills/icon_119.png | Bin 0 -> 2926 bytes public/skills/icon_119_active.png | Bin 0 -> 2836 bytes public/skills/icon_11_active.png | Bin 0 -> 2818 bytes public/skills/icon_12.png | Bin 0 -> 2903 bytes public/skills/icon_120.png | Bin 0 -> 2811 bytes public/skills/icon_120_active.png | Bin 0 -> 2749 bytes public/skills/icon_121.png | Bin 0 -> 2833 bytes public/skills/icon_121_active.png | Bin 0 -> 2725 bytes public/skills/icon_122.png | Bin 0 -> 2827 bytes public/skills/icon_122_active.png | Bin 0 -> 2738 bytes public/skills/icon_123.png | Bin 0 -> 2798 bytes public/skills/icon_123_active.png | Bin 0 -> 2713 bytes public/skills/icon_124.png | Bin 0 -> 2882 bytes public/skills/icon_124_active.png | Bin 0 -> 2798 bytes public/skills/icon_125.png | Bin 0 -> 2794 bytes public/skills/icon_125_active.png | Bin 0 -> 2715 bytes public/skills/icon_126.png | Bin 0 -> 2687 bytes public/skills/icon_126_active.png | Bin 0 -> 2603 bytes public/skills/icon_127.png | Bin 0 -> 2542 bytes public/skills/icon_127_active.png | Bin 0 -> 2455 bytes public/skills/icon_128.png | Bin 0 -> 2656 bytes public/skills/icon_128_active.png | Bin 0 -> 2571 bytes public/skills/icon_129.png | Bin 0 -> 2564 bytes public/skills/icon_129_active.png | Bin 0 -> 2474 bytes public/skills/icon_12_active.png | Bin 0 -> 2799 bytes public/skills/icon_13.png | Bin 0 -> 2946 bytes public/skills/icon_130.png | Bin 0 -> 2905 bytes public/skills/icon_130_active.png | Bin 0 -> 2792 bytes public/skills/icon_131.png | Bin 0 -> 2837 bytes public/skills/icon_131_active.png | Bin 0 -> 2769 bytes public/skills/icon_132.png | Bin 0 -> 2731 bytes public/skills/icon_132_active.png | Bin 0 -> 2657 bytes public/skills/icon_133.png | Bin 0 -> 2912 bytes public/skills/icon_133_active.png | Bin 0 -> 2797 bytes public/skills/icon_134.png | Bin 0 -> 2550 bytes public/skills/icon_134_active.png | Bin 0 -> 2464 bytes public/skills/icon_135.png | Bin 0 -> 2564 bytes public/skills/icon_135_active.png | Bin 0 -> 2457 bytes public/skills/icon_136.png | Bin 0 -> 2455 bytes public/skills/icon_136_active.png | Bin 0 -> 2373 bytes public/skills/icon_137.png | Bin 0 -> 2850 bytes public/skills/icon_137_active.png | Bin 0 -> 2752 bytes public/skills/icon_138.png | Bin 0 -> 2832 bytes public/skills/icon_138_active.png | Bin 0 -> 2754 bytes public/skills/icon_139.png | Bin 0 -> 2831 bytes public/skills/icon_139_active.png | Bin 0 -> 2724 bytes public/skills/icon_13_active.png | Bin 0 -> 2871 bytes public/skills/icon_14.png | Bin 0 -> 2864 bytes public/skills/icon_140.png | Bin 0 -> 2909 bytes public/skills/icon_140_active.png | Bin 0 -> 2824 bytes public/skills/icon_141.png | Bin 0 -> 2611 bytes public/skills/icon_141_active.png | Bin 0 -> 2517 bytes public/skills/icon_142.png | Bin 0 -> 2909 bytes public/skills/icon_142_active.png | Bin 0 -> 2837 bytes public/skills/icon_143.png | Bin 0 -> 2841 bytes public/skills/icon_143_active.png | Bin 0 -> 2768 bytes public/skills/icon_144.png | Bin 0 -> 2832 bytes public/skills/icon_144_active.png | Bin 0 -> 2763 bytes public/skills/icon_145.png | Bin 0 -> 2729 bytes public/skills/icon_145_active.png | Bin 0 -> 2633 bytes public/skills/icon_146.png | Bin 0 -> 2859 bytes public/skills/icon_146_active.png | Bin 0 -> 2777 bytes public/skills/icon_147.png | Bin 0 -> 2895 bytes public/skills/icon_147_active.png | Bin 0 -> 2804 bytes public/skills/icon_148.png | Bin 0 -> 2785 bytes public/skills/icon_148_active.png | Bin 0 -> 2687 bytes public/skills/icon_149.png | Bin 0 -> 2786 bytes public/skills/icon_149_active.png | Bin 0 -> 2691 bytes public/skills/icon_14_active.png | Bin 0 -> 2759 bytes public/skills/icon_15.png | Bin 0 -> 2924 bytes public/skills/icon_150.png | Bin 0 -> 2868 bytes public/skills/icon_150_active.png | Bin 0 -> 2786 bytes public/skills/icon_151.png | Bin 0 -> 2930 bytes public/skills/icon_151_active.png | Bin 0 -> 2851 bytes public/skills/icon_152.png | Bin 0 -> 2652 bytes public/skills/icon_152_active.png | Bin 0 -> 2567 bytes public/skills/icon_153.png | Bin 0 -> 2959 bytes public/skills/icon_153_active.png | Bin 0 -> 2871 bytes public/skills/icon_154.png | Bin 0 -> 2888 bytes public/skills/icon_154_active.png | Bin 0 -> 2787 bytes public/skills/icon_155.png | Bin 0 -> 2862 bytes public/skills/icon_155_active.png | Bin 0 -> 2760 bytes public/skills/icon_15_active.png | Bin 0 -> 2822 bytes public/skills/icon_16.png | Bin 0 -> 2841 bytes public/skills/icon_16_active.png | Bin 0 -> 2755 bytes public/skills/icon_17.png | Bin 0 -> 2896 bytes public/skills/icon_17_active.png | Bin 0 -> 2800 bytes public/skills/icon_18.png | Bin 0 -> 2898 bytes public/skills/icon_18_active.png | Bin 0 -> 2787 bytes public/skills/icon_19.png | Bin 0 -> 2866 bytes public/skills/icon_19_active.png | Bin 0 -> 2801 bytes public/skills/icon_20.png | Bin 0 -> 2905 bytes public/skills/icon_20_active.png | Bin 0 -> 2816 bytes public/skills/icon_21.png | Bin 0 -> 2992 bytes public/skills/icon_21_active.png | Bin 0 -> 2892 bytes public/skills/icon_22.png | Bin 0 -> 2884 bytes public/skills/icon_221.png | Bin 0 -> 2765 bytes public/skills/icon_221_active.png | Bin 0 -> 2691 bytes public/skills/icon_222.png | Bin 0 -> 3018 bytes public/skills/icon_222_active.png | Bin 0 -> 2907 bytes public/skills/icon_223.png | Bin 0 -> 2845 bytes public/skills/icon_223_active.png | Bin 0 -> 2771 bytes public/skills/icon_224.png | Bin 0 -> 2945 bytes public/skills/icon_224_active.png | Bin 0 -> 2908 bytes public/skills/icon_225.png | Bin 0 -> 2986 bytes public/skills/icon_225_active.png | Bin 0 -> 2915 bytes public/skills/icon_226.png | Bin 0 -> 3036 bytes public/skills/icon_226_active.png | Bin 0 -> 2937 bytes public/skills/icon_227.png | Bin 0 -> 2711 bytes public/skills/icon_227_active.png | Bin 0 -> 2701 bytes public/skills/icon_228.png | Bin 0 -> 2844 bytes public/skills/icon_228_active.png | Bin 0 -> 2737 bytes public/skills/icon_229.png | Bin 0 -> 2920 bytes public/skills/icon_229_active.png | Bin 0 -> 2823 bytes public/skills/icon_22_active.png | Bin 0 -> 2791 bytes public/skills/icon_23.png | Bin 0 -> 2850 bytes public/skills/icon_230.png | Bin 0 -> 3052 bytes public/skills/icon_230_active.png | Bin 0 -> 2919 bytes public/skills/icon_231.png | Bin 0 -> 3028 bytes public/skills/icon_231_active.png | Bin 0 -> 2952 bytes public/skills/icon_232.png | Bin 0 -> 2950 bytes public/skills/icon_232_active.png | Bin 0 -> 2770 bytes public/skills/icon_233.png | Bin 0 -> 3004 bytes public/skills/icon_233_active.png | Bin 0 -> 2886 bytes public/skills/icon_234.png | Bin 0 -> 2952 bytes public/skills/icon_234_active.png | Bin 0 -> 2836 bytes public/skills/icon_235.png | Bin 0 -> 2878 bytes public/skills/icon_235_active.png | Bin 0 -> 2799 bytes public/skills/icon_236.png | Bin 0 -> 2873 bytes public/skills/icon_236_active.png | Bin 0 -> 2789 bytes public/skills/icon_237.png | Bin 0 -> 2759 bytes public/skills/icon_237_active.png | Bin 0 -> 2684 bytes public/skills/icon_238.png | Bin 0 -> 2970 bytes public/skills/icon_238_active.png | Bin 0 -> 2864 bytes public/skills/icon_239.png | Bin 0 -> 2868 bytes public/skills/icon_239_active.png | Bin 0 -> 2786 bytes public/skills/icon_23_active.png | Bin 0 -> 2754 bytes public/skills/icon_24.png | Bin 0 -> 2881 bytes public/skills/icon_240.png | Bin 0 -> 3007 bytes public/skills/icon_240_active.png | Bin 0 -> 2932 bytes public/skills/icon_241.png | Bin 0 -> 3018 bytes public/skills/icon_241_active.png | Bin 0 -> 2901 bytes public/skills/icon_242.png | Bin 0 -> 2842 bytes public/skills/icon_242_active.png | Bin 0 -> 2761 bytes public/skills/icon_243.png | Bin 0 -> 2980 bytes public/skills/icon_243_active.png | Bin 0 -> 2899 bytes public/skills/icon_244.png | Bin 0 -> 2874 bytes public/skills/icon_244_active.png | Bin 0 -> 2799 bytes public/skills/icon_245.png | Bin 0 -> 2948 bytes public/skills/icon_245_active.png | Bin 0 -> 2844 bytes public/skills/icon_246.png | Bin 0 -> 2922 bytes public/skills/icon_246_active.png | Bin 0 -> 2766 bytes public/skills/icon_247.png | Bin 0 -> 2850 bytes public/skills/icon_247_active.png | Bin 0 -> 2761 bytes public/skills/icon_248.png | Bin 0 -> 3041 bytes public/skills/icon_248_active.png | Bin 0 -> 2918 bytes public/skills/icon_249.png | Bin 0 -> 2937 bytes public/skills/icon_249_active.png | Bin 0 -> 2833 bytes public/skills/icon_24_active.png | Bin 0 -> 2772 bytes public/skills/icon_25.png | Bin 0 -> 2932 bytes public/skills/icon_250.png | Bin 0 -> 2908 bytes public/skills/icon_250_active.png | Bin 0 -> 2802 bytes public/skills/icon_251.png | Bin 0 -> 2863 bytes public/skills/icon_251_active.png | Bin 0 -> 2746 bytes public/skills/icon_252.png | Bin 0 -> 2962 bytes public/skills/icon_252_active.png | Bin 0 -> 2828 bytes public/skills/icon_253.png | Bin 0 -> 2995 bytes public/skills/icon_253_active.png | Bin 0 -> 2909 bytes public/skills/icon_254.png | Bin 0 -> 2938 bytes public/skills/icon_254_active.png | Bin 0 -> 2832 bytes public/skills/icon_255.png | Bin 0 -> 2836 bytes public/skills/icon_255_active.png | Bin 0 -> 2725 bytes public/skills/icon_256.png | Bin 0 -> 2928 bytes public/skills/icon_256_active.png | Bin 0 -> 2848 bytes public/skills/icon_257.png | Bin 0 -> 2767 bytes public/skills/icon_257_active.png | Bin 0 -> 2714 bytes public/skills/icon_258.png | Bin 0 -> 2885 bytes public/skills/icon_258_active.png | Bin 0 -> 2806 bytes public/skills/icon_259.png | Bin 0 -> 2843 bytes public/skills/icon_259_active.png | Bin 0 -> 2722 bytes public/skills/icon_25_active.png | Bin 0 -> 2849 bytes public/skills/icon_26.png | Bin 0 -> 2891 bytes public/skills/icon_260.png | Bin 0 -> 2998 bytes public/skills/icon_260_active.png | Bin 0 -> 2855 bytes public/skills/icon_261.png | Bin 0 -> 2936 bytes public/skills/icon_261_active.png | Bin 0 -> 2832 bytes public/skills/icon_262.png | Bin 0 -> 2959 bytes public/skills/icon_262_active.png | Bin 0 -> 2855 bytes public/skills/icon_263.png | Bin 0 -> 2997 bytes public/skills/icon_263_active.png | Bin 0 -> 2913 bytes public/skills/icon_264.png | Bin 0 -> 2893 bytes public/skills/icon_264_active.png | Bin 0 -> 2800 bytes public/skills/icon_265.png | Bin 0 -> 2923 bytes public/skills/icon_265_active.png | Bin 0 -> 2829 bytes public/skills/icon_266.png | Bin 0 -> 3017 bytes public/skills/icon_266_active.png | Bin 0 -> 2936 bytes public/skills/icon_267.png | Bin 0 -> 2933 bytes public/skills/icon_267_active.png | Bin 0 -> 2827 bytes public/skills/icon_268.png | Bin 0 -> 2953 bytes public/skills/icon_268_active.png | Bin 0 -> 2798 bytes public/skills/icon_269.png | Bin 0 -> 2845 bytes public/skills/icon_269_active.png | Bin 0 -> 2730 bytes public/skills/icon_26_active.png | Bin 0 -> 2803 bytes public/skills/icon_27.png | Bin 0 -> 2746 bytes public/skills/icon_270.png | Bin 0 -> 2890 bytes public/skills/icon_270_active.png | Bin 0 -> 2744 bytes public/skills/icon_271.png | Bin 0 -> 2935 bytes public/skills/icon_271_active.png | Bin 0 -> 2842 bytes public/skills/icon_272.png | Bin 0 -> 2934 bytes public/skills/icon_272_active.png | Bin 0 -> 2834 bytes public/skills/icon_273.png | Bin 0 -> 2682 bytes public/skills/icon_273_active.png | Bin 0 -> 2586 bytes public/skills/icon_274.png | Bin 0 -> 2996 bytes public/skills/icon_274_active.png | Bin 0 -> 2829 bytes public/skills/icon_275.png | Bin 0 -> 2993 bytes public/skills/icon_275_active.png | Bin 0 -> 2904 bytes public/skills/icon_276.png | Bin 0 -> 2972 bytes public/skills/icon_276_active.png | Bin 0 -> 2867 bytes public/skills/icon_277.png | Bin 0 -> 2829 bytes public/skills/icon_277_active.png | Bin 0 -> 2745 bytes public/skills/icon_278.png | Bin 0 -> 2848 bytes public/skills/icon_278_active.png | Bin 0 -> 2737 bytes public/skills/icon_279.png | Bin 0 -> 2930 bytes public/skills/icon_279_active.png | Bin 0 -> 2808 bytes public/skills/icon_27_active.png | Bin 0 -> 2681 bytes public/skills/icon_28.png | Bin 0 -> 2774 bytes public/skills/icon_280.png | Bin 0 -> 2948 bytes public/skills/icon_280_active.png | Bin 0 -> 2846 bytes public/skills/icon_28_active.png | Bin 0 -> 2697 bytes public/skills/icon_29.png | Bin 0 -> 2891 bytes public/skills/icon_29_active.png | Bin 0 -> 2796 bytes public/skills/icon_30.png | Bin 0 -> 2910 bytes public/skills/icon_30_active.png | Bin 0 -> 2814 bytes public/skills/icon_31.png | Bin 0 -> 2770 bytes public/skills/icon_31_active.png | Bin 0 -> 2695 bytes public/skills/icon_32.png | Bin 0 -> 2773 bytes public/skills/icon_32_active.png | Bin 0 -> 2683 bytes public/skills/icon_33.png | Bin 0 -> 2870 bytes public/skills/icon_33_active.png | Bin 0 -> 2786 bytes public/skills/icon_34.png | Bin 0 -> 2894 bytes public/skills/icon_34_active.png | Bin 0 -> 2788 bytes public/skills/icon_35.png | Bin 0 -> 2831 bytes public/skills/icon_35_active.png | Bin 0 -> 2749 bytes public/skills/icon_36.png | Bin 0 -> 2931 bytes public/skills/icon_36_active.png | Bin 0 -> 2840 bytes public/skills/icon_37.png | Bin 0 -> 2808 bytes public/skills/icon_37_active.png | Bin 0 -> 2704 bytes public/skills/icon_38.png | Bin 0 -> 2879 bytes public/skills/icon_38_active.png | Bin 0 -> 2780 bytes public/skills/icon_39.png | Bin 0 -> 2964 bytes public/skills/icon_39_active.png | Bin 0 -> 2867 bytes public/skills/icon_40.png | Bin 0 -> 2757 bytes public/skills/icon_40_active.png | Bin 0 -> 2682 bytes public/skills/icon_41.png | Bin 0 -> 2859 bytes public/skills/icon_41_active.png | Bin 0 -> 2769 bytes public/skills/icon_42.png | Bin 0 -> 2901 bytes public/skills/icon_42_active.png | Bin 0 -> 2798 bytes public/skills/icon_43.png | Bin 0 -> 2926 bytes public/skills/icon_43_active.png | Bin 0 -> 2820 bytes public/skills/icon_44.png | Bin 0 -> 2917 bytes public/skills/icon_44_active.png | Bin 0 -> 2815 bytes public/skills/icon_45.png | Bin 0 -> 2870 bytes public/skills/icon_45_active.png | Bin 0 -> 2788 bytes public/skills/icon_46.png | Bin 0 -> 2874 bytes public/skills/icon_46_active.png | Bin 0 -> 2788 bytes public/skills/icon_47.png | Bin 0 -> 2914 bytes public/skills/icon_47_active.png | Bin 0 -> 2792 bytes public/skills/icon_48.png | Bin 0 -> 2879 bytes public/skills/icon_48_active.png | Bin 0 -> 2785 bytes public/skills/icon_49.png | Bin 0 -> 2859 bytes public/skills/icon_49_active.png | Bin 0 -> 2767 bytes public/skills/icon_50.png | Bin 0 -> 2952 bytes public/skills/icon_50_active.png | Bin 0 -> 2870 bytes public/skills/icon_51.png | Bin 0 -> 2664 bytes public/skills/icon_51_active.png | Bin 0 -> 2562 bytes public/skills/icon_52.png | Bin 0 -> 2818 bytes public/skills/icon_52_active.png | Bin 0 -> 2738 bytes public/skills/icon_53.png | Bin 0 -> 2912 bytes public/skills/icon_53_active.png | Bin 0 -> 2825 bytes public/skills/icon_54.png | Bin 0 -> 2860 bytes public/skills/icon_54_active.png | Bin 0 -> 2776 bytes public/skills/icon_55.png | Bin 0 -> 2873 bytes public/skills/icon_55_active.png | Bin 0 -> 2761 bytes public/skills/icon_56.png | Bin 0 -> 2928 bytes public/skills/icon_56_active.png | Bin 0 -> 2836 bytes public/skills/icon_57.png | Bin 0 -> 2773 bytes public/skills/icon_57_active.png | Bin 0 -> 2688 bytes public/skills/icon_58.png | Bin 0 -> 2924 bytes public/skills/icon_58_active.png | Bin 0 -> 2799 bytes public/skills/icon_59.png | Bin 0 -> 2867 bytes public/skills/icon_59_active.png | Bin 0 -> 2752 bytes public/skills/icon_6.png | Bin 0 -> 2897 bytes public/skills/icon_60.png | Bin 0 -> 2889 bytes public/skills/icon_60_active.png | Bin 0 -> 2811 bytes public/skills/icon_61.png | Bin 0 -> 2918 bytes public/skills/icon_61_active.png | Bin 0 -> 2809 bytes public/skills/icon_62.png | Bin 0 -> 2758 bytes public/skills/icon_62_active.png | Bin 0 -> 2668 bytes public/skills/icon_63.png | Bin 0 -> 2806 bytes public/skills/icon_63_active.png | Bin 0 -> 2707 bytes public/skills/icon_64.png | Bin 0 -> 2920 bytes public/skills/icon_64_active.png | Bin 0 -> 2810 bytes public/skills/icon_65.png | Bin 0 -> 2941 bytes public/skills/icon_65_active.png | Bin 0 -> 2842 bytes public/skills/icon_66.png | Bin 0 -> 2705 bytes public/skills/icon_66_active.png | Bin 0 -> 2606 bytes public/skills/icon_67.png | Bin 0 -> 2837 bytes public/skills/icon_67_active.png | Bin 0 -> 2770 bytes public/skills/icon_68.png | Bin 0 -> 2818 bytes public/skills/icon_68_active.png | Bin 0 -> 2758 bytes public/skills/icon_69.png | Bin 0 -> 2713 bytes public/skills/icon_69_active.png | Bin 0 -> 2649 bytes public/skills/icon_6_active.png | Bin 0 -> 2797 bytes public/skills/icon_7.png | Bin 0 -> 2918 bytes public/skills/icon_70.png | Bin 0 -> 2795 bytes public/skills/icon_70_active.png | Bin 0 -> 2721 bytes public/skills/icon_71.png | Bin 0 -> 2780 bytes public/skills/icon_71_active.png | Bin 0 -> 2713 bytes public/skills/icon_72.png | Bin 0 -> 2752 bytes public/skills/icon_72_active.png | Bin 0 -> 2687 bytes public/skills/icon_73.png | Bin 0 -> 2820 bytes public/skills/icon_73_active.png | Bin 0 -> 2728 bytes public/skills/icon_74.png | Bin 0 -> 2797 bytes public/skills/icon_74_active.png | Bin 0 -> 2727 bytes public/skills/icon_75.png | Bin 0 -> 2776 bytes public/skills/icon_75_active.png | Bin 0 -> 2700 bytes public/skills/icon_76.png | Bin 0 -> 2795 bytes public/skills/icon_76_active.png | Bin 0 -> 2748 bytes public/skills/icon_77.png | Bin 0 -> 2804 bytes public/skills/icon_77_active.png | Bin 0 -> 2725 bytes public/skills/icon_78.png | Bin 0 -> 2874 bytes public/skills/icon_78_active.png | Bin 0 -> 2799 bytes public/skills/icon_79.png | Bin 0 -> 2620 bytes public/skills/icon_79_active.png | Bin 0 -> 2543 bytes public/skills/icon_7_active.png | Bin 0 -> 2827 bytes public/skills/icon_8.png | Bin 0 -> 2939 bytes public/skills/icon_80.png | Bin 0 -> 2942 bytes public/skills/icon_80_active.png | Bin 0 -> 2823 bytes public/skills/icon_81.png | Bin 0 -> 2817 bytes public/skills/icon_81_active.png | Bin 0 -> 2744 bytes public/skills/icon_82.png | Bin 0 -> 2789 bytes public/skills/icon_82_active.png | Bin 0 -> 2720 bytes public/skills/icon_83.png | Bin 0 -> 2946 bytes public/skills/icon_83_active.png | Bin 0 -> 2860 bytes public/skills/icon_84.png | Bin 0 -> 2819 bytes public/skills/icon_84_active.png | Bin 0 -> 2731 bytes public/skills/icon_85.png | Bin 0 -> 2837 bytes public/skills/icon_85_active.png | Bin 0 -> 2754 bytes public/skills/icon_86.png | Bin 0 -> 2740 bytes public/skills/icon_86_active.png | Bin 0 -> 2656 bytes public/skills/icon_87.png | Bin 0 -> 2796 bytes public/skills/icon_87_active.png | Bin 0 -> 2712 bytes public/skills/icon_88.png | Bin 0 -> 2897 bytes public/skills/icon_88_active.png | Bin 0 -> 2800 bytes public/skills/icon_89.png | Bin 0 -> 2810 bytes public/skills/icon_89_active.png | Bin 0 -> 2718 bytes public/skills/icon_8_active.png | Bin 0 -> 2843 bytes public/skills/icon_9.png | Bin 0 -> 2813 bytes public/skills/icon_90.png | Bin 0 -> 2791 bytes public/skills/icon_90_active.png | Bin 0 -> 2710 bytes public/skills/icon_91.png | Bin 0 -> 2785 bytes public/skills/icon_91_active.png | Bin 0 -> 2697 bytes public/skills/icon_92.png | Bin 0 -> 2912 bytes public/skills/icon_92_active.png | Bin 0 -> 2822 bytes public/skills/icon_93.png | Bin 0 -> 2918 bytes public/skills/icon_93_active.png | Bin 0 -> 2836 bytes public/skills/icon_94.png | Bin 0 -> 2823 bytes public/skills/icon_94_active.png | Bin 0 -> 2751 bytes public/skills/icon_95.png | Bin 0 -> 2861 bytes public/skills/icon_95_active.png | Bin 0 -> 2766 bytes public/skills/icon_96.png | Bin 0 -> 2877 bytes public/skills/icon_96_active.png | Bin 0 -> 2773 bytes public/skills/icon_97.png | Bin 0 -> 2813 bytes public/skills/icon_97_active.png | Bin 0 -> 2743 bytes public/skills/icon_98.png | Bin 0 -> 2934 bytes public/skills/icon_98_active.png | Bin 0 -> 2811 bytes public/skills/icon_99.png | Bin 0 -> 2782 bytes public/skills/icon_99_active.png | Bin 0 -> 2704 bytes public/skills/icon_9_active.png | Bin 0 -> 2727 bytes public/ui/border-left.png | Bin 0 -> 64257 bytes public/ui/border-right.png | Bin 0 -> 63087 bytes public/ui/buysellbtn.png | Bin 0 -> 13395 bytes public/ui/char-sheet.png | Bin 0 -> 77427 bytes public/ui/ctrlpnl-800.png | Bin 0 -> 27560 bytes public/ui/cube-bg.png | Bin 0 -> 88746 bytes public/ui/cursor-hand.png | Bin 0 -> 1157 bytes public/ui/fonts/font16.png | Bin 0 -> 10340 bytes public/ui/fonts/font30.png | Bin 0 -> 32375 bytes public/ui/fonts/font6.png | Bin 0 -> 5203 bytes public/ui/fonts/font8.png | Bin 0 -> 7641 bytes public/ui/fonts/fontexocet10.png | Bin 0 -> 9926 bytes public/ui/fonts/fontformal12.png | Bin 0 -> 13115 bytes public/ui/fonts/metrics.json | 13880 +++++++++ public/ui/generic-skills.png | Bin 0 -> 19264 bytes public/ui/globe-life.png | Bin 0 -> 1931 bytes public/ui/globe-mana.png | Bin 0 -> 1783 bytes public/ui/globe-poison.png | Bin 0 -> 2059 bytes public/ui/inv-sheet.png | Bin 0 -> 69907 bytes public/ui/inv-tab-0.png | Bin 0 -> 5702 bytes public/ui/inv-tab-1.png | Bin 0 -> 5442 bytes public/ui/items-atlas.png | Bin 0 -> 391849 bytes public/ui/items_atlas.png | 1 + public/ui/level-btn.png | Bin 0 -> 2565 bytes public/ui/level-socket.png | Bin 0 -> 1165 bytes public/ui/manifest.json | 4070 +++ public/ui/menubutton.png | Bin 0 -> 1686 bytes public/ui/minipanel-btns.png | Bin 0 -> 5131 bytes public/ui/minipanel.png | Bin 0 -> 986 bytes public/ui/overlap-left.png | Bin 0 -> 1343 bytes public/ui/overlap-right.png | Bin 0 -> 1396 bytes public/ui/popbelt.png | Bin 0 -> 3173 bytes public/ui/quest-bg.png | Bin 0 -> 61425 bytes public/ui/quest-tabs.png | Bin 0 -> 10668 bytes public/ui/quests-atlas.png | Bin 0 -> 145952 bytes public/ui/runbutton.png | Bin 0 -> 1789 bytes public/ui/skillpoints.png | Bin 0 -> 2102 bytes public/ui/stash-bg.png | Bin 0 -> 83464 bytes public/ui/vendor-bg.png | Bin 0 -> 64419 bytes public/ui/waypoint-bg.png | Bin 0 -> 49635 bytes public/ui/waypoint-icons.png | Bin 0 -> 4148 bytes public/ui/waypoint-tabs.png | Bin 0 -> 10668 bytes scripts/audit-skills-browser.ts | 473 + scripts/build-skill-catalog.ts | 603 + scripts/build-skill-tree.ts | 116 + scripts/forensic-audit-m3.ts | 242 + scripts/generate-skill-tree-ts.ts | 565 + scripts/generate_gems_data.ts | 1203 + scripts/pack-act-assets.ts | 88 +- scripts/pack-skill-assets.ts | 187 + scripts/pack-ui-assets.ts | 416 + scripts/pack-ui.ts | 765 + scripts/scratch-audit-dt1-inventory.ts | 83 + scripts/stress-barricade-extent.ts | 758 + scripts/stress-test-m1-seeds.ts | 442 + scripts/stress-test-m2-connectivity.ts | 835 + scripts/stress-test-m2-geometry.ts | 814 + scripts/stress-test-m3-adversarial.ts | 147 + scripts/stress-world-placement.ts | 269 + scripts/verify-challenger-m1-2.ts | 618 + scripts/verify-challenger-m1-tooltip.ts | 447 + scripts/verify-challenger-m1.ts | 729 + scripts/verify-challenger-m2-tooltip.ts | 482 + scripts/verify-challenger-m3-tooltip.ts | 597 + .../verify-challenger-m3-world-placement.ts | 383 + scripts/verify-challenger-m3.ts | 692 + scripts/verify-stress-m1.ts | 556 + scripts/verify-tooltip-browser.ts | 501 + scripts/verify-tooltip-empirical.ts | 597 + scripts/verify-ui-browser.ts | 223 + skills.html | 652 + src/boss.ts | 12 +- src/data/skills-catalog.ts | 24540 ++++++++++++++++ src/game/acts.ts | 24 +- src/game/classes.ts | 419 + src/game/d2map.ts | 14 +- src/game/engine.ts | 12 + src/game/gems-data.ts | 1236 + src/game/item-tooltip.ts | 209 +- src/game/maze-special-passes.ts | 177 +- src/game/maze.ts | 28 +- src/game/preset.ts | 30 +- src/game/skill-calc-engine.ts | 1003 + src/game/skill-tree.ts | 4943 ++++ src/game/skills.ts | 547 + src/game/wilderness-acts.ts | 448 +- src/game/wilderness-siege.ts | 12 +- src/game/wilderness.ts | 48 +- src/game/world-graph.ts | 15 +- src/game/world-placement.ts | 4907 +++ src/scene/act-scene.ts | 1140 +- src/sim/input.ts | 34 +- src/skills.ts | 787 + src/ui/baked-ui-meta.ts | 4151 +++ src/ui/belt.ts | 246 + src/ui/character-sheet.ts | 315 + src/ui/control-bar.ts | 252 + src/ui/font.ts | 282 + src/ui/globes.ts | 210 + src/ui/hotkeys.ts | 254 + src/ui/hud-manager.ts | 834 + src/ui/inventory.ts | 916 + src/ui/skill-tree-panel.ts | 367 + src/ui/world-panels.ts | 634 + ...dversarial-world-placement-m3-gen2.test.ts | 321 + tests/challenger-m2-stress.test.ts | 912 + tests/challenger-m3-tooltip-stress.test.ts | 611 + tests/classes.test.ts | 419 + tests/e2e-m11-adversarial.test.ts | 756 + tests/e2e-m11-skills.test.ts | 1345 + tests/gems-runes-parity.test.ts | 287 + tests/input-controls.test.ts | 975 + tests/item-tooltip-color-dye.test.ts | 834 + tests/maze-113c.test.ts | 7 + tests/maze-special-passes.test.ts | 7 +- tests/skill-calc-engine.test.ts | 408 + tests/skill-tree-stress.test.ts | 887 + tests/skill-tree.test.ts | 595 + tests/skills-batch1.test.ts | 497 + tests/skills-combat-stress.test.ts | 858 + tests/skills-stress.test.ts | 733 + tests/stress-world-placement.test.ts | 243 + tests/synergy-stress.test.ts | 585 + tests/ui-hud.test.ts | 496 + tests/wilderness-acts.test.ts | 374 +- tests/wilderness-barricade-stress.test.ts | 280 + tests/wilderness-features.test.ts | 94 + tests/wilderness-seed-sensitivity.test.ts | 447 + tests/world-graph.test.ts | 152 + vite.config.ts | 1 + 575 files changed, 94314 insertions(+), 348 deletions(-) create mode 100644 public/skills/bg_ama_0.png create mode 100644 public/skills/bg_ama_1.png create mode 100644 public/skills/bg_ama_2.png create mode 100644 public/skills/bg_ass_0.png create mode 100644 public/skills/bg_ass_1.png create mode 100644 public/skills/bg_ass_2.png create mode 100644 public/skills/bg_bar_0.png create mode 100644 public/skills/bg_bar_1.png create mode 100644 public/skills/bg_bar_2.png create mode 100644 public/skills/bg_dru_0.png create mode 100644 public/skills/bg_dru_1.png create mode 100644 public/skills/bg_dru_2.png create mode 100644 public/skills/bg_nec_0.png create mode 100644 public/skills/bg_nec_1.png create mode 100644 public/skills/bg_nec_2.png create mode 100644 public/skills/bg_pal_0.png create mode 100644 public/skills/bg_pal_1.png create mode 100644 public/skills/bg_pal_2.png create mode 100644 public/skills/bg_sor_0.png create mode 100644 public/skills/bg_sor_1.png create mode 100644 public/skills/bg_sor_2.png create mode 100644 public/skills/icon_10.png create mode 100644 public/skills/icon_100.png create mode 100644 public/skills/icon_100_active.png create mode 100644 public/skills/icon_101.png create mode 100644 public/skills/icon_101_active.png create mode 100644 public/skills/icon_102.png create mode 100644 public/skills/icon_102_active.png create mode 100644 public/skills/icon_103.png create mode 100644 public/skills/icon_103_active.png create mode 100644 public/skills/icon_104.png create mode 100644 public/skills/icon_104_active.png create mode 100644 public/skills/icon_105.png create mode 100644 public/skills/icon_105_active.png create mode 100644 public/skills/icon_106.png create mode 100644 public/skills/icon_106_active.png create mode 100644 public/skills/icon_107.png create mode 100644 public/skills/icon_107_active.png create mode 100644 public/skills/icon_108.png create mode 100644 public/skills/icon_108_active.png create mode 100644 public/skills/icon_109.png create mode 100644 public/skills/icon_109_active.png create mode 100644 public/skills/icon_10_active.png create mode 100644 public/skills/icon_11.png create mode 100644 public/skills/icon_110.png create mode 100644 public/skills/icon_110_active.png create mode 100644 public/skills/icon_111.png create mode 100644 public/skills/icon_111_active.png create mode 100644 public/skills/icon_112.png create mode 100644 public/skills/icon_112_active.png create mode 100644 public/skills/icon_113.png create mode 100644 public/skills/icon_113_active.png create mode 100644 public/skills/icon_114.png create mode 100644 public/skills/icon_114_active.png create mode 100644 public/skills/icon_115.png create mode 100644 public/skills/icon_115_active.png create mode 100644 public/skills/icon_116.png create mode 100644 public/skills/icon_116_active.png create mode 100644 public/skills/icon_117.png create mode 100644 public/skills/icon_117_active.png create mode 100644 public/skills/icon_118.png create mode 100644 public/skills/icon_118_active.png create mode 100644 public/skills/icon_119.png create mode 100644 public/skills/icon_119_active.png create mode 100644 public/skills/icon_11_active.png create mode 100644 public/skills/icon_12.png create mode 100644 public/skills/icon_120.png create mode 100644 public/skills/icon_120_active.png create mode 100644 public/skills/icon_121.png create mode 100644 public/skills/icon_121_active.png create mode 100644 public/skills/icon_122.png create mode 100644 public/skills/icon_122_active.png create mode 100644 public/skills/icon_123.png create mode 100644 public/skills/icon_123_active.png create mode 100644 public/skills/icon_124.png create mode 100644 public/skills/icon_124_active.png create mode 100644 public/skills/icon_125.png create mode 100644 public/skills/icon_125_active.png create mode 100644 public/skills/icon_126.png create mode 100644 public/skills/icon_126_active.png create mode 100644 public/skills/icon_127.png create mode 100644 public/skills/icon_127_active.png create mode 100644 public/skills/icon_128.png create mode 100644 public/skills/icon_128_active.png create mode 100644 public/skills/icon_129.png create mode 100644 public/skills/icon_129_active.png create mode 100644 public/skills/icon_12_active.png create mode 100644 public/skills/icon_13.png create mode 100644 public/skills/icon_130.png create mode 100644 public/skills/icon_130_active.png create mode 100644 public/skills/icon_131.png create mode 100644 public/skills/icon_131_active.png create mode 100644 public/skills/icon_132.png create mode 100644 public/skills/icon_132_active.png create mode 100644 public/skills/icon_133.png create mode 100644 public/skills/icon_133_active.png create mode 100644 public/skills/icon_134.png create mode 100644 public/skills/icon_134_active.png create mode 100644 public/skills/icon_135.png create mode 100644 public/skills/icon_135_active.png create mode 100644 public/skills/icon_136.png create mode 100644 public/skills/icon_136_active.png create mode 100644 public/skills/icon_137.png create mode 100644 public/skills/icon_137_active.png create mode 100644 public/skills/icon_138.png create mode 100644 public/skills/icon_138_active.png create mode 100644 public/skills/icon_139.png create mode 100644 public/skills/icon_139_active.png create mode 100644 public/skills/icon_13_active.png create mode 100644 public/skills/icon_14.png create mode 100644 public/skills/icon_140.png create mode 100644 public/skills/icon_140_active.png create mode 100644 public/skills/icon_141.png create mode 100644 public/skills/icon_141_active.png create mode 100644 public/skills/icon_142.png create mode 100644 public/skills/icon_142_active.png create mode 100644 public/skills/icon_143.png create mode 100644 public/skills/icon_143_active.png create mode 100644 public/skills/icon_144.png create mode 100644 public/skills/icon_144_active.png create mode 100644 public/skills/icon_145.png create mode 100644 public/skills/icon_145_active.png create mode 100644 public/skills/icon_146.png create mode 100644 public/skills/icon_146_active.png create mode 100644 public/skills/icon_147.png create mode 100644 public/skills/icon_147_active.png create mode 100644 public/skills/icon_148.png create mode 100644 public/skills/icon_148_active.png create mode 100644 public/skills/icon_149.png create mode 100644 public/skills/icon_149_active.png create mode 100644 public/skills/icon_14_active.png create mode 100644 public/skills/icon_15.png create mode 100644 public/skills/icon_150.png create mode 100644 public/skills/icon_150_active.png create mode 100644 public/skills/icon_151.png create mode 100644 public/skills/icon_151_active.png create mode 100644 public/skills/icon_152.png create mode 100644 public/skills/icon_152_active.png create mode 100644 public/skills/icon_153.png create mode 100644 public/skills/icon_153_active.png create mode 100644 public/skills/icon_154.png create mode 100644 public/skills/icon_154_active.png create mode 100644 public/skills/icon_155.png create mode 100644 public/skills/icon_155_active.png create mode 100644 public/skills/icon_15_active.png create mode 100644 public/skills/icon_16.png create mode 100644 public/skills/icon_16_active.png create mode 100644 public/skills/icon_17.png create mode 100644 public/skills/icon_17_active.png create mode 100644 public/skills/icon_18.png create mode 100644 public/skills/icon_18_active.png create mode 100644 public/skills/icon_19.png create mode 100644 public/skills/icon_19_active.png create mode 100644 public/skills/icon_20.png create mode 100644 public/skills/icon_20_active.png create mode 100644 public/skills/icon_21.png create mode 100644 public/skills/icon_21_active.png create mode 100644 public/skills/icon_22.png create mode 100644 public/skills/icon_221.png create mode 100644 public/skills/icon_221_active.png create mode 100644 public/skills/icon_222.png create mode 100644 public/skills/icon_222_active.png create mode 100644 public/skills/icon_223.png create mode 100644 public/skills/icon_223_active.png create mode 100644 public/skills/icon_224.png create mode 100644 public/skills/icon_224_active.png create mode 100644 public/skills/icon_225.png create mode 100644 public/skills/icon_225_active.png create mode 100644 public/skills/icon_226.png create mode 100644 public/skills/icon_226_active.png create mode 100644 public/skills/icon_227.png create mode 100644 public/skills/icon_227_active.png create mode 100644 public/skills/icon_228.png create mode 100644 public/skills/icon_228_active.png create mode 100644 public/skills/icon_229.png create mode 100644 public/skills/icon_229_active.png create mode 100644 public/skills/icon_22_active.png create mode 100644 public/skills/icon_23.png create mode 100644 public/skills/icon_230.png create mode 100644 public/skills/icon_230_active.png create mode 100644 public/skills/icon_231.png create mode 100644 public/skills/icon_231_active.png create mode 100644 public/skills/icon_232.png create mode 100644 public/skills/icon_232_active.png create mode 100644 public/skills/icon_233.png create mode 100644 public/skills/icon_233_active.png create mode 100644 public/skills/icon_234.png create mode 100644 public/skills/icon_234_active.png create mode 100644 public/skills/icon_235.png create mode 100644 public/skills/icon_235_active.png create mode 100644 public/skills/icon_236.png create mode 100644 public/skills/icon_236_active.png create mode 100644 public/skills/icon_237.png create mode 100644 public/skills/icon_237_active.png create mode 100644 public/skills/icon_238.png create mode 100644 public/skills/icon_238_active.png create mode 100644 public/skills/icon_239.png create mode 100644 public/skills/icon_239_active.png create mode 100644 public/skills/icon_23_active.png create mode 100644 public/skills/icon_24.png create mode 100644 public/skills/icon_240.png create mode 100644 public/skills/icon_240_active.png create mode 100644 public/skills/icon_241.png create mode 100644 public/skills/icon_241_active.png create mode 100644 public/skills/icon_242.png create mode 100644 public/skills/icon_242_active.png create mode 100644 public/skills/icon_243.png create mode 100644 public/skills/icon_243_active.png create mode 100644 public/skills/icon_244.png create mode 100644 public/skills/icon_244_active.png create mode 100644 public/skills/icon_245.png create mode 100644 public/skills/icon_245_active.png create mode 100644 public/skills/icon_246.png create mode 100644 public/skills/icon_246_active.png create mode 100644 public/skills/icon_247.png create mode 100644 public/skills/icon_247_active.png create mode 100644 public/skills/icon_248.png create mode 100644 public/skills/icon_248_active.png create mode 100644 public/skills/icon_249.png create mode 100644 public/skills/icon_249_active.png create mode 100644 public/skills/icon_24_active.png create mode 100644 public/skills/icon_25.png create mode 100644 public/skills/icon_250.png create mode 100644 public/skills/icon_250_active.png create mode 100644 public/skills/icon_251.png create mode 100644 public/skills/icon_251_active.png create mode 100644 public/skills/icon_252.png create mode 100644 public/skills/icon_252_active.png create mode 100644 public/skills/icon_253.png create mode 100644 public/skills/icon_253_active.png create mode 100644 public/skills/icon_254.png create mode 100644 public/skills/icon_254_active.png create mode 100644 public/skills/icon_255.png create mode 100644 public/skills/icon_255_active.png create mode 100644 public/skills/icon_256.png create mode 100644 public/skills/icon_256_active.png create mode 100644 public/skills/icon_257.png create mode 100644 public/skills/icon_257_active.png create mode 100644 public/skills/icon_258.png create mode 100644 public/skills/icon_258_active.png create mode 100644 public/skills/icon_259.png create mode 100644 public/skills/icon_259_active.png create mode 100644 public/skills/icon_25_active.png create mode 100644 public/skills/icon_26.png create mode 100644 public/skills/icon_260.png create mode 100644 public/skills/icon_260_active.png create mode 100644 public/skills/icon_261.png create mode 100644 public/skills/icon_261_active.png create mode 100644 public/skills/icon_262.png create mode 100644 public/skills/icon_262_active.png create mode 100644 public/skills/icon_263.png create mode 100644 public/skills/icon_263_active.png create mode 100644 public/skills/icon_264.png create mode 100644 public/skills/icon_264_active.png create mode 100644 public/skills/icon_265.png create mode 100644 public/skills/icon_265_active.png create mode 100644 public/skills/icon_266.png create mode 100644 public/skills/icon_266_active.png create mode 100644 public/skills/icon_267.png create mode 100644 public/skills/icon_267_active.png create mode 100644 public/skills/icon_268.png create mode 100644 public/skills/icon_268_active.png create mode 100644 public/skills/icon_269.png create mode 100644 public/skills/icon_269_active.png create mode 100644 public/skills/icon_26_active.png create mode 100644 public/skills/icon_27.png create mode 100644 public/skills/icon_270.png create mode 100644 public/skills/icon_270_active.png create mode 100644 public/skills/icon_271.png create mode 100644 public/skills/icon_271_active.png create mode 100644 public/skills/icon_272.png create mode 100644 public/skills/icon_272_active.png create mode 100644 public/skills/icon_273.png create mode 100644 public/skills/icon_273_active.png create mode 100644 public/skills/icon_274.png create mode 100644 public/skills/icon_274_active.png create mode 100644 public/skills/icon_275.png create mode 100644 public/skills/icon_275_active.png create mode 100644 public/skills/icon_276.png create mode 100644 public/skills/icon_276_active.png create mode 100644 public/skills/icon_277.png create mode 100644 public/skills/icon_277_active.png create mode 100644 public/skills/icon_278.png create mode 100644 public/skills/icon_278_active.png create mode 100644 public/skills/icon_279.png create mode 100644 public/skills/icon_279_active.png create mode 100644 public/skills/icon_27_active.png create mode 100644 public/skills/icon_28.png create mode 100644 public/skills/icon_280.png create mode 100644 public/skills/icon_280_active.png create mode 100644 public/skills/icon_28_active.png create mode 100644 public/skills/icon_29.png create mode 100644 public/skills/icon_29_active.png create mode 100644 public/skills/icon_30.png create mode 100644 public/skills/icon_30_active.png create mode 100644 public/skills/icon_31.png create mode 100644 public/skills/icon_31_active.png create mode 100644 public/skills/icon_32.png create mode 100644 public/skills/icon_32_active.png create mode 100644 public/skills/icon_33.png create mode 100644 public/skills/icon_33_active.png create mode 100644 public/skills/icon_34.png create mode 100644 public/skills/icon_34_active.png create mode 100644 public/skills/icon_35.png create mode 100644 public/skills/icon_35_active.png create mode 100644 public/skills/icon_36.png create mode 100644 public/skills/icon_36_active.png create mode 100644 public/skills/icon_37.png create mode 100644 public/skills/icon_37_active.png create mode 100644 public/skills/icon_38.png create mode 100644 public/skills/icon_38_active.png create mode 100644 public/skills/icon_39.png create mode 100644 public/skills/icon_39_active.png create mode 100644 public/skills/icon_40.png create mode 100644 public/skills/icon_40_active.png create mode 100644 public/skills/icon_41.png create mode 100644 public/skills/icon_41_active.png create mode 100644 public/skills/icon_42.png create mode 100644 public/skills/icon_42_active.png create mode 100644 public/skills/icon_43.png create mode 100644 public/skills/icon_43_active.png create mode 100644 public/skills/icon_44.png create mode 100644 public/skills/icon_44_active.png create mode 100644 public/skills/icon_45.png create mode 100644 public/skills/icon_45_active.png create mode 100644 public/skills/icon_46.png create mode 100644 public/skills/icon_46_active.png create mode 100644 public/skills/icon_47.png create mode 100644 public/skills/icon_47_active.png create mode 100644 public/skills/icon_48.png create mode 100644 public/skills/icon_48_active.png create mode 100644 public/skills/icon_49.png create mode 100644 public/skills/icon_49_active.png create mode 100644 public/skills/icon_50.png create mode 100644 public/skills/icon_50_active.png create mode 100644 public/skills/icon_51.png create mode 100644 public/skills/icon_51_active.png create mode 100644 public/skills/icon_52.png create mode 100644 public/skills/icon_52_active.png create mode 100644 public/skills/icon_53.png create mode 100644 public/skills/icon_53_active.png create mode 100644 public/skills/icon_54.png create mode 100644 public/skills/icon_54_active.png create mode 100644 public/skills/icon_55.png create mode 100644 public/skills/icon_55_active.png create mode 100644 public/skills/icon_56.png create mode 100644 public/skills/icon_56_active.png create mode 100644 public/skills/icon_57.png create mode 100644 public/skills/icon_57_active.png create mode 100644 public/skills/icon_58.png create mode 100644 public/skills/icon_58_active.png create mode 100644 public/skills/icon_59.png create mode 100644 public/skills/icon_59_active.png create mode 100644 public/skills/icon_6.png create mode 100644 public/skills/icon_60.png create mode 100644 public/skills/icon_60_active.png create mode 100644 public/skills/icon_61.png create mode 100644 public/skills/icon_61_active.png create mode 100644 public/skills/icon_62.png create mode 100644 public/skills/icon_62_active.png create mode 100644 public/skills/icon_63.png create mode 100644 public/skills/icon_63_active.png create mode 100644 public/skills/icon_64.png create mode 100644 public/skills/icon_64_active.png create mode 100644 public/skills/icon_65.png create mode 100644 public/skills/icon_65_active.png create mode 100644 public/skills/icon_66.png create mode 100644 public/skills/icon_66_active.png create mode 100644 public/skills/icon_67.png create mode 100644 public/skills/icon_67_active.png create mode 100644 public/skills/icon_68.png create mode 100644 public/skills/icon_68_active.png create mode 100644 public/skills/icon_69.png create mode 100644 public/skills/icon_69_active.png create mode 100644 public/skills/icon_6_active.png create mode 100644 public/skills/icon_7.png create mode 100644 public/skills/icon_70.png create mode 100644 public/skills/icon_70_active.png create mode 100644 public/skills/icon_71.png create mode 100644 public/skills/icon_71_active.png create mode 100644 public/skills/icon_72.png create mode 100644 public/skills/icon_72_active.png create mode 100644 public/skills/icon_73.png create mode 100644 public/skills/icon_73_active.png create mode 100644 public/skills/icon_74.png create mode 100644 public/skills/icon_74_active.png create mode 100644 public/skills/icon_75.png create mode 100644 public/skills/icon_75_active.png create mode 100644 public/skills/icon_76.png create mode 100644 public/skills/icon_76_active.png create mode 100644 public/skills/icon_77.png create mode 100644 public/skills/icon_77_active.png create mode 100644 public/skills/icon_78.png create mode 100644 public/skills/icon_78_active.png create mode 100644 public/skills/icon_79.png create mode 100644 public/skills/icon_79_active.png create mode 100644 public/skills/icon_7_active.png create mode 100644 public/skills/icon_8.png create mode 100644 public/skills/icon_80.png create mode 100644 public/skills/icon_80_active.png create mode 100644 public/skills/icon_81.png create mode 100644 public/skills/icon_81_active.png create mode 100644 public/skills/icon_82.png create mode 100644 public/skills/icon_82_active.png create mode 100644 public/skills/icon_83.png create mode 100644 public/skills/icon_83_active.png create mode 100644 public/skills/icon_84.png create mode 100644 public/skills/icon_84_active.png create mode 100644 public/skills/icon_85.png create mode 100644 public/skills/icon_85_active.png create mode 100644 public/skills/icon_86.png create mode 100644 public/skills/icon_86_active.png create mode 100644 public/skills/icon_87.png create mode 100644 public/skills/icon_87_active.png create mode 100644 public/skills/icon_88.png create mode 100644 public/skills/icon_88_active.png create mode 100644 public/skills/icon_89.png create mode 100644 public/skills/icon_89_active.png create mode 100644 public/skills/icon_8_active.png create mode 100644 public/skills/icon_9.png create mode 100644 public/skills/icon_90.png create mode 100644 public/skills/icon_90_active.png create mode 100644 public/skills/icon_91.png create mode 100644 public/skills/icon_91_active.png create mode 100644 public/skills/icon_92.png create mode 100644 public/skills/icon_92_active.png create mode 100644 public/skills/icon_93.png create mode 100644 public/skills/icon_93_active.png create mode 100644 public/skills/icon_94.png create mode 100644 public/skills/icon_94_active.png create mode 100644 public/skills/icon_95.png create mode 100644 public/skills/icon_95_active.png create mode 100644 public/skills/icon_96.png create mode 100644 public/skills/icon_96_active.png create mode 100644 public/skills/icon_97.png create mode 100644 public/skills/icon_97_active.png create mode 100644 public/skills/icon_98.png create mode 100644 public/skills/icon_98_active.png create mode 100644 public/skills/icon_99.png create mode 100644 public/skills/icon_99_active.png create mode 100644 public/skills/icon_9_active.png create mode 100644 public/ui/border-left.png create mode 100644 public/ui/border-right.png create mode 100644 public/ui/buysellbtn.png create mode 100644 public/ui/char-sheet.png create mode 100644 public/ui/ctrlpnl-800.png create mode 100644 public/ui/cube-bg.png create mode 100644 public/ui/cursor-hand.png create mode 100644 public/ui/fonts/font16.png create mode 100644 public/ui/fonts/font30.png create mode 100644 public/ui/fonts/font6.png create mode 100644 public/ui/fonts/font8.png create mode 100644 public/ui/fonts/fontexocet10.png create mode 100644 public/ui/fonts/fontformal12.png create mode 100644 public/ui/fonts/metrics.json create mode 100644 public/ui/generic-skills.png create mode 100644 public/ui/globe-life.png create mode 100644 public/ui/globe-mana.png create mode 100644 public/ui/globe-poison.png create mode 100644 public/ui/inv-sheet.png create mode 100644 public/ui/inv-tab-0.png create mode 100644 public/ui/inv-tab-1.png create mode 100644 public/ui/items-atlas.png create mode 120000 public/ui/items_atlas.png create mode 100644 public/ui/level-btn.png create mode 100644 public/ui/level-socket.png create mode 100644 public/ui/manifest.json create mode 100644 public/ui/menubutton.png create mode 100644 public/ui/minipanel-btns.png create mode 100644 public/ui/minipanel.png create mode 100644 public/ui/overlap-left.png create mode 100644 public/ui/overlap-right.png create mode 100644 public/ui/popbelt.png create mode 100644 public/ui/quest-bg.png create mode 100644 public/ui/quest-tabs.png create mode 100644 public/ui/quests-atlas.png create mode 100644 public/ui/runbutton.png create mode 100644 public/ui/skillpoints.png create mode 100644 public/ui/stash-bg.png create mode 100644 public/ui/vendor-bg.png create mode 100644 public/ui/waypoint-bg.png create mode 100644 public/ui/waypoint-icons.png create mode 100644 public/ui/waypoint-tabs.png create mode 100644 scripts/audit-skills-browser.ts create mode 100644 scripts/build-skill-catalog.ts create mode 100644 scripts/build-skill-tree.ts create mode 100644 scripts/forensic-audit-m3.ts create mode 100644 scripts/generate-skill-tree-ts.ts create mode 100644 scripts/generate_gems_data.ts create mode 100644 scripts/pack-skill-assets.ts create mode 100644 scripts/pack-ui-assets.ts create mode 100644 scripts/pack-ui.ts create mode 100644 scripts/scratch-audit-dt1-inventory.ts create mode 100644 scripts/stress-barricade-extent.ts create mode 100644 scripts/stress-test-m1-seeds.ts create mode 100644 scripts/stress-test-m2-connectivity.ts create mode 100644 scripts/stress-test-m2-geometry.ts create mode 100644 scripts/stress-test-m3-adversarial.ts create mode 100644 scripts/stress-world-placement.ts create mode 100644 scripts/verify-challenger-m1-2.ts create mode 100644 scripts/verify-challenger-m1-tooltip.ts create mode 100644 scripts/verify-challenger-m1.ts create mode 100644 scripts/verify-challenger-m2-tooltip.ts create mode 100644 scripts/verify-challenger-m3-tooltip.ts create mode 100644 scripts/verify-challenger-m3-world-placement.ts create mode 100644 scripts/verify-challenger-m3.ts create mode 100644 scripts/verify-stress-m1.ts create mode 100644 scripts/verify-tooltip-browser.ts create mode 100644 scripts/verify-tooltip-empirical.ts create mode 100644 scripts/verify-ui-browser.ts create mode 100644 skills.html create mode 100644 src/data/skills-catalog.ts create mode 100644 src/game/classes.ts create mode 100644 src/game/gems-data.ts create mode 100644 src/game/skill-calc-engine.ts create mode 100644 src/game/skill-tree.ts create mode 100644 src/game/world-placement.ts create mode 100644 src/skills.ts create mode 100644 src/ui/baked-ui-meta.ts create mode 100644 src/ui/belt.ts create mode 100644 src/ui/character-sheet.ts create mode 100644 src/ui/control-bar.ts create mode 100644 src/ui/font.ts create mode 100644 src/ui/globes.ts create mode 100644 src/ui/hotkeys.ts create mode 100644 src/ui/hud-manager.ts create mode 100644 src/ui/inventory.ts create mode 100644 src/ui/skill-tree-panel.ts create mode 100644 src/ui/world-panels.ts create mode 100644 tests/adversarial-world-placement-m3-gen2.test.ts create mode 100644 tests/challenger-m2-stress.test.ts create mode 100644 tests/challenger-m3-tooltip-stress.test.ts create mode 100644 tests/classes.test.ts create mode 100644 tests/e2e-m11-adversarial.test.ts create mode 100644 tests/e2e-m11-skills.test.ts create mode 100644 tests/gems-runes-parity.test.ts create mode 100644 tests/input-controls.test.ts create mode 100644 tests/item-tooltip-color-dye.test.ts create mode 100644 tests/skill-calc-engine.test.ts create mode 100644 tests/skill-tree-stress.test.ts create mode 100644 tests/skill-tree.test.ts create mode 100644 tests/skills-batch1.test.ts create mode 100644 tests/skills-combat-stress.test.ts create mode 100644 tests/skills-stress.test.ts create mode 100644 tests/stress-world-placement.test.ts create mode 100644 tests/synergy-stress.test.ts create mode 100644 tests/ui-hud.test.ts create mode 100644 tests/wilderness-barricade-stress.test.ts create mode 100644 tests/wilderness-seed-sensitivity.test.ts diff --git a/.gitignore b/.gitignore index b2c7ecc..de97058 100644 --- a/.gitignore +++ b/.gitignore @@ -23,11 +23,22 @@ samples/* reference/ Diablo II*/ -# 临时调试产物 +# 临时调试产物与测试截图 .tmp/ scratch/ __pycache__/ .DS_Store +.agents/ +tests/*.png +*audit*.png +public/*audit*.png +public/ui/*audit*.png +BRIEFING.md +ORIGINAL_REQUEST.md +PROJECT.md +TEST_INFRA.md +TEST_READY.md # 覆盖率报告由 `npm run test:coverage` 生成,可随时重建 coverage/ + diff --git a/acts.html b/acts.html index 0a54457..c928151 100644 --- a/acts.html +++ b/acts.html @@ -18,16 +18,17 @@ h1 { font-size: 13px; margin: 0; color: #c8a15a; letter-spacing: .06em; } a { color: #c8a15a; } #hud { color: #9c8d78; } - #controls { left: 12px; bottom: 12px; padding: 8px 12px; display: flex; gap: 12px; - align-items: center; flex-wrap: wrap; max-width: calc(100vw - 24px); } + /* 状态与地图选择控件紧凑停靠在顶部,把屏幕底部完整让给暗黑2原版 800CtrlPnl7 控制栏与血蓝球 */ + #controls { top: 4px; right: 12px; padding: 3px 8px; display: flex; gap: 8px; + align-items: center; flex-wrap: wrap; max-width: 72vw; font-size: 12px; z-index: 4; } #controls label { color: #9c8d78; } select { background: #1c1813; color: #e8dcc8; border: 1px solid #33291f; - border-radius: 4px; padding: 3px 6px; font: inherit; max-width: 28vw; } + border-radius: 4px; padding: 2px 5px; font: inherit; max-width: 22vw; } optgroup { background: #1c1813; color: #c8a15a; } option { background: #1c1813; } - /* 状态面板放在控件行上方:贴在右下角会压住"细分场景"那个下拉框 */ - #status { right: 12px; bottom: 58px; padding: 6px 10px; max-width: 60vw; color: #9c8d78; } - #dialog { right: 12px; top: 36px; padding: 8px 12px; min-width: 240px; color: #e8dcc8; white-space: pre-wrap; font-size: 14px; background: rgba(30, 26, 21, .9); border-color: #c8a15a; } + #status { left: 12px; top: 34px; padding: 3px 8px; max-width: 55vw; color: #9c8d78; font-size: 11px; opacity: 0.85; pointer-events: none; z-index: 3; } + #dialog { right: 12px; top: 42px; padding: 8px 12px; min-width: 240px; color: #e8dcc8; white-space: pre-wrap; font-size: 14px; background: rgba(30, 26, 21, .9); border-color: #c8a15a; z-index: 5; } + #d2-hud-canvas { position: fixed; inset: 0; width: 100%; height: 100%; display: block; z-index: 6; pointer-events: none; image-rendering: pixelated; } .hint { color: #6d5a34; } @@ -46,12 +47,13 @@ - WASD / 方向键移动 · 滚轮或 +/− 缩放 · 三个下拉框都会换图并更新地址栏 + I背包 · A角色 · T技能 · Q任务 · V小站 · ~腰带 · R奔跑 · W换手
- + +