diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-05-27 23:50:16 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2005-05-27 23:50:16 +0000 |
commit | 30063f42cc8d13ed241a52b90e63c2c68599115e (patch) | |
tree | 68868a0aa04007a0ad4a62d97556c27b48f057d7 | |
parent | 0ecae988adfa88cb6b8803a9f5b7215221fceb74 (diff) | |
download | mana-30063f42cc8d13ed241a52b90e63c2c68599115e.tar.gz mana-30063f42cc8d13ed241a52b90e63c2c68599115e.tar.bz2 mana-30063f42cc8d13ed241a52b90e63c2c68599115e.tar.xz mana-30063f42cc8d13ed241a52b90e63c2c68599115e.zip |
autoTarget is now a Being*, also may have fixed related crash and added label
to show current target.
-rw-r--r-- | src/being.cpp | 24 | ||||
-rw-r--r-- | src/engine.cpp | 12 | ||||
-rw-r--r-- | src/game.cpp | 19 | ||||
-rw-r--r-- | src/game.h | 3 | ||||
-rw-r--r-- | src/gui/skill.cpp | 6 | ||||
-rw-r--r-- | src/net/protocol.cpp | 16 | ||||
-rw-r--r-- | src/net/protocol.h | 2 | ||||
-rw-r--r-- | src/resources/image.cpp | 5 | ||||
-rw-r--r-- | src/sound.cpp | 9 |
9 files changed, 58 insertions, 38 deletions
diff --git a/src/being.cpp b/src/being.cpp index 30e32b7c..e6435487 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -67,8 +67,13 @@ void add_node(Being *being) void remove_node(unsigned int id) { std::list<Being *>::iterator i; - for (i = beings.begin(); i != beings.end(); i++) { - if ((*i)->id == id) { + for (i = beings.begin(); i != beings.end(); i++) + { + if ((*i)->id == id) + { + if (autoTarget == (*i)) { + autoTarget = NULL; + } delete (*i); beings.erase(i); return; @@ -302,8 +307,8 @@ void Being::logic() frame = (get_elapsed_time(walk_time) * 4) / aspd; if (frame >= 4) { nextStep(); - if (autoTarget > 0 && this == player_node) { - attack(findNode(autoTarget)); + if (autoTarget && this == player_node) { + attack(autoTarget); } } break; @@ -335,9 +340,14 @@ void Being::drawSpeech(Graphics *graphics) } if (showDamage) { graphics->drawText(damage, - text_x + 60, - text_y - 60 - get_elapsed_time(damage_time) / 100, - gcn::Graphics::CENTER); + text_x + 60, + text_y - 60 - get_elapsed_time(damage_time) / 100, + gcn::Graphics::CENTER); + } + if (this == autoTarget) { + graphics->drawText("[TARGET]", + text_x + 60, text_y, + gcn::Graphics::CENTER); } } diff --git a/src/engine.cpp b/src/engine.cpp index 938068b7..75d4ba2f 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -267,7 +267,11 @@ void Engine::logic() being->logic(); - if (being->action == MONSTER_DEAD && being->frame >= 20) { + if (being->action == MONSTER_DEAD && being->frame >= 20) + { + if (autoTarget == being) { + autoTarget = NULL; + } delete being; beingIterator = beings.erase(beingIterator); } @@ -400,8 +404,10 @@ void Engine::draw() if (being->action == MONSTER_DEAD) { monsterset[being->job - 1002]->spriteset[dir + 4 * MONSTER_DEAD]->draw(screen, being->text_x + 30, being->text_y + 40); - if (autoTarget == being->id) - autoTarget = 0; + + if (autoTarget == being) { + autoTarget = NULL; + } } else { monsterset[being->job-1002]->spriteset[dir + 4 * mf]->draw( diff --git a/src/game.cpp b/src/game.cpp index 3865b575..9193e821 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -21,7 +21,6 @@ * $Id$ */ -#include "being.h" #include "engine.h" #include "floor_item.h" #include "graphics.h" @@ -54,7 +53,7 @@ int fps = 0, frame = 0, current_npc = 0; bool displayPathToMouse = false; int startX = 0, startY = 0; int gameTime = 0; -int autoTarget = 0; +Being* autoTarget = NULL; OkDialog *deathNotice = NULL; ConfirmDialog *exitConfirm = NULL; @@ -217,7 +216,7 @@ void do_input() // Get the state of the keyboard keys Uint8* keys; keys = SDL_GetKeyState(NULL); - + // Events SDL_Event event; while (SDL_PollEvent(&event)) @@ -385,7 +384,7 @@ void do_input() Being *target = findNode(mx, my); if (target) { if (target->isNpc()) { - // Check if no conflicting npc window is open + // Check if no conflicting NPC window is open if (current_npc == 0) { WFIFOW(0) = net_w_value(0x0090); @@ -397,8 +396,9 @@ void do_input() } else if (target->isMonster()) { if (keys[SDLK_LSHIFT]) { - if (target->action != MONSTER_DEAD) - autoTarget = target->id; + if (target->action != MONSTER_DEAD) { + autoTarget = target; + } } attack(target); } @@ -548,10 +548,11 @@ void do_input() if (keys[SDLK_LCTRL]) { player_node->action = ATTACK; - int monsterId = attack(player_node->x, + Being *monster = attack(player_node->x, player_node->y, player_node->direction); - if (keys[SDLK_LSHIFT]) - autoTarget = monsterId; + if (keys[SDLK_LSHIFT]) { + autoTarget = monster; + } } } } @@ -25,6 +25,7 @@ #define _TMW_GAME_H #include "main.h" +#include "being.h" #include "./gui/gui.h" #include "./gui/skill.h" #include <stdio.h> @@ -62,7 +63,7 @@ extern volatile int tick_time; extern int server_tick; extern bool displayPathToMouse; extern int startX, startY; -extern int autoTarget; +extern Being* autoTarget; /** * Main game loop diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp index 8c22af55..e511a24e 100644 --- a/src/gui/skill.cpp +++ b/src/gui/skill.cpp @@ -107,10 +107,8 @@ void SkillDialog::action(const std::string& eventId) { // Increment skill int selectedSkill = skillListBox->getSelected(); - std::cout << "SkillDialog::action(" << selectedSkill << ")\n"; - if (char_info->skill_point > 0 && selectedSkill >= 0) { - std::cout << "Sending upgrade of id " << - skillList[selectedSkill]->id << "\n"; + if (char_info->skill_point > 0 && selectedSkill >= 0) + { WFIFOW(0) = net_w_value(0x0112); WFIFOW(2) = net_w_value( skillList[selectedSkill]->id); diff --git a/src/net/protocol.cpp b/src/net/protocol.cpp index 0187f69e..f357b103 100644 --- a/src/net/protocol.cpp +++ b/src/net/protocol.cpp @@ -224,7 +224,7 @@ void action(char type, int id) WFIFOSET(7); } -int attack(unsigned short x, unsigned short y, unsigned char direction) +Being* attack(unsigned short x, unsigned short y, unsigned char direction) { Being *target; @@ -237,32 +237,38 @@ int attack(unsigned short x, unsigned short y, unsigned char direction) } else if(direction==EAST) { target = findNode(x + 1, y); } + if (target && target->isMonster()) { attack(target); - return target->id; + return target; } // Implement charging attacks here char_info->lastAttackTime = 0; - return 0; + return NULL; } void attack(Being *target) { int dist_x = target->x - player_node->x; int dist_y = target->y - player_node->y; - if (abs(dist_y) >= abs(dist_x)) { + + if (abs(dist_y) >= abs(dist_x)) + { if (dist_y > 0) player_node->direction = SOUTH; else player_node->direction = NORTH; - } else { + } + else + { if (dist_x > 0) player_node->direction = EAST; else player_node->direction = WEST; } + player_node->action = ATTACK; action(0, target->id); player_node->walk_time = tick_time; diff --git a/src/net/protocol.h b/src/net/protocol.h index 57321d45..002b4b2f 100644 --- a/src/net/protocol.h +++ b/src/net/protocol.h @@ -83,7 +83,7 @@ void walk(unsigned short x, unsigned short y, unsigned char direction); void speak(char *speech); /** Request to attack */ -int attack(unsigned short x, unsigned short y, unsigned char direction); +Being* attack(unsigned short x, unsigned short y, unsigned char direction); /** Request to attack */ void attack(Being *target); diff --git a/src/resources/image.cpp b/src/resources/image.cpp index 59745894..2669059e 100644 --- a/src/resources/image.cpp +++ b/src/resources/image.cpp @@ -55,12 +55,9 @@ Image* Image::load(void* buffer, unsigned int bufferSize, int flags) // Load the raw file data from the buffer in an RWops structure SDL_RWops *rw = SDL_RWFromMem(buffer, bufferSize); - // Use SDL_Image to load the raw image data + // Use SDL_Image to load the raw image data and have it free the data SDL_Surface* tmpImage = IMG_Load_RW(rw, 1); - // Now free the SDL_RWops data - //SDL_FreeRW(rw); - #ifndef USE_OPENGL SDL_Surface *image; diff --git a/src/sound.cpp b/src/sound.cpp index 78e949cb..b44ba077 100644 --- a/src/sound.cpp +++ b/src/sound.cpp @@ -69,7 +69,8 @@ void Sound::init() installed = true; } -void Sound::info() { +void Sound::info() +{ SDL_version compiledVersion; const SDL_version *linkedVersion; char driver[40] = "Unknown"; @@ -102,9 +103,9 @@ void Sound::info() { linkedVersion->minor, linkedVersion->patch); logger->log("Sound::info() Driver: %s", driver); - logger->log("Sound::init() Format: %s", format); - logger->log("Sound::init() Rate: %i", rate); - logger->log("Sound::init() Channels: %i", channels); + logger->log("Sound::info() Format: %s", format); + logger->log("Sound::info() Rate: %i", rate); + logger->log("Sound::info() Channels: %i", channels); } void Sound::setMusicVolume(int volume) |