diff options
author | Simon Howard | 2005-10-17 20:27:05 +0000 |
---|---|---|
committer | Simon Howard | 2005-10-17 20:27:05 +0000 |
commit | 4dc1ca199d444314dfeada9bf159a538edc50414 (patch) | |
tree | 9b2673b278b34332f92ec780efb25ebb47b9f35c | |
parent | eb11f9bfbb35c9ea3f8c9bf4e238168c8254d131 (diff) | |
download | chocolate-doom-4dc1ca199d444314dfeada9bf159a538edc50414.tar.gz chocolate-doom-4dc1ca199d444314dfeada9bf159a538edc50414.tar.bz2 chocolate-doom-4dc1ca199d444314dfeada9bf159a538edc50414.zip |
Start of Dehacked 'Misc' section support. Initial Health+Bullets,
and bfg cells/shot are supported.
Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 206
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/deh_misc.c | 82 | ||||
-rw-r--r-- | src/deh_misc.h | 62 | ||||
-rw-r--r-- | src/g_game.c | 13 | ||||
-rw-r--r-- | src/p_pspr.c | 16 |
5 files changed, 162 insertions, 15 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 786bfb5f..e6472901 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,8 +30,8 @@ dstrings.h i_system.c p_doors.c p_switch.c r_state.h mmus2mid.c \ d_textur.h i_system.h p_enemy.c p_telept.c r_things.c mmus2mid.h \ deh_defs.h deh_frame.c deh_main.c deh_ptr.c deh_text.c deh_thing.c \ deh_io.c deh_io.h deh_ammo.c deh_cheat.c deh_weapon.c \ -deh_misc.c deh_mapping.c deh_mapping.h deh_sound.c deh_main.h \ -w_merge.c w_merge.h doomfeatures.h +deh_misc.c deh_misc.h deh_sound.c deh_main.h doomfeatures.h \ +w_merge.c w_merge.h deh_mapping.c deh_mapping.h if HAVE_WINDRES diff --git a/src/deh_misc.c b/src/deh_misc.c index 2cbba2f9..8bf5f21c 100644 --- a/src/deh_misc.c +++ b/src/deh_misc.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: deh_misc.c 175 2005-10-08 20:54:16Z fraggle $ +// $Id: deh_misc.c 206 2005-10-17 20:27:05Z fraggle $ // // Copyright(C) 2005 Simon Howard // @@ -21,6 +21,10 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 2005/10/17 20:27:05 fraggle +// Start of Dehacked 'Misc' section support. Initial Health+Bullets, +// and bfg cells/shot are supported. +// // Revision 1.2 2005/10/08 20:54:16 fraggle // Proper dehacked error/warning framework. Catch a load more errors. // @@ -34,19 +38,93 @@ // //----------------------------------------------------------------------------- +#include <stdlib.h> +#include <string.h> + #include "doomdef.h" #include "doomtype.h" #include "deh_defs.h" #include "deh_io.h" +#include "deh_main.h" + +int deh_initial_health = 100; +int deh_initial_bullets = 50; +int deh_max_health; // TODO +int deh_max_armor; // TODO +int deh_green_armor_class; // TODO +int deh_blue_armor_class; // TODO +int deh_max_soulsphere; // TODO +int deh_soulsphere_health; // TODO +int deh_megasphere_health; // TODO +int deh_god_mode_health; // TODO +int deh_idfa_armor; // TODO +int deh_idfa_armor_class; // TODO +int deh_idkfa_armor; // TODO +int deh_idkfa_armor_class; // TODO +int deh_bfg_cells_per_shot = 40; +int deh_monsters_infight; // TODO + +static struct +{ + char *deh_name; + int *value; + boolean functional; +} misc_settings[] = { + {"Initial Health", &deh_initial_health, true}, + {"Initial Bullets", &deh_initial_bullets, true}, + {"Max Health", &deh_max_health}, + {"Max Armor", &deh_max_armor}, + {"Green Armor Class", &deh_green_armor_class}, + {"Blue Armor Class", &deh_blue_armor_class}, + {"Max Soulsphere", &deh_max_soulsphere}, + {"Soulsphere Health", &deh_soulsphere_health}, + {"Megasphere Health", &deh_megasphere_health}, + {"God Mode Health", &deh_god_mode_health}, + {"IDFA Armor", &deh_idfa_armor}, + {"IDFA Armor Class", &deh_idfa_armor_class}, + {"IDKFA Armor", &deh_idkfa_armor}, + {"IDKFA Armor Class", &deh_idkfa_armor_class}, + {"BFG Cells/Shot", &deh_bfg_cells_per_shot, true}, + {"Monsters Infight", &deh_monsters_infight}, +}; static void *DEH_MiscStart(deh_context_t *context, char *line) { - DEH_Warning(context, "Dehacked 'Misc' sections are not supported yet."); return NULL; } static void DEH_MiscParseLine(deh_context_t *context, char *line, void *tag) { + char *variable_name, *value; + int ivalue; + int i; + + if (!DEH_ParseAssignment(line, &variable_name, &value)) + { + // Failed to parse + + DEH_Warning(context, "Failed to parse assignment"); + return; + } + + ivalue = atoi(value); + + for (i=0; i<sizeof(misc_settings) / sizeof(*misc_settings); ++i) + { + if (!strcasecmp(variable_name, misc_settings[i].deh_name)) + { + if (!misc_settings[i].functional) + { + DEH_Warning(context, "Misc variable '%s' is not yet functional", + variable_name); + } + + *misc_settings[i].value = ivalue; + return; + } + } + + DEH_Warning(context, "Unknown Misc variable '%s'", variable_name); } deh_section_t deh_section_misc = diff --git a/src/deh_misc.h b/src/deh_misc.h new file mode 100644 index 00000000..5e5a70d9 --- /dev/null +++ b/src/deh_misc.h @@ -0,0 +1,62 @@ +// Emacs style mode select -*- C++ -*- +//----------------------------------------------------------------------------- +// +// $Id: deh_misc.h 206 2005-10-17 20:27:05Z fraggle $ +// +// Copyright(C) 2005 Simon Howard +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of 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 of +// MERCHANTABILITY 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 License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. +// +// $Log$ +// Revision 1.1 2005/10/17 20:27:05 fraggle +// Start of Dehacked 'Misc' section support. Initial Health+Bullets, +// and bfg cells/shot are supported. +// +// Revision 1.2 2005/10/08 20:54:16 fraggle +// Proper dehacked error/warning framework. Catch a load more errors. +// +// Revision 1.1 2005/10/04 22:10:32 fraggle +// Dehacked "Misc" section parser (currently a dummy) +// +// +//----------------------------------------------------------------------------- +// +// Parses "Misc" sections in dehacked files +// +//----------------------------------------------------------------------------- + +#ifndef DEH_MISC_H +#define DEH_MISC_H + +extern int deh_initial_health; +extern int deh_initial_bullets; +extern int deh_max_health; +extern int deh_max_armor; +extern int deh_green_armor_class; +extern int deh_blue_armor_class; +extern int deh_max_soulsphere; +extern int deh_soulsphere_health; +extern int deh_megasphere_health; +extern int deh_god_mode_health; +extern int deh_idfa_armor; +extern int deh_idfa_armor_class; +extern int deh_idkfa_armor; +extern int deh_idkfa_armor_class; +extern int deh_bfg_cells_per_shot; +extern int deh_monsters_infight; + +#endif /* #ifndef DEH_MISC_H */ + diff --git a/src/g_game.c b/src/g_game.c index a4e32d02..91b86991 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: g_game.c 204 2005-10-16 20:55:50Z fraggle $ +// $Id: g_game.c 206 2005-10-17 20:27:05Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,10 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.16 2005/10/17 20:27:05 fraggle +// Start of Dehacked 'Misc' section support. Initial Health+Bullets, +// and bfg cells/shot are supported. +// // Revision 1.15 2005/10/16 20:55:50 fraggle // Fix the '-cdrom' command-line option. // @@ -85,7 +89,7 @@ static const char -rcsid[] = "$Id: g_game.c 204 2005-10-16 20:55:50Z fraggle $"; +rcsid[] = "$Id: g_game.c 206 2005-10-17 20:27:05Z fraggle $"; #include <string.h> #include <stdlib.h> @@ -94,6 +98,7 @@ rcsid[] = "$Id: g_game.c 204 2005-10-16 20:55:50Z fraggle $"; #include "doomstat.h" #include "deh_main.h" +#include "deh_misc.h" #include "z_zone.h" #include "f_finale.h" @@ -924,11 +929,11 @@ void G_PlayerReborn (int player) p->usedown = p->attackdown = true; // don't do anything immediately p->playerstate = PST_LIVE; - p->health = MAXHEALTH; + p->health = deh_initial_health; // Use dehacked value p->readyweapon = p->pendingweapon = wp_pistol; p->weaponowned[wp_fist] = true; p->weaponowned[wp_pistol] = true; - p->ammo[am_clip] = 50; + p->ammo[am_clip] = deh_initial_bullets; for (i=0 ; i<NUMAMMO ; i++) p->maxammo[i] = maxammo[i]; diff --git a/src/p_pspr.c b/src/p_pspr.c index 1018222d..cf56839d 100644 --- a/src/p_pspr.c +++ b/src/p_pspr.c @@ -1,7 +1,7 @@ // Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // -// $Id: p_pspr.c 8 2005-07-23 16:44:57Z fraggle $ +// $Id: p_pspr.c 206 2005-10-17 20:27:05Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard @@ -22,6 +22,10 @@ // 02111-1307, USA. // // $Log$ +// Revision 1.3 2005/10/17 20:27:05 fraggle +// Start of Dehacked 'Misc' section support. Initial Health+Bullets, +// and bfg cells/shot are supported. +// // Revision 1.2 2005/07/23 16:44:56 fraggle // Update copyright to GNU GPL // @@ -36,11 +40,12 @@ //----------------------------------------------------------------------------- static const char -rcsid[] = "$Id: p_pspr.c 8 2005-07-23 16:44:57Z fraggle $"; +rcsid[] = "$Id: p_pspr.c 206 2005-10-17 20:27:05Z fraggle $"; #include "doomdef.h" #include "d_event.h" +#include "deh_misc.h" #include "m_random.h" #include "p_local.h" @@ -61,9 +66,6 @@ rcsid[] = "$Id: p_pspr.c 8 2005-07-23 16:44:57Z fraggle $"; #define WEAPONTOP 32*FRACUNIT -// plasma cells for a bfg attack -#define BFGCELLS 40 - // // P_SetPsprite @@ -180,7 +182,7 @@ boolean P_CheckAmmo (player_t* player) // Minimal amount for one shot varies. if (player->readyweapon == wp_bfg) - count = BFGCELLS; + count = deh_bfg_cells_per_shot; else if (player->readyweapon == wp_supershotgun) count = 2; // Double barrel. else @@ -578,7 +580,7 @@ A_FireBFG ( player_t* player, pspdef_t* psp ) { - player->ammo[weaponinfo[player->readyweapon].ammo] -= BFGCELLS; + player->ammo[weaponinfo[player->readyweapon].ammo] -= deh_bfg_cells_per_shot; P_SpawnPlayerMissile (player->mo, MT_BFG); } |