网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
10月07日
漏签
0
天
热血足球吧
关注:
3,141
贴子:
34,867
看贴
图片
吧主推荐
视频
玩乐
1
2
下一页
尾页
20
回复贴,共
2
页
,跳到
页
确定
<返回热血足球吧
>0< 加载中...
自己动手改玩家控制的球员位置
取消只看楼主
收藏
回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
热血系列的代码框架都很好。足球联盟里,是由统一的接口决定一个球员是受玩家控制还是受AI控制,从整体上说球员的“决策”和“动作”是分离的,所以玩家想控制其他角色很方便。
有两种不同的方式可以达到这个目的,一是运行时改内存(所谓的动态修改),二是改rom(所谓的静态修改)。
送TA礼物
IP属地:北京
1楼
2013-04-21 10:38
回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
先说一下内存中与这个有关的两块地方
第一块:
0568--056B 4个字节 依次为1P~4P控制的角色编号
这个全局的编号与位置的对应关系如图:
图片来自:
wangsitan的百度相册
不参与比赛的玩家对应的值为FF
比如原版中,联赛模式2P的话,这4个字节依次为00 0A FF FF
对战模式3P是00 01 0A FF,4P是00 01 0A 0B。
另外换了阵型的话,221的单前锋对应02/03,122的单后卫对应08/09
IP属地:北京
通过
百度相册
上传
4楼
2013-04-21 12:18
回复(1)
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
第二块相关的内存:
0650--065B 12个字节 分别为场上12名队员的状态(这里的状态不是实时体力,体力在04F1起的12字节)
顺序就是按照前面图中的编号的顺序,0650对应的是左队中场,0651是右队中场,065A是左队门将,065B是右队门将。
每个球员占一个字节,一个字节是8个二进制位,形如0000 0000或1000 0101。
这8位中的最高位是个标志位,用来表示该球员是否受AI控制,为1则受AI控制,为0则不受AI控制(注意是“不受AI控制”,不等同于“受玩家控制”)。
8位中,低4位是球员的实时心情,情绪就不在这个帖子里讨论了。还有3位尚未研究,不知道是啥信息。
IP属地:北京
6楼
2013-04-21 13:44
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
所以要在游戏运行时更改玩家控制的角色,就要改写上面所说的两块内存。
例如联赛模式游戏进行中,想改成4P对战那样(1P左队中场、2P右队中场、3P左队门将、4P右队门将),那么0568起的4个字节就要改为:00 01 0A 0B。
然后,0650起的12个字节中,把0650、0651、065A、065B的最高位都设为0,其余8个字节的最高位都设为1即可。
IP属地:北京
7楼
2013-04-21 13:53
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
模拟器带内存编辑功能的话直接改写内存就行了。
而如果要写成virtuanes那种金手指的话,就是这样:
1.
0568-01-00
0569-01-01
056A-01-0A
056B-01-0B
(这4条可以合并成一条:0568-04-0B0A0100,数据反过来是因为little endian)
2.
0650-01-08
0651-01-08
065A-01-08
065B-01-08
3.
0652-01-88
0653-01-88
0654-01-88
0655-01-88
0656-01-88
0657-01-88
0658-01-88
0659-01-88
IP属地:北京
8楼
2013-04-21 14:07
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
但是这样用金手指锁定的话有个问题
球出界时如果被判定为要玩家控制的球员开球,而玩家控制的球员无法去捡球开球,游戏就卡住了。解决办法是把开球人的状态改为AI控制。开球人的编号在04D6。
例如1P现在控制左队门将(即0A),左队要开门球
看下内存中04D6的值,会是0A(意思就是应当左队门将去捡球)
此时就要把
065A-01-08
这条金手指改为
065A-01-88
这样该门将就会受AI控制了,就会去捡球、开球,等球开出来再把金手指改回去即可。
IP属地:北京
10楼
2013-04-21 14:24
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
上面说的是通过控制内存来达到目的
下面说说改rom来实现这个东西
IP属地:北京
11楼
2013-04-21 14:30
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
先了解一下rom中与之相关的两块数据
第一块: 玩家位置信息
<00>BDB9--BDC8 (03dc9--03dd8): -->00号bank的BDB9对应nes文件中的03dc9
00 0A FF FF
00 01 0A 0B
00 01 0A 0B
00 01 0A 0B
(16个字节分成4组来看)
第一组:联赛模式中要写到[0568,player_id]的值,写几个要看玩家数(005D)。原理下同。
第二组:对战模式的(不含点球)。
第三组:点球模式要用的,不过可能没意义,这部分读写是进赛场前的通用代码,所以没避开,实际上点球模式的[0568,pid]会在后面另做处理。
第四组:好像没用到。
IP属地:北京
12楼
2013-04-21 14:40
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
第二块数据:发球者
<01>BF7E--BF8D (07f8e--07f9d): -->同上,小括号里写的是nes文件中的偏移
06 02 08 04
02 06 04 08
0A 02 0A 04
02 0A 04 0A
对应的出界位置及开球方:
左上边线左队 左上边线右队 左下边线左队 左下边线右队
右上边线左队 右上边线右队 右下边线左队 右下边线右队
左上底线左队 左上底线右队 左下底线左队 左下底线右队
右上底线左队 右上底线右队 右下底线左队 右下底线右队
IP属地:北京
13楼
2013-04-21 14:44
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
注意这一块数据中,右队队员的编号被略去了最低位,也就是说比前面图中写的01 03 05 07 09 0B要小1。
比如看这段数据中有两个06,代表的并不是同一个角色。
第一个06对应的是“左上边线左队”(这里说的“左上”是指玩家看到的画面中的左上),如果左队是212阵型,那么离这段边线最近的球员一般就是06了,就是说如果左队要在这段边线掷界外球,发球人就是06。
第二个06对应的是“右上边线右队”,这段数据中右队对应的编号都要加上1才是全局的角色编号,06加1是07,就是说如果右队要在画面右上方那段边线掷界外球,发球人就是07。
IP属地:北京
14楼
2013-04-21 15:11
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
shinwa有个改玩家位置的修改器,用起来很方便,不过有些许不足:
占用了HomeBank中的空白。如果是已经占用了这段空白的改版rom,就不能用这个修改器了。惊风和空气的汉化版就是这样。这个不是因为扩容,这个汉化版扩的是VROM,不影响HomeBank在文件中的偏移。如果是扩容了PROM的就不行了,地址变了;
玩家换到某些位置上时有时做不了动作,只能说话(给AI下命令);
开球处理得过于僵硬了,没考虑到门球和角球会开给本队中场球员的设定。
我想把这个东西做得更通用,最好是不占用空白,直接在原代码段/数据段上改,这样只要不是动过相关代码的改版就OK,至少得让汉化版的能这么干。
IP属地:北京
15楼
2013-04-21 15:26
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这也还没有定型,有些东西还不明确,先这样公布出来,有兴趣的玩家可以去试试
下面一步步说
IP属地:北京
16楼
2013-04-21 15:31
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
1.03dc9--03dd0 (8字节: 00 0A FF FF, 00 01 0A 0B)
在这里修改联赛和对战模式下的玩家位置信息。
这里的信息会在进入赛场前被写到[0568,pid]。
IP属地:北京
17楼
2013-04-21 15:32
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
2.
17d18--17d1b (4字节: 00 01 0A 0B)
也是玩家位置信息,不过用途和上面的不同,该信息用于清掉玩家对应角色的AI控制标志位([0650,rid]最高位)。
IP属地:北京
18楼
2013-04-21 15:33
回复
收起回复
wangsitan
热之百技
10
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
3.
07f8e--07f9d (16字节: 06 02 08 04, 02 06 04 08, 0A 02 0A 04, 02 0A 04 0A)
在这里修改界外球的发球人编号。
一定要注意,这里右队的角色编号要减1之后写入
IP属地:北京
19楼
2013-04-21 15:34
回复(3)
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
S14瑞士轮第四轮抽签
1954290
2
接亲加18万彩礼事件双方已和解
1464210
3
吧友预测S14各队夺冠概率
1168384
4
马龙赛后采访引争议
1121202
5
万代逼迫中国选手弃权
801034
6
东北雨姐被曝跑路
591048
7
烬遭遇八连败
499767
8
志愿军2进入2024票房榜前十
432762
9
詹姆斯布朗尼同场竞技
298300
10
太阳118-114逆转湖人
219678
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示