summaryrefslogtreecommitdiff
path: root/src/deh_misc.c
blob: 8bf5f21c1e9c46073bc9d4d1f5bd01828c72e4b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id: deh_misc.c 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.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.
//
// Revision 1.1  2005/10/04 22:10:32  fraggle
// Dehacked "Misc" section parser (currently a dummy)
//
//
//-----------------------------------------------------------------------------
//
// Parses "Misc" sections in dehacked files
//
//-----------------------------------------------------------------------------

#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)
{
    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 =
{
    "Misc",
    NULL,
    DEH_MiscStart,
    DEH_MiscParseLine,
    NULL,
};