找回密码
 点一下
查看: 9353|回复: 85

于是发布更无聊的 StarLauncher 山寨版一枚. 支持AI选择,不修改地图文件. 更新至 1.34d

[复制链接]
发表于 2010-3-10 13:51:58 | 显示全部楼层 |阅读模式
SC2Launcher134c.jpg   

转载请注明 StartLauncher 原版(v0.10-v0.41)作者 ESPER_PALE,修改版(v1.00以上)作者 et2010

已知问题:
1.部分地图无法加载 AI,如 Blistering Sands 和 Scrap Station,正在测试。
2.某些情况下观看录像时游戏会显示“战斗录像不同步”,可能的原因有:
  观看录像时选择的 AI 与对战当时选择的 AI 不同
  观看录像时选择的组队或同盟选项与对战当时的选择不同


v1.34d
重新编译,修正因缺少 MSVCR90.dll 而无法启动的问题

v1.34c
修正选择地图时,同盟选项未正确载入的问题
修正缩略图起始位置标注

v1.34b
修正选择地图时,地图设置未正确载入的问题
修正起始位置选择无效的问题
选择地图时,将在缩略图上标出起始位置编号 (位置尚不准确)
选择录像时允许设置队伍和同盟选项 (AI、队伍和同盟设置正确时,部分原本不能观看的录像可能可以观看)
日志文件从 游戏根目录\Support\SC2Ext.log 移至 载入器所在位置\SC2Launcher.log (旧日志文件可以删除)

v1.34a
修正在 XP 系统下弹出错误提示,无法启动程序的问题

v1.34
界面布局更新,增加预览窗格 (显示地图/录像缩略图、地图大小、地形)
增加玩家起始位置选择 (测试中,似乎无效)
增加游戏版本选择
地图设置将按照地图文件名分别保存 (包括玩家设置、同盟选项、AI)
移除了颜色旁边的文字 (随机只显示文字,其他颜色只显示色块)
移除了选择录像后找不到对应地图文件时的提示

v1.33
程序图标更新,增加 32 位色图标
根据地图支持的玩家数量,自动隐藏多余的玩家位置
增加同盟控制的选项 (允许玩家控制同盟的电脑,但不允许电脑控制同盟的玩家或其他电脑)
选择地图时会根据地图文件名,自动选择上一次使用的 AI
选择录像时会根据录像所对应的地图文件名,自动选择上一次使用的 AI
选择录像时会在界面上显示玩家类型、种族、颜色,但队伍无法显示   
SC2Ext.dll 更名为 SC2Launcher.dll

v1.32
修正打开载入器后,不选择任何地图而直接载入录像,会显示“战斗录像不同步”的问题

v1.31
修正 AI 不正常工作的问题
显示 FPS 和同盟共享资源选项设置将会保存

v1.30
界面更新,完全汉化。
取消浏览文件的打开方式,改为文件列表。
地图/录像/AI 的位置可以自定义。
游戏设置会自动保存到 SC2Launcher.ini 中。

v1.20
增加了选择AI支持,依然不修改地图文件。请参考以下结构建立相应文件夹:
StarCraft II Beta\Mods\AI\AI名称1\TriggerLibs
StarCraft II Beta\Mods\AI\AI名称2\TriggerLibs
...
StarCraft II Beta\Mods\AI\AI名称N\TriggerLibs

注:Base.SC2Data 文件方式的 AI 暂不支持。

v1.11
增加了同盟共享资源的选项
增加简体中文界面 (下拉框内容尚未汉化)

v1.10
改为使用注入 DLL 的方式实现选择队伍、玩家类型、种族、颜色
不再修改原始地图,所有设置均动态生效
增加了打开录像文件的功能,直接用载入器打开 SC2Replay 文件即可
为了正常观看录像,地图文件仍将复制到以下位置,但不再改名(地图文件已经存在则不复制):
X:\Users\用户名\Local Settings\Application Data\Blizzard Entertainment\Battle.net\Cache\Download

v1.02
修正了重新开始游戏时导致异常退出的问题 (PlayerGetAlliance 调用代码不再恢复,所以 AI 中的 PlayerGetAlliance 将不能正常工作)
修正了 CODE_OFFSET_2 偏移量错误的问题

v1.01
修正 patch code,修正观看 replay 时显示“战斗录像不同步”的问题

v1.00
基于 ESPER_PALE 大大的 Star Launcher 0.41 做的修改版,为了区别于 ESPER_PALE 大大的版本,本修改版版本从 1.00 开始

主要修改内容:


1. 打开地图时自动读取并显示 MapInfo 中的玩家设置(类型、种族、颜色),组队信息暂时不能读取,打开地图后需要手动设置

2. 载入游戏时,会将地图文件复制到以下位置并改名为 <原地图文件名>.CRC.s2ma:
X:\Users\用户名\Local Settings\Application Data\Blizzard Entertainment\Battle.net\Cache\Download
其中 CRC 是根据 MapInfo+MapScript.galaxy 计算得出,如果文件已经存在则表示地图设置相同,跳过复制&更新地图的步骤直接启动游戏
实验证明,自从把地图复制到上述位置,Replay 就可以华丽地正常打开了(虽然目前只能借助其他 Launcher 才能观看 Replay)。

3. 游戏启动后,载入器不再自动退出

SC2Launcher.rar

105 KB, 下载次数: 112

无DLL版 v1.02

SC2Launcher_src.rar

13 KB, 下载次数: 106

源代码 v1.02

SC2Launcher134d_cn.rar

267 KB, 下载次数: 637

评分

参与人数 1威望 +5 收起 理由
Renee + 5 ~~

查看全部评分

发表于 2010-3-10 13:59:40 | 显示全部楼层
不错啊!能山寨出来也算有水平了~~~
回复

使用道具 举报

发表于 2010-3-10 14:04:00 | 显示全部楼层
支持楼主~继续山寨~
回复

使用道具 举报

发表于 2010-3-10 15:18:59 | 显示全部楼层

这下可好, 改了allianceid 10的地图, 其他launcher跑图会有错误提示了...
replay, 打完就放问题不大吧, 不patch code肯定不行, 不同步是必然的

支持完善
回复

使用道具 举报

 楼主| 发表于 2010-3-10 15:45:27 | 显示全部楼层
引用第3楼ESPER_PALE于2010-03-10 15:18发表的 :

这下可好, 改了allianceid 10的地图, 其他launcher跑图会有错误提示了...
replay, 打完就放问题不大吧, 不patch code肯定不行, 不同步是必然的

支持完善


已经解决了,更新了 patch code,把两个 AllianceData 一起 or 一下就 OK 了。
allianceId 最大的确就是 9,PlayerSetAlliance(1, 10, 2) 实际上更新到 AllianceData2 去了 - -
  1.     0x55,                                            //  push    ebp
  2.     0x8B, 0xEC,                                        //  mov     ebp, esp
  3.     0x56,                                            //  push    esi
  4.     0xC1, 0xE2, 0x04,                                //  shl     edx, 4                           ;  allianceId
  5.     0x03, 0xD1,                                        //  add     edx, ecx
  6.     0x33, 0xF6,                                        //  xor     esi, esi
  7.     0x46,                                            //  inc     esi
  8.     0x8A, 0x4D, 0x08,                                //  mov     cl, byte ptr [ebp+8]
  9.     0xD3, 0xE6,                                        //  shl     esi, cl                          ;  1 << target
  10.     0x09, 0x34, 0x95, 0xA0, 0xE8, 0xA9, 0x01,        //  or      dword ptr [edx*4+1A9E8A0], esi   ;  AllianceData1[allianceId][player] |= Data
  11.     0x09, 0x34, 0x95, 0x20, 0xEB, 0xA9, 0x01,        //  or      dword ptr [edx*4+1A9EB20], esi   ;  AllianceData2[allianceId][player] |= Data
  12.     0x5E,                                            //  pop     esi
  13.     0x5D,                                            //  pop     ebp
  14.     0xC2, 0x04, 0x00,                                //  retn    4
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-3-10 19:16:52 | 显示全部楼层
在游戏主程序中找到了一个初始化队友信息的函数,也许可以找出“正常”选择队伍的方法了。
回复

使用道具 举报

发表于 2010-3-10 19:20:00 | 显示全部楼层
LZ加油!
回复

使用道具 举报

发表于 2010-3-10 20:09:52 | 显示全部楼层
我是 Anti-Theme 控,我爱标准界面 -_- +1
回复

使用道具 举报

发表于 2010-3-10 20:39:16 | 显示全部楼层
PlayerGetAlliance目前没有任何AI调用, 应该也无需调用, 现在联盟AI工作的还好, 我和电脑2v2, 每次我被打, 电脑盟友都会来救

设置颜色, 如果你是改地图做的话, 有效, 绿色应该是因为你设置了按敌对显示颜色
回复

使用道具 举报

发表于 2010-3-10 20:40:29 | 显示全部楼层
引用第4楼et2010于2010-03-10 15:45发表的  :


已经解决了,更新了 patch code,把两个 AllianceData 一起 or 一下就 OK 了。
allianceId 最大的确就是 9,PlayerSetAlliance(1, 10, 2) 实际上更新到 AllianceData2 去了 - -

.......

是啊, 我在注释里提到了, 不过懒得改了, 还是注入/hook了爽啊, 可以直接写c代码
回复

使用道具 举报

发表于 2010-3-10 20:45:15 | 显示全部楼层
引用第7楼orochiz于2010-03-10 20:09发表的  :
我是 Anti-Theme 控,我爱标准界面 -_- +1

Anti-Theme控, 把xp主题设成classic不就是这种效果吗? 又没影响~~
回复

使用道具 举报

 楼主| 发表于 2010-3-10 23:27:10 | 显示全部楼层
引用第9楼ESPER_PALE于2010-03-10 20:40发表的 :


是啊, 我在注释里提到了, 不过懒得改了, 还是注入/hook了爽啊, 可以直接写c代码


已经注入了,通过 FileMapping 给 DLL 传组队数据就是了。以后连 MapInfo 都可以不用更新,绿色环保。

再顺便做掉 SC2 的 anti-debug - -
回复

使用道具 举报

 楼主| 发表于 2010-3-11 05:06:03 | 显示全部楼层
用 DLL 注入的方式实现了纯绿色玩家和组队设置,不再修改地图文件,更新到 伪1.10。
回复

使用道具 举报

发表于 2010-3-11 09:20:57 | 显示全部楼层
问一下你是怎么做掉antidebug的?
回复

使用道具 举报

发表于 2010-3-11 10:58:14 | 显示全部楼层
其实楼主的程序非常好,可以自己命个名了,反正都是开源的,无所谓伪不伪

特别是LZ的程序已经不修改地图文件了,支持你!希望你继续完善!
回复

使用道具 举报

 楼主| 发表于 2010-3-11 16:00:36 | 显示全部楼层
引用第13楼suwuhao于2010-03-11 09:20发表的 :
问一下你是怎么做掉antidebug的?


SC2.exe 会创建一个 SC2.exe 子进程,两个进程互相调试。
把 CreateProcessW 和一堆乱七八糟的调试/线程/内存状态检测 API hook 一下就好。
回复

使用道具 举报

 楼主| 发表于 2010-3-11 16:01:36 | 显示全部楼层
allianceIdSpend 是同盟共享资源,准备做一个选项。
回复

使用道具 举报

发表于 2010-3-11 22:46:18 | 显示全部楼层
最先是在darkblizz看到了这个,后来寻根来到了这里呵呵!

你的工具非常好感谢你!我也非常喜欢这种简洁的loader的风格,倒是不希望用那一堆打成大包的东西,很乱,不如这个简洁、明了和自由哈!

提点小建议:
1. Replay希望能加上APM、时间和玩家的信息,而不是现在这样直接选择了就打开游戏开始看了,希望改进!
2. AI选择不太DIY化,你可以发布一个这样支持AI的版本:只要为每个电脑指定一个包含galaxy的文件夹(如TriggerLibs),不限制目录位置,就能载入相应AI。这样我觉得就足够了,而且也给玩家非常的自由度来操作。
3. 我有个想法,我测试AI时总是用copy相应种族的AI到triggerlibs的方法,但这样其实不能测同族的不同AI。如果能做到每个电脑都能单独对应一个AI的话,那就太好了,不过可能不太好做吧!呵呵~
回复

使用道具 举报

 楼主| 发表于 2010-3-11 22:59:16 | 显示全部楼层

回 17楼(fiery) 的帖子

1. 游戏本身就支持在观看 Replay 时显示 APM 和玩家信息,左上角那一个方块点一下就有了
2. 是我没说清楚,Mods\\AI 下面是可以放多个文件夹的,每个文件夹代表一个 AI.
3. 这个用 galaxy 就能做到,Launcher 反而不好做.
回复

使用道具 举报

发表于 2010-3-11 23:08:50 | 显示全部楼层

回 18楼(et2010) 的帖子

1. 有时候我还是想在进入游戏之前先大概了解一下的,抑或说这是用来管理Replay用的,我可以通过时间和APM还有玩家种族来了解是哪一个replay……
2. 我知道啊,但我觉得为什么要把AI文件夹限制在这里呢…………我的意思是像Map一样也可以随意指定一个文件夹作为AI的文件夹~
3. 那就算了哈哈~~问一下用galaxy如何实现?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-4-27 05:11 , Processed in 0.730705 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表