找回密码
 立即注册
搜索
查看: 2641|回复: 9

[怀旧] GBC口袋妖怪金银Debug版介绍

[复制链接]
发表于 2020-5-17 23:34 | 显示全部楼层 |阅读模式
本帖最后由 yksoft1 于 2020-5-17 23:34 编辑

前段时间有4chan用户发出了大量从某个任天堂外包商那里泄露的资料,其中就包括口袋妖怪金银水晶全部版本的源码。其中,用日版源码可以搞出一个Debug版来。

编译口袋金银的日版Debug版
1、得到mons_org目录,在泄露的Gen2.7z的那个Korean包里
2、在日文Win98系统下,自己建好目录结构(主要是解压缩mk和tools到正确位置),把路径这么设,把make\mkfile\com_mac.inc里的路径和盘符也设好

3、进入make目录,运行mk debug设置Debug版,mk gold/silver设置版本

4、mk full进行编译,生成MONS2.ISX。

5、用官方模拟器gameboy.exe(也在Korean包里,需要**时间限制)或者其他工具将ISX转换为BIN(其实和.gb格式一样的)。


6、根据mk里面的readme,把source\monsdata\bank*.bin(这些是训练师图片、怪兽图片等数据)的内容放到BIN文件的指定偏移量。将BIN文件改扩展名为gb。
然后就可以玩了。

bug不少,家门那个教你捕获的会死机,时钟永远提示不对。


口袋金银Debug菜单功能简介
Debug版在标题按SELECT就进入Debug菜单。

1、自定义战斗。可以选择自己一整队(不能自选配招)打野怪或者打训练师。注意在一二代里面,源代码内部把训练师叫做“Dealer”。



2、测试通信、测试地图。其实就是打开两个超强档,一个在真新镇(徽章8),一个在风雪城(徽章0)。
3、音乐音效测试。上下A选音乐,左右START选音效。

4、实时钟测试。有问题。


5、怪兽图像显示。我刚才说的、源码泄露包里面那一堆数据文件并不完整,很多怪图像和后来发布的金银不同。



6、训练师图像显示。

7、某种密码生成器,根据训练师名字、ID和钱数生成一个五位密码。不知道有什么用,据说和美版的时钟复位功能有关?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1战斗力 +2 收起 理由
kenqqex + 2 好评加鹅

查看全部评分

回复

使用道具 举报

     
发表于 2020-5-18 00:03 来自手机 | 显示全部楼层
好奇除了这个还有其他玩具么
回复

使用道具 举报

     
发表于 2020-5-18 00:28 来自手机 | 显示全部楼层
kayoubi 发表于 2020-5-18 00:03
好奇除了这个还有其他玩具么

喜欢C语言可以研究nethack、angband之类老roguelike的源代码,都是完全开源的,wiki上可以直接查到技能、物品、敌人涉及的行数。
angband据说编写得非常优美,爱好者甚至有:hacking angband is the best way to learn C的说法。
回复

使用道具 举报

     
发表于 2020-5-18 00:34 来自手机 | 显示全部楼层
这玛丽露(是叫这个吗?)的背影贴图怎么回事,那是三个眼睛吗
回复

使用道具 举报

 楼主| 发表于 2020-5-18 07:42 | 显示全部楼层
forzen 发表于 2020-5-18 00:34
这玛丽露(是叫这个吗?)的背影贴图怎么回事,那是三个眼睛吗

那个应该是废案里面小嘟嘟利的图,没有被及时处理掉。
回复

使用道具 举报

 楼主| 发表于 2020-5-18 09:24 | 显示全部楼层
注意:泄露包里面有很多套monsdata文件。我写了一个自动写monsdata的小程序,现在不用再手工贴到bin里面了。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int readBank (unsigned char* outp, char *fname, unsigned int addr)
  5. {
  6.         int i=0;
  7.         FILE* fi;
  8.         unsigned char* fblk;
  9.         fblk=(unsigned char*)malloc(16384);
  10.         memset(fblk, 0, 16384);
  11.         printf("Reading %s...\n", fname);
  12.         fi=fopen(fname, "rb");
  13.         if (!fi)
  14.         {
  15.                 printf("open file %s error!\n", fname);
  16.                 goto error3;
  17.         }

  18.         while(fread(fblk+i, 1, 1, fi) == 1)
  19.         {
  20.                 ++i;
  21.         }
  22.         fclose(fi);

  23.         memcpy(outp+addr, fblk, 16384);
  24.         free(fblk);
  25.         return 1;
  26. error3:
  27.         free(fblk);
  28.         return 0;
  29. }

  30. main(int argc, char* argv[])
  31. {
  32.         int i=0, r;
  33.         char ofn[256];
  34.         FILE* fi, *fo;
  35.         unsigned char* outp;
  36.         unsigned char* fblk;
  37.         memset(ofn, 0, 256);
  38.         if(argc<2)
  39.         {
  40.                 printf("usage: %s filename\n", argv[0]);
  41.                 return;       
  42.         }
  43.         for(i=strlen(argv[1]); i>=0; i--)
  44.         {
  45.                 if(*(argv[1]+i) == '.')
  46.                 {
  47.                         memcpy(ofn,  argv[1], i);
  48.                         break;
  49.                 }
  50.         }
  51.         strcat(ofn, ".gb");
  52.        
  53.         i=0;
  54.         outp=(unsigned char*)malloc(2097152);
  55.         fblk=(unsigned char*)malloc(16384);
  56.         printf("Reading from %s..\n", argv[1]);
  57.         fi=fopen(argv[1], "rb");
  58.         if (!fi)
  59.         {
  60.                 printf("open %s file error!\n", argv[1]);
  61.                 goto error3;
  62.         }

  63.         while(fread(outp+i*16384, 1, 16384, fi) == 16384)
  64.         {
  65.                 ++i;
  66.         }
  67.         printf("Read %d banks\n", i);
  68.         fclose(fi);


  69.         r=readBank(outp, "bank12.bin", 0x12*0x4000);
  70.         r=readBank(outp, "bank13.bin", 0x1f*0x4000);
  71.         r=readBank(outp, "bank14.bin", 0x20*0x4000);
  72.         r=readBank(outp, "bank15.bin", 0x15*0x4000);
  73.         r=readBank(outp, "bank16.bin", 0x16*0x4000);
  74.         r=readBank(outp, "bank17.bin", 0x17*0x4000);
  75.         r=readBank(outp, "bank18.bin", 0x18*0x4000);
  76.         r=readBank(outp, "bank19.bin", 0x19*0x4000);
  77.         r=readBank(outp, "bank1a.bin", 0x1a*0x4000);
  78.         r=readBank(outp, "bank1b.bin", 0x1b*0x4000);
  79.         r=readBank(outp, "bank1c.bin", 0x1c*0x4000);
  80.         r=readBank(outp, "bank1d.bin", 0x1d*0x4000);
  81.         r=readBank(outp, "bank1e.bin", 0x1e*0x4000);
  82.         r=readBank(outp, "bank1f.bin", 0x2e*0x4000);

  83.         if(!r)
  84.         {
  85.                 printf("read graphic banks error!\n");
  86.                 goto error3;
  87.         }
  88.         printf("Writing %s..\n", ofn);
  89.         fo=fopen(ofn,"wb");
  90.         if (!fo)
  91.         {
  92.                 printf("open %s error!\n", ofn);
  93.                 goto error3;
  94.         }
  95.         fwrite(outp, 16384, i, fo);

  96.         fclose(fo);
  97. error3:
  98.         free(outp);
  99.         free(fblk);
  100. }
复制代码


评分

参与人数 1战斗力 +2 收起 理由
kenqqex + 2 好评加鹅

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-5-18 16:58 | 显示全部楼层
泄露包的xtal*.zip是水晶的源码,和金银大同小异,但是没有日版的源码了。build出来直接就是完整可执行文件。
回复

使用道具 举报

     
发表于 2020-5-19 12:31 来自手机 | 显示全部楼层
我一直有个疑问,当初金银时期。第一张地图里面四张拼图和抓字母形状的未知图腾到底有什么用?还有关东地区水系道馆那个镇左上角墙里的门是不是贴图错误?
我当初记得小时候关于这游戏各种流言都有,我一个一个试,就剩下这两个未解之谜
回复

使用道具 举报

     
发表于 2020-5-19 13:20 来自手机 | 显示全部楼层
gold013 发表于 2020-5-19 12:31
我一直有个疑问,当初金银时期。第一张地图里面四张拼图和抓字母形状的未知图腾到底有什么用?还有关东地区 ...

拼完好像会多出现一些其他种类的未知图腾,未知图腾就是纯收藏用的了吧
回复

使用道具 举报

     
发表于 2020-5-19 14:30 | 显示全部楼层
电容茧 发表于 2020-5-19 13:20
拼完好像会多出现一些其他种类的未知图腾,未知图腾就是纯收藏用的了吧 ...

这我倒是知道,我当初在金版收集齐了26只字母,不过也找不到啥后续了。不过既然纯粹收藏……哎…
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-28 23:37 , Processed in 0.062110 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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