⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 weapons.cpp

📁 After decades of war one company, who had gained powerful supplying both sides with weaponary, steps
💻 CPP
字号:
/*Copyright (C) 2003 Parallel RealitiesThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/#include "weapons.h"void setWeaponShapes(){	for (int i = 0 ; i < MAX_WEAPONS ; i++)	{		weapon[i].image[0] = graphics.shape[weapon[i].imageIndex[0]];		weapon[i].image[1] = graphics.shape[weapon[i].imageIndex[1]];	}}#if USEPACKvoid loadWeapons(){	int dataLocation = locateDataInPak("data/weapons.dat", 1);	int id, ammo, damage, reload, speed, image1, image2, flags;	FILE *fp;	fp = fopen(PACKLOCATION, "rb");	fseek(fp, dataLocation, SEEK_SET);	for (int i = 0 ; i < MAX_WEAPONS ; i++)	{		fscanf(fp, "%d", &id);		fscanf(fp, "%d", &ammo);		fscanf(fp, "%d", &damage);		fscanf(fp, "%d", &reload);		fscanf(fp, "%d", &speed);		fscanf(fp, "%d", &image1);		fscanf(fp, "%d", &image2);		fscanf(fp, "%d", &flags);		weapon[i].id = id;		weapon[i].ammo[0] = ammo;		weapon[i].damage = damage;		weapon[i].reload[0] = reload;		weapon[i].speed = speed;		weapon[i].imageIndex[0] = image1;		weapon[i].imageIndex[1] = image2;		weapon[i].flags = flags;	}	fclose(fp);}void initWeapons() {loadWeapons();}#elsevoid saveWeapons(){	FILE *fp;	fp = fopen("data/weapons.dat", "wb");	if (fp == NULL)	{		printf("Unable to write Weapon Data File\n");		exit(1);	}	for (int i = 0 ; i < MAX_WEAPONS ; i++)	{			fprintf(fp, "%d ", weapon[i].id);		fprintf(fp, "%d ", weapon[i].ammo[0]);		fprintf(fp, "%d ", weapon[i].damage);		fprintf(fp, "%d ", weapon[i].reload[0]);		fprintf(fp, "%d ", weapon[i].speed);		fprintf(fp, "%d ", weapon[i].imageIndex[0]);		fprintf(fp, "%d ", weapon[i].imageIndex[1]);		fprintf(fp, "%d\n", weapon[i].flags);	}	// Put an extra line for the PAK file "just in case"	fprintf(fp, "\n");	fclose(fp);}/*A list of predefined weaponary. Will most probablybe placed into a data file in the final build.*/void initWeapons(){	// Player's weapon (this NEVER allocated to anything else)	weapon[W_PLAYER_WEAPON].id = WT_PLASMA;	weapon[W_PLAYER_WEAPON].ammo[0] = 1;	weapon[W_PLAYER_WEAPON].damage = 1;	weapon[W_PLAYER_WEAPON].reload[0] = 15;	weapon[W_PLAYER_WEAPON].speed = 10;	weapon[W_PLAYER_WEAPON].imageIndex[0] = 0;	weapon[W_PLAYER_WEAPON].imageIndex[1] = 0;   weapon[W_PLAYER_WEAPON].flags = WF_STRAIGHT;	// Nor is this one!	weapon[W_PLAYER_WEAPON2] = weapon[W_PLAYER_WEAPON];	// Single Shot	weapon[W_SINGLE_SHOT].id = WT_PLASMA;	weapon[W_SINGLE_SHOT].ammo[0] = 1;	weapon[W_SINGLE_SHOT].damage = 1;	weapon[W_SINGLE_SHOT].reload[0] = 15;	weapon[W_SINGLE_SHOT].speed = 10;	weapon[W_SINGLE_SHOT].imageIndex[0] = 0;	weapon[W_SINGLE_SHOT].imageIndex[1] = 1;   weapon[W_SINGLE_SHOT].flags = WF_STRAIGHT;	// Double Shot	weapon[W_DOUBLE_SHOT] = weapon[W_SINGLE_SHOT];	weapon[W_DOUBLE_SHOT].ammo[0] = 2;	// Triple Shot	weapon[W_TRIPLE_SHOT] = weapon[W_SINGLE_SHOT];	weapon[W_TRIPLE_SHOT].ammo[0] = 3;	// Rockets	weapon[W_ROCKETS].id = WT_ROCKET;	weapon[W_ROCKETS].ammo[0] = 1;	weapon[W_ROCKETS].damage = 15;	weapon[W_ROCKETS].reload[0] = 45;	weapon[W_ROCKETS].speed = 20;  	weapon[W_ROCKETS].flags = WF_STRAIGHT;  	weapon[W_ROCKETS].imageIndex[0] = 2;	weapon[W_ROCKETS].imageIndex[1] = 3;	// Double Rockets (uses ROCKETS as base)	weapon[W_DOUBLE_ROCKETS] = weapon[W_ROCKETS];	weapon[W_DOUBLE_ROCKETS].ammo[0] = 2;	weapon[W_DOUBLE_ROCKETS].reload[0] = 80;	// Micro Rockets	weapon[W_MICRO_ROCKETS].id = WT_ROCKET;	weapon[W_MICRO_ROCKETS].ammo[0] = 5;	weapon[W_MICRO_ROCKETS].damage = 3;	weapon[W_MICRO_ROCKETS].reload[0] = 30;	weapon[W_MICRO_ROCKETS].speed = 15;	weapon[W_MICRO_ROCKETS].flags = WF_STRAIGHT + WF_VARIABLE_SPEED;	weapon[W_MICRO_ROCKETS].imageIndex[0] = 2;	weapon[W_MICRO_ROCKETS].imageIndex[1] = 3;	// Energy Ray	weapon[W_ENERGYRAY].id = WT_ENERGYRAY;	weapon[W_ENERGYRAY].ammo[0] = 255;	weapon[W_ENERGYRAY].damage = 1;	weapon[W_ENERGYRAY].reload[0] = 25; // reload for energy ray is never used	weapon[W_ENERGYRAY].speed = 15;	weapon[W_ENERGYRAY].flags = WF_STRAIGHT;	// Laser	weapon[W_LASER].id = WT_LASER;	weapon[W_LASER].ammo[0] = 1;	weapon[W_LASER].damage = 3;	weapon[W_LASER].reload[0] = 1;	weapon[W_LASER].speed = 10;	weapon[W_LASER].imageIndex[0] = 1;	weapon[W_LASER].imageIndex[1] = 1;   weapon[W_LASER].flags = WF_STRAIGHT;	// Beam up weapon	weapon[W_CHARGER].id = WT_CHARGER;	weapon[W_CHARGER].ammo[0] = 1;	weapon[W_CHARGER].damage = 1;	weapon[W_CHARGER].reload[0] = 0;	weapon[W_CHARGER].speed = 12;  	weapon[W_CHARGER].flags = WF_STRAIGHT;  	weapon[W_CHARGER].imageIndex[0] = 33;	weapon[W_CHARGER].imageIndex[1] = 34; 	// Homing missile	weapon[W_HOMING_MISSILE].id = WT_ROCKET;	weapon[W_HOMING_MISSILE].ammo[0] = 1;	weapon[W_HOMING_MISSILE].damage = 15;	weapon[W_HOMING_MISSILE].reload[0] = 35;	weapon[W_HOMING_MISSILE].speed = 10;  	weapon[W_HOMING_MISSILE].flags = WF_STRAIGHT + WF_HOMING;  	weapon[W_HOMING_MISSILE].imageIndex[0] = 4;	weapon[W_HOMING_MISSILE].imageIndex[1] = 4;  	// Double homing missile	weapon[W_DOUBLE_HOMING_MISSILES] = weapon[W_HOMING_MISSILE];  	weapon[W_DOUBLE_HOMING_MISSILES].ammo[0] = 2;  	weapon[W_DOUBLE_HOMING_MISSILES].reload[0] = 65;  	weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[0] = 4;	weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[1] = 4;	// Micro homing missiles	weapon[W_MICRO_HOMING_MISSILES].id = WT_ROCKET;	weapon[W_MICRO_HOMING_MISSILES].ammo[0] = 5;	weapon[W_MICRO_HOMING_MISSILES].damage = 12;	weapon[W_MICRO_HOMING_MISSILES].reload[0] = 65;	weapon[W_MICRO_HOMING_MISSILES].speed = 3;  	weapon[W_MICRO_HOMING_MISSILES].flags = WF_STRAIGHT + WF_HOMING;  	weapon[W_MICRO_HOMING_MISSILES].imageIndex[0] = 4;	weapon[W_MICRO_HOMING_MISSILES].imageIndex[1] = 4;	// Aimed plasma bolt (2x damage)	weapon[W_AIMED_SHOT].id = WT_DIRECTIONAL;	weapon[W_AIMED_SHOT].ammo[0] = 1;	weapon[W_AIMED_SHOT].damage = 2;	weapon[W_AIMED_SHOT].reload[0] = 15;	weapon[W_AIMED_SHOT].speed = 0;	weapon[W_AIMED_SHOT].flags = WF_STRAIGHT + WF_AIMED;	weapon[W_AIMED_SHOT].imageIndex[0] = 33;	weapon[W_AIMED_SHOT].imageIndex[1] = 34;	// 3 way spread weapon	weapon[W_SPREADSHOT].id = WT_SPREAD;	weapon[W_SPREADSHOT].ammo[0] = 3;	weapon[W_SPREADSHOT].damage = 1;	weapon[W_SPREADSHOT].reload[0] = 10;	weapon[W_SPREADSHOT].speed = 10;	weapon[W_SPREADSHOT].flags = WF_THIN_SPREAD;	weapon[W_SPREADSHOT].imageIndex[0] = 0;	weapon[W_SPREADSHOT].imageIndex[1] = 1;	// Sid's ion cannon like weapon	weapon[W_IONCANNON].id = WT_PLASMA;	weapon[W_IONCANNON].ammo[0] = 1;	weapon[W_IONCANNON].damage = 1;	weapon[W_IONCANNON].reload[0] = 2;	weapon[W_IONCANNON].speed = 10;	weapon[W_IONCANNON].flags = WF_STRAIGHT + WF_DISABLE + WF_AIMED;	weapon[W_IONCANNON].imageIndex[0] = 35;	weapon[W_IONCANNON].imageIndex[1] = 35;	// Directional Shock Missile - Used by Kline in final battle	weapon[W_DIRSHOCKMISSILE].id = WT_ROCKET;	weapon[W_DIRSHOCKMISSILE].ammo[0] = 5;	weapon[W_DIRSHOCKMISSILE].damage = 20;	weapon[W_DIRSHOCKMISSILE].reload[0] = 60;	weapon[W_DIRSHOCKMISSILE].speed = 0;	weapon[W_DIRSHOCKMISSILE].flags = WF_STRAIGHT + WF_AIMED + WF_TIMEDEXPLOSION;	weapon[W_DIRSHOCKMISSILE].imageIndex[0] = 4;	weapon[W_DIRSHOCKMISSILE].imageIndex[1] = 4;	saveWeapons();}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -