发信人: nhhai()
整理人: fenking(2000-02-05 02:33:52), 站内信件
|
手把手教你编游戏修改器(一)——数
Write By Easyright
前言
本人写这篇文章的目的,是想和大家交流一下编写游戏修改器的心得。由于本人 水平有限,文章中难免有一些错误或漏洞,希望广大高手来信指教,大家共同探 讨交流。我的Email是[email protected]
第一部分:数制系统
注意:如果你是计算机系的朋友,可以跳过这一章
作为一个好的程序员,必须熟练掌握以下三个主要的数制系统:
一、十进制(Decimal)。我相信大家一定非常熟悉十进制了,在十进制中,只有0 -9这十个数字。
二、十六进制(Hexadecimal)。在计算机中非常常见,它的值是从0-15,其中用A ,B,C,D,E,F来分别代替10,11,12,13,14,15。
三、二进制(Binary)。在二进制中,只有0和1这两个数字,每一个数字代表一个 位(bit)。计算机指令都要转换成二进制才能执行,计算机中的文件大多数也都是 以二进制来储存的。
知道以上三种基本的数制后,大家还要知道如何转换他们。我在这里就不详细说 明了,很多计算机的书上都有,Windows系统自带的计算器也有这个功能(它还多 了个八进制)。
有些人可能会奇怪,为什么计算机要用二进制这么麻烦?原因就是,计算机只能 识别两种状态:开或关。如果计算机能识别十种状态那该多好啊!
那么为什么又用到十六进制呢?主要是由于十六进制可以和二进制方便的转换( 4位二进制对应为1位十六进制),而且十六进制又比较直观。下表是三种数制转 换的例子(注意每4位二进制对应1位十六进制):
Bin: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
Dec: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F
其实数制转换倒不难,但是我们知道了有二进制后,我们以后就不得不考虑二进 制的加减乘除了。
第二部分:数的表示方法(Notation)
注意:无论你是不是计算机系的,你也可以跳过这一部分,但最好还是看看。
在计算机中,数值是以二进制来储存的,他们之间的计算也是用二进制来实现的 。而且CPU以及RAM、硬盘等储存设备也只能识别二进制,也就是说他们只能识别 两种状态开(1)或关(0)。
在Windows系统(Windows NT除外),数值的储存方法叫做Little Endian或Inte l Notation,举个例子来说明这种储存方法:
例如:有一个数14361483,
转换成二进制为:00000000 11011011 00100011 10001011 (#1)
把这个数以Little Endian方法储存在计算机中,就成了:
10001011 00100011 11011011 00000000 (#2)
请留意#1和#2的区别,假设每8位为一组,那么每组的顺序相反,而每8位中的每 位的顺序没有变。
并不是所有的计算机都是使用Little Endian的,有些大型机是使用Big Endian或 Motorola Notation的。在这种储存方法中,所有的二进制数都是按原顺序储存的 ,不需要调转顺序。Windows NT好像就是使用这种方法的,这也就是Windows NT 的NTFS系统不能与Windows 95等的non-NTFS系统兼容的原因。
记数法其实并不重要,我在这里提到它,主要是为了大家在一些Little Endian的 Hex编辑器(例如:Pctools、Ultra Edit等)中,看到数字的顺序颠倒了,不要 以为是我说错了:)
第三部分:数的储存方法
前面曾经说过,所有的东西都是以二进制储存在硬盘或内存中的。而位(bit)、数 值等,在程序中通常是以变量(Variable)的形式储存的,每一个变量在程序中都 有一个名字(即变量名),而且变量都是有类型的。
变量类型:
位(Bit):即一个单独的二进制数字,只能储存0或1这两个数值,也可用来做标记 (Flag)。
字节(Byte):8个Bit既为一个字节,是大多数标准编程语言中的最基本的变量类 型,一个字节可以储存0-255这256个数值。
整型(Integer):16个Bit或2个字节,它可以储存0-65535这65536个数值,也被称 为Word。
长整型(Long Interger):32个Bit或4个字节或2个整型,它可以储存0-42949672 95这4294967296个数值,也被称为dword或Double Word。
第四部分:编辑十六进制数
注意:为了继续以下的教学,你必须要有一个十六进制的编辑器,在这里我向大 家推荐一个叫做Hex Workshop的十六进制的编辑器(Breakpoint Software公司出 版,可以在游戏港的工具下载栏目中找到这个工具)。以前还有一个比较好的工 具叫做UGE,但现在很难找到了,但它比较慢,而且是用于DOS下的(我不知有没 有最新版本)。
一个好的Hex编辑器,最起码也要能够一边显示文件的Hex值,一边显示文件的AS C II值,并且能够显示文件的偏移量(Offsets)。通常,我们不得不更改一个文件 中的大量数据,来找出那些数据的作用,所以一个好的Hex编辑器还要具有强大的 搜索功能。一些数据文件都是有一定格式(Format)或模式(Pattern)的,好的Hex 编辑器能够帮助你快速找出它们的规律。
用Hex编辑器来改变数据是一件危险的事,你的游戏甚至系统随时都会死机。为了 避免这种情况的发生,尽量去修改那些看来较合理的数据,把那些数据加一或减 一,每次尽可能少的修改数据,这样做还可以比较容易的发现哪些改变导致哪些 结果。一次改变一大堆数值,只会浪费你的时间,虽然有时这样做是必须的。通 常的做法是,一次只改一个字节(或整型、长整型),然后看看有什么变化。
最保险的方法是在修改文件之前,做好备份。
看完以上部分,有人可能会说:“Fxxx,怎么什么也学不到呀?”不要急,请留意 游戏港(http://gameport.nanhai.net)的最近更新,我只要有时间,随时都会更 新的。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.124]
|
|