diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/being.cpp | 6 | ||||
-rw-r--r-- | src/game.cpp | 16 | ||||
-rw-r--r-- | src/graphic/graphic.cpp | 56 | ||||
-rw-r--r-- | src/graphic/graphic.h | 46 | ||||
-rw-r--r-- | src/gui/button.cpp | 2 | ||||
-rw-r--r-- | src/gui/buy.h | 1 | ||||
-rw-r--r-- | src/gui/buysell.h | 1 | ||||
-rw-r--r-- | src/gui/char_select.cpp | 3 | ||||
-rw-r--r-- | src/gui/char_server.cpp | 3 | ||||
-rw-r--r-- | src/gui/chat.h | 166 | ||||
-rw-r--r-- | src/gui/checkbox.cpp | 2 | ||||
-rw-r--r-- | src/gui/gui.cpp | 27 | ||||
-rw-r--r-- | src/gui/gui.h | 17 | ||||
-rw-r--r-- | src/gui/inventory.cpp | 4 | ||||
-rw-r--r-- | src/gui/inventory.h | 3 | ||||
-rw-r--r-- | src/gui/login.cpp | 3 | ||||
-rw-r--r-- | src/gui/playerbox.cpp | 6 | ||||
-rw-r--r-- | src/gui/progressbar.cpp | 48 | ||||
-rw-r--r-- | src/gui/radiobutton.cpp | 2 | ||||
-rw-r--r-- | src/gui/scrollarea.cpp | 6 | ||||
-rw-r--r-- | src/gui/sell.h | 1 | ||||
-rw-r--r-- | src/gui/setup.cpp | 1 | ||||
-rw-r--r-- | src/gui/shop.cpp | 90 | ||||
-rw-r--r-- | src/gui/shop.h | 25 | ||||
-rw-r--r-- | src/gui/slider.cpp | 8 | ||||
-rw-r--r-- | src/gui/stats.cpp | 5 | ||||
-rw-r--r-- | src/gui/stats.h | 10 | ||||
-rw-r--r-- | src/gui/status.cpp | 1 | ||||
-rw-r--r-- | src/gui/status.h | 6 | ||||
-rw-r--r-- | src/gui/textfield.cpp | 2 | ||||
-rw-r--r-- | src/gui/window.cpp | 33 | ||||
-rw-r--r-- | src/main.cpp | 82 | ||||
-rw-r--r-- | src/main.h | 2 |
33 files changed, 268 insertions, 416 deletions
diff --git a/src/being.cpp b/src/being.cpp index 4e421784..365ece88 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -99,9 +99,9 @@ unsigned int find_monster(unsigned short x, unsigned short y) { Being *find_node(unsigned int id) { std::list<Being*>::iterator i; for (i = beings.begin(); i != beings.end(); i++) { - Being *Being = (*i); - if (Being->id == id) { - return Being; + Being *being = (*i); + if (being->id == id) { + return being; } } return NULL; diff --git a/src/game.cpp b/src/game.cpp index a4cde620..142cfbe2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -122,7 +122,7 @@ short get_elapsed_time(short start_time) { void game() { do_init(); - GraphicEngine *graphicEngine = new GraphicEngine(); + Engine *engine = new Engine(); //SDL_Event event; //SDL_EnableUNICODE(1); @@ -139,13 +139,13 @@ void game() { //} do_input(); - graphicEngine->refresh(); + engine->draw(); + graphics->updateScreen(); do_parse(); flush(); } - - delete graphicEngine; + delete engine; close_session(); } @@ -359,7 +359,7 @@ void do_parse() { char direction; Being *being = NULL; PATH_NODE *pn; - int len; + int len, n_items; // We need at least 2 bytes to identify a packet if (in_size >= 2) { @@ -700,15 +700,15 @@ void do_parse() { switch (RFIFOB(26)) { case 0: // Damage being = find_node(RFIFOL(6)); - if(being!=NULL) { - if(being->speech!=NULL) { + if (being != NULL) { + if (being->speech != NULL) { free(being->speech); being->speech = NULL; //being->speech_time = SPEECH_TIME; } being->speech = (char *)malloc(5); memset(being->speech, '\0', 5); - if(RFIFOW(22)==0) { + if (RFIFOW(22) == 0) { sprintf(being->speech, "miss"); being->speech_color = makecol(255, 255, 0); } else { diff --git a/src/graphic/graphic.cpp b/src/graphic/graphic.cpp index 3fe9526b..8383526a 100644 --- a/src/graphic/graphic.cpp +++ b/src/graphic/graphic.cpp @@ -25,6 +25,7 @@ #include "../gui/gui.h" #include "../gui/textfield.h" #include "../gui/status.h" +#include "../main.h" BITMAP *buffer, *chat_background; @@ -142,9 +143,30 @@ int get_y_offset(Being *being) { } -GraphicEngine::GraphicEngine() { - clear_bitmap(screen); - +Graphics::Graphics() +{ + // Create drawing buffer + // SDL probably doesn't need this buffer, it'll buffer for us. + buffer = create_bitmap(SCREEN_W, SCREEN_H); + if (!buffer) { + error("Not enough memory to create buffer"); + } + + setTarget(buffer); +} + +Graphics::~Graphics() { + destroy_bitmap(buffer); +} + +void Graphics::updateScreen() +{ + blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); +} + + +Engine::Engine() +{ // Initializes GUI chat_background = create_bitmap(592, 100); clear_to_color(chat_background, makecol(0, 0, 0)); @@ -193,15 +215,6 @@ GraphicEngine::GraphicEngine() { // Give focus to the chat input chatInput->requestFocus(); - // SDL probably doesn't need this buffer, it'll buffer for us. - buffer = create_bitmap(SCREEN_W, SCREEN_H); - if (!buffer) { - error("Not enough memory to create buffer"); - } - - // Initialize the gui bitmap to the page that will be drawn first - gui_bitmap = this->buffer; - // Load the sprite sets ResourceManager *resman = ResourceManager::getInstance(); Image *npcbmp = resman->getImage("graphic/npcset.bmp"); @@ -220,7 +233,8 @@ GraphicEngine::GraphicEngine() { monsterset = new Spriteset(monsterbitmap, 60, 60); } -GraphicEngine::~GraphicEngine() { +Engine::~Engine() +{ delete statusWindow; delete buyDialog; delete sellDialog; @@ -236,7 +250,8 @@ GraphicEngine::~GraphicEngine() { delete emotionset; } -void GraphicEngine::refresh() { +void Engine::draw() +{ map_x = (player_node->x - 13) * 32 + get_x_offset(player_node); map_y = (player_node->y - 9) * 32 + @@ -473,17 +488,14 @@ void GraphicEngine::refresh() { if (statsWindow->isVisible()) { statsWindow->update(); } + if (statusWindow->isVisible()) { + statusWindow->update(); + } - // Update character status display - statusWindow->update(); - - // Update GUI - guiGraphics->setTarget(buffer); - gui->update(); + gui->logic(); + gui->draw(); textprintf_ex(buffer, font, 0, 0, makecol(255, 255, 255), -1, "[%i fps] %i,%i", fps, mouse_x / 32 + camera_x, mouse_y / 32 + camera_y); - - blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); } diff --git a/src/graphic/graphic.h b/src/graphic/graphic.h index 970b09c9..7de6bd3a 100644 --- a/src/graphic/graphic.h +++ b/src/graphic/graphic.h @@ -24,12 +24,12 @@ #ifndef _GRAPHIC_H #define _GRAPHIC_H -#include "../game.h" +class Graphics; + #include "../map.h" -#include "../being.h" -#include "../gui/buy.h" #include "../gui/npc.h" #include "../gui/npc_text.h" +#include "../gui/buy.h" #include "../gui/sell.h" #include "../gui/buysell.h" #include "../gui/chat.h" @@ -40,14 +40,15 @@ #include "../gui/npc.h" #include "../gui/status.h" #include "../gui/stats.h" +#include "../gui/skill.h" #include "../resources/resourcemanager.h" #include "spriteset.h" #include <allegro.h> +#include <guichan/allegro.hpp> #define TILE_SIZE 32 extern BITMAP *buffer; -extern int page_num; extern char speech[255]; extern char npc_text[1000]; extern char skill_points[10]; @@ -86,15 +87,40 @@ class BuySellListener : public gcn::ActionListener { void action(const std::string& eventId); }; -class GraphicEngine { +/** + * A central point of control for graphics. + */ +class Graphics : public gcn::AllegroGraphics { + public: + /** + * Constructor. + */ + Graphics(); + + /** + * Destructor. + */ + ~Graphics(); + + /** + * Updates the screen. This is done by either copying the buffer to the + * screen or swapping pages. + */ + void updateScreen(); +}; + +/** + * Game engine that does the main drawing. + */ +class Engine { private: Spriteset *tileset, *emotionset, *npcset, *monsterset; - BITMAP *buffer; - + public: - GraphicEngine(); - ~GraphicEngine(); - void refresh(); + Engine(); + ~Engine(); + + void draw(); }; #endif diff --git a/src/gui/button.cpp b/src/gui/button.cpp index 3d7b3b18..3576b1d0 100644 --- a/src/gui/button.cpp +++ b/src/gui/button.cpp @@ -48,7 +48,7 @@ void Button::draw(gcn::Graphics* graphics) { int x, y; getAbsolutePosition(x, y); - draw_skinned_rect(gui_bitmap, &gui_skin.button.background[mode], + draw_skinned_rect(buffer, &gui_skin.button.background[mode], x, y, getWidth(), getHeight()); graphics->setColor(getForegroundColor()); diff --git a/src/gui/buy.h b/src/gui/buy.h index 7a6bd484..b6265c6e 100644 --- a/src/gui/buy.h +++ b/src/gui/buy.h @@ -24,7 +24,6 @@ #ifndef _TMW_BUY_H #define _TMW_BUY_H -#include "gui.h" #include "window.h" #include "shop.h" diff --git a/src/gui/buysell.h b/src/gui/buysell.h index 02ddb816..2d1d3c29 100644 --- a/src/gui/buysell.h +++ b/src/gui/buysell.h @@ -24,7 +24,6 @@ #ifndef _TMW_BUYSELL_H #define _TMW_BUYSELL_H -#include "gui.h" #include "window.h" /** diff --git a/src/gui/char_select.cpp b/src/gui/char_select.cpp index 87a30000..ac644f3a 100644 --- a/src/gui/char_select.cpp +++ b/src/gui/char_select.cpp @@ -439,7 +439,8 @@ void charSelect() // Draw background login_wallpaper->draw(buffer, 0, 0); - gui->update(); + gui->logic(); + gui->draw(); // Draw to screen blit(buffer, screen, 0, 0, 0, 0, 800, 600); diff --git a/src/gui/char_server.cpp b/src/gui/char_server.cpp index 3b9d03c8..4178a8e5 100644 --- a/src/gui/char_server.cpp +++ b/src/gui/char_server.cpp @@ -118,7 +118,8 @@ void char_server() { showServerList = 1; while (showServerList) { login_wallpaper->draw(buffer, 0, 0); - gui->update(); + gui->logic(); + gui->draw(); blit(buffer, screen, 0, 0, 0, 0, 800, 600); } diff --git a/src/gui/chat.h b/src/gui/chat.h index 4c4bb933..424a0d0b 100644 --- a/src/gui/chat.h +++ b/src/gui/chat.h @@ -24,121 +24,117 @@ #ifndef _TMW_CHAT_H #define _TMW_CHAT_H -#include "../main.h" +#include "../net/network.h" +#include <allegro.h> #include <list> #include <string> #include <fstream> -#define BY_GM 0 // those should be self-explanatory =) -#define BY_PLAYER 1 -#define BY_OTHER 2 -#define BY_SERVER 3 +#define BY_GM 0 // those should be self-explanatory =) +#define BY_PLAYER 1 +#define BY_OTHER 2 +#define BY_SERVER 3 -#define ACT_WHISPER 4 // getting whispered at -#define ACT_IS 5 // equivalent to "/me" in irc +#define ACT_WHISPER 4 // getting whispered at +#define ACT_IS 5 // equivalent to "/me" in irc -#define IS_ANNOUNCE "/announce " -#define IS_ANNOUNCE_LENGTH 10 +#define IS_ANNOUNCE "/announce " +#define IS_ANNOUNCE_LENGTH 10 #define IS_WHERE "/where " #define IS_WHERE_LENGTH 7 /** - gets in between usernick and message text depending on - message type -*/ -#define CAT_NORMAL ": " -#define CAT_IS "" -#define CAT_WHISPER " says: " + * gets in between usernick and message text depending on + * message type + */ +#define CAT_NORMAL ": " +#define CAT_IS "" +#define CAT_WHISPER " says: " /** some generic color macros */ -#define COLOR_WHITE (makecol(255,255,255)) // plain white -#define COLOR_BLUE (makecol( 97,156,236)) // cold gm blue :P -#define COLOR_YELLOW (makecol(255,246, 98)) // sexy yellow -#define COLOR_GREEN (makecol( 39,197, 39)) // cool green -#define COLOR_RED (makecol(255, 0, 0)) // ack red XD -#define COLOR_LIGHTBLUE (makecol( 83,223,246)) // bright blue +#define COLOR_WHITE (makecol(255,255,255)) // plain white +#define COLOR_BLUE (makecol( 97,156,236)) // cold gm blue :P +#define COLOR_YELLOW (makecol(255,246, 98)) // sexy yellow +#define COLOR_GREEN (makecol( 39,197, 39)) // cool green +#define COLOR_RED (makecol(255, 0, 0)) // ack red XD +#define COLOR_LIGHTBLUE (makecol( 83,223,246)) // bright blue /** calculate text-width in pixel */ #define TEXT_GETWIDTH(str) (text_length(font, str)) #define TEXT_OUT(bmp, col, str) (textprintf_ex(bmp, font, 1, y, col, str, 1)) /** job dependend identifiers (?) */ -#define SKILL_BASIC 0x0001 -#define SKILL_WARP 0x001b -#define SKILL_STEAL 0x0032 -#define SKILL_ENVENOM 0x0034 +#define SKILL_BASIC 0x0001 +#define SKILL_WARP 0x001b +#define SKILL_STEAL 0x0032 +#define SKILL_ENVENOM 0x0034 /** basic skills identifiers */ -#define BSKILL_TRADE 0x0000 -#define BSKILL_EMOTE 0x0001 -#define BSKILL_SIT 0x0002 -#define BSKILL_CREATECHAT 0x0003 -#define BSKILL_JOINPARTY 0x0004 -#define BSKILL_SHOUT 0x0005 -#define BSKILL_PK 0x0006 // ?? -#define BSKILL_SETALLIGN 0x0007 // ?? +#define BSKILL_TRADE 0x0000 +#define BSKILL_EMOTE 0x0001 +#define BSKILL_SIT 0x0002 +#define BSKILL_CREATECHAT 0x0003 +#define BSKILL_JOINPARTY 0x0004 +#define BSKILL_SHOUT 0x0005 +#define BSKILL_PK 0x0006 // ?? +#define BSKILL_SETALLIGN 0x0007 // ?? /** reasons why action failed */ -#define RFAIL_SKILLDEP 0x00 -#define RFAIL_INSUFHP 0x01 -#define RFAIL_INSUFSP 0x02 -#define RFAIL_NOMEMO 0x03 -#define RFAIL_SKILLDELAY 0x04 -#define RFAIL_ZENY 0x05 -#define RFAIL_WEAPON 0x06 -#define RFAIL_REDGEM 0x07 -#define RFAIL_BLUEGEM 0x08 -#define RFAIL_OVERWEIGHT 0x09 -#define RFAIL_GENERIC 0x0a +#define RFAIL_SKILLDEP 0x00 +#define RFAIL_INSUFHP 0x01 +#define RFAIL_INSUFSP 0x02 +#define RFAIL_NOMEMO 0x03 +#define RFAIL_SKILLDELAY 0x04 +#define RFAIL_ZENY 0x05 +#define RFAIL_WEAPON 0x06 +#define RFAIL_REDGEM 0x07 +#define RFAIL_BLUEGEM 0x08 +#define RFAIL_OVERWEIGHT 0x09 +#define RFAIL_GENERIC 0x0a /** should always be zero if failed */ -#define SKILL_FAILED 0x00 +#define SKILL_FAILED 0x00 struct CHATSKILL { - short skill; - short bskill; - short unused; - char success; - char reason; + short skill; + short bskill; + short unused; + char success; + char reason; }; /** - Simple ChatLog Object v0.5 (i'd say...) - - Bestviewd w/ Bitstream Vera Sans Mono @ 9pt and a tab-width of 2 spaces - - Author: kth5 aka Alexander Baldeck - pipe your questions, suggestions and flames to: kth5@gawab.com -*/ + * Simple chatlog object. + */ class Chat { - public : - Chat(const char *, int); - void chat_dlgrsize(int); - - void chat_log(std::string, int, FONT *); - void chat_log(CHATSKILL, FONT *); - - void chat_draw(BITMAP *, int, FONT *); - char * chat_send(std::string, std::string); - ~Chat(); - private : - std::ofstream chatlog_file; - - typedef struct CHATLOG { // list item container object - std::string nick; - std::string text; - int own; - int width; - }; - - std::list<CHATLOG> chatlog; // list object ready to accept out CHATLOG struct :) - std::list<CHATLOG>::iterator iter; - - int items; - int items_keep; - - std::string const_msg(CHATSKILL); // contructs action-fail messages - std::string const_msg(int); // constructs normal messages (not implemented yet) + public : + Chat(const char *, int); + void chat_dlgrsize(int); + + void chat_log(std::string, int, FONT *); + void chat_log(CHATSKILL, FONT *); + + void chat_draw(BITMAP *, int, FONT *); + char * chat_send(std::string, std::string); + ~Chat(); + private : + std::ofstream chatlog_file; + + typedef struct CHATLOG { // list item container object + std::string nick; + std::string text; + int own; + int width; + }; + + std::list<CHATLOG> chatlog; // list object ready to accept out CHATLOG struct :) + std::list<CHATLOG>::iterator iter; + + int items; + int items_keep; + + std::string const_msg(CHATSKILL); // contructs action-fail messages + std::string const_msg(int); // constructs normal messages (not implemented yet) }; #endif diff --git a/src/gui/checkbox.cpp b/src/gui/checkbox.cpp index 4d348e98..aa6a665a 100644 --- a/src/gui/checkbox.cpp +++ b/src/gui/checkbox.cpp @@ -49,5 +49,5 @@ void CheckBox::drawBox(gcn::Graphics* graphics) { x += 2; y += 2; - masked_blit(box, gui_bitmap, 0, 0, x, y, box->w, box->h); + masked_blit(box, buffer, 0, 0, x, y, box->w, box->h); } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 14e76efd..eab34a4b 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -45,7 +45,6 @@ static BITMAP *gui__repository[GUI_BMP_COUNT]; // The currently active skin LexSkin gui_skin; -BITMAP *gui_bitmap; DATAFILE *gui_gfx; @@ -55,11 +54,10 @@ gcn::AllegroGraphics *guiGraphics; // Graphics driver WindowContainer *guiTop; // The top container -Gui::Gui(BITMAP *screen) +Gui::Gui(Graphics *graphics) { // Set graphics - guiGraphics = new gcn::AllegroGraphics(); - guiGraphics->setTarget(screen); + guiGraphics = graphics; // Set input guiInput = new AllegroInput(); @@ -96,15 +94,6 @@ Gui::~Gui() delete focusHandler; } -void Gui::update() -{ - logic(); - draw(); - - // Draw the mouse - draw_sprite(gui_bitmap, mouse_sprite, mouse_x, mouse_y); -} - void Gui::logic() { guiInput->_pollInput(); @@ -190,6 +179,9 @@ void Gui::draw() guiTop->draw(guiGraphics); guiGraphics->popClipArea(); + // Draw the mouse + draw_sprite(buffer, mouse_sprite, mouse_x, mouse_y); + guiGraphics->_endDraw(); } @@ -199,12 +191,11 @@ void Gui::focusNone() } -void init_gui(BITMAP *bitmap, const char *skin) { - gui = new Gui(bitmap); +void init_gui(Graphics *graphics) { + gui = new Gui(graphics); - gui_bitmap = bitmap; - gui_load_skin(skin); - show_mouse(NULL); + // TODO: Remove Allegro config file usage from GUI look + gui_load_skin("data/Skin/aqua.skin"); } diff --git a/src/gui/gui.h b/src/gui/gui.h index 197d0c97..73858be3 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -33,6 +33,7 @@ #include <allegro.h> #include <string.h> #include "windowcontainer.h" +#include "../graphic/graphic.h" /** * \defgroup GUI GUI related classes @@ -49,7 +50,7 @@ class Gui /** * Constructor. */ - Gui(BITMAP *screen); + Gui(Graphics *screen); /** * Destructor. @@ -57,16 +58,10 @@ class Gui ~Gui(); /** - * Performs GUI logic and drawing. - */ - void update(); - - /** * Focus none of the Widgets in the Gui. */ void focusNone(); - private: /** * Performs the Gui:s logic by calling all logic functions * down in the Gui heirarchy. Logic can be just about anything @@ -79,10 +74,11 @@ class Gui /** * Draws the whole Gui by calling draw functions down in the - * Gui hierarchy. + * Gui hierarchy. It also draws the mouse pointer. */ void draw(); + private: gcn::Gui* gui; /**< The GUI system */ gcn::Input* guiInput; /**< Input driver */ gcn::ImageLoader* imageLoader; /**< For loading images */ @@ -147,21 +143,20 @@ typedef struct { } LexSkin; extern LexSkin gui_skin; -extern BITMAP *gui_bitmap; extern Gui* gui; extern WindowContainer* guiTop; // The top container extern gcn::AllegroGraphics* guiGraphics; // Graphics driver /** Initialize gui system */ -void init_gui(BITMAP *dest_bitmap, const char *skin); +void init_gui(Graphics *graphics); void gui_exit(); int gui_load_skin(const char* skinname); void gui_shutdown(void); /** Helper procedure to draw skinned rectangles */ -void draw_skinned_rect(BITMAP*dst, LexSkinnedRect *skin, +void draw_skinned_rect(BITMAP *dst, LexSkinnedRect *skin, int x, int y, int w, int h); #endif diff --git a/src/gui/inventory.cpp b/src/gui/inventory.cpp index c77dcfdd..dcaedc6f 100644 --- a/src/gui/inventory.cpp +++ b/src/gui/inventory.cpp @@ -21,6 +21,7 @@ * $Id$ */ +#include "../graphic/graphic.h" #include "inventory.h" #include "../resources/resourcemanager.h" #include "../resources/image.h" @@ -54,8 +55,7 @@ void InventoryWindow::draw(gcn::Graphics *graphics) // Draw window graphics Window::draw(graphics); - gcn::AllegroGraphics *alGraphics = (gcn::AllegroGraphics*)graphics; - BITMAP *target = alGraphics->getTarget(); + BITMAP *target = ((Graphics*)graphics)->getTarget(); for (int i = 0; i < INVENTORY_SIZE; i++) { if (items[i].quantity > 0) { diff --git a/src/gui/inventory.h b/src/gui/inventory.h index 7e7b7963..cedc1697 100644 --- a/src/gui/inventory.h +++ b/src/gui/inventory.h @@ -25,12 +25,9 @@ #define _INVENTORY_H #include <allegro.h> -#include "../main.h" -#include "../game.h" #include "../log.h" #include "../net/network.h" #include "../graphic/spriteset.h" -#include "gui.h" #include "window.h" #define INVENTORY_SIZE 100 diff --git a/src/gui/login.cpp b/src/gui/login.cpp index 6db212b2..13a8c2f3 100644 --- a/src/gui/login.cpp +++ b/src/gui/login.cpp @@ -132,7 +132,8 @@ void login() { while (state == LOGIN) { login_wallpaper->draw(buffer, 0, 0); - gui->update(); + gui->logic(); + gui->draw(); blit(buffer, screen, 0, 0, 0, 0, 800, 600); if (key[KEY_ESC]) { state = EXIT; diff --git a/src/gui/playerbox.cpp b/src/gui/playerbox.cpp index 243849e6..67d0e9e3 100644 --- a/src/gui/playerbox.cpp +++ b/src/gui/playerbox.cpp @@ -41,12 +41,12 @@ void PlayerBox::draw(gcn::Graphics *graphics) getAbsolutePosition(x, y); // Draw character - playerset->spriteset[0]->draw(gui_bitmap, x - 25, y - 25); + playerset->spriteset[0]->draw(buffer, x - 25, y - 25); // Draw his hair int hf = hairColor + 40 * (hairStyle); if (hf >= 0 && hf < (int)hairset->spriteset.size()) { - hairset->spriteset[hf]->draw(gui_bitmap, x + 37, y + 5); + hairset->spriteset[hf]->draw(buffer, x + 37, y + 5); } } } @@ -61,5 +61,5 @@ void PlayerBox::drawBorder(gcn::Graphics *graphics) x -= bs; y -= bs; - draw_skinned_rect(gui_bitmap, &gui_skin.textbox.bg, x, y, w, h); + draw_skinned_rect(buffer, &gui_skin.textbox.bg, x, y, w, h); } diff --git a/src/gui/progressbar.cpp b/src/gui/progressbar.cpp index bfc481cf..55fadd60 100644 --- a/src/gui/progressbar.cpp +++ b/src/gui/progressbar.cpp @@ -43,15 +43,15 @@ void ProgressBar::draw(gcn::Graphics *graphics) // outer bar int MyColor = makecol(abs(Red-70), abs(Green-70), abs(Blue-70)); - hline(gui_bitmap, absx+X+7, absy+Y, absx+X+Width, MyColor); - hline(gui_bitmap, absx+X, absy+Y+7, absx+X+Width-7, MyColor); - line(gui_bitmap, absx+X+7, absy+Y, absx+X, absy+Y+7, MyColor); - line(gui_bitmap, absx+X+Width, absy+Y, absx+X+Width-7, absy+Y+7, MyColor); + hline(buffer, absx+X+7, absy+Y, absx+X+Width, MyColor); + hline(buffer, absx+X, absy+Y+7, absx+X+Width-7, MyColor); + line(buffer, absx+X+7, absy+Y, absx+X, absy+Y+7, MyColor); + line(buffer, absx+X+Width, absy+Y, absx+X+Width-7, absy+Y+7, MyColor); // Shadow of outer bar MyColor = makeacol(0, 0, 0, 80); - hline(gui_bitmap, absx+X+1, absy+Y+7+1, absx+X+Width-7, MyColor); - line(gui_bitmap, absx+X+Width+1, absy+Y, absx+X+Width-7+1, absy+Y+7, MyColor); + hline(buffer, absx+X+1, absy+Y+7+1, absx+X+Width-7, MyColor); + line(buffer, absx+X+Width+1, absy+Y, absx+X+Width-7+1, absy+Y+7, MyColor); // Inner bar @@ -62,48 +62,48 @@ void ProgressBar::draw(gcn::Graphics *graphics) for(int i = 1; i < 7; i++) { - Temp = absx+X+int(float(Width)*progress)-i-1; - if ( Temp < (absx+X+8-i) ) Temp = (absx+X+8-i); - hline(gui_bitmap, absx+X+8-i, absy+Y+i, Temp, MyColor); + Temp = absx+X+int(float(Width)*progress)-i-1; + if (Temp < (absx + X + 8 - i)) Temp = (absx + X + 8 - i); + hline(buffer, absx+X+8-i, absy+Y+i, Temp, MyColor); } // Shadow of inner bar Temp = absx+X+int(float(Width)*progress)-2; if ( Temp < (absx+X+7+1) ) Temp = absx+X+7; MyColor = makeacol(abs(Red-40), abs(Green-40), abs(Blue-40), 80); - hline(gui_bitmap, absx+X+7+1, absy+Y+1, Temp, MyColor); - line(gui_bitmap, absx+X+7, absy+Y+1, absx+X+2, absy+Y+7-1, MyColor); + hline(buffer, absx+X+7+1, absy+Y+1, Temp, MyColor); + line(buffer, absx+X+7, absy+Y+1, absx+X+2, absy+Y+7-1, MyColor); - //rectfill(gui_bitmap, absx+7, absy+7, absx+39, absy+9, MyColor); + //rectfill(buffer, absx+7, absy+7, absx+39, absy+9, MyColor); /* if (progress != 0) { - masked_blit(gui_skin.bar.bg.grid[3], gui_bitmap, - 0, 0, x, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[3], buffer, + 0, 0, x, y, buffer->w, buffer->h); } else { - masked_blit(gui_skin.bar.bg.grid[0], gui_bitmap, - 0, 0, x, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[0], buffer, + 0, 0, x, y, buffer->w, buffer->h); } for (int i = 3; i < (w - 3); i++) { if (i < progress * w - 3) { - masked_blit(gui_skin.bar.bg.grid[4], gui_bitmap, - 0, 0, x + 1 * i, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[4], buffer, + 0, 0, x + 1 * i, y, buffer->w, buffer->h); } else { - masked_blit(gui_skin.bar.bg.grid[1], gui_bitmap, - 0, 0, x + 1 * i, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[1], buffer, + 0, 0, x + 1 * i, y, buffer->w, buffer->h); } } if (progress == 1) { - masked_blit(gui_skin.bar.bg.grid[5], gui_bitmap, - 0, 0, x + w - 3, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[5], buffer, + 0, 0, x + w - 3, y, buffer->w, buffer->h); } else { - masked_blit(gui_skin.bar.bg.grid[2], gui_bitmap, - 0, 0, x + w - 3, y, gui_bitmap->w, gui_bitmap->h); + masked_blit(gui_skin.bar.bg.grid[2], buffer, + 0, 0, x + w - 3, y, buffer->w, buffer->h); }*/ } diff --git a/src/gui/radiobutton.cpp b/src/gui/radiobutton.cpp index 97c93954..f5bbeca5 100644 --- a/src/gui/radiobutton.cpp +++ b/src/gui/radiobutton.cpp @@ -57,6 +57,6 @@ void RadioButton::drawBox(gcn::Graphics* graphics) x += 2; y += 2; if (box != NULL) { - box->draw(gui_bitmap, x, y); + box->draw(buffer, x, y); } } diff --git a/src/gui/scrollarea.cpp b/src/gui/scrollarea.cpp index f994ea52..80943ef7 100644 --- a/src/gui/scrollarea.cpp +++ b/src/gui/scrollarea.cpp @@ -104,7 +104,7 @@ void ScrollArea::drawBorder(gcn::Graphics *graphics) x -= bs; y -= bs; - draw_skinned_rect(gui_bitmap, &gui_skin.textbox.bg, x, y, w, h); + draw_skinned_rect(buffer, &gui_skin.textbox.bg, x, y, w, h); } void ScrollArea::drawUpButton(gcn::Graphics *graphics) @@ -133,7 +133,7 @@ void ScrollArea::drawVBar(gcn::Graphics *graphics) gcn::Rectangle dim = getVerticalBarDimension(); getAbsolutePosition(x, y); - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.bg, + draw_skinned_rect(buffer, &gui_skin.listbox.bg, x + dim.x, y + dim.y, dim.width, dim.height); } @@ -148,7 +148,7 @@ void ScrollArea::drawVMarker(gcn::Graphics *graphics) gcn::Rectangle dim = getVerticalMarkerDimension(); getAbsolutePosition(x, y); - draw_skinned_rect(gui_bitmap, &gui_skin.listbox.vscroll, + draw_skinned_rect(buffer, &gui_skin.listbox.vscroll, x + dim.x, y + dim.y, dim.width, dim.height); } diff --git a/src/gui/sell.h b/src/gui/sell.h index 50da5a10..e1c5d804 100644 --- a/src/gui/sell.h +++ b/src/gui/sell.h @@ -24,7 +24,6 @@ #ifndef _TMW_SELL_H #define _TMW_SELL_H -#include "gui.h" #include "window.h" #include "shop.h" diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index 589935be..e9675ab3 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -33,6 +33,7 @@ #include "listbox.h" #include "radiobutton.h" #include "ok_dialog.h" +#include "../main.h" #ifndef WIN32 extern Sound sound; diff --git a/src/gui/shop.cpp b/src/gui/shop.cpp index cc9d80ab..77e33ee0 100644 --- a/src/gui/shop.cpp +++ b/src/gui/shop.cpp @@ -22,85 +22,17 @@ */ #include "shop.h" -#include "../graphic/graphic.h" - -int n_items; -char* selectedItem = "You got 4"; -ITEM_SHOP *shop = NULL; char *item_db[] = { - "Cactus Drink", "Cactus potion", "Casino coins", "Decor Candy", "Maggot Slime", - "Candy Cane", "Scorpion Stinger", "Xmas Cake", "Chocolate", "Candy", "Santa Hat" + "Cactus Drink", + "Cactus potion", + "Casino coins", + "Decor Candy", + "Maggot Slime", + "Candy Cane", + "Scorpion Stinger", + "Xmas Cake", + "Chocolate", + "Candy", + "Santa Hat" }; - -char *shop_list(int index, int *list_size) { - if(index<0) { - *list_size = n_items; - return NULL; - } else { - int iterator = 0; - ITEM_SHOP *item_shop = shop; - while(iterator<index) { - item_shop = item_shop->next; - iterator++; - } - return item_shop->name; - } -} - -void close_shop() { - ITEM_SHOP *temp, *next; - temp = shop; - while(temp) { - next = temp->next; - free(temp); - temp = next; - } - shop = NULL; -} - -short get_item_id(int index) { - int iterator = 0; - ITEM_SHOP *item_shop = shop; - while(iterator<index) { - item_shop = item_shop->next; - iterator++; - } - return item_shop->id; -} - -int get_item_quantity(int index) { - int iterator = 0; - ITEM_SHOP *item_shop = shop; - while(iterator<index) { - item_shop = item_shop->next; - iterator++; - } - if(item_shop)return item_shop->quantity; - else return 0; -} - -int get_item_index(int index) { - int iterator = 0; - ITEM_SHOP *item_shop = shop; - while(iterator<index) { - item_shop = item_shop->next; - iterator++; - } - return item_shop->index; -} - -int get_item_price(int index) { - int iterator = 0; - ITEM_SHOP *item_shop = shop; - while(iterator<index) { - item_shop = item_shop->next; - iterator++; - } - return item_shop->price; -} - -void changeQ(void *dp3, int d2) { - sprintf(itemCurrenyQ,"%i",d2); - printf("%s\n",itemCurrenyQ); -} diff --git a/src/gui/shop.h b/src/gui/shop.h index c223ef7c..635075a1 100644 --- a/src/gui/shop.h +++ b/src/gui/shop.h @@ -27,29 +27,14 @@ #include <stdlib.h> #include <stdio.h> -#include "inventory.h" - - struct ITEM_SHOP { - char name[30]; - int price; - short id; - int index; - int quantity; - ITEM_SHOP *next; + char name[30]; + int price; + short id; + int index; + int quantity; }; -extern int n_items; -extern char* selectedItem; -extern char itemCurrenyQ[10]; extern char *item_db[]; -char *shop_list(int index, int *list_size); -void changeQ(void *dp3, int d2); -void close_shop(); -short get_item_id(int index); -int get_item_quantity(int index); -int get_item_index(int index); -int get_item_price(int index); - #endif diff --git a/src/gui/slider.cpp b/src/gui/slider.cpp index 11254f09..48c89472 100644 --- a/src/gui/slider.cpp +++ b/src/gui/slider.cpp @@ -46,18 +46,18 @@ void Slider::draw(gcn::Graphics *graphics) y += (h - gui_skin.slider.hSlider[0]->h) / 2; - masked_blit(gui_skin.slider.hSlider[0], gui_bitmap, 0, 0, x, y, + masked_blit(gui_skin.slider.hSlider[0], buffer, 0, 0, x, y, gui_skin.slider.hSlider[0]->w, gui_skin.slider.hSlider[0]->h); w -= gui_skin.slider.hSlider[0]->w + gui_skin.slider.hSlider[2]->w; x += gui_skin.slider.hSlider[0]->w; - masked_stretch_blit(gui_skin.slider.hSlider[1], gui_bitmap, 0, 0, + masked_stretch_blit(gui_skin.slider.hSlider[1], buffer, 0, 0, gui_skin.slider.hSlider[1]->w, gui_skin.slider.hSlider[1]->h, x, y, w, gui_skin.slider.hSlider[1]->h); x += w; - masked_blit(gui_skin.slider.hSlider[2], gui_bitmap, 0, 0, x, y, + masked_blit(gui_skin.slider.hSlider[2], buffer, 0, 0, x, y, gui_skin.slider.hSlider[2]->w, gui_skin.slider.hSlider[2]->h); drawMarker(graphics); @@ -72,6 +72,6 @@ void Slider::drawMarker(gcn::Graphics *graphics) x += mMarkerPosition; y += (h - gui_skin.slider.hGrip->h) / 2; - masked_blit(gui_skin.slider.hGrip, gui_bitmap, 0, 0, x, y, + masked_blit(gui_skin.slider.hGrip, buffer, 0, 0, x, y, gui_skin.slider.hGrip->w, gui_skin.slider.hGrip->h); } diff --git a/src/gui/stats.cpp b/src/gui/stats.cpp index 7e9f6924..bc2e4f34 100644 --- a/src/gui/stats.cpp +++ b/src/gui/stats.cpp @@ -22,8 +22,9 @@ */ #include "stats.h" - -extern PLAYER_INFO *char_info; +#include "button.h" +#include "../main.h" +#include "../net/network.h" StatsWindow::StatsWindow(): Window("Stats") diff --git a/src/gui/stats.h b/src/gui/stats.h index a220f125..e03c2a86 100644 --- a/src/gui/stats.h +++ b/src/gui/stats.h @@ -24,10 +24,7 @@ #ifndef _TMW_STATS_WINDOW_H #define _TMW_STATS_WINDOW_H -#include "button.h" #include "window.h" -#include "../main.h" -#include "../net/network.h" #include <string> #include <sstream> @@ -66,12 +63,7 @@ class StatsWindow : public Window, public gcn::ActionListener { /** * Stats buttons. */ - Button *statsButton[6]; - - /** - * Stats window ptr. - */ - static StatsWindow *ptr; + gcn::Button *statsButton[6]; }; #endif /* _TMW_STATS_WINDOW_H */ diff --git a/src/gui/status.cpp b/src/gui/status.cpp index 99ab948c..fa31919d 100644 --- a/src/gui/status.cpp +++ b/src/gui/status.cpp @@ -22,6 +22,7 @@ */ #include "status.h" +#include "../main.h" StatusWindow::StatusWindow(): Window("%s Lvl: % 2i Job: % 2i") diff --git a/src/gui/status.h b/src/gui/status.h index 27df19da..1e71dcd1 100644 --- a/src/gui/status.h +++ b/src/gui/status.h @@ -25,11 +25,9 @@ #pragma warning(disable:4312) #endif -#ifndef _STATS_H -#define _STATS_H +#ifndef _TMW_STATS_H +#define _TMW_STATS_H -#include "../main.h" -#include "gui.h" #include "window.h" #include "progressbar.h" #include <allegro.h> diff --git a/src/gui/textfield.cpp b/src/gui/textfield.cpp index 4022ca2d..0d9a21c3 100644 --- a/src/gui/textfield.cpp +++ b/src/gui/textfield.cpp @@ -59,5 +59,5 @@ void TextField::drawBorder(gcn::Graphics *graphics) x -= bs; y -= bs; - draw_skinned_rect(gui_bitmap, &gui_skin.textbox.bg, x, y, w, h); + draw_skinned_rect(buffer, &gui_skin.textbox.bg, x, y, w, h); } diff --git a/src/gui/window.cpp b/src/gui/window.cpp index 9c08df9c..665295cb 100644 --- a/src/gui/window.cpp +++ b/src/gui/window.cpp @@ -107,27 +107,18 @@ void Window::draw(gcn::Graphics* graphics) getWidth(), getHeight() - titlebarHeight + 1)); // Skinned dialog render - if (typeid(*graphics) == typeid(gcn::AllegroGraphics)) - { - gcn::AllegroGraphics *gfx = (gcn::AllegroGraphics*)graphics; - BITMAP *screen = gfx->getTarget(); - int x, y; - getAbsolutePosition(x, y); - - // Draw title bar - dLeft->draw(screen, x, y); - dMid->drawPattern(screen, - x + dLeft->getWidth(), y, - getWidth() - dLeft->getWidth() - dRight->getWidth(), - dMid->getHeight()); - dRight->draw(screen, x + getWidth() - dRight->getWidth(), y); - } - else { - // Plain title bar - graphics->setColor(titlebarColor); - graphics->fillRectangle(gcn::Rectangle(0, 0, - getWidth(), titlebarHeight)); - } + Graphics *gfx = (Graphics*)graphics; + BITMAP *screen = gfx->getTarget(); + int x, y; + getAbsolutePosition(x, y); + + // Draw title bar + dLeft->draw(screen, x, y); + dMid->drawPattern(screen, + x + dLeft->getWidth(), y, + getWidth() - dLeft->getWidth() - dRight->getWidth(), + dMid->getHeight()); + dRight->draw(screen, x + getWidth() - dRight->getWidth(), y); // Draw title graphics->setFont(getFont()); diff --git a/src/main.cpp b/src/main.cpp index d2af2a28..c3dd3287 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,38 +38,6 @@ #include <errno.h> #endif -// Language map can probably be removed after switching to SDL -typedef struct { - unsigned int code; - char* name; -} LanguageMap; - -LanguageMap languageMap[] = { - { 0x0813, "BE" }, - { 0x0416, "BR" }, - { 0x1009, "CF" }, - { 0x1009, "CF" }, - { 0x0807, "CH" }, - { 0x0405, "CZ" }, - { 0x0407, "DE" }, - { 0x0406, "DK" }, - { 0x040a, "ES" }, - { 0x040b, "FI" }, - { 0x040c, "FR" }, - { 0x0410, "IT" }, - { 0x0414, "NO" }, - { 0x0415, "PL" }, - { 0x0416, "PT" }, - { 0x0816, "PT" }, - { 0x0419, "RU" }, - { 0x041d, "SE" }, - { 0x041b, "SK" }, - { 0x0424, "SK" }, - { 0x0809, "UK" }, - { 0x0409, "US" }, - { 0, NULL } -}; - // Account infos int account_ID, session_ID1, session_ID2; char sex, n_server, n_character; @@ -78,6 +46,7 @@ PLAYER_INFO *char_info = new PLAYER_INFO; Spriteset *hairset, *playerset; Image *login_wallpaper; +Graphics *graphics; char username[LEN_USERNAME]; char password[LEN_PASSWORD]; @@ -129,27 +98,6 @@ void request_exit() { * Do all initialization stuff */ void init_engine() { -#ifdef WIN32 - // After switching to SDL this can probably be removed - char keyb_buffer[KL_NAMELENGTH + 1]; - unsigned int langID; - char* code = NULL; - int running = 1; - int a; - if (GetKeyboardLayoutName(keyb_buffer)) { - //printf("layout name: %s\n", buffer); - langID = strtol(keyb_buffer, NULL, 16); - langID &= 0xffff; - //printf("language id: %x\n", langID); - for (a = 0; languageMap[a].code != 0; ++a) { - if (languageMap[a].code == langID) { - code = languageMap[a].name; - break; - } - } - } -#endif - // Initialize SDL //if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) { // std::cerr << "Could not initialize SDL: " << @@ -217,17 +165,12 @@ void init_engine() { } else { fclose(tmwFile); - // tmw.ini creation - config.setValue("system", ""); - config.setValue("keyboard", "en"); - config.setValue("language", ""); + // Fill tmw.ini with defaults config.setValue("core_version", CORE_VERSION); config.setValue("host", "animesites.de"); config.setValue("port", 6901); config.setValue("screen", 1); config.setValue("sound", 1); - - #ifdef __USE_UNIX98 char *chatlogFilename = new char[400]; sprintf(chatlogFilename, "%s/.manaworld/chatlog.txt", userHome); @@ -236,7 +179,6 @@ void init_engine() { #else config.setValue("chatlog", "chatlog.txt"); #endif - config.setValue("stretch", 1); config.setValue("remember", 1); config.setValue("username", "Player"); @@ -246,12 +188,6 @@ void init_engine() { } config.init(dir); -#ifdef WIN32 - // With SDL this part should probably just be removed - if (code) { - set_config_string("system", "keyboard", code); - } -#endif #ifdef MACOSX set_color_depth(32); @@ -288,10 +224,8 @@ void init_engine() { } // Buffer creation shouldn't be necessary with SDL - buffer = create_bitmap(800, 600); - if (!buffer) { - error("Not enough memory to create buffer"); - } + // Create the graphics context + graphics = new Graphics(); ResourceManager *resman = ResourceManager::getInstance(); @@ -312,9 +246,7 @@ void init_engine() { playerset = new Spriteset(scaledPlayerImg, 160, 120); hairset = new Spriteset(scaledHairImg, 40, 40); - - // TODO: Remove Allegro config file usage from GUI look - init_gui(buffer, "data/Skin/aqua.skin"); + init_gui(graphics); state = LOGIN; #ifndef WIN32 @@ -348,7 +280,6 @@ void exit_engine() { delete dir; gui_exit(); ResourceManager::deleteInstance(); - destroy_bitmap(buffer); allegro_exit(); } @@ -388,7 +319,8 @@ int main() { // Redraw GUI login_wallpaper->draw(buffer, 0, 0); guiGraphics->setTarget(buffer); - gui->update(); + gui->logic(); + gui->draw(); blit(buffer, screen, 0, 0, 0, 0, 800, 600); break; default: @@ -84,6 +84,7 @@ typedef struct { extern Image *login_wallpaper; extern Spriteset *hairset, *playerset; +extern Graphics *graphics; extern char username[25]; extern char password[25]; extern int map_address, char_ID; @@ -96,5 +97,6 @@ extern PLAYER_INFO *char_info; extern unsigned char state; extern unsigned short x, y; extern unsigned char direction; +extern Configuration config; #endif |