From 6dff93b1a6e9b727dbe26747456f4b23efca86da Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sun, 16 Dec 2012 22:45:19 +0100 Subject: [PATCH] added capsule wheel and table --- src/common/Capsule.cpp | 12 ++- src/common/Capsule.h | 13 ++++ src/common/GameState.h | 2 + src/main.cpp | 5 +- src/menu/CapsuleChangeMenu.cpp | 65 +++++++++++++++- src/menu/CapsuleChangeMenu.h | 2 + src/menu/CapsuleMenu.cpp | 7 +- src/menu/Resources.cpp | 28 +++++++ src/menu/Resources.h | 14 ++++ test-data/capsule-sprites.png | Bin 0 -> 3064 bytes test-data/capsules.l2s | 136 +++++++++++++++++++++++++++++++++ test-data/test.l2s | 59 ++++++++++++++ 12 files changed, 335 insertions(+), 8 deletions(-) create mode 100644 test-data/capsule-sprites.png diff --git a/src/common/Capsule.cpp b/src/common/Capsule.cpp index 8fa1ca9..302af8f 100644 --- a/src/common/Capsule.cpp +++ b/src/common/Capsule.cpp @@ -23,6 +23,8 @@ Capsule::Capsule() : name("") , alignment("") +, alignmentSprite(0) + , maxHealth(0) , level(1) @@ -33,7 +35,7 @@ Capsule::Capsule() , classes(0) , numClasses(0) -, curClass(0) +, curClass(-1) , maxClass(0) { } @@ -78,6 +80,11 @@ int Capsule::NextLevel() const { } } +void Capsule::UpgradeClass() { + ++maxClass; + ++curClass; +} + Sprite *Capsule::BattleSprite() { return GetClass().battleSprite; @@ -136,6 +143,9 @@ void Capsule::CreateTypeDescription() { td.AddField("name", FieldDescription(((char *)&c.name) - ((char *)&c), Interpreter::STRING_ID).SetReferenced()); td.AddField("alignment", FieldDescription(((char *)&c.alignment) - ((char *)&c), Interpreter::STRING_ID).SetReferenced()); + td.AddField("alignmentCursor", FieldDescription(((char *)&c.alignmentCursor) - ((char *)&c), Interpreter::VECTOR_ID)); + td.AddField("alignmentSprite", FieldDescription(((char *)&c.alignmentSprite) - ((char *)&c), Sprite::TYPE_ID).SetReferenced()); + td.AddField("maxHealth", FieldDescription(((char *)&c.maxHealth) - ((char *)&c), Interpreter::NUMBER_ID)); td.AddField("stats", FieldDescription(((char *)&c.stats) - ((char *)&c), Stats::TYPE_ID)); diff --git a/src/common/Capsule.h b/src/common/Capsule.h index 8d4791d..c70d07f 100644 --- a/src/common/Capsule.h +++ b/src/common/Capsule.h @@ -7,6 +7,7 @@ namespace graphics { } #include "../common/Stats.h" +#include "../geometry/Vector.h" #include @@ -31,6 +32,15 @@ public: const Spell *Attack2() const; const Spell *Attack3() const; + int NumClasses() const { return numClasses; } + int MaxClass() const { return maxClass; } + int CurrentClass() const { return curClass; } + + const geometry::Vector &AlignmentOffset() const { return alignmentCursor; } + const graphics::Sprite *AlignmentSprite() const { return alignmentSprite; } + + void UpgradeClass(); + Uint16 MaxHealth() const; Stats GetStats() const; @@ -75,6 +85,9 @@ private: const char *name; const char *alignment; + geometry::Vector alignmentCursor; + const graphics::Sprite *alignmentSprite; + int maxHealth; Stats stats; diff --git a/src/common/GameState.h b/src/common/GameState.h index 4e2570d..4080630 100644 --- a/src/common/GameState.h +++ b/src/common/GameState.h @@ -14,10 +14,12 @@ struct GameState { GameState(); Hero heroes[7]; + int NumHeroes() const { return 7; } Hero *party[4]; int partySize; Capsule capsules[7]; + int NumCapsules() const { return 7; } Capsule *capsule; Inventory inventory; diff --git a/src/main.cpp b/src/main.cpp index 2ecd30a..ca54210 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -196,8 +196,9 @@ int main(int argc, char **argv) { gameState.party[3] = &gameState.heroes[3]; gameState.partySize = 4; - gameState.capsules[0] = *caster.GetCapsule("flash"); - gameState.capsule = gameState.capsules; + gameState.capsules[1] = *caster.GetCapsule("flash"); + gameState.capsules[1].UpgradeClass(); + gameState.capsule = &gameState.capsules[1]; GameConfig gameConfig; gameConfig.state = &gameState; diff --git a/src/menu/CapsuleChangeMenu.cpp b/src/menu/CapsuleChangeMenu.cpp index 3b161ad..cac2056 100644 --- a/src/menu/CapsuleChangeMenu.cpp +++ b/src/menu/CapsuleChangeMenu.cpp @@ -10,6 +10,7 @@ #include "../common/GameState.h" #include "../graphics/Font.h" #include "../graphics/Frame.h" +#include "../graphics/Texture.h" using app::Input; using common::Capsule; @@ -69,18 +70,76 @@ void CapsuleChangeMenu::Render(SDL_Surface *screen) { 12 * font.CharWidth(), 2 * font.CharHeight() - font.CharHeight() / 8); // TODO: wheel offset: top left, center, or center bottom? - const Vector wheelOffset; + const Vector wheelOffset( + 6 * font.CharWidth(), + 19 * font.CharHeight() - font.CharHeight() / 8); + const Vector classesOffset( + 12 * font.CharWidth(), + 13 * font.CharHeight() - font.CharHeight() / 8); const Vector menuOffset( - font.CharWidth(), - 24 * font.CharHeight() - font.CharHeight() / 8); + font.CharWidth(), + 24 * font.CharHeight() - font.CharHeight() / 8); parent->RenderBackground(screen); parent->RenderCapsule(screen, offset + capsuleOffset); parent->RenderInfo(screen, offset + infoOffset); parent->RenderWheel(screen, offset + wheelOffset); + RenderClasses(screen, offset + classesOffset); parent->RenderMenu(screen, offset + menuOffset); } +void CapsuleChangeMenu::RenderClasses(SDL_Surface *screen, const Vector &offset) const { + Vector cursor(offset); + + int numClasses = 0; + for (int i = 0; i < parent->Game().state->NumCapsules(); ++i) { + if (numClasses < parent->Game().state->capsules[i].NumClasses()) { + numClasses = parent->Game().state->capsules[i].NumClasses(); + } + } + + parent->Res().capsuleSelectTopLeft->Draw(screen, cursor); + cursor.Y() += parent->Res().capsuleSelectTopLeft->Height(); + Vector target( + cursor.X() + parent->Res().capsuleSelectTopLeft->Width(), + cursor.Y() + numClasses * parent->Res().capsuleSelectLadder->Height()); + parent->Res().capsuleSelectLeftRepeat->Render(screen, cursor, target); + cursor.Y() = target.Y(); + parent->Res().capsuleSelectBottomLeft->Draw(screen, cursor); + cursor.X() += parent->Res().capsuleSelectTopLeft->Width(); + + for (int i = 0; i < parent->Game().state->NumCapsules(); ++i) { + cursor.Y() = offset.Y(); + parent->Res().capsuleSelectTopRepeat->Draw(screen, cursor); + cursor.Y() += parent->Res().capsuleSelectTopRepeat->Height(); + for (int j = numClasses - 1; j >= 0; --j) { + parent->Res().capsuleSelectLadder->Draw( + screen, cursor, + j < parent->Game().state->capsules[i].MaxClass(), j); + if (&parent->Game().state->capsules[i] == parent->Game().state->capsule + && parent->Game().state->capsules[i].CurrentClass() == j) { + parent->Res().capsuleSelectCursor->Draw(screen, cursor); + } + cursor.Y() += parent->Res().capsuleSelectLadder->Height(); + } + parent->Res().capsuleSelectBottomRepeat->Draw(screen, cursor); + if (parent->Game().state->capsules[i].AlignmentSprite()) { + parent->Game().state->capsules[i].AlignmentSprite()->Draw(screen, cursor); + } + cursor.X() += parent->Res().capsuleSelectLadder->Width(); + } + + cursor.Y() = offset.Y(); + parent->Res().capsuleSelectTopRight->Draw(screen, cursor); + cursor.Y() += parent->Res().capsuleSelectTopRight->Height(); + target = Vector( + cursor.X() + parent->Res().capsuleSelectTopRight->Width(), + cursor.Y() + numClasses * parent->Res().capsuleSelectLadder->Height()); + parent->Res().capsuleSelectRightRepeat->Render(screen, cursor, target); + cursor.Y() = target.Y(); + parent->Res().capsuleSelectBottomRight->Draw(screen, cursor); +} + int CapsuleChangeMenu::Width() const { return parent->Width(); diff --git a/src/menu/CapsuleChangeMenu.h b/src/menu/CapsuleChangeMenu.h index 5ac40fb..0f8888f 100644 --- a/src/menu/CapsuleChangeMenu.h +++ b/src/menu/CapsuleChangeMenu.h @@ -21,6 +21,8 @@ public: virtual void UpdateWorld(float deltaT); virtual void Render(SDL_Surface *); + void RenderClasses(SDL_Surface *, const geometry::Vector &) const; + public: int Width() const; int Height() const; diff --git a/src/menu/CapsuleMenu.cpp b/src/menu/CapsuleMenu.cpp index dd61dbd..5a800a3 100644 --- a/src/menu/CapsuleMenu.cpp +++ b/src/menu/CapsuleMenu.cpp @@ -97,7 +97,9 @@ void CapsuleMenu::Render(SDL_Surface *screen) { 12 * font.CharWidth(), 2 * font.CharHeight() - font.CharHeight() / 8); // TODO: wheel offset: top left, center, or center bottom? - const Vector wheelOffset; + const Vector wheelOffset( + 6 * font.CharWidth(), + 19 * font.CharHeight() - font.CharHeight() / 8); const Vector statsOffset( 12 * font.CharWidth(), 15 * font.CharHeight() - font.CharHeight() / 8); @@ -177,7 +179,8 @@ void CapsuleMenu::RenderInfo(SDL_Surface *screen, const Vector &offset) con } void CapsuleMenu::RenderWheel(SDL_Surface *screen, const Vector &offset) const { - // later + Res().capsuleAlignmentWheel->DrawCenter(screen, offset); + Res().capsuleAlignmentCursor->DrawCenter(screen, offset + Game().state->capsule->AlignmentOffset()); } void CapsuleMenu::RenderStats(SDL_Surface *screen, const Vector &offset) const { diff --git a/src/menu/Resources.cpp b/src/menu/Resources.cpp index 74e4ccd..548afc3 100644 --- a/src/menu/Resources.cpp +++ b/src/menu/Resources.cpp @@ -122,6 +122,20 @@ Resources::Resources() , capsuleNameCharSelectTemplate(0) +, capsuleSelectTopLeft(0) +, capsuleSelectTopRight(0) +, capsuleSelectTopRepeat(0) +, capsuleSelectBottomLeft(0) +, capsuleSelectBottomRight(0) +, capsuleSelectBottomRepeat(0) +, capsuleSelectLeftRepeat(0) +, capsuleSelectRightRepeat(0) +, capsuleSelectLadder(0) +, capsuleSelectCursor(0) + +, capsuleAlignmentWheel(0) +, capsuleAlignmentCursor(0) + { } @@ -231,6 +245,20 @@ void Resources::CreateTypeDescription() { td.AddField("capsuleNotHungryText", FieldDescription(((char *)&r.capsuleNotHungryText) - ((char *)&r), Interpreter::STRING_ID).SetReferenced()); td.AddField("capsuleNameSelect", FieldDescription(((char *)&r.capsuleNameCharSelectTemplate) - ((char *)&r), CharSelect::TYPE_ID).SetReferenced().SetDescription("properties of the letter array for changing the capsule name")); + + td.AddField("capsuleSelectTopLeft", FieldDescription(((char *)&r.capsuleSelectTopLeft) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectTopRight", FieldDescription(((char *)&r.capsuleSelectTopRight) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectTopRepeat", FieldDescription(((char *)&r.capsuleSelectTopRepeat) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectBottomLeft", FieldDescription(((char *)&r.capsuleSelectBottomLeft) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectBottomRight", FieldDescription(((char *)&r.capsuleSelectBottomRight) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectBottomRepeat", FieldDescription(((char *)&r.capsuleSelectBottomRepeat) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectLeftRepeat", FieldDescription(((char *)&r.capsuleSelectLeftRepeat) - ((char *)&r), Texture::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectRightRepeat", FieldDescription(((char *)&r.capsuleSelectRightRepeat) - ((char *)&r), Texture::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectLadder", FieldDescription(((char *)&r.capsuleSelectLadder) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleSelectCursor", FieldDescription(((char *)&r.capsuleSelectCursor) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + + td.AddField("capsuleAlignmentWheel", FieldDescription(((char *)&r.capsuleAlignmentWheel) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); + td.AddField("capsuleAlignmentCursor", FieldDescription(((char *)&r.capsuleAlignmentCursor) - ((char *)&r), Sprite::TYPE_ID).SetReferenced()); } void Resources::Construct(void *data) { diff --git a/src/menu/Resources.h b/src/menu/Resources.h index 6fc0641..1f6d207 100644 --- a/src/menu/Resources.h +++ b/src/menu/Resources.h @@ -110,6 +110,20 @@ struct Resources { graphics::CharSelect *capsuleNameCharSelectTemplate; + graphics::Sprite *capsuleSelectTopLeft; + graphics::Sprite *capsuleSelectTopRight; + graphics::Sprite *capsuleSelectTopRepeat; + graphics::Sprite *capsuleSelectBottomLeft; + graphics::Sprite *capsuleSelectBottomRight; + graphics::Sprite *capsuleSelectBottomRepeat; + graphics::Texture *capsuleSelectLeftRepeat; + graphics::Texture *capsuleSelectRightRepeat; + graphics::Sprite *capsuleSelectLadder; + graphics::Sprite *capsuleSelectCursor; + + graphics::Sprite *capsuleAlignmentWheel; + graphics::Sprite *capsuleAlignmentCursor; + Resources(); static void CreateTypeDescription(); diff --git a/test-data/capsule-sprites.png b/test-data/capsule-sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..98844641cce40482b463cc792439feb84a3d85be GIT binary patch literal 3064 zcmV009690{{R31A2``0000&P)t-s00000 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, + alignmentSprite: Sprite { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <0, 96> + }, maxHealth: 5, stats: Stats { atp: 12, @@ -17,6 +23,101 @@ export Capsule flash { mgr: 11 }, classes: [ CapsuleClass + { + name: "1 TODO", + tribe: "Shaggy", + battleSprite: flashSprite, + meleeAnimation: SimpleAnimation { + sprite: Sprite { + image: :"melee-maxim.png", + size: <96,96> + }, + frametime: 66, // two "frames" + framecount: 4 + }, + attackAnimation: ComplexAnimation { + sprite: flashSprite, + frametime: fourFramesTime, + repeat: false, + frames: + [ ComplexAnimationFrame + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> }, + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> } + ] + } + }, + { + name: "2 TODO", + tribe: "Sprite", + battleSprite: flashSprite, + meleeAnimation: SimpleAnimation { + sprite: Sprite { + image: :"melee-maxim.png", + size: <96,96> + }, + frametime: 66, // two "frames" + framecount: 4 + }, + attackAnimation: ComplexAnimation { + sprite: flashSprite, + frametime: fourFramesTime, + repeat: false, + frames: + [ ComplexAnimationFrame + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> }, + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> } + ] + }, + healthBoost: 208, + statBoost: Stats { + atp: 38, + dfp: 71, + str: 24, + agl: 78, + int: 195, + gut: 12, // TODO: this is probably higher, but clipped at 199 + mgr: 135 + } + }, + { + name: "3 TODO", + tribe: "Cupid", + battleSprite: flashSprite, + meleeAnimation: SimpleAnimation { + sprite: Sprite { + image: :"melee-maxim.png", + size: <96,96> + }, + frametime: 66, // two "frames" + framecount: 4 + }, + attackAnimation: ComplexAnimation { + sprite: flashSprite, + frametime: fourFramesTime, + repeat: false, + frames: + [ ComplexAnimationFrame + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> }, + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> } + ] + }, + healthBoost: 208, + statBoost: Stats { + atp: 38, + dfp: 71, + str: 24, + agl: 78, + int: 195, + gut: 12, // TODO: this is probably higher, but clipped at 199 + mgr: 135 + } + }, { name: "4", tribe: "Twinkle", @@ -51,6 +152,41 @@ export Capsule flash { gut: 12, // TODO: this is probably higher, but clipped at 199 mgr: 135 } + }, + { + name: "M TODO", + tribe: "Twinkle", + battleSprite: flashSprite, + meleeAnimation: SimpleAnimation { + sprite: Sprite { + image: :"melee-maxim.png", + size: <96,96> + }, + frametime: 66, // two "frames" + framecount: 4 + }, + attackAnimation: ComplexAnimation { + sprite: flashSprite, + frametime: fourFramesTime, + repeat: false, + frames: + [ ComplexAnimationFrame + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> }, + { column: 0, row: 1, disposition: < 0, -16> }, + { column: 0, row: 0, disposition: < 0, -16> } + ] + }, + healthBoost: 208, + statBoost: Stats { + atp: 38, + dfp: 71, + str: 24, + agl: 78, + int: 195, + gut: 12, // TODO: this is probably higher, but clipped at 199 + mgr: 135 + } } ] } diff --git a/test-data/test.l2s b/test-data/test.l2s index 44ffc60..c691e17 100644 --- a/test-data/test.l2s +++ b/test-data/test.l2s @@ -884,5 +884,64 @@ export MenuResources menuResources { chars: "0123456789ABCDEabcdeFGHIJfghijKLMNOklmnoPQRSTpqrstUVWXYuvwxyZ!? z!? ", width: 10, groupX: 5 + }, + capsuleSelectTopLeft: Sprite { + image: :"capsule-sprites.png", + size: <32, 8>, + offset: <64, 0> + }, + capsuleSelectTopRight: Sprite { + image: :"capsule-sprites.png", + size: <32, 8>, + offset: <128, 0> + }, + capsuleSelectTopRepeat: Texture { + image: :"capsule-sprites.png", + size: <32, 8>, + offset: <96, 0> + }, + capsuleSelectBottomLeft: Sprite { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <0, 32> + }, + capsuleSelectBottomRight: Sprite { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <128, 64> + }, + capsuleSelectBottomRepeat: Sprite { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <0, 64> + }, + capsuleSelectLeftRepeat: Texture { + image: :"capsule-sprites.png", + size: <32, 32> + }, + capsuleSelectRightRepeat: Texture { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <128, 32> + }, + capsuleSelectLadder: Sprite { + image: :"capsule-sprites.png", + size: <32, 24>, + offset: <64, 8> + }, + capsuleSelectCursor: Sprite { + image: :"capsule-sprites.png", + size: <32, 24>, + offset: <128, 8> + }, + capsuleAlignmentWheel: Sprite { + image: :"capsule-sprites.png", + size: <128, 128>, + offset: <0, 128> + }, + capsuleAlignmentCursor: Sprite { + image: :"capsule-sprites.png", + size: <32, 32>, + offset: <128, 128> } } -- 2.39.2