Huangkaoya
898d891885
Revise LICENSE to reflect copyright holder's terms
...
Updated license information to clarify copyright and licensing terms for Chrono Divide-derived material.
2026-09-03 23:10:25 +08:00
Huangkaoya
8c07f1092b
Merge pull request #51 from Hertaspace/fix/airborne-bridge-render-and-leftclick-move
...
修复飞行单位飞过高桥被遮挡 + 沙盒改回左键移动
2026-06-23 08:27:56 +08:00
Hertaspace
f814bbfd60
修复飞行单位飞过高桥被遮挡 + 沙盒改回左键移动
...
- 飞行单位(jumpjet 火箭飞行兵、飞机等,airborne 时 zone=Air)飞过高桥时
现在渲染在桥面之上,不再被桥面盖住(之前 renderOrder=0 排在高桥的 1 之下,
看起来像钻到桥下面去了)。Infantry 与 Vehicle 同修。
- 场景沙盒改回 RA2 风格:左键移动、右键拖动卷动地图(之前被强制成右键移动)。
放置模式下世界交互本就被禁用,左键放置不冲突。
2026-06-14 13:16:25 +08:00
Huangkaoya
1c620c1984
Merge pull request #50 from Hertaspace/feat/bridge-movement-and-scene-sandbox
...
新增场景沙盒 + 修复桥梁通行(陆/海/坦克)
2026-06-14 12:14:12 +08:00
Hertaspace
e3d9bdac6d
新增场景沙盒(Scene Sandbox)测试工具
...
在真实官方地图上手动测试单位交互(含桥梁移动/登载)的开发工具。
- src/tools/SceneSandboxTester.ts:载入官方地图后可手动放置任意
载具/船只/步兵/飞行器/建筑/超级武器,设置归属、老兵等级、血量、数量;
支持进入放置模式、拆除建筑、触发超级武器、调节游戏速度、回到基地视角、
快捷键下达停止/警戒/部署/散开等命令。
- Application.ts:注册 /scenesandbox 路由(优先载入 mp18s3,回退 mp03t4)。
- TestEntryScreen.ts:测试入口新增“场景沙盒”按钮。
依赖本 PR 的桥梁通行改动(Target.usesGroundLayerUnderBridge 等)。
2026-06-13 22:13:40 +08:00
Hertaspace
b2f8353551
修复桥梁通行:陆军上桥、海军桥下、运输艇跨层登载
...
- 陆军/地面单位现在能正确移动到高桥与低桥的桥面。根因是 OrderUnitsAction
重建移动目标时把桥对象当成了 target.obj,导致单位 tick 时 MoveOrder.isValid()
把它当作“不可移动的覆盖物”而静默丢弃整条移动指令;改为只传位置、用
TargetBridgeMode.Bridge 通过格子重新挂桥(move/scatter 两处)。
- 海军单位点击桥下时驶向桥“正下方”的水面:DefaultActionHandler 对走水层的
单位改用桥面格自身坐标的地面层,而非抬高桥面在 z=0 的屏幕投影(后者会偏到
岸边不可通行,导致船被推到桥两侧)。
- MovePositionHelper 让能钻桥洞的海军单位(!TooBigToFitUnderBridge)停在桥正
下方;大型军舰仍走桥两侧(符合原版 TooBigToFitUnderBridge),且不再先钻进去
再被弹出。
- 修复跨层登载:站在桥面上的单位不能直接登载正下方水里的运输艇
(EnterTransportTask 的到位判定与 EnterTransportOrder.isAllowed 增加同层校验)。
- 高桥边缘/护栏一侧的桥面拾取:MapHoverHandler 拾取半径与按桥面高度的多档采样,
消除点不到桥边的死区。
- 配套:Target 桥模式(Auto/Ground/Bridge)、桥上单位渲染层级、MoveTask 与
寻路对水层/桥层的处理、桥相关攻击/守卫/散开/进入指令的目标推导。
2026-06-13 22:13:40 +08:00
Huangkaoya
05433ac810
Merge pull request #49 from igofreely/main
...
fix:修复Bot沙箱类型剥离正则误匹配三元表达式的问题
2026-04-15 20:54:20 +08:00
igofreely
d4029e38d5
修复Bot沙箱类型剥离正则误匹配三元表达式的问题
...
BotSandbox.stripTypes() 中的返回类型注解正则 /\)\s*:\s*[...]+(?=\s*[{;])/ 会
错误地将三元表达式 fn() : { ... } 中的冒号识别为类型注解,导致代码被破坏,
上传的Bot无法加载(报 SyntaxError)。
修复方案:将返回类型正则锚定到 function 关键字和箭头函数签名,避免误匹配
普通的三元运算符表达式。
同时包含:Bot注册持久化、大厅界面及玩家工厂等相关改动。
2026-04-13 10:38:54 +08:00
Huangkaoya
dcb381d97f
Merge pull request #48 from igofreely/main
...
fix: 单位升级、间谍渗透、心灵探测、铁幕坦克效果 veteran XP, spy infiltration, psychic sensor, iron curtain effects
2026-04-12 21:12:20 +08:00
igofreely
924e97c027
fix: veteran XP, spy infiltration, psychic sensor, iron curtain effects
...
- VeteranTrait: use symbol-keyed [NotifyTargetDestroy.onDestroy]() and fix inverted condition for XP gain
- AgentTrait: fix spy stolen tech only granted when infiltrating battle labs
- PsychicDetectorTrait: check enemy unit position instead of attack target position for range
- PsychicDetectPlugin: support both BoxedVar and raw Player for localPlayer
- Aircraft/Vehicle: update iron curtain light continuously while invulnerable
- ExtraLightHelper: use multiplicative formula for VXL iron curtain darkening
2026-04-12 13:27:55 +08:00
huangkaoya
f3c35c75e1
feat: 弹幕红警
2026-04-09 21:50:01 +08:00
huangkaoya
e6a32f3e76
feat: 性能优化
2026-04-06 08:07:27 +08:00
Huangkaoya
4b4f012b7a
Merge pull request #47 from igofreely/main
...
fix: resolve all TypeScript type-checking errors 修复类型错误,bun run typecheck:entry无报错
2026-04-02 13:00:14 +08:00
igofreely
81c90b43b5
fix: correct HTTPS cert loading, remove stale test import, fix replay timestamp overflow
2026-04-01 18:41:29 +08:00
igofreely
a5e2226ee4
fix: resolve all TypeScript type-checking errors
...
- Add index signatures to dynamic-property classes (GameObject, Techno, World, Renderable, etc.)
- Create module stubs for missing type imports (FileSystem, Camera, Bridge, etc.)
- Fix constructor parameter optionality for 11 constructors/methods
- Add 'as any' casts for cross-module type mismatches
- Change access modifiers (private→public) where needed for trait access
- Fix Task subclass property declarations (remove private re-declarations)
- Widen API return types for bot compatibility
- Disable noFallthroughCasesInSwitch in tsconfig.build.json
- Replace deprecated PlaneBufferGeometry with PlaneGeometry
No game logic changes. No code deleted.
2026-04-01 17:00:42 +08:00
huangkaoya
4fb0d428d1
feat: mdns检测
2026-03-29 13:11:30 +08:00
huangkaoya
3a61622669
feat: 完善局域网联机
2026-03-29 12:50:40 +08:00
huangkaoya
5a0fd867bb
feat: 局域网联机
2026-03-29 08:31:11 +08:00
Huangkaoya
d8d3182424
Merge pull request #44 from igofreely/main
...
feat: 添加第三方AI机器人系统、自定义AI难度和观察者模式
2026-03-27 23:28:52 +08:00
igofreely
9802e277ef
feat: 多项改进 - 观察者选队、AI界面风格、局域网HTTPS、移动端适配
...
- 将观察者选择放入队伍选择下拉框中
- AI机器人上传界面改为红底黄字游戏风格
- 开发服务器改为局域网IP(0.0.0.0)并启用HTTPS
- 修复移动端全屏时画面过大界面显示不完整的问题
- 修复移动端触摸坐标双重转换导致触摸无效的问题
- 添加移动端透明左键/右键切换按钮(桌面端隐藏)
2026-03-27 23:13:20 +08:00
igofreely
68c7db0273
refactor: rename supalosa to builtIn
2026-03-27 21:11:38 +08:00
igofreely
89918bd01a
fix: 修复全屏分辨率不生效问题
...
- isMobileLayout() 仅使用 (pointer:coarse) 媒体查询,避免触屏笔记本误判为移动端
- computeViewportSize 全屏模式始终使用完整屏幕分辨率
- 新增 isNativeFullScreen() 检测 F11 浏览器原生全屏
- HudFactory 新增 setViewport() 确保 HUD 重建时使用最新视口尺寸
- GameScreen/ReplayScreen 视口变化时同步更新 WorldView
2026-03-27 20:35:56 +08:00
igofreely
cbef0032bb
feat: use localized names in replay stats overlay
...
Replace internal code names (e.g. HTNK, GAPOWR) with localized
display names in the ReplayStatsOverlay production queue section.
Uses strings.get(uiName) with fallback to rules.name.
2026-03-27 19:41:02 +08:00
igofreely
bd4e3c8fa6
feat: 录像播放时显示玩家统计信息面板
...
在录像/观察者模式下,屏幕左上角显示半透明浮层,包含每位玩家的:
- 玩家名称(使用玩家颜色标识,带彩色下划线)
- 资源数量(金币 + 电力状态,低电力红色警告)
- 部队数量统计(建筑/步兵/载具/空军 + 总计)
- 建造队列(当前建造项目 + 进度条 + 暂停/就绪状态)
- 超级武器倒计时(充能进度条 + 就绪时闪烁警告)
设计要点:
- 半透明黑色背景,不遮挡游戏画面
- 多玩家自动分列显示,紧凑布局
- 仅在录像/观察者模式显示(localPlayer为空时)
- 5fps刷新率,低性能开销
- 跟随HUD侧边栏菜单同步显示/隐藏
2026-03-27 19:30:55 +08:00
igofreely
df6e7eac11
fix: 修复AI建筑放置被挡住时重新寻找位置 + 让部队持续进攻
...
1. 建筑放置重试(queueController.ts):
- 放置前先用canPlaceBuilding检查目标位置是否可用
- 位置无效时不再盲目调用placeBuilding浪费tick
- 失败3次后自动在基地车附近搜索替代位置(getDefaultPlacementLocation)
- 失败10次后取消建筑以解除队列阻塞
2. 持续进攻(attackMission.ts):
- 攻击冷却从120tick减至60tick(约4秒)
- 基地攻击冷却从1800tick减至600tick(约40秒)
- 编队集结等待从240tick减至120tick
- 无目标重定向从450tick减至300tick
- 无目标解散从900tick减至600tick
- 允许同时准备2支进攻部队(之前只允许1支)
3. 编队最低人数降低(defaultStrategy.ts):
- 步兵: 5→3 坦克: 4→2 火箭飞行兵: 3→2
- 重型坦克: 3→2 火炮: 4→3
- 让AI更早发起进攻,不再等太多单位
2026-03-27 19:17:48 +08:00
igofreely
4b160eb3d6
fix: 修复AI基地车被阻挡时无法重新寻找展开位置
...
问题:MCV部署失败(位置被挡住)时,AI会无限循环尝试在同一位置
DeploySelected,不会主动寻找新的可展开位置。
修复(三处):
1. ExpansionMission.moveMcvToDestination:
- 添加deployAttempts计数器(最多8次)
- 部署失败后用findDeployableLocations找附近可展开位置
- 更新destination到新位置并移动MCV过去
- 超过最大次数scatter后重置
2. SupalosaBotAdapter fail-safe:
- 添加failSafeDeployAttempts计数(最多5次)
- 超过后用canPlaceBuilding扫描周围10格找可展开位置
- 找到后Move过去,找不到scatter重置
3. SupalosaBot.tryInitialMcvDeploy:
- 添加deployAttemptCount计数(最多5次)
- 超过后同样扫描找可展开位置并Move
- conyard建立后重置计数
2026-03-27 18:57:58 +08:00
igofreely
47f2e7d0df
fix: GatherOrder.isValid添加target空检查
...
bot调用orderUnits([id], OrderType.Gather)不传目标坐标时,
this.target为undefined导致读取.tile崩溃。添加空检查返回false。
2026-03-27 18:47:36 +08:00
igofreely
5ea75036ae
chore: 添加_temp_supalosa到.gitignore
2026-03-27 18:41:37 +08:00
igofreely
8e4c8b1a04
feat: 优化AI建筑摆放间距,防止堵塞单位移动
...
建筑摆放更分散:
- minimumSpace默认值从1增加到2,建筑间保留更多空间
- BasicBuilding/PowerPlant/ResourceCollectionBuilding显式使用minSpace=2
- getDefaultPlacementLocation新增拥挤度评分: 不再只选最近距离的格子,
而是综合考虑距离和周围建筑密度,避免密集摆放堵塞通道
- SupalosaBotAdapter失败安全扫描起始半径从2增到3、最大半径从12增到15
- 示例bot建筑放置起始半径从0增到2,扫描范围从15扩到18
拥挤度算法:对每个候选格子统计3格内的建筑数量,越密集罚分越高,
使建筑自然分散到更宽阔的位置,为单位和MCV留出通行空间
2026-03-27 18:41:23 +08:00
igofreely
a327fe8f7b
fix: MCV部署命令改用DeploySelected
...
Deploy(9)是targeted命令需要目标参数,DeploySelected(10)为untargeted无需目标。
所有能工作的bot(DummyBot/SupalosaBotAdapter/supalosa)都使用DeploySelected。
2026-03-27 18:31:14 +08:00
igofreely
b8a65778a5
fix: 修复示例机器人API属性使用错误
...
- MCV检测: r.name === 'MCV' -> !!r.deploysInto (RA2中MCV名称为AMCV/SMCV)
- 战斗单位过滤: r.weapons不存在于rules对象 -> !!r.primary
- 采矿车检测: 硬编码名称 -> !!r.harvester
这些bug导致上传的示例机器人完全无法工作(MCV不部署→无建造场→无法建造/生产)
2026-03-27 18:22:04 +08:00
igofreely
01adf4c7ec
feat: 添加第三方AI机器人系统、自定义AI难度和观察者模式
...
主要新增功能:
1. 第三方AI机器人系统 (src/game/ai/thirdpartbot/)
- BotRegistry: 单例注册表,管理上传的自定义机器人
- BotSandbox: TypeScript类型剥离、源码验证、沙盒化加载(new Function)
- BotUploader: ZIP文件提取(中央目录解析)、入口点检测(.ts)
- ThirdPartyBotAdapter: 将第三方接口适配为游戏Bot类
- ThirdPartyBotInterface: 第三方机器人接口和元数据类型定义
2. 示例机器人 (src/game/ai/thirdpartbot/example/)
- bot.ts: JavaScript兼容的TypeScript示例,包含建造顺序、单位生产、攻击逻辑
- README.md: 开发文档
3. Supalosa机器人集成 (src/game/ai/thirdpartbot/supalosa/)
- 完整的AI机器人实现,包含40+源文件
- 支持区域感知、威胁评估、任务控制、战术编队等高级AI功能
4. 机器人上传UI (src/gui/component/BotUploadDialog.tsx)
- React对话框组件,支持ZIP文件上传
- 大厅界面集成上传按钮
5. 自定义AI难度 (Custom = 5)
- GameOpts.ts: AiDifficulty枚举新增Custom值
- BotFactory.ts: Custom难度映射到ThirdPartyBotAdapter
- constants.ts: 添加Custom的UI显示名称和提示
6. 观察者模式支持
- SkirmishScreen.ts: 观察者槽位逻辑(maxSlots+1)
修改的文件:
- BotManager.ts: 增强初始化日志和错误处理
- ActionsApi.ts: normalizeObjectArgs参数顺序兼容
- GameApi.ts: canPlaceBuilding支持双参数顺序、API重构
- MapApi.ts: 新增地图API方法
- Bot.ts: 添加setLogger、setDebugMode、logger属性
- GameObjectData/PlayerData/UnitData接口: 扩展属性
- main-legacy.css: 机器人上传对话框样式(+195行)
- en-US.json/zh-CN.json: 添加机器人上传和自定义AI相关本地化字符串
- .gitignore: 排除临时测试文件
Bug修复:
- 修复stripTypes正则破坏对象字面量和三元运算符的问题
- 修复ZIP提取因数据描述符导致文件大小为零的问题
- 修复startLocation格式不匹配(Vector2 x/y vs tile rx/ry)
- 修复power.output -> power.total API属性名不匹配
2026-03-27 16:06:05 +08:00
Huangkaoya
409960ff62
Merge pull request #42 from artshooter/fix/score-screen-time
...
fix: 修复结算页面时间显示不正确的问题
2026-03-26 15:07:48 +08:00
Artshooter
152de7b7ad
fix: 修复结算页面时间显示不正确的问题
...
结算页面显示的时间是游戏逻辑时间(受游戏速度缩放),而非真实墙钟时间。
默认速度6对应4倍速,导致实际30秒的游戏显示为约2分钟。
修复方式:将游戏逻辑时间除以速度倍数还原为真实时间。
同时补上了缺失的 score-header(地图名 + 时间),CSS样式已存在。
修复 formatTimeDuration 中浮点数精度问题。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-25 22:10:16 +08:00
Huangkaoya
441208dad4
Merge pull request #37 from Hertaspace/fix/overlay-bridge-render-order
...
fix: 修复矿石/桥覆盖地面单位的渲染层级及桥面点击通行问题
2026-03-25 16:45:59 +08:00
Huangkaoya
f5f42a991c
Merge pull request #41 from igofreely/main
...
修复4个游戏机制的bug,附演示视频
2026-03-25 16:39:50 +08:00
igofreely
8f1d6e5fb6
移除路径循环的修改
2026-03-25 16:38:39 +08:00
Huangkaoya
af4af84885
Merge pull request #40 from tpoisonooo/fix-name-upper-in-linux
...
fix(src): fix name upper problem in linux docker
2026-03-25 16:22:59 +08:00
igofreely
fb5c59bed3
修复
...
光棱塔串联不应该有友军伤害,而是加强攻击力
工程师在执行占领任务时,再次命令工程师占领、停止或警戒,工程师就会停在原地无法移动
尤里心灵冲击波对载具不应有伤害 对狗应该有伤害
设置路径时,第4个路径点和初始路径点无法形成路径循环
2026-03-25 16:16:09 +08:00
tpoisonooo
a4be824a1c
fix(src): fix name upper problem in linux docker
2026-03-25 15:46:50 +08:00
Huangkaoya
6f323b4b90
Merge pull request #36 from igofreely/main
...
给游戏加了录像回放的功能,测试已通过
2026-03-25 13:37:53 +08:00
yaoling123
b86a539935
fix: 修复矿石/桥覆盖地面单位的渲染层级问题及桥面点击通行问题
...
1. 矿石/弹坑覆盖单位:通过分层渲染解决
- 地形 tile 设置 renderOrder=-2 优先渲染并写入深度
- overlay/smudge 批处理层设置 renderOrder=-1,禁用深度测试和写入
- 单位保持 renderOrder=0,仅与地形做深度比较
2. 桥覆盖单位:桥的 sprite mesh 同样设置 renderOrder=-1
并禁用深度测试/写入,确保单位始终显示在桥面上方
3. 桥面点击无法通行:当点击位置未命中桥实体时,
检查 tile 的 onBridgeLandType 自动识别桥,
确保移动命令使用桥层级而非水面层级
2026-03-24 10:52:43 +08:00
igofreely
65d1c6df24
修复游戏录像持久化问题
2026-03-24 10:49:08 +08:00
igofreely
72d1dad5d1
录像回放完成不走遭遇战结算页面而是停在画面最后一帧
2026-03-24 08:39:21 +08:00
igofreely
6ed0189763
录像回放功能添加的文件
2026-03-23 17:16:31 +08:00
igofreely
0714fbcb91
Merge branch 'main' of https://github.com/igofreely/redalert2
2026-03-23 17:13:38 +08:00
igofreely
3bcf41bd6f
给游戏加了录像回放的功能,测试已通过
2026-03-23 17:13:26 +08:00
Huangkaoya
11e58b3e89
Update README.md
2026-03-23 14:05:27 +08:00
Huangkaoya
2498c3c4ed
Merge pull request #35 from igofreely/main
...
fix: 修复警犬和恐怖机器人对步兵单位不是秒杀的bug
2026-03-23 14:02:49 +08:00
igofreely
e0aa48cfa7
修复警犬和恐怖机器人对步兵单位不是秒杀的bug
2026-03-23 13:51:57 +08:00