diff options
author | Florian Kagerer | 2009-03-16 21:20:34 +0000 |
---|---|---|
committer | Florian Kagerer | 2009-03-16 21:20:34 +0000 |
commit | 52726344b7d7da0a625fb60713f1f7c04c98cd7c (patch) | |
tree | 44e579b2cda457e945bd71ee8a4fa08fa7553f3a /engines/kyra/lol.cpp | |
parent | 97887377f0784bab34f2cb69638174b3243d380c (diff) | |
download | scummvm-rg350-52726344b7d7da0a625fb60713f1f7c04c98cd7c.tar.gz scummvm-rg350-52726344b7d7da0a625fb60713f1f7c04c98cd7c.tar.bz2 scummvm-rg350-52726344b7d7da0a625fb60713f1f7c04c98cd7c.zip |
LOL: - implemented item throwing
svn-id: r39455
Diffstat (limited to 'engines/kyra/lol.cpp')
-rw-r--r-- | engines/kyra/lol.cpp | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 337c3e375d..e17275545d 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -147,7 +147,7 @@ LoLEngine::LoLEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(sy _lampOilStatus = _brightness = _lampStatusUnk = 0; _lampStatusSuspended = false; _tempBuffer5120 = 0; - _throwItemState = 0; + _flyingItems = 0; _monsters = 0; _unkGameFlag = 0; _lastMouseRegion = 0; @@ -296,7 +296,7 @@ LoLEngine::~LoLEngine() { delete[] _lvlShapeBottom; delete[] _lvlShapeLeftRight; delete[] _tempBuffer5120; - delete[] _throwItemState; + delete[] _flyingItems; delete[] _monsters; delete[] _levelBlockProperties; delete[] _monsterProperties; @@ -415,8 +415,8 @@ Common::Error LoLEngine::init() { _tempBuffer5120 = new uint8[5120]; memset(_tempBuffer5120, 0, 5120); - _throwItemState = new ThrownItem[8]; - memset(_throwItemState, 0, 8 * sizeof(ThrownItem)); + _flyingItems = new FlyingObject[8]; + memset(_flyingItems, 0, 8 * sizeof(FlyingObject)); memset(_gameFlags, 0, sizeof(_gameFlags)); memset(_globalScriptVars, 0, sizeof(_globalScriptVars)); @@ -1093,6 +1093,58 @@ int LoLEngine::calculateProtection(int index) { return c; } +void LoLEngine::increaseExperience(int charNum, int skill, uint32 points) { + if (charNum & 0x8000) + return; + + if (_characters[charNum].flags & 8) + return; + + _characters[charNum].experiencePts[skill] += points; + + bool loop = true; + while (loop) { + if (_characters[charNum].experiencePts[skill] <= _expRequirements[_characters[charNum].skillLevels[skill]]) + break; + + _characters[charNum].skillLevels[skill]++; + _characters[charNum].flags |= (0x200 << skill); + int inc = 0; + + switch (skill) { + case 0: + _txt->printMessage(0x8003, getLangString(0x4023), _characters[charNum].name); + inc = _rnd.getRandomNumberRng(4, 6); + _characters[charNum].hitPointsCur += inc; + _characters[charNum].hitPointsMax += inc; + break; + + case 1: + _txt->printMessage(0x8003, getLangString(0x4025), _characters[charNum].name); + inc = _rnd.getRandomNumberRng(2, 6); + _characters[charNum].hitPointsCur += inc; + _characters[charNum].hitPointsMax += inc; + break; + + case 2: + _txt->printMessage(0x8003, getLangString(0x4024), _characters[charNum].name); + inc = (_characters[charNum].defaultModifiers[6] * (_rnd.getRandomNumberRng(1, 8) + 17)) >> 8; + _characters[charNum].magicPointsCur += inc; + _characters[charNum].magicPointsMax += inc; + inc = _rnd.getRandomNumberRng(1, 6); + _characters[charNum].hitPointsCur += inc; + _characters[charNum].hitPointsMax += inc; + break; + + default: + break; + } + + snd_playSoundEffect(118, -1); + gui_drawCharPortraitWithStats(charNum); + } +} + void LoLEngine::setupScreenDims() { if (textEnabled()) { _screen->modifyScreenDim(4, 11, 124, 28, 45); |