📄 fight1.cpp
字号:
#include <stdlib.h>
#include <string.h>
#include <lsys.h>
#include <ldraw.h>
#include <lkey.h>
#include <time.h>
#include "ls.h"
#include "internal.h"
////////////////////////////////////////////////////////////////////////////
FIGHT_DAT fd;
LSURFACE ls;
TLpcImage fapic;
TLpcImage fepic;
TLpcImage act1_fight;
TLpcImage menu_p;
ENEMY en[40];
ACTOR ac[50];
STOR st[90];
MAGIC mg[20];
int over_data1[320*240];
int debug;
int factor_num;
int fenemy_num;
int factor[8];
int fenemy[8];
int press_count,f_f,f_i;
int fplace,fe_x[4],fa_x[5];
int menu,mode_mf;
int Actor_pic[4][3];
char *fback,*jt;
int fight_delay=1193181/30;
int get_exp=0;
int over_data2[320*240];
////////////////////////////////////////////////////////////////////////////
#define FIGHT_ENEMY 0
#define FIGHT_ENEMY01 1
#define FIGHT_ACTOR 2
#define FIGHT_ACTOR01 3
#define FIGHT_MENU 4
#define FIGHT_BACKG 5
#define FIGHT_MAGIC01 6
#define FIGHT_MAGIC02 7
#define FIGHT_JIANTOU 8
int random2(int size);
int Fight_Init();
void Fight_UnInit();
int DataInit();
void f_getname(int index,char *s);
int Create_Enemy(int Enemy_No,int Create_mode);
void Fighter_View();
void Fighter_count();
int PicLoad(short p);
void Fight_Control();
void Fight_Menu();
void Fight_Scr_View();
void Actor_HMP();
int Noop(int delay_);
int Fight();
int Choice_Enemy();
void change_color();
void Menu_Video();
void Dead(int ID,int actor_mode);
void Windows_draw(int x,int y,int len,int wid,int no);
int Choice_magic(int Actor_No);
void Magic_Name_View(int Actor_No);
int Choice_goods();
void Choice_box(int x,int y,int wid);
void Magic_list(int Magic_id,int ac_no);
void scr_view(int dbf,int scr);
void Victory_Fight(int mode);
void Failed_Fight();
////////////////////////////////////////////////////////////////////////////
int random2(int size)
{ unsigned long t,time;
_disable();
outp(0x43,0);
t=inp(0x40);
t+=(inp(0x40)<<8);
t=0xffff^t;
_enable();
time=(clock()<<16)+t;
return (time^0xffffffff)%size;
}
int Fight_Init()
{lCreateSurface(320,480,&ls,NULL,LSM_MEMORY);
lActiveSurface(&ls);
fapic.count=fepic.count=0;
act1_fight.count=menu_p.count=0;
if (PicLoad(0)) return -1;
if (DataInit()) return -1;
lt_install_int_ex(change_color,1193181/18);
Menu_Video();
return 0;
}
void Fight_UnInit()
{lt_remove_int(change_color);
if (jt) delete jt;
if (fback) delete fback;
lDestroyLpc(&fapic);
lDestroyLpc(&fepic);
lDestroyLpc(&act1_fight);
lDestroyLpc(&menu_p);
lDeleteSurface(&ls);
}
int Noop(int delay_)
{ world.noop(delay_);
return 0;
}
int PicLoad(short p)
{char fname[200];
short len,wid,i,error=0;
f_getname(FIGHT_ENEMY01,fname);
if (lLoadLpcImage(&fepic,fname,0)) {
voc.regist_msg("load enemy01 %s error",fname);
error=-1;
}
f_getname(FIGHT_ACTOR01,fname);
if (lLoadLpcImage(&fapic,fname,0)) {
voc.regist_msg("load actor01 %s error",fname);
error=-2;
}
f_getname(FIGHT_ACTOR,fname);
if (lLoadLpcImage(&act1_fight,fname,0)) {
voc.regist_msg("load actor %s error",fname);
error=-3;
}
f_getname(FIGHT_MENU,fname);
if (lLoadLpcImage(&menu_p,fname,0)) {
voc.regist_msg("load menu %s error",fname);
error=-4;
}
f_getname(FIGHT_BACKG,fname);
fback=lrPicFile(fname,0,NULL);
if (!fback) error=-5;
lActiveSurface(&ls);
lgPutImage(0,240,319,479,fback);
if (fback==NULL) voc.regist_msg("error load %s",fname);
f_getname(FIGHT_JIANTOU,fname);
jt=lrPicFile(fname,0,NULL);
if (!jt) error=-6;
lgetSize(&len,&wid,jt);
for (i=0;i<len*wid;i++) if (jt[4+i]==57) jt[4+i]=255;
delete fback;
return error;
}
#define FIGHT_ENEMY 0
#define FIGHT_ENEMY01 1
#define FIGHT_ACTOR 2
#define FIGHT_ACTOR01 3
#define FIGHT_MENU 4
#define FIGHT_BACKG 5
#define FIGHT_MAGIC01 6
#define FIGHT_MAGIC02 7
#define FIGHT_JIANTOU 8
void f_getname(int index,char *s)
{ switch (index)
{ case FIGHT_ENEMY: sprintf(s,"ixt\\enemy.ixt"); break;
case FIGHT_ENEMY01: sprintf(s,"pic\\enemy01.lpc"); break;
case FIGHT_ACTOR: sprintf(s,"pic\\actor.lpc"); break;
case FIGHT_ACTOR01: sprintf(s,"pic\\actor01.lpc"); break;
case FIGHT_MENU: sprintf(s,"pic\\menu.lpc"); break;
case FIGHT_BACKG: sprintf(s,"pic\\back00.pcx"); break;
case FIGHT_MAGIC01: sprintf(s,"ixt\\magic.ixt"); break;
case FIGHT_JIANTOU: sprintf(s,"pic\\jiantou.pcx"); break;
}
}
////////////////////////////////////////////////////////////////////////////
void scr_view(int dbf,int scr)
{ lActiveSurface(&ls);
if (dbf>0) lBlitFast(&ls,0,0, 0,240,319,479,&ls,0);
if (scr>0) lOutToScr(&ls,0,0, 0,0,319,239);
}
void Menu_Video()
{ int j_j;
for (j_j=0;j_j<10;j_j++) {
Noop(fight_delay*1);
scr_view(1,-1);
Fighter_View();
lputImage(54,j_j+1,menu_p.LpcImage[0]);
lputImage(300-(j_j*23),44,menu_p.LpcImage[2]);
lputImage(54,((j_j*12)-186)*(-1),menu_p.LpcImage[4]);
lputImage((j_j*2)-3,44,menu_p.LpcImage[6]);
scr_view(-1,1);
}
}
////////////////////////////////////////////////////////////////////////////
int Create_Enemy(int Enemy_No,int Create_mode)
{ int i,j,flag,temp[3],MaxEnemy,n,k,p;
int Create_flag,min_hp,error;
FILE *f1;
char fname[80];
flag=error=0;
f_getname(FIGHT_ENEMY,fname);
if ((f1=fopen(fname,"r"))==NULL) {
error=-7;
voc.regist_msg("The ENEMY.IXT Load Error 01 !!!");
return error;
}
fscanf(f1,"%d",&MaxEnemy);
if (Create_mode==0){
for (n=0;n<3&&en[n].flag;n++);
if (n==3) return -1;
for (j=0;((j<=MaxEnemy)&(flag!=1));j++) {
fscanf(f1,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",&en[3].id,&en[3].hp,&en[3].mp,&en[3].at,&en[3].df,&en[3].sm,&en[3].attrib,
&en[3].mgc[0],&en[3].mgc[1],&en[3].mgc[2],&en[3].mgc[3],&en[3].mgc[4],&en[3].mgc[5],&en[3].mgc[6],en[3].say_mode);
if (en[3].say_mode==1) fscanf(f1,"%s",en[3].say);
if (Enemy_No==en[3].id) {
flag=1;
for (i=0;i<3;i++) temp[i]=0;
for (i=0;i<3;i++) if (en[i].flag) temp[en[i].seat]=1;
for (i=0;i<3;i++) if (!temp[i]) en[n].seat=i;
en[n].flag=1;
en[n].id=Enemy_No;
en[n].hp=en[3].hp;
en[n].seat=fd.enemy_x[n];
en[n].attrib=en[3].attrib;
en[n].mp=en[3].mp;
en[n].at=en[3].at;
en[n].df=en[3].df;
en[n].sm=en[3].sm;
en[n].say_mode=en[3].say_mode;
strcpy(en[n].say,en[3].say);
for (i=0;i<8;i++) en[n].mgc[i]=en[3].mgc[i];
get_exp+=en[n].hp/8;
}
}
}
if (Create_mode==1) {
for (n=0;n<3&&en[n].flag;n++);
if (n==3) return -1;
for (j=0;((j<=MaxEnemy)&(flag!=1));j++) {
fscanf(f1,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",&en[3].id,&en[3].hp,&en[3].mp,&en[3].at,&en[3].df,&en[3].sm,&en[3].attrib,
&en[3].mgc[0],&en[3].mgc[1],&en[3].mgc[2],&en[3].mgc[3],&en[3].mgc[4],&en[3].mgc[5],&en[3].mgc[6],en[3].say_mode);
if (en[3].say_mode==1) fscanf(f1,"%s",en[3].say);
if (Enemy_No==en[3].id) {
flag=1;
en[n].flag=1;
en[n].id=Enemy_No;
en[n].seat=fd.enemy_x[n];
en[n].hp=en[3].hp;
en[n].attrib=en[3].attrib;
en[n].mp=en[3].mp;
en[n].at=en[3].at;
en[n].df=en[3].df;
en[n].sm=en[3].sm;
en[n].say_mode=en[3].say_mode;
strcpy(en[n].say,en[3].say);
for (i=0;i<8;i++) en[n].mgc[i]=en[3].mgc[i];
get_exp+=en[n].hp/8;
}
}
}
fclose(f1);
return 0;
}
////////////////////////////////////////////////////////////////////////////
int DataInit()
{ int l,k;
FILE *mgf;
char name[100];
get_exp=0;
mode_mf=2;
menu=0;
fe_x[0]=80;fe_x[1]=160;fe_x[2]=240;
fa_x[0]=80;fa_x[1]=140;fa_x[2]=200;fa_x[3]=260;
factor_num=fd.actor_num;
fenemy_num=fd.enemy_num;
fplace=fd.place;
for (l=0;l<8;l++) factor[l]=-1;
for (l=0;l<4;l++) en[l].flag=0,en[l].seat=-1;
for (l=0;l<5;l++) ac[l].flag=0;
for (l=0;l<9;l++) st[l].mode=-1,st[l].obj=-1,st[l].atf=0,st[l].source=0;
for (l=0;l<fd.actor_num;l++) {
voc.regist_msg("loop");
ac[l].id=fd.actor[l];
ac[l].flag=1;
ac[l].mhp=fd.mhp[l];
ac[l].mmp=fd.mmp[l];
ac[l].hp=fd.hp[l];
ac[l].mp=fd.mp[l];
ac[l].at=fd.at[l];
ac[l].df=fd.df[l];
ac[l].sm=fd.sm[l];
ac[l].exp=fd.exp[l];
ac[l].lev=fd.lev[l];
ac[l].mg_num=fd.mg_num[l];
for(k=0;k<ac[l].mg_num;k++) ac[l].mgc[k]=fd.mgc[l][k];
}
Actor_pic[0][0]=0;
Actor_pic[0][1]=0;
Actor_pic[0][2]=1;
Actor_pic[1][0]=0;
f_getname(FIGHT_MAGIC01,name);
if ((mgf=fopen(name,"r"))==NULL) {
voc.regist_msg("Load Magic.Ixt Error 01 !!!");
return -1;
}
for (l=0;l<20;l++) {
fscanf(mgf,"%d %s %d %d %d",&mg[l].id,mg[l].name,&mg[l].mode,&mg[l].nmp,&mg[l].ahp_at);
}
for (l=0;l<fd.enemy_num;l++) Create_Enemy(fd.enemy[l],1);
fclose(mgf);
return 0;
}
////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -