/*++ Increase the player's level by wLevels. Parameters: [IN] wPlayerRole - player role ID. [IN] wNumLevel - number of levels to be increased. --*/ VOID PAL_PlayerLevelUp(WORD wPlayerRole, WORD wNumLevel) { WORD i; // // Add the level // gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] += wNumLevel; if (gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] > MAX_LEVELS) { gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] = MAX_LEVELS; } for (i = 0; i < wNumLevel; i++) { // // Increase player's stats // gpGlobals->g.PlayerRoles.rgwMaxHP[wPlayerRole] += 10 + RandomLong(0, 8); gpGlobals->g.PlayerRoles.rgwMaxMP[wPlayerRole] += 8 + RandomLong(0, 6); gpGlobals->g.PlayerRoles.rgwAttackStrength[wPlayerRole] += 4 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwMagicStrength[wPlayerRole] += 4 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwDefense[wPlayerRole] += 2 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwDexterity[wPlayerRole] += 2 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwFleeRate[wPlayerRole] += 2; } #define STAT_LIMIT(t) { if ((t) > MAX_PROPERTY_VALUE) (t) = MAX_PROPERTY_VALUE; } STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMaxHP[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMaxMP[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwAttackStrength[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMagicStrength[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwDefense[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwDexterity[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwFleeRate[wPlayerRole]); #undef STAT_LIMIT // // Reset experience points to zero // gpGlobals->Exp.rgPrimaryExp[wPlayerRole].wExp = 0; gpGlobals->Exp.rgPrimaryExp[wPlayerRole].wLevel = gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole]; }
VOID PAL_PlayerLevelUp( WORD wPlayerRole, WORD wNumLevel ) /*++ Purpose: Increase the player's level by wLevels. Parameters: [IN] wPlayerRole - player role ID. [IN] wNumLevel - number of levels to be increased. Return value: None. --*/ { WORD i; // // Add the level // gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] += wNumLevel; if (gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] > MAX_LEVELS) { gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole] = MAX_LEVELS; } for (i = 0; i < wNumLevel; i++) { // // Increase player's stats // gpGlobals->g.PlayerRoles.rgwMaxHP[wPlayerRole] += 10 + RandomLong(0, 8); gpGlobals->g.PlayerRoles.rgwMaxMP[wPlayerRole] += 8 + RandomLong(0, 6); gpGlobals->g.PlayerRoles.rgwAttackStrength[wPlayerRole] += 4 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwMagicStrength[wPlayerRole] += 4 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwDefense[wPlayerRole] += 2 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwDexterity[wPlayerRole] += 2 + RandomLong(0, 1); gpGlobals->g.PlayerRoles.rgwFleeRate[wPlayerRole] += 2; } #define STAT_LIMIT(t) { if ((t) > 999) (t) = 999; } STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMaxHP[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMaxMP[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwAttackStrength[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwMagicStrength[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwDefense[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwDexterity[wPlayerRole]); STAT_LIMIT(gpGlobals->g.PlayerRoles.rgwFleeRate[wPlayerRole]); #undef STAT_LIMIT // // Reset experience points to zero // gpGlobals->Exp.rgPrimaryExp[wPlayerRole].wExp = 0; gpGlobals->Exp.rgPrimaryExp[wPlayerRole].wLevel = gpGlobals->g.PlayerRoles.rgwLevel[wPlayerRole]; }