Hi all,
I base this bit of code on the snippet posted by Nic Suzor some
while ago, a patch which can be found in the contrib/code directory
at circlemud.org.
Basically, after increasing the number of levels to about 200 I got
fed up of typing titles into the title array! Plus when new classes
are added a lot of work is involved.
I tried Nics patch, it seemed that there was always going to be an
erratic lurch in exp required each time you got to the
else if (GET_LEVEL(ch) < 60)
modifier = 30;
(that may be my imagination or poor manual pathwork!)
and besides, it was all still far too much work for 200 lvls :(
Hopefully this is an easy way to implement exp required and a simple
change in either utils.c or class.c will change the amounts needed
per lvl smoothly. I also included a class distinction, keep the
numbers the same in class.c or do the same as me .... the differences
between levelling between classes at low lvl are small, but at higher
lvl .....
structs.h
int spells_to_learn; /* How many can you learn yet this level*/
int player_size;
int olc_zone;
!int emodifier; /*Exp stuff: Andy*/
int spare10;
int spare11;
utils.h
#define GET_BAD_PWS(ch) ((ch)->player_specials->saved.bad_pws)
#define GET_TALK(ch, i) ((ch)->player_specials->saved.talks[i])
+#define GET_EMODIFIER(ch) ((ch)->player_specials->saved.emodifier)/*Exp
stuff: Andy*/
#define POOFIN(ch) ((ch)->player_specials->poofin)
#define POOFOUT(ch) ((ch)->player_specials->poofout)
class.c
/* Some initializations for characters, including initial skills */
void do_start(struct char_data * ch) {
void advance_level(struct char_data * ch);
GET_LEVEL(ch) = 1;
GET_EXP(ch) = 1;
+GET_EMODIFIER(ch) = 1; /*Exp stuff: Andy*/
set_title(ch, "\0");
####
/* the following provides an easy way to adjust exp required in a
progressive fashion and allows simple 'tweaking' Andy */
case CLASS_MAGIC_USER:
add_hp += number(1, 4);
add_mana = number(GET_LEVEL(ch), (int) (1.5 * GET_LEVEL(ch)));
add_mana = MIN(add_mana, 10); add_move = number(0, 2);
+GET_EMODIFIER(ch) = GET_EXP(ch) * 1.010; /*Exp stuff: Andy,change values to suit*/
break;
case CLASS_CLERIC:
add_hp += number(1, 8);
add_mana = number(GET_LEVEL(ch), (int) (1.5 * GET_LEVEL(ch)));
add_mana = MIN(add_mana, 10); add_move = number(0, 2);
+GET_EMODIFIER(ch) = GET_EXP(ch) * 1.020; /*Exp stuff: Andy,change values to suit*/
break;
case CLASS_THIEF:
add_hp += number(1, 6);
add_mana = 0;
add_move = number(1, 3);
+GET_EMODIFIER(ch) = GET_EXP(ch) * 1.015; /*Exp stuff: Andy, change values to suit*/
break;
case CLASS_WARRIOR:
add_hp += number(1, 10);
add_mana = 0;
add_move = number(1, 3);
+GET_EMODIFIER(ch) = GET_EXP(ch) * 1.025; /*Exp stuff: Andy, change values to suit*/
break;
utils.c
int exp_to_level(struct char_data *ch)
{
int exp;
exp = GET_LEVEL(ch) * 1500; /*Exp stuff: Andy, change value to suit*/
exp = exp + GET_EMODIFIER(ch);
return exp;
}
Then do everything else that Nic says about the title stuff and the
exp_to_level stuff.
Hope this proves useful
Andy
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
| Or send 'info circle' to majordomo@cspo.queensu.ca |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST