What you would have to do instead, is remove the #define MAX_CLASS statement
from merc.h and create a global integer, "sh_int MAX_CLASS = 0;" in the top
of one of your main files, most likely in db.c.
Then, in your load_class function use "extern sh_int MAX_CLASS;" and do
"MAX_CLASS++;" at the end of loading each class from file.
That is your best bet.
- Valnir
----- Original Message -----
From: "Jeremy Hill" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, December 27, 2004 9:03 AM
Subject: Re: changing MAX_CLASS to an external value
Unfortunately, what you want to do in its current state is impossible.
Why? The preprocessor converts "MAX_CLASS" to a string literal "5" for
example before the compiler takes a stab at it. The compiler is able to
allocated fixed memory on the stack because the value is constant. When
MAX_CLASS is a variable, memory must come from the heap, and you must do
all the assignment yourself.
Therefore, your structure will need to be something like this, now:
struct skill_type
{
char * name;
sh_int **skill_level;
sh_int **rating;
And all your skill loads will have to dynamically assign skill_level and
rating. That means you can no longer use a flat const skill table, sorry.
(Or, at least, it can be flat except for the variable aspects which will
have to be located elsewhere, i.e. a read/write skills.dat file. Otherwise
how will adding a classe magically transform 5 ints for skill_level to 6?)
I wrote a dynamic Skill Builder/Loader in C++ for a version of ROM I have
if you'd like to take a look. It writes/reads skills from disk on boot,
but it's a little hackish as I never finished it.
-- Jeremy
Tristan M wrote:
i think i worded that subject correctly...anyway, what i want to do is
load my classes from a file. ive put together my own class editor which
works perfectly(prolly littered with memory leaks i dont kno about tho:p)
except that now that classes load from a file, i want to change all those
MAX_CLASS's around to maxClass, which is set when load_class is executed
during the boot, and changed if classes are created online...so for
example in merc.h:
...
...
struct skill_type
{
char * name; /* Name of skill */
sh_int skill_level[MAX_CLASS]; <--- change this to [maxClass]
sh_int rating[MAX_CLASS];<--- change this to [maxClass]
SPELL_FUN * spell_fun; /* Spell pointer (for spells) */
sh_int target; /* Legal targets */
sh_int minimum_position; /* Position for caster / user */
...
...
so i changed the [MAX_CLASS] 's to [maxClass] just to see what would
happen and this came out:
rom24\src\merc.h(1838) : error C2057: expected constant expression
rom24\src\merc.h(1839) : error C2057: expected constant expression
rom24\src\merc.h(1839) : error C2229: struct 'skill_type' has an illegal
zero-sized array
rom24\src\merc.h(1840) : error C2229: struct 'skill_type' has an illegal
zero-sized array
and i probably sound like a newb asking this, but thats ok.
--
ROM mailing list
[email protected]
http://www.rom.org/cgi-bin/mailman/listinfo/rom