当前位置: 代码迷 >> 汇编语言 >> 分享本人今日编写的一个仙剑游戏修改程序(原创)
  详细解决方案

分享本人今日编写的一个仙剑游戏修改程序(原创)

热度:144   发布时间:2016-05-02 04:29:05.0
分享本人今天编写的一个仙剑游戏修改程序(原创)
很早以前就想自己做个《仙剑奇侠传DOS版》的存档修改器了,可惜以前不会编程。现在学习了编程,终于可以一了心愿了。
修改项目:做为大侠,行走江湖,怎么能没有好的装备呢?所以,我为游戏中主公翁们修改出了最强装备,另外再把金钱修改到了65535元,这应该够了。
感谢众多网友给我提供了仙剑存档文件的结构资料。使我的这项工作能够得以顺利的完成。
程序如下:
DATA SEGMENT
FILE DB 'D:\PAL\1.RPG',0  ;仙剑存档文件存放路径
JQZ DW 0FFFFH
HANDLE DW ?
LXY DW 00CFH,0001H,0000H,00E9H,0001H,0000H,00DFH,0001H,0000H,00BFH,0001H,0000H
LX0 DW 00F7H,0001H,0000H,0105H,0001H,0000H                                      ;以上数据是李逍遥的装备,例如00CF是装备名,0001是现有数量,0000,已用数量
ZLE DW 00CDH,0001H,0000H,00EAH,0001H,0000H,00DDH,0001H,0000H,00C3H,0001H,0000H
ZL0 DW 00F6H,0001H,0000H,0104H,0001H,0000H                                      ;这是赵灵儿的装备
MAL DW 00CDH,0001H,0000H,00E8H,0001H,0000H,00E0H,0001H,0000H,00BCH,0001H,0000H
MA0 DW 0105H,0001H,0000H,00F7H,0001H,0000H                                      ;这是苗阿奴的装备
LYR DW 00A5H,0001H,0000H,00CDH,0001H,0000H,00E8H,0001H,0000H,00DEH,0001H,0000H
LY0 DW 0105H,0001H,0000H,00F7H,0001H,0000H                                      ;这是林月如的装备
DATA ENDS

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START:
     MOV AX,DATA
     MOV DS,AX
     MOV DX,OFFSET FILE
     MOV AH,3DH
     MOV AL,01H
     INT 21H                 ;打开文件
     MOV HANDLE,AX           ;保存文件句柄
     MOV BX,HANDLE           
     MOV CX,0
     MOV DX,0028H
     MOV AL,00H
     MOV AH,42H
     INT 21H                 ;将文件指针移动到地址0028H处,这里是存放金钱数据的地方。
     MOV AH,40H
     MOV CX,2
     LEA DX,JQZ
     INT 21H                 ;将金钱值写入,达到修改金钱之目的。
     MOV AH,3EH
     INT 21H                 ;修改完后先关闭文件。
     MOV AH,3DH
     MOV DX,OFFSET FILE
     MOV AL,01H
     INT 21H                  ;然后再打开,以达到使文件指针重新定位到0000H处的目的。
     MOV AH,42H
     MOV AL,00H
     MOV CX,0
     MOV DX,06C0H
     INT 21H                  ;将文件指针移动到06C0处,这里是存放装备数据的地方。
     MOV CX,4                 ;这里表示分4次写入文件,4代表4个人。
     MOV DX,OFFSET LXY
KSXR:
     CALL WRIT
     ADD DX,36                ;由于每个人的装备数据为36字节,所以每写完一次文件后,缓冲区地址须加36。表示写入下一个人的装备数据。
     LOOP KSXR
     JMP EXIT
WRIT PROC NEAR     
     PUSH CX
     MOV AH,40H
     MOV CX,36               ;这里的36代表写入由(DS:DX)指定的缓冲区的36字节。
     INT 21H
     POP CX
     RET
WRIT ENDP
     
EXIT:     
     MOV AH,41H
     INT 21H                 ;完成所有操作后关闭文件。
     MOV AH,4CH
     INT 21H
CODE ENDS     
     END START

以上程序,由MASM5.0编译通过,在DOSBOX环境成功执行。






------解决思路----------------------
建议写成博客,要不以后就难找了。
------解决思路----------------------
就是的呀
  相关解决方案