苍穹之印痕吧 关注:2,435贴子:38,373

改版(绿宝石)===一些我碰到的疑难问题!!!(待解决)

只看楼主收藏回复

本帖最初发在口袋中心,因为自己平时很多时候都打不开网页,索性在贴吧重开一帖
这个帖主要是放一些我碰到的疑难问题.
特别希望能有机会解决的。
憋在心里也怪难受...
贴出来说不定还有人能一起解决掉...
版本:口袋妖怪 - 绿宝石美版(1986 Pokemon - Emerald Version (U) )
----以及以此为蓝本制作的新汉化版等。


IP属地:上海1楼2014-09-21 20:37回复
    前排,支持N大,表示每天都一定会凑出时间来帮帮看。


    2楼2014-09-21 20:58
    收起回复
      【时钟问题】
      首先说下原版情况:原版时钟必须在模拟器勾选“真实时钟”功能,才会在游戏中走动,同时一切依赖时钟的事件可以发生,比如树果也会生长。时钟走动的速度同现实1比1分钟。
      如果不勾选真实时钟,游戏中时钟不会走动,一切依赖时钟的事件将不再发生,树果也不会生长。

      后来国外改版者依照红宝石,制作了了一个内置时钟系统:
      http://pmcenter.cn/forum.php?mod=viewthread&tid=51991&extra=page%3D1
      此系统可以在模拟器不勾选“真实时钟”功能,达到游戏时钟走动。
      但同时也有缺点:
      1.必须取消模拟器“真实时钟”功能,否则游戏时钟会异常;
      2.在不勾选“真实时钟”功能的情况下,树果不会生长;
      3.内置时钟的走动速度同样也是1比1分钟,太慢。
      【最终目标】完全去除游戏的真实时钟功能,即使模拟器开着“真实时钟”也不会影响内置时钟,树果可以依赖内置时钟生长,最好能提高内置时钟走动速度,建议现实20分钟游戏1小时。


      IP属地:上海3楼2014-09-21 21:01
      收起回复
        支持~


        IP属地:云南来自Android客户端4楼2014-09-21 21:01
        回复
          【中文输入】
          因为绿宝石没有官方中文版,新汉化版也是用英文版改的,也就是说玩家在给自己和精灵起名时也只有英文数字可选。但中文却有进6000多个汉字,虽然可选的可以不用这么多,但目前为止绿宝石依然无法自主输入一个汉字。

          如图原版有两套输入系统:
          1.给自己和精灵箱子等起名时的输入单个英文数字的输入法;
          2.商店问卷调查,记者采访等剧情单词词义分类的的直接选单词的输入法。【最终目标】当然是希望能开发自主的中文输入系统,拼音,且保留英文数字可选。


          IP属地:上海5楼2014-09-21 21:14
          回复
            【雪花天气】
            绿宝石2011中有不少天气效果,比如雨天,风沙,大雾,火山灰。
            但是对下雪天气却欠缺,虽然勉强可以用火山灰代替,但是效果其实不太好
            rom中也还是有下雪的天气的,不过很多改版都没使用。
            先看下效果图。
            零星飘着雪感觉也不错,不过如果地图使用这个天气效果。
            发现雪花只维持了短短数秒,之后就不会飘下雪花。
            几乎的天气效果都是持续性的,为什么只有这个雪天只有数秒。
            就是这个致命的原因导致改版者只能放弃这个天气效果。
            是rom本身的bug吗?还是制作者的遗弃?(因为原版中未出现过雪天的剧情。)
            希望有人可以完善这个下雪的天气效果,让它在改版中有自己的价值
            以下是用CT2查看到的天气相关图,

            上图中还是可以清楚的看到天气相关的一些图片,
            最上面的是大雾,其次是雨过天晴时池塘中云的倒影
            再下面就是大小2片雪花,地址分别为0x54DAD0,0x54DAF0
            再后面是在海底时,水下的大小气泡,
            再之后是火山灰。
            等等。
            【最终目标】使雪花天气带持续性。


            IP属地:上海6楼2014-09-21 21:21
            回复
              【进入npc视野触发事件】
              游戏中训练师有这种功能,比如一个未战斗过的训练师的视野距离为3,当玩家进入到改训练师正前方3格以内则触发战斗,如果那个训练师会自由走动,也是只有当训练师进入指定范围内触发战斗。

              从am打开地图可以对训练师进行设置:

              但是对应的脚本必须是以trainerbattle开头,
              如:
              #org 0x1EC1E1
              trainerbattle 0x0 0x14D 0x0 0x8294775 0x82947AA
              msgbox 0x82947DB MSG_NORMAL
              end
              如果不是以trainerbattle开头,训练师同样会出现感叹号并走近玩家,但是之后就会红屏,死机。
              【最终目标】破解训练师系统,让进入npc视野可以触发战斗以外的其他事件。


              IP属地:上海8楼2014-09-21 21:43
              回复
                【增加表情】
                原版一共有三种表情:感叹号,问号,爱心。
                以下是在CT2中找到的原图,以及地址:

                来说说游戏中是如何触发表情的吧,
                游戏中控制npc移动有专门的脚本,比如往上走一格,往下跳一格等有很多,而表情也算作其中的一种动作。以下是具体脚本
                #org 0xDD5130
                sound 0x15(滴一下声音)
                applymovement 0xFF 0x8DD5254(控制玩家及运行指定的运动动作)
                waitmovement 0x0(等待动作结束)
                end(脚本结束)
                #org 0xDD5254
                #raw 0x56(感叹号动作)
                #raw 0x14(停顿一段时间)
                #raw 0x14
                #raw 0x14
                #raw 0xFE(动作结束)
                以上就是让npc出现感叹号的一段脚本
                #raw 0x56 是感叹号
                另外
                #raw 0x57 是问号
                #raw 0x58 是爱心
                【最终目标】思考方向可以在调用其中一个表情的时候干预指向,让其显示其他地址的图片,以增加新的表情。


                IP属地:上海9楼2014-09-21 22:10
                回复
                  →_→


                  IP属地:云南来自Android客户端10楼2014-09-21 22:12
                  回复
                    后来的问题应该会越来越奇葩→_→


                    IP属地:云南来自Android客户端11楼2014-09-21 22:13
                    收起回复
                      。这问题 。 。有必研究研究


                      IP属地:意大利来自Android客户端12楼2014-09-22 02:42
                      回复
                        表情图这东西,可能游戏里会存在表格,控制ow的移动脚本事件,应该有办法扩容吧,然后中文输入系统你可以问问最初的d商汉化是怎么弄的
                           --决心汉化尾声预告: 【口袋决心】决心汉化进度--9.18 http://tieba.baidu.com/p/3302385170


                        IP属地:湖南来自Android客户端13楼2014-09-22 12:10
                        收起回复
                          【时钟问题】
                          如果20分钟=1小时,这就代表真实时间流动速度乘以3倍。
                          这个内置时钟的原理应该是从玩家进行游戏时间那里的数值加以时钟设定的时间。
                          所以在源码里加入这两行指令,把游戏时间得出的时间乘以3倍计算
                          .text
                          .align 2
                          .thumb
                          .thumb_func
                          .global emeraldclockfix
                          main:
                          push {r0-r7}
                          ldr r0,.PLAYER_DATA
                          ldr r0, [r0]
                          add r0,r0, #0x11
                          str r0,[sp]
                          ldr r4,.PLAYER_DATA
                          ldr r4, [r4]
                          add r4,r4, #0x9A
                          add r3,r4,#0x1
                          ldr r7,.SUM_BUFF
                          ldrb r5,[r7]
                          ldrb r0,[r0]
                          add r2,r7,#0x1
                          cmp r5,r0
                          beq Game_Code_and_Return
                          strb r0,[r7]
                          ldrb r0,[r2]
                          add r6,r0,#0x1
                          lsl r0,r6,#0x18
                          lsr r0,r0,#0x18
                          strb r0,[r2]
                          mov r6, #0x3 @这里
                          mul r0, r6 @这里,转换bin前请擦掉
                          cmp r0,#0x3b
                          ble Game_Code_and_Return
                          mov r6,#0x0
                          strb r6,[r2]
                          ldrb r6,[r3]
                          sub r6,#0x1
                          lsl r1,r6,#0x18
                          lsr r1,r1,#0x18
                          cmp r1,#0xFF
                          bne SOMETHING3
                          mov r6,#0x3b
                          strb r6,[r3]
                          ldrb r6,[r4]
                          sub r6,#0x1
                          and r1,r6
                          cmp r1,#0xFF
                          bne SOMETHING2
                          mov r1,#0x17
                          bl SOMETHING4
                          SOMETHING2:
                          strb r1,[r4]
                          b Game_Code_and_Return
                          SOMETHING3:
                          strb r1,[r3]
                          Game_Code_and_Return:
                          pop {r0-r7}
                          ldr r0,.SUM_GAME_OFF
                          ldrh r1,[r0]
                          ldr r2,.SUM_VAL
                          mov r0,r2
                          mov r3,r0
                          eor r3,r1
                          ldr r0,.RETURN_OFFSET
                          bx r0
                          SOMETHING4:
                          push {r0-r2}
                          ldr r0,.PLAYER_DATA
                          ldr r0, [r0]
                          add r0,r0, #0x98
                          ldrh r1,[r0]
                          sub r1,#0x1
                          ldr r2,=.SUM_VAL2
                          cmp r1,r2
                          blt SOMETHING1
                          ldr r1,.SUM_VAL3
                          SOMETHING1:
                          strh r1,[r0]
                          pop {r0-r2}
                          mov r15,r14
                          .align 2
                          .PLAYER_DATA:
                          .word 0x03005D90
                          .SUM_BUFF:
                          .word 0x0201f000
                          .SUM_GAME_OFF:
                          .word 0x04000130
                          .RETURN_OFFSET:
                          .word 0x080005F1
                          .SUM_VAL2:
                          .hword 0x8000
                          .hword 0x0000
                          .SUM_VAL3:
                          .hword 0xFFFF
                          .hword 0x0000
                          .SUM_VAL:
                          .hword 0x3FF
                          之后是惨无人道的等待式测试。。。。。。
                          1)设定为中午12点

                          2)20分钟后

                          3)打开时钟,是中午1点

                          4)一开始到现在40分钟

                          5)打开时钟,是中午2点

                          从上述来看,时间的确是乘以3倍来计算了,同时这里也表示没有勾实时时钟。
                          加速也试过了,是直接影响游戏时间的,比方说开10倍数,虽然现实里只用到2分钟,但游戏里就经过(2x10)x3分钟,也就是60分钟,1小时。
                          另外这个方式的不足之处就是玩家进行游戏的时间不会乘以3倍,只有时钟本身得到3倍效果,不过这应该不重要,因为游戏进行的时间还是要跟着现实的来看比较好。。。。。。
                          “电视购物”,“幻岛出现”,“树果成长”,“涨潮落潮”,“抽奖”等事件那些我还没测试过,因为我懒得等,我个人猜测是没有问题的,但还是麻烦有耐心的童鞋们帮忙测试。。。。。。


                          14楼2014-09-22 15:06
                          收起回复
                            回复 Ta之境界 :了不起啊,居然做到内置时钟3倍速。
                            但还是摆脱不了实时时钟的影响吧。
                            pc模拟器还可以去掉实时时钟的选项,
                            但手机和psp等的模拟器都是默认有实时时钟功能的,也就是关不掉的。
                            说到底口袋不是网游,不会一直玩上几个礼拜。
                            改版中设定指定时间才发生的事件,因为真实时钟太过漫长反而会失去意义。


                            IP属地:上海15楼2014-09-22 16:04
                            收起回复
                              口袋中心看过这贴⊙ω⊙


                              IP属地:广东来自Android客户端16楼2014-09-22 18:40
                              收起回复