GBC口袋妖怪金银Debug版介绍

  • k
    kayoubi
    好奇除了这个还有其他玩具么
  • 最美人贩子
    喜欢C语言可以研究nethack、angband之类老roguelike的源代码,都是完全开源的,wiki上可以直接查到技能、物品、敌人涉及的行数。
    angband据说编写得非常优美,爱好者甚至有:hacking angband is the best way to learn C的说法。
  • f
    forzen
    这玛丽露(是叫这个吗?)的背影贴图怎么回事,那是三个眼睛吗
  • y
    yksoft1
    那个应该是废案里面小嘟嘟利的图,没有被及时处理掉。
  • y
    yksoft1
    注意:泄露包里面有很多套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. i=0;
    53. outp=(unsigned char*)malloc(2097152);
    54. fblk=(unsigned char*)malloc(16384);
    55. printf("Reading from %s..\n", argv[1]);
    56. fi=fopen(argv[1], "rb");
    57. if (!fi)
    58. {
    59. printf("open %s file error!\n", argv[1]);
    60. goto error3;
    61. }

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


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

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

    95. fclose(fo);
    96. error3:
    97. free(outp);
    98. free(fblk);
    99. }
    复制代码
  • y
    yksoft1
    泄露包的xtal*.zip是水晶的源码,和金银大同小异,但是没有日版的源码了。build出来直接就是完整可执行文件。
  • g
    gold013
    我一直有个疑问,当初金银时期。第一张地图里面四张拼图和抓字母形状的未知图腾到底有什么用?还有关东地区水系道馆那个镇左上角墙里的门是不是贴图错误?
    我当初记得小时候关于这游戏各种流言都有,我一个一个试,就剩下这两个未解之谜
  • 电容茧
    拼完好像会多出现一些其他种类的未知图腾,未知图腾就是纯收藏用的了吧
  • g
    gold013
    这我倒是知道,我当初在金版收集齐了26只字母,不过也找不到啥后续了。不过既然纯粹收藏……哎…