Mercurial > mm7
diff UI/UICharacter.cpp @ 1298:b97d0cdd6c79
new folder UI
author | Ritor1 |
---|---|
date | Wed, 19 Jun 2013 17:18:35 +0600 |
parents | |
children | 8c2f689b5f0b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UI/UICharacter.cpp Wed Jun 19 17:18:35 2013 +0600 @@ -0,0 +1,3125 @@ +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include <assert.h> + +#include <algorithm> + +#include "MM7.h" + +#include "MapInfo.h" +#include "Game.h" +#include "GUIWindow.h" +#include "GUIFont.h" +#include "GUIProgressBar.h" +#include "Party.h" +#include "AudioPlayer.h" +#include "Render.h" +#include "IndoorCamera.h" +#include "LOD.h" +#include "Viewport.h" +#include "Time.h" +#include "Awards.h" +#include "CastSpellInfo.h" +#include "texts.h" + +#include "mm7_data.h" +#include "Mouse.h" +#include "Allocator.h" + + +int bRingsShownInCharScreen; // 5118E0 + + +unsigned int ui_mainmenu_copyright_color; + +unsigned int ui_character_default_text_color; +unsigned int ui_character_skill_highlight_color; +unsigned int ui_character_header_text_color; +unsigned int ui_character_bonus_text_color; +unsigned int ui_character_bonus_text_color_neg; +unsigned int ui_character_skill_upgradeable_color; +unsigned int ui_character_skill_default_color; +std::array<unsigned int, 6> ui_character_award_color; + +unsigned int ui_game_minimap_outline_color; +unsigned int ui_game_minimap_actor_friendly_color; +unsigned int ui_game_minimap_actor_hostile_color; +unsigned int ui_game_minimap_actor_corpse_color; +unsigned int ui_game_minimap_decoration_color_1; +unsigned int ui_game_minimap_projectile_color; +unsigned int ui_game_minimap_treasure_color; +std::array<unsigned int, 24> ui_game_character_record_playerbuff_colors; + +unsigned int ui_gamemenu_video_gamma_title_color; +unsigned int ui_gamemenu_keys_action_name_color; +unsigned int ui_gamemenu_keys_key_selection_blink_color_1; +unsigned int ui_gamemenu_keys_key_selection_blink_color_2; +unsigned int ui_gamemenu_keys_key_default_color; + +unsigned int ui_book_quests_title_color; +unsigned int ui_book_quests_text_color; +unsigned int ui_book_autonotes_title_color; +unsigned int ui_book_autonotes_text_color; +unsigned int ui_book_map_title_color; +unsigned int ui_book_map_coordinates_color; + +unsigned int ui_book_calendar_title_color; +unsigned int ui_book_calendar_time_color; +unsigned int ui_book_calendar_day_color; +unsigned int ui_book_calendar_month_color; +unsigned int ui_book_calendar_year_color; +unsigned int ui_book_calendar_moon_color; +unsigned int ui_book_calendar_location_color; + +unsigned int ui_book_journal_title_color; +unsigned int ui_book_journal_text_color; +unsigned int ui_book_journal_text_shadow; + +std::array<unsigned int, 16> papredoll_dbrds; +unsigned int papredoll_drhs[4]; +unsigned int papredoll_dlhus[4]; +unsigned int papredoll_dlhs[4]; +unsigned int papredoll_dbods[5]; +int paperdoll_armor_texture[4][17][3]; +//int paperdoll_array_51132C[165]; +unsigned int papredoll_dlaus[5]; +unsigned int papredoll_dlads[4]; +int papredoll_flying_feet[777]; // idb +int paperdoll_boots_texture[4][6];//0x511638 +int paperdoll_cloak_collar_texture[4][10]; // weak +int paperdoll_cloak_texture[4][10]; +int paperdoll_helm_texture[2][16]; //511698 +int paperdoll_belt_texture[4][7]; //511718 + + +const int paperdoll_Weapon[4][16][2] = {//4E4C30 + {{128, 205}, {30, 144}, {88, 85}, {0, 0}, {0, 0}, {0, 0}, {17, 104}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + {{131, 201}, {38, 158}, {98, 87}, {0, 0}, {0, 0}, {0, 0}, {21, 100}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + {{131, 216}, {29, 186}, {88, 119}, {0, 0}, {0, 0}, {0, 0}, { 0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + {{123, 216}, {35, 184}, {98, 119}, {0, 0}, {0, 0}, {0, 0}, { 0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}, + }; + + + +const int paperdoll_Boot[4][7][2] = //4E5490 + { + 0xE, 0x11D, 0xD, 0x11D, 0xC, 0x10A, 0xA, 0xFF, 0xD, 0xF9, 0xD, 0x137, 0xC, 0x10E, + 0x14, 0x125, 0x13, 0x122, 0x15, 0x120, 0x15, 0x114, 0x13, 0x10A, 0x11, 0x13E, 0x11, 0x116, + 0x1D, 0x121, 0x1C, 0x11F, 0x1B, 0x11B, 0x1C, 0x117, 0x16, 0x116, 0x1B, 0x137, 0x1B, 0x11B, + 0x1F, 0x127, 0x1F, 0x122, 0x1B, 0x11B, 0x1D, 0x117, 0x1D, 0x116, 0x1D, 0x137, 0x1B, 0x11F, + }; +const int paperdoll_Cloak[4][10][2] = //4E5570 + { + 0x11, 0x68, 0xF, 0x68, 0x14, 0x71, 0x19, 0x6B, 0x21, 0x6F, 0x5, 0x68, 0x5, 0x68, 0x14, 0x71, 0x3, 0x6B, 0xF, 0x6F, + 0x15, 0x64, 0xB, 0x6B, 0xE, 0x67, 0x15, 0x6B, 0x1B, 0x6F, 0x3, 0x6B, 0, 0x6B, 0xE, 0x67, 0, 0x6B, 0x3, 0x6F, + 0x10, 0x8A, 0x9, 0x8B, 0x18, 0x98, 0x25, 0x91, 0x29, 0x90, 0x8, 0x8A, 0x9, 0x8B, 0x18, 0x98, 0x3, 0x91, 0x3, 0x90, + 0x14, 0x92, 0x10, 0x92, 0x15, 0x98, 0x1F, 0x91, 0x22, 0x90, 0x8, 0x92, 0xC, 0x92, 0x15, 0x98, 0x3, 0x91, 0x3, 0x90, + }; +const int paperdoll_CloakCollar[4][10][2] = //4E56B0 + { + 0x11, 0x68, 0x34, 0x64, 0x21, 0x69, 0x1D, 0x67, 0x20, 0x67, 0x21, 0x68, 0x34, 0x64, 0x21, 0x69, 0x1D, 0x67, 0x1F, 0x67, + 0x13, 0x64, 0x35, 0x66, 0x29, 0x68, 0x1F, 0x68, 0x1F, 0x6A, 0x21, 0x6A, 0x2B, 0x66, 0x26, 0x68, 0x1F, 0x68, 0x1F, 0x6A, + 0, 0, 0x30, 0x87, 0x1E, 0x86, 0x1B, 0x86, 0x1C, 0x8A, 0x21, 0x87, 0x30, 0x87, 0x1E, 0x86, 0x1B, 0x86, 0x1C, 0x8A, + 0, 0, 0x38, 0x8A, 0x24, 0x8B, 0x1D, 0x8B, 0x21, 0x8C, 0x27, 0x8A, 0x34, 0x8A, 0x24, 0x8B, 0x25, 0x8B, 0x21, 0x8C, + }; +//int dword_4E56B4; // weak +const int paperdoll_Belt[4][7][2] = //4E57F0 + { + 0x3A, 0xB6, 0x37, 0xB2, 0x34, 0xB9, 0x3A, 0xB9, 0x37, 0xB7, 0x38, 0xAC, 0x37, 0xB7, + 0x3E, 0xAD, 0x3A, 0xAC, 0x37, 0xB0, 0x3A, 0xB1, 0x39, 0xB0, 0x3C, 0xA5, 0x39, 0xB0, + 0x3B, 0xD5, 0x37, 0xD2, 0x31, 0xD5, 0x39, 0xD6, 0x37, 0xD8, 0x37, 0xD1, 0x37, 0xD8, + 0x42, 0xD2, 0x3F, 0xD0, 0x3B, 0xD7, 0x3C, 0xD5, 0x3B, 0xD6, 0x3E, 0xCF, 0x36, 0xD6, + }; +const int paperdoll_Helm[4][16][2] = //4E58D0 + { + 0x3E, 0x1F, 0x41, 0x2C, 0x37, 0x2F, 0x31, 0x32, 0x37, 0x2A, 0x39, 0x28, 0x36, 0x34, 0x41, 0x38, 0x40, 0x31, 0x40, 0x21, 0x40, 0x31, 0x3C, 0x33, 0x3D, 0x24, 0x3A, 0x1A, 0x37, 0x2A, 0x41, 0x48, + 0x41, 0x1E, 0x42, 0x2B, 0x37, 0x2F, 0x34, 0x30, 0x39, 0x29, 0x3A, 0x26, 0x36, 0x34, 0x41, 0x37, 0x42, 0x32, 0x40, 0x21, 0x40, 0x31, 0x40, 0x2F, 0x3E, 0x22, 0x3B, 0x1A, 0x39, 0x29, 0x42, 0x47, + 0x3F, 0x47, 0x41, 0x56, 0x37, 0x59, 0x32, 0x5E, 0x37, 0x58, 0x39, 0x54, 0x34, 0x61, 0x40, 0x61, 0x41, 0x5D, 0x3E, 0x4F, 0x3E, 0x5B, 0x3D, 0x5B, 0x3F, 0x4C, 0x3B, 0x45, 0x37, 0x58, 0x41, 0x74, + 0x45, 0x45, 0x46, 0x54, 0x3A, 0x55, 0x38, 0x58, 0x3C, 0x54, 0x3F, 0x52, 0x39, 0x5B, 0x45, 0x5C, 0x47, 0x5C, 0x44, 0x4B, 0x44, 0x57, 0x43, 0x55, 0x44, 0x4A, 0x3E, 0x45, 0x3C, 0x54, 0x47, 0x70, + }; +const int pPaperdoll_Beards[4] = //4E5AD0 + { + 52, 130, 56, 136, + }; +const int pPaperdoll_LeftHand[4][2] = //4E5AE0 + { + 0x67, 0x6A, + 0x65, 0x6C, + 0x74, 0x8D, + 0x74, 0x93, + }; +const int pPaperdoll_SecondLeftHand[4][2] = //4E5B00 + { + 0x1A, 0x6B, + 0x28, 0x6D, + 0x19, 0x8D, + 0x20, 0x92, + }; +const int pPaperdoll_RightHand[4][2] = //4E5B20 + { + 0x1E, 0x90, + 0x22, 0x9E, + 0x19, 0xBA, + 0x1F, 0xB8, + }; +const int pPaperdollLeftEmptyHand[4][2] = //4E5B40 + { + 0x80, 0xCD, + 0x83, 0xC9, + 0x83, 0xD8, + 0x7B, 0xD8, + }; + +int pPaperdoll_BodyX = 481; // 004E4C28 +int pPaperdoll_BodyY = 0; // 004E4C2C +const int paperdoll_Armor[4][17][2] = //4E4E30 + { + // X Y + 0x2C, 0x67, 0x30, 0x69, 0x2D, 0x67, 0x2C, 0x64, 0x14, 0x66, 0x22, 0x67, 0x20, 0x66, 0x25, 0x66, 0x12, 0x66,//Human + 0x0A, 0x66, 0x13, 0x64, 0x0E, 0x64, 0x0A, 0x63, 0x14, 0x66, 0x0A, 0x63, 0x0A, 0x66, 0x25, 0x66, + + 0x32, 0x68, 0x32, 0x69, 0x35, 0x69, 0x33, 0x68, 0x24, 0x67, 0x30, 0x69, 0x33, 0x68, 0x31, 0x69, 0x19, 0x69, + 0x19, 0x6A, 0x16, 0x66, 0x16, 0x65, 0x0F, 0x6B, 0x24, 0x67, 0x0F, 0x6B, 0x19, 0x6A, 0x31, 0x69, + + 0x2A, 0x8C, 0x29, 0x8C, 0x2A, 0x89, 0x29, 0x86, 0x12, 0x87, 0x2D, 0x89, 0x2A, 0x88, 0x25, 0x87, 0x12, 0x8B, + 0x12, 0x8B, 0x11, 0x8A, 0x15, 0x87, 0x09, 0x89, 0x12, 0x87, 0x09, 0x89, 0x12, 0x8B, 0x25, 0x87, + + 0x33, 0x90, 0x32, 0x90, 0x34, 0x91, 0x32, 0x8E, 0x21, 0x8B, 0x31, 0x8B, 0x33, 0x8E, 0x2F, 0x8F, 0x16, 0x8D, + 0x18, 0x8C, 0x19, 0x8C, 0x1B, 0x8E, 0x0C, 0x8C, 0x21, 0x8B, 0x0C, 0x8C, 0x18, 0x8C, 0x2F, 0x8F, + }; +const int paperdoll_shoulder[4][17][2] = //4E5050 + { + 0x64, 0x67, 0x61, 0x67, 0x65, 0x68, 0x6E, 0x74, 0x6C, 0x68, 0x61, 0x67, 0x66, 0x68, 0x6C, 0x6A, 0x6E, 0x6D, + 0x67, 0x69, 0x70, 0x67, 0x6E, 0x6D, 0x6C, 0x6F, 0x6C, 0x68, 0x6C, 0x6F, 0x67, 0x69, 0x6C, 0x6A, + + 0x60, 0x6B, 0x60, 0x6C, 0x60, 0x6B, 0x61, 0x6A, 0x60, 0x69, 0x60, 0x6A, 0x60, 0x6A, 0x61, 0x69, 0x63, 0x6A, + 0x64, 0x6A, 0x61, 0x66, 0x66, 0x67, 0x64, 0x6C, 0x60, 0x69, 0x64, 0x6C, 0x64, 0x6A, 0x61, 0x69, + + 0x6D, 0x8C, 0x75, 0x8C, 0, 0, 0x72, 0x8D, 0x6A, 0x89, 0, 0, 0x73, 0x8C, 0x69, 0x8C, 0x6E, 0x8D, + 0x71, 0x8D, 0x70, 0x8D, 0x72, 0x8D, 0x74, 0x8E, 0x6A, 0x89, 0x74, 0x8E, 0x71, 0x8D, 0x69, 0x8C, + + 0x72, 0x91, 0x72, 0x91, 0, 0, 0x6E, 0x92, 0x6F, 0x91, 0, 0, 0, 0, 0x6E, 0x91, 0x71, 0x90, + 0x72, 0x8D, 0x72, 0x90, 0x73, 0x93, 0x73, 0x90, 0x6F, 0x91, 0x73, 0x90, 0x72, 0x8D, 0x6E, 0x91, + }; +const int dword_4E5270[4][2] = + { + 0, 0, + 0x61, 0x67, + 0, 0, + 0x64, 0x69, + }; + +const char *dlad_texnames_by_face[25] = + { + "pc01lad", "pc02lad", "pc03lad", "pc04lad", "pc05lad", "pc06lad", + "pc07lad", "pc08lad", "pc09lad", "pc10lad", "pc11lad", "pc12lad", + "pc13lad", "pc14lad", "pc15lad", "pc16lad", "pc17lad", "pc18lad", + "pc19lad", "pc20lad", "pc21lad", "pc22lad", "pc23lad", "pc24lad", + "pc25lad" + }; +const char *dlau_texnames_by_face[25] = + { + "pc01lau", "pc02lau", "pc03lau", "pc04lau", "pc05lau", "pc06lau", + "pc07lau", "pc08lau", "pc09lau", "pc10lau", "pc11lau", "pc12lau", + "pc13lau", "pc14lau", "pc15lau", "pc16lau", "pc17lau", "pc18lau", + "pc19lau", "pc20lau", "pc21lau", "pc22lau", "pc23lau", "pc24lau", + "pc25lau" + }; +const char *dbod_texnames_by_face[25] = + { + "pc01bod", "pc02bod", "pc03bod", "pc04bod", "pc05bod", "pc06bod", + "pc07bod", "pc08bod", "pc09bod", "pc10bod", "pc11bod", "pc12bod", + "pc13bod", "pc14bod", "pc15bod", "pc16bod", "pc17bod", "pc18bod", + "pc19bod", "pc20bod", "pc21bod", "pc22bod", "pc23bod", "pc24bod", + "pc25bod" + }; +const char *drh_texnames_by_face[25] = + { + + "pc01rh", "pc02rh", "pc03rh", "pc04rh", "pc05rh", "pc06rh", + "pc07rh", "pc08rh", "pc09rh", "pc10rh", "pc11rh", "pc12rh", + "pc13rh", "pc14rh", "pc15rh", "pc16rh", "pc17rh", "pc18rh", + "pc19rh", "pc20rh", "pc21rh", "pc22rh", "pc23rh", "pc24rh", + "pc25rh" + }; +const char *dlh_texnames_by_face[25] = + { + "pc01lh", "pc02lh", "pc03lh", "pc04lh", "pc05lh", "pc06lh", + "pc07lh", "pc08lh", "pc09lh", "pc10lh", "pc11lh", "pc12lh", + "pc13lh", "pc14lh", "pc15lh", "pc16lh", "pc17lh", "pc18lh", + "pc19lh", "pc20lh", "pc21lh", "pc22lh", "pc23lh", "pc24lh", + "pc25lh" + }; +const char *dlhu_texnames_by_face[25] = + { + "pc01lhu", "pc02lhu", "pc03lhu", "pc04lhu", "pc05lhu", "pc06lhu", + "pc07lhu", "pc08lhu", "pc09lhu", "pc10lhu", "pc11lhu", "pc12lhu", + "pc13lhu", "pc14lhu", "pc15lhu", "pc16lhu", "pc17lhu", "pc18lhu", + "pc19lhu", "pc20lhu", "pc21lhu", "pc22lhu", "pc23lhu", "pc24lhu", + "pc25lhu" + }; + +const int pArmorSkills[5] = {PLAYER_SKILL_LEATHER, PLAYER_SKILL_CHAIN, PLAYER_SKILL_PLATE, PLAYER_SKILL_SHIELD, PLAYER_SKILL_DODGE}; +const int pWeaponSkills[9] = {PLAYER_SKILL_AXE, PLAYER_SKILL_BOW, PLAYER_SKILL_DAGGER, PLAYER_SKILL_MACE, PLAYER_SKILL_SPEAR, + PLAYER_SKILL_STAFF, PLAYER_SKILL_SWORD, PLAYER_SKILL_UNARMED, PLAYER_SKILL_BLASTER}; +const int pMiscSkills[12] = {PLAYER_SKILL_ALCHEMY, PLAYER_SKILL_ARMSMASTER, PLAYER_SKILL_BODYBUILDING, PLAYER_SKILL_ITEM_ID, PLAYER_SKILL_MONSTER_ID, + PLAYER_SKILL_LEARNING, PLAYER_SKILL_TRAP_DISARM, PLAYER_SKILL_MEDITATION, PLAYER_SKILL_MERCHANT, PLAYER_SKILL_PERCEPTION, + PLAYER_SKILL_REPAIR, PLAYER_SKILL_STEALING}; +const int pMagicSkills[9] = {PLAYER_SKILL_FIRE, PLAYER_SKILL_AIR, PLAYER_SKILL_WATER, PLAYER_SKILL_EARTH, PLAYER_SKILL_SPIRIT, + PLAYER_SKILL_MIND, PLAYER_SKILL_BODY, PLAYER_SKILL_LIGHT, PLAYER_SKILL_DARK}; + + + + +void set_default_ui_skin() +{ + ui_mainmenu_copyright_color = TargetColor(255, 255, 255); + + ui_character_default_text_color = TargetColor(255, 255, 255); + ui_character_header_text_color = TargetColor(255, 255, 155); + ui_character_bonus_text_color = TargetColor(0, 255, 0); + ui_character_bonus_text_color_neg = TargetColor(255, 0, 0); + + ui_character_skill_upgradeable_color = TargetColor(0, 175, 255); + ui_character_skill_default_color = TargetColor(255, 0, 0); + ui_character_skill_highlight_color = TargetColor(255, 0, 0); + + ui_character_award_color[0] = TargetColor(248, 108, 160); + ui_character_award_color[1] = TargetColor(112, 220, 248); + ui_character_award_color[2] = TargetColor(192, 192, 240); + ui_character_award_color[3] = TargetColor( 64, 244, 96); + ui_character_award_color[4] = TargetColor(232, 244, 96); + ui_character_award_color[5] = TargetColor(240, 252, 192); + + ui_game_minimap_outline_color = TargetColor(0, 0, 255); + ui_game_minimap_actor_friendly_color = TargetColor(0, 255, 0); + ui_game_minimap_actor_hostile_color = TargetColor(255, 0, 0); + ui_game_minimap_actor_corpse_color = TargetColor(255, 255, 0); + ui_game_minimap_decoration_color_1 = TargetColor(255, 255, 255); + ui_game_minimap_projectile_color = TargetColor(255, 0, 0); + ui_game_minimap_treasure_color = TargetColor(0, 0, 255); + ui_game_character_record_playerbuff_colors[0] = TargetColor(150, 212, 255); + ui_game_character_record_playerbuff_colors[1] = TargetColor(225, 225, 225); + ui_game_character_record_playerbuff_colors[2] = TargetColor(255, 128, 0); + ui_game_character_record_playerbuff_colors[3] = TargetColor(128, 128, 128); + ui_game_character_record_playerbuff_colors[4] = TargetColor(225, 225, 225); + ui_game_character_record_playerbuff_colors[5] = TargetColor(255, 85, 0); + ui_game_character_record_playerbuff_colors[6] = TargetColor(255, 128, 0); + ui_game_character_record_playerbuff_colors[7] = TargetColor(255, 85, 0); + ui_game_character_record_playerbuff_colors[8] = TargetColor(225, 225, 225); + ui_game_character_record_playerbuff_colors[9] = TargetColor(235, 15, 255); + ui_game_character_record_playerbuff_colors[10] = TargetColor(192, 192, 240); + ui_game_character_record_playerbuff_colors[11] = TargetColor(225, 225, 225); + ui_game_character_record_playerbuff_colors[12] = TargetColor(255, 128, 0); + ui_game_character_record_playerbuff_colors[13] = TargetColor(150, 212, 255); + ui_game_character_record_playerbuff_colors[14] = TargetColor(128, 128, 128); + ui_game_character_record_playerbuff_colors[15] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[16] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[17] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[18] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[19] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[20] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[21] = TargetColor(255, 255, 155); + ui_game_character_record_playerbuff_colors[22] = TargetColor(0, 128, 255); + ui_game_character_record_playerbuff_colors[23] = TargetColor(0, 128, 255); + + ui_gamemenu_video_gamma_title_color = TargetColor(255, 255, 155); + ui_gamemenu_keys_action_name_color = TargetColor(255, 255, 255); + ui_gamemenu_keys_key_selection_blink_color_1 = TargetColor(50, 0, 0); + ui_gamemenu_keys_key_selection_blink_color_2 = TargetColor(225, 205, 35); + ui_gamemenu_keys_key_default_color = TargetColor(255, 255, 255); + + ui_book_quests_title_color = TargetColor(255, 255, 255); + ui_book_quests_text_color = TargetColor(255, 255, 255); + ui_book_autonotes_title_color = TargetColor(255, 255, 255); + ui_book_autonotes_text_color = TargetColor(255, 255, 255); + ui_book_map_title_color = TargetColor(255, 255, 255); + ui_book_map_coordinates_color = TargetColor(255, 255, 255); + + ui_book_calendar_title_color = TargetColor(255, 255, 255); + ui_book_calendar_time_color = TargetColor(75, 75, 75); + ui_book_calendar_day_color = TargetColor(75, 75, 75); + ui_book_calendar_month_color = TargetColor(75, 75, 75); + ui_book_calendar_year_color = TargetColor(75, 75, 75); + ui_book_calendar_moon_color = TargetColor(75, 75, 75); + ui_book_calendar_location_color = TargetColor(75, 75, 75); + + ui_book_journal_title_color = TargetColor(255, 255, 255); + ui_book_journal_text_color = TargetColor(255, 255, 255); + ui_book_journal_text_shadow = TargetColor(0, 0, 0); +} + + + + +//----- (00421626) -------------------------------------------------------- +GUIWindow *CharacterUI_Initialize(unsigned int _this) +{ + GUIWindow *pWindow; // edi@3 + + ++pIcons_LOD->uTexturePacksCount; + if ( !pIcons_LOD->uNumPrevLoadedFiles ) + pIcons_LOD->uNumPrevLoadedFiles = pIcons_LOD->uNumLoadedFiles; + + pEventTimer->Pause(); + pAudioPlayer->StopChannels(-1, -1); + bRingsShownInCharScreen = false; + CharacterUI_LoadPaperdollTextures(); + pCurrentScreen = _this; + + pWindow = GUIWindow::Create(0, 0, 640, 480, WINDOW_CharacterRecord, uActiveCharacter, 0); + pCharacterScreen_StatsBtn = pWindow->CreateButton(pViewport->uViewportTL_X + 12, pViewport->uViewportTL_Y + 308, + pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureWidth, + pIcons_LOD->GetTexture(papredoll_dbrds[9])->uTextureHeight, + 1, 0, UIMSG_ClickStatsBtn, 0, 'S', pGlobalTXT_LocalizationStrings[216],// Stats + pIcons_LOD->GetTexture(papredoll_dbrds[10]), + pIcons_LOD->GetTexture(papredoll_dbrds[9]), 0); + pCharacterScreen_SkillsBtn = pWindow->CreateButton(pViewport->uViewportTL_X + 102, pViewport->uViewportTL_Y + 308, + pIcons_LOD->GetTexture(papredoll_dbrds[7])->uTextureWidth, + pIcons_LOD->GetTexture(papredoll_dbrds[7])->uTextureHeight, + 1, 0, UIMSG_ClickSkillsBtn, 0, 'K', pGlobalTXT_LocalizationStrings[205],//Skills + pIcons_LOD->GetTexture(papredoll_dbrds[8]), + pIcons_LOD->GetTexture(papredoll_dbrds[7]), 0); + pCharacterScreen_InventoryBtn = pWindow->CreateButton(pViewport->uViewportTL_X + 192, pViewport->uViewportTL_Y + 308, + pIcons_LOD->GetTexture(papredoll_dbrds[5])->uTextureWidth, + pIcons_LOD->GetTexture(papredoll_dbrds[5])->uTextureHeight, + 1, 0, UIMSG_ClickInventoryBtn, 0, 'I', pGlobalTXT_LocalizationStrings[120], //Inventory + pIcons_LOD->GetTexture(papredoll_dbrds[6]), + pIcons_LOD->GetTexture(papredoll_dbrds[5]), 0); + pCharacterScreen_AwardsBtn = pWindow->CreateButton(pViewport->uViewportTL_X + 282, pViewport->uViewportTL_Y + 308, + pIcons_LOD->GetTexture(papredoll_dbrds[3])->uTextureWidth, + pIcons_LOD->GetTexture(papredoll_dbrds[3])->uTextureHeight, + 1, 0, UIMSG_ClickAwardsBtn, 0, 'A', pGlobalTXT_LocalizationStrings[22], //Awards + pIcons_LOD->GetTexture(papredoll_dbrds[4]), + pIcons_LOD->GetTexture(papredoll_dbrds[3]), 0); + pCharacterScreen_ExitBtn = pWindow->CreateButton(pViewport->uViewportTL_X + 371, pViewport->uViewportTL_Y + 308, + pIcons_LOD->GetTexture(papredoll_dbrds[1])->uTextureWidth, + pIcons_LOD->GetTexture(papredoll_dbrds[1])->uTextureHeight, + 1, 0, UIMSG_ClickExitCharacterWindowBtn, 0, 0, pGlobalTXT_LocalizationStrings[79],//Exit + pIcons_LOD->GetTexture(papredoll_dbrds[2]), + pIcons_LOD->GetTexture(papredoll_dbrds[1]), 0); + pWindow->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, UIMSG_InventoryLeftClick, 0, 0, "", 0); + pCharacterScreen_DetalizBtn = pWindow->CreateButton(0x258u, 0x12Cu, 30, 30, 1, 0, UIMSG_ChangeDetaliz, 0, 0, pGlobalTXT_LocalizationStrings[64], 0); + pCharacterScreen_DollBtn = pWindow->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, UIMSG_ClickPaperdoll, 0, 0, "", 0); + + pWindow->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0); + pWindow->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0); + pWindow->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0); + pWindow->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0); + + pWindow->CreateButton(0, 0, 0, 0, 1, 0, UIMSG_CycleCharacters, 0, '\t', "", 0); + FillAwardsData(); + return pWindow; +} + +//----- (004219BE) -------------------------------------------------------- +GUIWindow *CastSpellInfo::sub_4219BE() +{ + GUIWindow *v2; // ebx@1 + + pEventTimer->Pause(); + pAudioPlayer->StopChannels(-1, -1); + bRingsShownInCharScreen = 0; + CharacterUI_LoadPaperdollTextures(); + pCurrentScreen = SCREEN_CASTING; + v2 = GUIWindow::Create(0, 0, 640, 480, WINDOW_CastSpell_InInventory, (int)this, 0); + pCharacterScreen_ExitBtn = v2->CreateButton(394, 318, 75, 33, 1, 0, UIMSG_ClickExitCharacterWindowBtn, 0, 0, + pGlobalTXT_LocalizationStrings[79], // Close + pIcons_LOD->GetTexture(papredoll_dbrds[2]), + pIcons_LOD->GetTexture(papredoll_dbrds[1]), 0); + v2->CreateButton(0, 0, 0x1DCu, 0x159u, 1, 122, UIMSG_InventoryLeftClick, 0, 0, "", 0); + pCharacterScreen_DollBtn = v2->CreateButton(0x1DCu, 0, 0xA4u, 0x159u, 1, 0, UIMSG_ClickPaperdoll, 0, 0, "", 0); + + v2->CreateButton( 61, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 1, '1', "", 0); + v2->CreateButton(177, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 2, '2', "", 0); + v2->CreateButton(292, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 3, '3', "", 0); + v2->CreateButton(407, 424, 31, 0, 2, 94, UIMSG_SelectCharacter, 4, '4', "", 0); + + return v2; +} + + + + + + +static int CharacterUI_SkillsTab_Draw__DrawSkillTable(Player *player, int x, int y, const int *skill_list, int skill_list_size, int right_margin, const char *skill_group_name) +{ + int y_offset = y; + + sprintf(pTmpBuf.data(), "%s\r%03d%s", skill_group_name, right_margin, pGlobalTXT_LocalizationStrings[131]); //"Level" + pGUIWindow_CurrentMenu->DrawText(pFontArrus, x, y, ui_character_header_text_color, pTmpBuf.data(), 0, 0, 0); + + int num_skills_drawn = 0; + for (uint i = 0; i < skill_list_size; ++i) + { + auto skill = (PLAYER_SKILL_TYPE)skill_list[i]; + for (uint j = 0; j < pGUIWindow_CurrentMenu->uNumControls; ++j) + { + auto v8 = pGUIWindow_CurrentMenu->pControlsHead; + + for (int v7 = j; v7 > 0; --v7) + v8 = v8->pNext; + + auto v9 = v8->field_1C; + if ((short)(v8->field_1C) >= 0) + continue; + if ( (v9 & 0x7FFF) != skill ) + continue; + + ++num_skills_drawn; + y_offset = v8->uY; + + auto skill_value = player->pActiveSkills[skill]; + auto skill_level = skill_value & 0x3F; + + uint skill_color = 0; + uint skill_mastery_color = 0; + if (player->uSkillPoints > skill_level) + skill_color = ui_character_skill_upgradeable_color; + + if (pGUIWindow_CurrentMenu->pCurrentPosActiveItem == j) + { + if (player->uSkillPoints > skill_level) + skill_mastery_color = ui_character_bonus_text_color; + else + skill_mastery_color = ui_character_skill_default_color; + skill_color = skill_mastery_color; + } + + if (SkillToMastery(skill_value) == 1) + { + sprintfex(pTmpBuf.data(), "%s\r%03d%2d", pSkillNames[skill], right_margin, skill_level); + pGUIWindow_CurrentMenu->DrawText(pFontLucida, x, v8->uY, skill_color, pTmpBuf.data(), 0, 0, 0); + } + else + { + const char *skill_level_str = nullptr; + + switch (SkillToMastery(skill_value)) + { + case 4: skill_level_str = pGlobalTXT_LocalizationStrings[96]; break; // "Grand" + case 3: skill_level_str = pGlobalTXT_LocalizationStrings[432]; break; // Master + case 2: skill_level_str = pGlobalTXT_LocalizationStrings[433]; break; // Expert + } + + if (!skill_mastery_color) + skill_mastery_color = ui_character_header_text_color; + + sprintfex(pTmpBuf.data(), "%s \f%05d%s\f%05d\r%03d%2d", pSkillNames[skill], skill_mastery_color, skill_level_str, skill_color, right_margin, skill_level); + pGUIWindow_CurrentMenu->DrawText(pFontLucida, x, v8->uY, skill_color, pTmpBuf.data(), 0, 0, 0); + } + } + } + + if (!num_skills_drawn) + { + y_offset += LOBYTE(pFontLucida->uFontHeight) - 3; + pGUIWindow_CurrentMenu->DrawText(pFontLucida, x, y_offset, 0, pGlobalTXT_LocalizationStrings[153], 0, 0, 0); //"None" + } + + return y_offset; +} + + + +//----- (00419719) -------------------------------------------------------- +void CharacterUI_SkillsTab_Draw(Player *player) +{ + pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("fr_skill", TEXTURE_16BIT_PALETTE)); + + sprintfex(pTmpBuf.data(), "%s \f%05d^Pv[%s]\f00000\r177%s: \f%05d%d\f00000", + pGlobalTXT_LocalizationStrings[206], // Skills for + ui_character_header_text_color, + player->pName, + pGlobalTXT_LocalizationStrings[207], // Skill Points + player->uSkillPoints ? ui_character_bonus_text_color : ui_character_default_text_color, + player->uSkillPoints); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, 18, 0, pTmpBuf.data(), 0, 0, 0); + + int y = 2 * LOBYTE(pFontLucida->uFontHeight) + 13; + y = CharacterUI_SkillsTab_Draw__DrawSkillTable(player, 24, y, pWeaponSkills, 9, 400, pGlobalTXT_LocalizationStrings[242]); // "Weapons" + + y += 2 * LOBYTE(pFontLucida->uFontHeight) - 10; + CharacterUI_SkillsTab_Draw__DrawSkillTable(player, 24, y, pMagicSkills, 9, 400, pGlobalTXT_LocalizationStrings[138]); // "Magic" + + y = 2 * LOBYTE(pFontLucida->uFontHeight) + 13; + y = CharacterUI_SkillsTab_Draw__DrawSkillTable(player, 248, y, pArmorSkills, 5, 177, pGlobalTXT_LocalizationStrings[11]); // "Armor" + + y += 2 * LOBYTE(pFontLucida->uFontHeight) - 10; + y = CharacterUI_SkillsTab_Draw__DrawSkillTable(player, 248, y, pMiscSkills, 12, 177, pGlobalTXT_LocalizationStrings[143]); //"Misc" +} + + + + + + + + + + +//----- (0041A000) -------------------------------------------------------- +void CharacterUI_AwardsTab_Draw(Player *player) +{ + //unsigned int v1; // esi@1 + //unsigned int v2; // ebx@1 + //unsigned int award_texture_id; // eax@1 + unsigned int result; // eax@1 + int v5; // eax@15 + char *v6; // ebx@15 + int v7; // eax@23 + int v8; // eax@24 + int v9; // eax@25 + //int v10; // eax@27 + int v11; // eax@32 + int v12; // eax@33 + int v13; // eax@34 + //signed int v14; // eax@43 + //unsigned int v15; // eax@43 + //int v16; // eax@43 + //int v17; // [sp-4h] [bp-D4h]@16 + char Source[100]; // [sp+Ch] [bp-C4h]@1 + GUIWindow a1; // [sp+70h] [bp-60h]@1 + //unsigned int v20; // [sp+C4h] [bp-Ch]@15 + //int v21; // [sp+C8h] [bp-8h]@14 + //int v22; // [sp+CCh] [bp-4h]@40 + + pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("fr_award", TEXTURE_16BIT_PALETTE)); + sprintfex(pTmpBuf.data(), "%s \f%05d", pGlobalTXT_LocalizationStrings[LOCSTR_AVARDS_FOR], ui_character_header_text_color); + sprintfex(Source, pGlobalTXT_LocalizationStrings[LOCSTR_S_THE_S], player->pName, pClassNames[player->classType]); + strcat(pTmpBuf.data(), Source); + strcat(pTmpBuf.data(), "\f00000"); + + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 24, 18, 0, pTmpBuf.data(), 0, 0, 0); + result = dword_506528; + a1.uFrameX = 12; + a1.uFrameY = 48; + a1.uFrameWidth = 424; + a1.uFrameHeight = 290; + a1.uFrameZ = 435; + a1.uFrameW = 337; + if (BtnDown_flag && num_achieved_awards + dword_506528 < num_achieved_awards_2) + result = dword_506528++ + 1; + if (BtnUp_flag && result) + { + --result; + dword_506528 = result; + } + + if ( dword_50651C < 0 ) + { + result += num_achieved_awards; + dword_506528 = result; + if ( (signed int)(num_achieved_awards + result) > num_achieved_awards_2 ) + { + result = num_achieved_awards_2 - num_achieved_awards; + dword_506528 = result; + } + } + else if ( dword_50651C > 0 ) + { + result -= num_achieved_awards; + dword_506528 = result; + if ( (result & 0x80000000u) != 0 ) + { + result = 0; + dword_506528 = result; + } + } + //LABEL_14: + BtnDown_flag = 0; + BtnUp_flag = 0; + num_achieved_awards = 0; + dword_50651C = 0; + + + for (uint i = result; i < num_achieved_awards_2; ++i) + { + v5 = achieved_awards[i]; + v6 = (char *)pAwards[v5].pText;//(char *)dword_723E80_award_related[v20 / 4]; + + pTmpBuf[0] = 0; + switch (v5) + { + case Award_Arena_PageWins: sprintf(pTmpBuf.data(), v6, pParty->uNumArenaPageWins); break; + case Award_Arena_SquireWins: sprintf(pTmpBuf.data(), v6, pParty->uNumArenaSquireWins); break; + case Award_Arena_KnightWins: sprintf(pTmpBuf.data(), v6, pParty->uNumArenaKnightWins); break; + case Award_Arena_LordWins: sprintf(pTmpBuf.data(), v6, pParty->uNumArenaLordWins); break; + case Award_ArcomageWins: sprintf(pTmpBuf.data(), v6, pParty->uNumArcomageWins); break; + case Award_ArcomageLoses: sprintf(pTmpBuf.data(), v6, pParty->uNumArcomageLoses); break; + case Award_Deaths: sprintf(pTmpBuf.data(), v6, pParty->uNumDeaths); break; + case Award_BountiesCollected: sprintf(pTmpBuf.data(), v6, pParty->uNumBountiesCollected); break; + case Award_Fine: sprintf(pTmpBuf.data(), v6, pParty->uFine); break; + case Award_PrisonTerms: sprintf(pTmpBuf.data(), v6, pParty->uNumPrisonTerms); break; + } + + if (*pTmpBuf.data()) + v6 = pTmpBuf.data(); + + + a1.DrawText(pFontArrus, 0, 0, ui_character_award_color[pAwards[v5].uPriority % 6], v6, 0, 0, 0); + a1.uFrameY = pFontArrus->CalcTextHeight(v6, &a1, 0, 0) + a1.uFrameY + 4; + if (a1.uFrameY > a1.uFrameHeight) + break; + + ++num_achieved_awards; + } + } + + + + + + +//----- (0041A2C1) -------------------------------------------------------- +unsigned int __fastcall GetSizeInInventorySlots(unsigned int uNumPixels) +{ + if ( (signed int)uNumPixels < 14 ) + uNumPixels = 14; + return ((signed int)(uNumPixels - 14) >> 5) + 1; +} + + + +//----- (0041A556) -------------------------------------------------------- +void draw_leather() +{ + pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->GetTexture(uTextureID_Leather)); +} + + +//----- (0041ABFD) -------------------------------------------------------- +void CharacterUI_CharacterScreen_Draw(Player *player) +{ + pRenderer->ClearZBuffer(0, 479); + switch (pWindowList_at_506F50_minus1_indexing_buttons____and_an_int_[0]) + { + case WINDOW_CharacterWindow_Stats: // stats + CharacterUI_ReleaseButtons(); + sub_419379(); + CharacterUI_StatsTab_Draw(player); + pRenderer->DrawTextureIndexed(pCharacterScreen_StatsBtn->uX, + pCharacterScreen_StatsBtn->uY, + pIcons_LOD->LoadTexturePtr("ib-cd1-d", TEXTURE_16BIT_PALETTE)); + break; + + case WINDOW_CharacterWindow_Skills: // skills + if (dword_507CC0_activ_ch != uActiveCharacter) + { + CharacterUI_ReleaseButtons(); + CharacterUI_SkillsTab_CreateButtons(); + } + sub_419379(); + CharacterUI_SkillsTab_Draw(player); + pRenderer->DrawTextureIndexed(pCharacterScreen_SkillsBtn->uX, + pCharacterScreen_SkillsBtn->uY, + pIcons_LOD->LoadTexturePtr("ib-cd2-d", TEXTURE_16BIT_PALETTE)); + break; + + case WINDOW_CharacterWindow_Awards: // awards + CharacterUI_ReleaseButtons(); + sub_419379(); + sub_419220(); + CharacterUI_AwardsTab_Draw(player); + pRenderer->DrawTextureIndexed(pCharacterScreen_AwardsBtn->uX, + pCharacterScreen_AwardsBtn->uY, + pIcons_LOD->LoadTexturePtr("ib-cd4-d", TEXTURE_16BIT_PALETTE)); + break; + + case WINDOW_CharacterWindow_Inventory: // inventory and other + CharacterUI_ReleaseButtons(); + sub_419379(); + CharacterUI_InventoryTab_Draw(player, false); + pRenderer->DrawTextureIndexed(pCharacterScreen_InventoryBtn->uX, + pCharacterScreen_InventoryBtn->uY, + pIcons_LOD->LoadTexturePtr("ib-cd3-d", TEXTURE_16BIT_PALETTE)); + break; + + default: break; + } + + if (bRingsShownInCharScreen) + CharacterUI_DrawPaperdollWithRingOverlay(player); + else + CharacterUI_DrawPaperdoll(player); +} + +//----- (0043CC7C) -------------------------------------------------------- +void CharacterUI_DrawPaperdoll(Player *player) +{ + //signed int pSex; // eax@1 + unsigned int v6; // ecx@9 + int v7; // ecx@10 + unsigned int pMainHandNum4; // eax@14 + ItemGen *item_MainHand4; // eax@15 + int v10; // edx@15 + unsigned int pX_MainHand4; // edi@15 + unsigned int v14; // ebx@18 + Texture *v16; // ebp@27 + double v17; // st7@29 + int v18; // edi@30 + char *v19; // eax@30 + unsigned int pBowNum; // eax@37 + ItemGen *itemBow; // edi@38 + int pX_Bow; // ebx@38 + double v28; // st7@51 + char *v30; // eax@54 + unsigned int pCloakNum; // eax@59 + ItemGen *item_Cloak; // edx@60 + int v33; // eax@65 + int v34; // eax@74 + int v35; // ebx@74 + LODFile_IconsBitmaps *v38; // ecx@78 + Texture *v39; // edi@85 + double v40; // st7@87 + int v41; // edi@88 + unsigned int pArmorNum; // eax@93 + ItemGen *item_Armor; // edx@94 + int v45; // eax@98 + int v48; // ebx@106 + LODFile_IconsBitmaps *v50; // ecx@110 + Texture *v51; // edi@117 + double v52; // st7@119 + int v53; // edi@120 + char *v55; // eax@122 + unsigned int pBootNum; // eax@127 + ItemGen *item_Boot; // edi@128 + int v59; // ebx@129 + int v60; // ecx@132 + Texture *v63; // edi@145 + double v64; // st7@147 + int v65; // edi@148 + char *v66; // eax@148 + unsigned int pMainHandNum; // edx@155 + int v70; // edx@156 + unsigned int pBeltNum; // eax@160 + ItemGen *item_Belt; // edi@161 + int v73; // edx@163 + unsigned int v75; // ebx@170 + Texture *v77; // edi@181 + double v78; // st7@183 + int v79; // edi@184 + char *v80; // eax@184 + unsigned int pMainHandNum2; // eax@192 + int v83; // eax@193 + int pArmorShoulderNum; // eax@197 + int v87; // eax@197 + int v88; // eax@198 + int v89; // eax@199 + int v94; // ebx@214 + int v95; // eax@214 + char *v96; // edi@226 + double v97; // st7@228 + int v98; // edi@229 + char *v99; // eax@229 + int pX_ArmorShoulder; // eax@237 + int pY_ArmorShoulder; // ecx@237 + int v106; // edx@238 + int v107; // edx@239 + int v108; // edx@240papredoll_flying_feet + int v109; // edi@250 + char *v110; // edx@250 + unsigned int pCloakCollarNum; // eax@259 + ItemGen *item_CloakCollar; // eax@260 + int v114; // eax@265 + int v116; // ebx@274 + double v118; // st7@286 + int v119; // edi@287 + char *v120; // eax@287 + unsigned int v122; // edi@295 + int pHelmNum; // ebx@297 + ItemGen *item_Helm; // edi@298 + int v125; // ecx@303 + unsigned int v127; // ebx@314 + Texture *v129; // edi@325 + double v130; // st7@327 + int v131; // edi@328 + char *v132; // eax@328 + unsigned int pMainHandNum3; // eax@335 + ItemGen *item_MainHand3; // eax@336 + unsigned int v138; // ebx@339 + Texture *v140; // edi@348 + double v141; // st7@350 + int v142; // edi@351 + char *v143; // eax@351 + unsigned int pShieldNum; // eax@358 + ItemGen *item_Shield; // eax@359 + int v149; // edx@359 + int pX_Shield; // ebx@362 + int v151; // ecx@363 + int v152; // ecx@364 + unsigned int v153; // eax@370 + Texture *v157; // ebp@381 + double v158; // st7@383 + char *v160; // eax@386 + unsigned int pMainHandNum5; // eax@393 + ItemGen *item_MainHand5; // eax@394 + char *v166; // [sp-8h] [bp-54h]@16 + const char *v167; // [sp-8h] [bp-54h]@23 + const char *v168; // [sp-8h] [bp-54h]@43 + const char *v169; // [sp-8h] [bp-54h]@79 + const char *v170; // [sp-8h] [bp-54h]@111 + const char *v171; // [sp-8h] [bp-54h]@141 + const char *v172; // [sp-8h] [bp-54h]@177 + const char *v173; // [sp-8h] [bp-54h]@222 + const char *v178; // [sp-8h] [bp-54h]@242 + const char *v179; // [sp-8h] [bp-54h]@280 + const char *v180; // [sp-8h] [bp-54h]@321 + char *v181; // [sp-8h] [bp-54h]@337 + const char *v182; // [sp-8h] [bp-54h]@344 + const char *v183; // [sp-8h] [bp-54h]@375 + signed int v186; // [sp-4h] [bp-50h]@202 + signed int v191; // [sp-4h] [bp-50h]@266 + signed int v192; // [sp-4h] [bp-50h]@304 + int pY_MainHand4; // [sp+10h] [bp-3Ch]@15 + int pY_Bow; // [sp+10h] [bp-3Ch]@38 + unsigned int pY_Cloak; // [sp+10h] [bp-3Ch]@74 + unsigned int pY_Armor; // [sp+10h] [bp-3Ch]@106 + int pY_Boot; // [sp+10h] [bp-3Ch]@129 + int pY_Belt; // [sp+10h] [bp-3Ch]@168 + unsigned int pY_shoulder; // [sp+10h] [bp-3Ch]@216 + unsigned int pY_CloakCollar; // [sp+10h] [bp-3Ch]@274 + int pY_Helm; // [sp+10h] [bp-3Ch]@312 + int pY_MainHand3; // [sp+10h] [bp-3Ch]@336 + int pY_Shield; // [sp+10h] [bp-3Ch]@362 + Texture *a2b; // [sp+14h] [bp-38h]@49 + int pX_Cloak; // [sp+14h] [bp-38h]@74 + int pX_Armor; // [sp+14h] [bp-38h]@106 + int pX_Boot; // [sp+14h] [bp-38h]@129 + int pX_Belt; // [sp+14h] [bp-38h]@168 + int pX_shoulder; // [sp+14h] [bp-38h]@214 + int pX_CloakCollar; // [sp+14h] [bp-38h]@274 + Texture *a2i; // [sp+14h] [bp-38h]@284 + int pX_Helm; // [sp+14h] [bp-38h]@312 + int pX_MainHand3; // [sp+14h] [bp-38h]@336 + int pBodyComplection; // [sp+24h] [bp-28h]@6 + unsigned int pBowTextureNum; // [sp+2Ch] [bp-20h]@38 + signed int v245; // [sp+34h] [bp-18h]@361 + signed int IsDwarf; // [sp+40h] [bp-Ch]@4 + + pIcons_LOD->LoadTexture("sptext01", TEXTURE_16BIT_PALETTE); + if (player->GetRace() == CHARACTER_RACE_DWARF) + { + IsDwarf = 1; + pBodyComplection = player->GetSexByVoice() == SEX_MALE ? 2 : 3; + } + else + { + IsDwarf = 0; + pBodyComplection = player->GetSexByVoice() == SEX_MALE ? 0 : 1; + } + + int uPlayerID = 0; + for (uint i = 0; i < 4; ++i) + if (pPlayers[i + 1] == player) + { + uPlayerID = i + 1; + break; + } + + pRenderer->ResetTextureClipRect(); + pRenderer->DrawTextureIndexed(467, 0, pIcons_LOD->GetTexture(uTextureID_BACKDOLL));//Ïîäëîæêà + if ( IsPlayerWearingWatersuit[uPlayerID] )//àêâàëàíã + { + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX, pPaperdoll_BodyY, pIcons_LOD->GetTexture(papredoll_dbods[uPlayerID - 1])); + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pPaperdoll_BodyX, pPaperdoll_BodyY, pIcons_LOD->GetTexture(papredoll_dbods[uPlayerID - 1]), player->pEquipment.uArmor); + v6 = player->pEquipment.uMainHand; + if ( !v6 || (v7 = *(int *)&pPlayers[uPlayerID]->pInventoryItems[v6-1], pItemsTable->pItems[v7].uEquipType != 1) + && (pItemsTable->pItems[v7].uSkillType != 4 || pPlayers[uPlayerID]->pEquipment.uShield) ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], + pIcons_LOD->GetTexture(papredoll_dlads[uPlayerID - 1])); + pMainHandNum4 = pPlayers[uPlayerID]->pEquipment.uMainHand; + if ( pMainHandNum4 ) + { + item_MainHand4 = &pPlayers[uPlayerID]->pInventoryItems[pMainHandNum4 - 1]; + pX_MainHand4 = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][1][0] - pItemsTable->pItems[item_MainHand4->uItemID].uEquipX; + pY_MainHand4 = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][1][1] - pItemsTable->pItems[item_MainHand4->uItemID].uEquipY; + if ( item_MainHand4->uItemID == 64 ) //blaster + v166 = "item64v1"; + else + v166 = pItemsTable->pItems[item_MainHand4->uItemID].pIconName; + v14 = pIcons_LOD->LoadTexture(v166, TEXTURE_16BIT_PALETTE); + if ( !( item_MainHand4->uAttributes & 0xF0 ) ) + { + v18 = v14 + 1; + v19 = (char *)pIcons_LOD->GetTexture(v14); + if ( item_MainHand4->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_MainHand4, pY_MainHand4, (Texture *)v19); + else + { + if ( item_MainHand4->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_MainHand4, pY_MainHand4, (Texture *)v19); + else + pRenderer->DrawTransparentGreenShade(pX_MainHand4, pY_MainHand4, (Texture *)v19); + } + } + if ( item_MainHand4->uAttributes & 0xF0 ) + { + if ( ( item_MainHand4->uAttributes & 0xF0) == 16 ) + v167 = "sptext01"; + if ( ( item_MainHand4->uAttributes & 0xF0) == 32 ) + v167 = "sp28a"; + if ( (item_MainHand4->uAttributes & 0xF0) == 64 ) + v167 = "sp30a"; + if ( (item_MainHand4->uAttributes & 0xF0) == 128 ) + v167 = "sp91a"; + v16 = pIcons_LOD->LoadTexturePtr(v167, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_MainHand4->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v17 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_MainHand4, pY_MainHand4, pIcons_LOD->GetTexture(v14), v16, (signed __int64)v17, 0, 255); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_MainHand4, pY_MainHand4, (Texture *)v19, pMainHandNum4); + } + } + else// áåç àêâàëàíãà + { + pBowNum = pPlayers[uPlayerID]->pEquipment.uBow; //ñíà÷àëà ðèñóåòñÿ ëóê + if ( pBowNum ) + { + itemBow = &pPlayers[uPlayerID]->pInventoryItems[pBowNum - 1]; + pX_Bow = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][2][0] - pItemsTable->pItems[itemBow->uItemID].uEquipX; + pY_Bow = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][2][1] - pItemsTable->pItems[itemBow->uItemID].uEquipY; + pBowTextureNum = pIcons_LOD->LoadTexture(pItemsTable->pItems[itemBow->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + if ( !(itemBow->uAttributes & 0xF0) )// åñëè íå ïðèìåí¸í çàêë + { + if ( itemBow->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Bow, pY_Bow, pIcons_LOD->GetTexture(pBowTextureNum)); + else + { + v30 = (char *)pIcons_LOD->GetTexture(pBowTextureNum); + if ( !(itemBow->uAttributes & 1) )//íå îïîçíàííûé ëóê çåë¸íûé + pRenderer->DrawTransparentGreenShade(pX_Bow, pY_Bow, (Texture *)v30); + else // îïîçíàííûé ëóê + pRenderer->DrawTextureTransparent(pX_Bow, pY_Bow, (Texture *)v30); + } + } + else + { + if ( (itemBow->uAttributes & 0xF0) == 16 ) + v168 = "sptext01"; + if ( (itemBow->uAttributes & 0xF0) == 32 ) + v168 = "sp28a"; + if ( (itemBow->uAttributes & 0xF0) == 64 ) + v168 = "sp30a"; + if ( (itemBow->uAttributes & 0xF0) == 128 ) + v168 = "sp91a"; + a2b = pIcons_LOD->LoadTexturePtr(v168, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + itemBow->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v28 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Bow, pY_Bow, pIcons_LOD->GetTexture(pBowTextureNum), a2b, (signed __int64)v28, 0, 255); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Bow, pY_Bow, pIcons_LOD->GetTexture(pBowTextureNum), pBowNum); + } + pCloakNum = pPlayers[uPlayerID]->pEquipment.uCloak;// ïîòîì ïëàù + if ( pCloakNum ) + { + item_Cloak = &pPlayers[uPlayerID]->pInventoryItems[pCloakNum - 1]; + switch ( item_Cloak->uItemID ) + { + case ITEM_RELIC_TWILIGHT: + v33 = 5; + break; + case ITEM_ARTIFACT_CLOAK_OF_THE_SHEEP: + v33 = 6; + break; + case ITEM_RARE_SUN_CLOAK: + v33 = 7; + break; + case ITEM_RARE_MOON_CLOAK: + v33 = 8; + break; + case ITEM_RARE_VAMPIRES_CAPE: + v33 = 9; + break; + default: + v33 = item_Cloak->uItemID - 105; + break; + } + if ( v33 >= 0 && v33 < 10 ) + { + v35 = paperdoll_cloak_texture[pBodyComplection][v33];//Texture_Cloak + pX_Cloak = pPaperdoll_BodyX + paperdoll_Cloak[pBodyComplection][v33][0]; + pY_Cloak = pPaperdoll_BodyY + paperdoll_Cloak[pBodyComplection][v33][1]; + if ( !(item_Cloak->uAttributes & 0xF0) ) + { + v41 = v35 + 1; + if ( item_Cloak->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Cloak, pY_Cloak, pIcons_LOD->GetTexture(v35)); + else + pRenderer->DrawTextureTransparent(pX_Cloak, pY_Cloak, pIcons_LOD->GetTexture(v35)); + } + else + { + if ( (item_Cloak->uAttributes & 0xF0) == 16 ) + v169 = "sptext01"; + if ( (item_Cloak->uAttributes & 0xF0) == 32 ) + v169 = "sp28a"; + if ( (item_Cloak->uAttributes & 0xF0) != 64 ) + v169 = "sp30a"; + if ( (item_Cloak->uAttributes & 0xF0) == 128 ) + v169 = "sp91a"; + v39 = pIcons_LOD->LoadTexturePtr(v169, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Cloak->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v40 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Cloak, pY_Cloak, pIcons_LOD->GetTexture(v35), v39, (signed __int64)v40, 0, 255); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Cloak, pY_Cloak, pIcons_LOD->GetTexture(v35), pCloakNum); + } + } + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX, pPaperdoll_BodyY,//ðèñóåòñÿ êóêëà + pIcons_LOD->GetTexture(papredoll_dbods[uPlayerID - 1])); + pArmorNum = pPlayers[uPlayerID]->pEquipment.uArmor;// ïîòîì áðîíÿ + if ( pArmorNum ) + { + item_Armor = &pPlayers[uPlayerID]->pInventoryItems[pArmorNum - 1]; + switch ( item_Armor->uItemID ) + { + case 504: + v45 = 15; + break; + case ITEM_ARTIFACT_YORUBA: + v45 = 14; + break; + case ITEM_RELIC_HARECS_LEATHER: + v45 = 13; + break; + case ITEM_ELVEN_CHAINMAIL: + v45 = 16; + break; + default: + v45 = item_Armor->uItemID - 66; + break; + } + if ( v45 >= 0 && v45 < 17 ) + { + pX_Armor = pPaperdoll_BodyX + paperdoll_Armor[pBodyComplection][v45][0]; + pY_Armor = pPaperdoll_BodyY + paperdoll_Armor[pBodyComplection][v45][1]; + v48 = paperdoll_armor_texture[pBodyComplection][v45][0]; + if ( !(item_Armor->uAttributes & 0xF0) ) + { + v53 = v48 + 1; + if ( item_Armor->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Armor, pY_Armor, pIcons_LOD->GetTexture(v48)); + else + { + v55 = (char *)&pIcons_LOD->pTextures[v48]; + if ( !(item_Armor->uAttributes & 1) ) + pRenderer->DrawTransparentGreenShade(pX_Armor, pY_Armor, (Texture *)v55); + else + pRenderer->DrawTextureTransparent(pX_Armor, pY_Armor, (Texture *)v55); + } + } + else + { + if ( (item_Armor->uAttributes & 0xF0) == 16 ) + v170 = "sptext01"; + if ( (item_Armor->uAttributes & 0xF0) == 32 ) + v170 = "sp28a"; + if ( (item_Armor->uAttributes & 0xF0) == 64 ) + v170 = "sp30a"; + if ( (item_Armor->uAttributes & 0xF0) == 128 ) + v170 = "sp91a"; + v51 = pIcons_LOD->LoadTexturePtr(v170, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Armor->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v52 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Armor, pY_Armor, pIcons_LOD->GetTexture(v48), v51, (signed __int64)v52, 0, 255); + } + if ( pPlayers[uPlayerID]->pEquipment.uMainHand //äàëåå ïëå÷è áðîíè + && (pPlayers[uPlayerID]->GetEquippedItemEquipType(EQUIP_MAIN_HAND) == EQUIP_MAIN_HAND || + pPlayers[uPlayerID]->GetEquippedItemSkillType(EQUIP_MAIN_HAND) == EQUIP_SHIELD && + !pPlayers[uPlayerID]->pEquipment.uShield) ) + { + v94 = paperdoll_armor_texture[pBodyComplection][v45][2]; + if ( v94 == pIcons_LOD->FindTextureByName("pending") ) + { + v94 = paperdoll_armor_texture[pBodyComplection][v45][1]; + pX_shoulder = pPaperdoll_BodyX + paperdoll_shoulder[pBodyComplection][v45][0]; + pY_shoulder = pPaperdoll_BodyY + paperdoll_shoulder[pBodyComplection][v45][1]; + } + else + { + pX_shoulder = pPaperdoll_BodyX + dword_4E5270[v45][0]; + pY_shoulder = pPaperdoll_BodyY + dword_4E5270[v45][1]; + } + if ( !(item_Armor->uAttributes & 0xF0) ) + { + v98 = v94 + 1; + v99 = (char *)pIcons_LOD->GetTexture(v94); + if ( item_Armor->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_shoulder, pY_shoulder, (Texture *)v99); + else + { + if ( item_Armor->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_shoulder, pY_shoulder, (Texture *)v99); + else + pRenderer->DrawTransparentGreenShade(pX_shoulder, pY_shoulder, (Texture *)v99); + } + } + else + { + if ( v94 != pIcons_LOD->FindTextureByName("pending") ) + { + if ( item_Armor->uAttributes & 0xF0 ) + { + if ( (item_Armor->uAttributes & 0xF0) == ITEM_AURA_EFFECT_RED ) + v173 = "sptext01"; + if ( (item_Armor->uAttributes & 0xF0) == ITEM_AURA_EFFECT_BLUE ) + v173 = "sp28a"; + if ( ( item_Armor->uAttributes & 0xF0) == ITEM_AURA_EFFECT_GREEN ) + v173 = "sp30a"; + if ( (item_Armor->uAttributes & 0xF0) == ITEM_AURA_EFFECT_PURPLE ) + v173 = "sp91a"; + v96 = (char *)pIcons_LOD->LoadTexturePtr(v173, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Armor->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v97 = (double)GetTickCount(); + pRenderer->_4A63E6(pX_shoulder, pY_shoulder, pIcons_LOD->GetTexture(v94), (Texture *)v96, (signed __int64)(v97 * 0.1), 0, 255); + } + } + } + } + else + { + v94 = paperdoll_armor_texture[pBodyComplection][v45][1]; + if ( v94 != pIcons_LOD->FindTextureByName("pending") ) + { + pX_ArmorShoulder = pPaperdoll_BodyX + paperdoll_shoulder[pBodyComplection][v45][0]; + pY_ArmorShoulder = pPaperdoll_BodyY + paperdoll_shoulder[pBodyComplection][v45][1]; + if ( !(item_Armor->uAttributes & 0xF0) ) + { + v109 = v94 + 1; + v110 = (char *)pIcons_LOD->GetTexture(v94); + if ( item_Armor->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_ArmorShoulder, pY_ArmorShoulder, (Texture *)v110); + else + { + if ( item_Armor->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_ArmorShoulder, pY_ArmorShoulder, (Texture *)v110); + else + pRenderer->DrawTransparentGreenShade(pX_ArmorShoulder, pY_ArmorShoulder, (Texture *)v110); + } + } + else + { + if ( (item_Armor->uAttributes & 0xF0) == 16 ) + v178 = "sptext01"; + if ( (item_Armor->uAttributes & 0xF0) == 32 ) + v178 = "sp28a"; + if ( (item_Armor->uAttributes & 0xF0) == 64 ) + v178 = "sp30a"; + if ( (item_Armor->uAttributes & 0xF0) == 128 ) + v178 = "sp91a"; + v96 = (char *)pIcons_LOD->LoadTexturePtr(v178, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Armor->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v97 = (double)GetTickCount(); + pRenderer->_4A63E6(pX_ArmorShoulder, pY_ArmorShoulder, pIcons_LOD->GetTexture(v94), (Texture *)v96, (signed __int64)(v97 * 0.1), 0, 255); + } + } + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Armor, pY_Armor, (Texture *)v55, pArmorNum); + } + } + pBootNum = pPlayers[uPlayerID]->pEquipment.uBoot;//äàëåå îáóâü + if ( pBootNum ) + { + item_Boot = &pPlayers[uPlayerID]->pInventoryItems[pBootNum - 1]; + switch ( item_Boot->uItemID ) + { + case 529: + v60 = 5; + v59 = papredoll_flying_feet[pPlayers[uPlayerID]->uCurrentFace]; + break; + case 512: + v60 = 6; + v59 = paperdoll_boots_texture[pBodyComplection][5]; + break; + default: + v60 = item_Boot->uItemID - 115; + v59 = paperdoll_boots_texture[pBodyComplection][v60]; + break; + } + if ( v60 >= 0 && v60 < 7 ) + { + pX_Boot = pPaperdoll_BodyX + paperdoll_Boot[pBodyComplection][v60][0]; + pY_Boot = pPaperdoll_BodyY + paperdoll_Boot[pBodyComplection][v60][1]; + if ( !(item_Boot->uAttributes & 0xF0) ) + { + v65 = v59 + 1; + v66 = (char *)pIcons_LOD->GetTexture(v59); + if ( item_Boot->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Boot, pY_Boot, (Texture *)v66); + else + { + if ( item_Boot->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_Boot, pY_Boot, (Texture *)v66); + else + pRenderer->DrawTransparentGreenShade(pX_Boot, pY_Boot, (Texture *)v66); + } + } + else + { + if ( (item_Boot->uAttributes & 0xF0) == 16 ) + v171 = "sptext01"; + if ( (item_Boot->uAttributes & 0xF0) == 32 ) + v171 = "sp28a"; + if ( (item_Boot->uAttributes & 0xF0) == 64 ) + v171 = "sp30a"; + if ( (item_Boot->uAttributes & 0xF0) == 128 ) + v171 = "sp91a"; + v63 = pIcons_LOD->LoadTexturePtr(v171, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Boot->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v64 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Boot, pY_Boot, pIcons_LOD->GetTexture(v59), v63, (signed __int64)v64, 0, 255); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Boot, pY_Boot, (Texture *)v66, pBootNum); + } + } + pMainHandNum = pPlayers[uPlayerID]->pEquipment.uMainHand; + if ( !pMainHandNum || (v70 = *(int *)&pPlayers[uPlayerID]->pInventoryItems[pMainHandNum -1], pItemsTable->pItems[v70].uEquipType != 1) + && (pItemsTable->pItems[v70].uSkillType != 4 || pPlayers[uPlayerID]->pEquipment.uShield) ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_LeftHand[pBodyComplection][0], + pPaperdoll_BodyY + pPaperdoll_LeftHand[pBodyComplection][1], + pIcons_LOD->GetTexture(papredoll_dlads[uPlayerID - 1])); + pBeltNum = pPlayers[uPlayerID]->pEquipment.uBelt;// äàëåå ïîÿñ + if ( pBeltNum ) + { + item_Belt = &pPlayers[uPlayerID]->pInventoryItems[pBeltNum - 1]; + switch ( item_Belt->uItemID ) + { + case ITEM_RILIC_TITANS_BELT: + v73 = 5; + break; + case ITEM_ARTIFACT_HEROS_BELT: + v73 = 6; + break; + default: + v73 = item_Belt->uItemID - 100; + break; + } + if ( v73 >= 0 && v73 < 7 ) + { + pX_Belt = pPaperdoll_BodyX + paperdoll_Belt[pBodyComplection][v73][0]; + pY_Belt = pPaperdoll_BodyY + paperdoll_Belt[pBodyComplection][v73][1]; + if ( IsDwarf != 1 || v73 == 5 ) + v75 = paperdoll_belt_texture[pBodyComplection][v73]; + else + v75 = paperdoll_belt_texture[pBodyComplection - 2][v73]; + if ( !(item_Belt->uAttributes & 0xF0) ) + { + v79 = v75 + 1; + v80 = (char *)pIcons_LOD->GetTexture(v75); + if ( item_Belt->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Belt, pY_Belt, (Texture *)v80); + else + { + if ( item_Belt->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_Belt, pY_Belt, (Texture *)v80); + else + pRenderer->DrawTransparentGreenShade(pX_Belt, pY_Belt, (Texture *)v80); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Belt, pY_Belt, (Texture *)v80, pBeltNum); + } + else + { + if ( (item_Belt->uAttributes & 0xF0) == 16 ) + v172 = "sptext01"; + if ( (item_Belt->uAttributes & 0xF0) == 32 ) + v172 = "sp28a"; + if ( (item_Belt->uAttributes & 0xF0) == 64 ) + v172 = "sp30a"; + if ( (item_Belt->uAttributes & 0xF0) == 128 ) + v172 = "sp91a"; + v77 = pIcons_LOD->LoadTexturePtr(v172, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Belt->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v78 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Belt, pY_Belt, pIcons_LOD->GetTexture(v75), v77, (signed __int64)v78, 0, 255); + } + } + } + pMainHandNum2 = pPlayers[uPlayerID]->pEquipment.uMainHand; + if ( pMainHandNum2 ) + { + v83 = pPlayers[uPlayerID]->pInventoryItems[pMainHandNum2 - 1].uItemID; + if ( pItemsTable->pItems[v83].uEquipType == 1 + || pItemsTable->pItems[v83].uSkillType == PLAYER_SKILL_SPEAR && !pPlayers[uPlayerID]->pEquipment.uShield ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_SecondLeftHand[pBodyComplection][0], + pPaperdoll_BodyY + pPaperdoll_SecondLeftHand[pBodyComplection][1], + pIcons_LOD->GetTexture(papredoll_dlaus[uPlayerID - 1])); + } + pCloakCollarNum = pPlayers[uPlayerID]->pEquipment.uCloak;//äàëåå âîðîòíèê ïëàùà + if ( pCloakCollarNum ) + { + item_CloakCollar = &pPlayers[uPlayerID]->pInventoryItems[pCloakCollarNum - 1]; + switch ( item_CloakCollar->uItemID ) + { + case 525: + v114 = 5; + break; + case 530: + v114 = 6; + break; + case 547: + v114 = 7; + break; + case 548: + v114 = 8; + break; + case 550: + v114 = 9; + break; + default: + v114 = item_CloakCollar->uItemID - 105; + } + if ( v114 >= 0 && v114 < 10 ) + { + v116 = paperdoll_cloak_collar_texture[pBodyComplection][v114]; + pX_CloakCollar = pPaperdoll_BodyX + paperdoll_CloakCollar[pBodyComplection][v114][0]; + pY_CloakCollar = pPaperdoll_BodyY + paperdoll_CloakCollar[pBodyComplection][v114][1]; + if ( v116 != pIcons_LOD->FindTextureByName("pending") ) + { + if ( !(item_CloakCollar->uAttributes & 0xF0) ) + { + v119 = v116 + 1; + v120 = (char *)pIcons_LOD->GetTexture(v116); + if ( item_CloakCollar->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_CloakCollar, pY_CloakCollar, (Texture *)v120); + else + pRenderer->DrawTextureTransparent(pX_CloakCollar, pY_CloakCollar, (Texture *)v120); + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_CloakCollar, pY_CloakCollar, (Texture *)v120, pCloakCollarNum); + } + else + { + if ( (item_CloakCollar->uAttributes & 0xF0) == 16 ) + v179 = "sptext01"; + if ( (item_CloakCollar->uAttributes & 0xF0) == 32 ) + v179 = "sp28a"; + if ( (item_CloakCollar->uAttributes & 0xF0) == 64 ) + v179 = "sp30a"; + if ( (item_CloakCollar->uAttributes & 0xF0) == 128 ) + v179 = "sp91a"; + a2i = pIcons_LOD->LoadTexturePtr(v179, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_CloakCollar->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v118 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_CloakCollar, pY_CloakCollar, pIcons_LOD->GetTexture(v116), a2i, (signed __int64)v118, 0, 255); + } + } + } + } + if ( pPlayers[uPlayerID]->uCurrentFace == 12 || pPlayers[uPlayerID]->uCurrentFace == 13 ) + { + v122 = papredoll_dbrds[pPlayers[uPlayerID]->uCurrentFace]; + if ( v122 != pIcons_LOD->FindTextureByName("Pending") ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_Beards[2 * pPlayers[uPlayerID]->uCurrentFace - 24], + pPaperdoll_BodyY + pPaperdoll_Beards[2 * pPlayers[uPlayerID]->uCurrentFace - 23], + pIcons_LOD->GetTexture(v122)); + } + pHelmNum = pPlayers[uPlayerID]->pEquipment.uHelm;//äàëåå øëåì + if ( pHelmNum ) + { + item_Helm = &pPlayers[uPlayerID]->pInventoryItems[pHelmNum-1]; + switch ( item_Helm->uItemID ) + { + case 521: + v125 = 11; + break; + case 522: + v125 = 12; + break; + case 523: + v125 = 13; + break; + case 532: + v125 = 14; + break; + case 544: + v125 = 15; + break; + default: + v125 = item_Helm->uItemID - 89; + } + if ( v125 >= 0 && v125 < 16 ) + { + pX_Helm = pPaperdoll_BodyX + paperdoll_Helm[pBodyComplection][v125][0]; + pY_Helm = pPaperdoll_BodyY + paperdoll_Helm[pBodyComplection][v125][1]; + if ( IsDwarf != 1 || item_Helm->uItemID != 92 ) + v127 = paperdoll_helm_texture[player->GetSexByVoice()][v125]; + else + v127 = papredoll_dbrds[11]; + if ( item_Helm->uAttributes & 0xF0 ) + { + if ( (item_Helm->uAttributes & 0xF0) == 16 ) + v180 = "sptext01"; + if ( (item_Helm->uAttributes & 0xF0) == 32 ) + v180 = "sp28a"; + if ( (item_Helm->uAttributes & 0xF0) == 64 ) + v180 = "sp30a"; + if ( (item_Helm->uAttributes & 0xF0) == 128 ) + v180 = "sp91a"; + v129 = pIcons_LOD->LoadTexturePtr(v180, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Helm->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v130 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Helm, pY_Helm, pIcons_LOD->GetTexture(v127), v129, (signed __int64)v130, 0, 255); + } + else + { + v131 = v127 + 1; + v132 = (char *)pIcons_LOD->GetTexture(v127); + if ( item_Helm->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Helm, pY_Helm, (Texture *)v132); + else + { + if ( item_Helm->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_Helm, pY_Helm, (Texture *)v132); + else + pRenderer->DrawTransparentGreenShade(pX_Helm, pY_Helm, (Texture *)v132); + } + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Helm, pY_Helm, (Texture *)v132, pHelmNum); + } + } + pMainHandNum3 = pPlayers[uPlayerID]->pEquipment.uMainHand;//weapon in right hand + if ( pMainHandNum3 ) + { + item_MainHand3 = &pPlayers[uPlayerID]->pInventoryItems[pMainHandNum3 - 1]; + pX_MainHand3 = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][1][0] - pItemsTable->pItems[item_MainHand3->uItemID].uEquipX; + pY_MainHand3 = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][1][1] - pItemsTable->pItems[item_MainHand3->uItemID].uEquipY; + if ( item_MainHand3->uItemID == 64 ) + v181 = "item64v1"; + else + v181 = pItemsTable->pItems[item_MainHand3->uItemID].pIconName; + v138 = pIcons_LOD->LoadTexture(v181, TEXTURE_16BIT_PALETTE); + if ( !(item_MainHand3->uAttributes & 0xF0) ) + { + v142 = v138 + 1; + v143 = (char *)pIcons_LOD->GetTexture(v138); + if ( item_MainHand3->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_MainHand3, pY_MainHand3, (Texture *)v143); + else + { + if ( item_MainHand3->uAttributes & 1 ) + pRenderer->DrawTextureTransparent(pX_MainHand3, pY_MainHand3, (Texture *)v143); + else + pRenderer->DrawTransparentGreenShade(pX_MainHand3, pY_MainHand3, (Texture *)v143); + } + } + else + { + if ( (item_MainHand3->uAttributes & 0xF0) == 16 ) + v182 = "sptext01"; + if ( (item_MainHand3->uAttributes & 0xF0) == 32 ) + v182 = "sp28a"; + if ( (item_MainHand3->uAttributes & 0xF0) == 64 ) + v182 = "sp30a"; + if ( (item_MainHand3->uAttributes & 0xF0) == 128 ) + v182 = "sp91a"; + v140 = pIcons_LOD->LoadTexturePtr(v182, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_MainHand3->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v141 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_MainHand3, pY_MainHand3, pIcons_LOD->GetTexture(v138), v140, (signed __int64)v141, 0, 255); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_MainHand3, pY_MainHand3, (Texture *)v143, pMainHandNum3); + } + pShieldNum = pPlayers[uPlayerID]->pEquipment.uShield;// äàëåå ùèò + if ( pShieldNum ) + { + item_Shield = &pPlayers[uPlayerID]->pInventoryItems[pShieldNum - 1]; + v149 = pItemsTable->pItems[item_Shield->uItemID].uSkillType; + if ( v149 == 2 || v149 == 1 ) + { + v151 = item_Shield->uItemID - 400; + pX_Shield = 596; + v245 = 1; + switch ( item_Shield->uItemID ) + { + case 400: + pY_Shield = 86; + break; + case 403: + pY_Shield = 28; + break; + case 415: + pX_Shield = 595; + pY_Shield = 33; + break; + default: + pX_Shield = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][0][0] - pItemsTable->pItems[item_Shield->uItemID].uEquipX; + pY_Shield = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][0][1] - pItemsTable->pItems[item_Shield->uItemID].uEquipY; + break; + } + } + else + { + v245 = 0; + pX_Shield = pPaperdoll_BodyX + paperdoll_Weapon[pBodyComplection][0][0] - pItemsTable->pItems[item_Shield->uItemID].uEquipX; + pY_Shield = pPaperdoll_BodyY + paperdoll_Weapon[pBodyComplection][0][1] - pItemsTable->pItems[item_Shield->uItemID].uEquipY; + } + v153 = pIcons_LOD->LoadTexture(pItemsTable->pItems[item_Shield->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + if ( !(item_Shield->uAttributes & 0xF0) ) + { + if ( item_Shield->uAttributes & 2 ) + pRenderer->DrawTransparentRedShade(pX_Shield, pY_Shield, pIcons_LOD->GetTexture(v153)); + else + { + v160 = (char *)pIcons_LOD->GetTexture(v153); + if ( !(item_Shield->uAttributes & 1) ) + pRenderer->DrawTransparentGreenShade(pX_Shield, pY_Shield, (Texture *)v160); + else + pRenderer->DrawTextureTransparent(pX_Shield, pY_Shield, (Texture *)v160); + } + } + else + { + if ( (item_Shield->uAttributes & 0xF0) == 16 ) + v183 = "sptext01"; + if ( (item_Shield->uAttributes & 0xF0) == 32 ) + v183 = "sp28a"; + if ( (item_Shield->uAttributes & 0xF0) == 64 ) + v183 = "sp30a"; + if ( (item_Shield->uAttributes & 0xF0) == 128 ) + v183 = "sp91a"; + v157 = pIcons_LOD->LoadTexturePtr(v183, TEXTURE_16BIT_PALETTE); + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if ( _50C9A8_item_enchantment_timer <= 0 ) + { + _50C9A8_item_enchantment_timer = 0; + item_Shield->uAttributes &= 0xFFFFFF0Fu; + ptr_50C9A4 = 0; + } + v158 = (double)GetTickCount() * 0.1; + pRenderer->_4A63E6(pX_Shield, pY_Shield, pIcons_LOD->GetTexture(v153), v157, (signed __int64)v158, 0, 255); + if ( v245 ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdollLeftEmptyHand[pBodyComplection][0], + pPaperdoll_BodyY + pPaperdollLeftEmptyHand[pBodyComplection][1], pIcons_LOD->GetTexture(papredoll_dlhs[uPlayerID - 1])); + } + if ( !bRingsShownInCharScreen ) + pRenderer->DrawMaskToZBuffer(pX_Shield, pY_Shield, pIcons_LOD->GetTexture(v153), pShieldNum); + } + } + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_RightHand[pBodyComplection][0], pPaperdoll_BodyY + pPaperdoll_RightHand[pBodyComplection][1], pIcons_LOD->GetTexture(papredoll_drhs[uPlayerID - 1])); + pMainHandNum5 = pPlayers[uPlayerID]->pEquipment.uMainHand; + if ( pMainHandNum5 ) + { + item_MainHand5 = &pPlayers[uPlayerID]->pInventoryItems[pMainHandNum5 - 1]; + if ( pItemsTable->pItems[item_MainHand5->uItemID].uEquipType == 1 || + pItemsTable->pItems[item_MainHand5->uItemID].uSkillType == PLAYER_SKILL_SPEAR && + !pPlayers[uPlayerID]->pEquipment.uShield ) + pRenderer->DrawTextureTransparent(pPaperdoll_BodyX + pPaperdoll_SecondLeftHand[pBodyComplection][0], + pPaperdoll_BodyY + pPaperdoll_SecondLeftHand[pBodyComplection][1], + pIcons_LOD->GetTexture(papredoll_dlhus[uPlayerID - 1])); + } + if ( !bRingsShownInCharScreen )//ðèñîâàíèå ëóïû + pRenderer->DrawTextureTransparent(603, 299, pIcons_LOD->GetTexture(uTextureID_MAGNIF_B)); + pRenderer->DrawTextureTransparent(468, 0, pIcons_LOD->GetTexture(uTextureID_right_panel_loop));//îáðàìëåíèå +} + + + + + + + +//----- (0041A2D1) -------------------------------------------------------- +void CharacterUI_InventoryTab_Draw(Player *player, bool a2) +{ + Texture *v7; // esi@6 + signed int v11; // edx@6 + int v13; // eax@13 + signed int v14; // edx@13 + int v15; // eax@13 + unsigned int v17; // edi@15 + Texture *pTexture; // ebx@24 + unsigned int uCellX; // [sp+30h] [bp-8h]@5 + unsigned int uCellY; // [sp+34h] [bp-4h]@5 + + pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->GetTexture(uTextureID_CharacterUI_InventoryBackground)); + if (a2) + pRenderer->DrawTextureIndexed(8, 305, pIcons_LOD->LoadTexturePtr("fr_strip", TEXTURE_16BIT_PALETTE)); + + int i = 0; + for (uint i = 0; i < 126; ++i) + { + int v26 = (int)(player->pInventoryIndices + i); + + if (player->pInventoryIndices[i] <= 0) + continue; + + int item_idx = player->pInventoryIndices[i]; + auto item = &player->pInventoryItems[item_idx - 1]; + if (!item->uItemID) + continue; + + uCellY = 32 * (i / 14) + 17; + uCellX = 32 * (i % 14) + 14; + uint item_texture_id = pIcons_LOD->LoadTexture(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + v7 = pIcons_LOD->GetTexture(item_texture_id); + + v11 = v7->uTextureWidth; + if (v11 < 14) + v11 = 14; + + if ( (v11 - 14) / 32 == 0 && v7->uTextureWidth < 32) + uCellX += (32 - v7->uTextureWidth) / 2; + v13 = v11 - 14; + LOBYTE(v13) = v13 & 0xE0; + v15 = v13 + 32; + v14 = v7->uTextureHeight; + if (v14 < 14 ) + v14 = 14; + v17 = uCellX + ((v15 - v7->uTextureWidth) >> 1) + pSRZBufferLineOffsets[uCellY + (( (int)((v14 - 14) & 0xFFFFFFE0) - v7->uTextureHeight + 32) >> 1)]; //added typecast. without it the value in the brackets got cat to unsigned which messed stuff up + + if (item->uAttributes & 0xF0) + { + switch (item->uAttributes & 0xF0) + { + case ITEM_AURA_EFFECT_RED: pTexture = pIcons_LOD->LoadTexturePtr("sptext01", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_BLUE: pTexture = pIcons_LOD->LoadTexturePtr("sp28a", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_GREEN: pTexture = pIcons_LOD->LoadTexturePtr("sp30a", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_PURPLE: pTexture = pIcons_LOD->LoadTexturePtr("sp91a", TEXTURE_16BIT_PALETTE); break; + } + + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if (_50C9A8_item_enchantment_timer <= 0) + { + _50C9A8_item_enchantment_timer = 0; + LOBYTE(item->uAttributes) &= 0xF; + ptr_50C9A4 = 0; + } + + pRenderer->_4A63E6(uCellX, uCellY, v7, pTexture, GetTickCount() * 0.1, 0, 255); + ZBuffer_Fill(&pRenderer->pActiveZBuffer[v17], item_texture_id, item_idx); + } + else + { + if (item->Identified() || pCurrentScreen != SCREEN_HOUSE) + { + if (item->Broken()) + pRenderer->DrawTransparentRedShade(uCellX, uCellY, v7); + else + pRenderer->DrawTextureTransparent(uCellX, uCellY, v7); + } + else + pRenderer->DrawTransparentGreenShade(uCellX, uCellY, v7); + + ZBuffer_Fill(&pRenderer->pActiveZBuffer[v17], item_texture_id, item_idx); + continue; + } + } +} + + + +static void CharacterUI_DrawItem(int x, int y, ItemGen *item, int id) +{ + auto item_texture = pIcons_LOD->LoadTexturePtr(pItemsTable->pItems[item->uItemID].pIconName, TEXTURE_16BIT_PALETTE); + + if (item->uAttributes & 0xF0) // enchant animation + { + Texture *enchantment_texture = nullptr; + switch (item->uAttributes & 0xF0) + { + case ITEM_AURA_EFFECT_RED: enchantment_texture = pIcons_LOD->LoadTexturePtr("sptext01", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_BLUE: enchantment_texture = pIcons_LOD->LoadTexturePtr("sp28a", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_GREEN: enchantment_texture = pIcons_LOD->LoadTexturePtr("sp30a", TEXTURE_16BIT_PALETTE); break; + case ITEM_AURA_EFFECT_PURPLE: enchantment_texture = pIcons_LOD->LoadTexturePtr("sp91a", TEXTURE_16BIT_PALETTE); break; + } + + _50C9A8_item_enchantment_timer -= pEventTimer->uTimeElapsed; + if (_50C9A8_item_enchantment_timer <= 0) + { + _50C9A8_item_enchantment_timer = 0; + item->uAttributes &= 0xFFFFFF0F; + ptr_50C9A4 = 0; + } + pRenderer->_4A63E6(x, y, item_texture, enchantment_texture, GetTickCount() * 0.1, 0, 255); + } + else + { + if (item->Broken()) + pRenderer->DrawTransparentRedShade(x, y, item_texture); + else if (!item->Identified()) + pRenderer->DrawTransparentGreenShade(x, y, item_texture); + else + pRenderer->DrawTextureTransparent(x, y, item_texture); + + pRenderer->ZBuffer_Fill_2(x, y, item_texture, id); + } +} + + +//----- (0043E825) -------------------------------------------------------- +void CharacterUI_DrawPaperdollWithRingOverlay(Player *player) +{ + CharacterUI_DrawPaperdoll(player); + + pRenderer->DrawTextureTransparent(0x1D9u, 0, pIcons_LOD->GetTexture(uTextureID_BACKHAND)); + pRenderer->DrawTextureTransparent(0x1D4u, 0, pIcons_LOD->GetTexture(uTextureID_right_panel_loop)); + pRenderer->DrawTextureIndexed(pCharacterScreen_DetalizBtn->uX, + pCharacterScreen_DetalizBtn->uY, + pIcons_LOD->GetTexture(uTextureID_detaliz_close_button)); + + for (uint i = 0; i < 6; ++i) + { + if (!player->pEquipment.uRings[i]) + continue; + + static int pPaperdollRingsX[6] = {0x1EA, 0x21A, 0x248, 0x1EA, 0x21A, 0x248}; + static int pPaperdollRingsY[6] = {0x0CA, 0x0CA, 0x0CA, 0x0FA, 0x0FA, 0x0FA}; + + CharacterUI_DrawItem(pPaperdollRingsX[i], + pPaperdollRingsY[i], + &player->pInventoryItems[player->pEquipment.uRings[i] - 1], + player->pEquipment.uRings[i]); + } + + + if (player->pEquipment.uAmulet) + { + CharacterUI_DrawItem(493, 91, + &player->pInventoryItems[player->pEquipment.uAmulet - 1], + player->pEquipment.uAmulet); + } + + if (player->pEquipment.uGlove) + { + CharacterUI_DrawItem(586, 88, + &player->pInventoryItems[player->pEquipment.uGlove - 1], + player->pEquipment.uGlove); + } +} + +//----- (0043BCA7) -------------------------------------------------------- +void CharacterUI_LoadPaperdollTextures() +{ + int v0; // edi@7 + enum CHARACTER_RACE pRace; // ebx@7 + signed int pSex; // eax@7 + int v3; // ebx@10 + Player *pPlayer; // edi@12 + unsigned __int8 v5; // cl@12 + int v6; // edi@16 + unsigned int v7; // eax@16 + Player *pPlayer2; // ebx@16 + char *v9; // ebx@16 + char v10; // al@16 + signed int v11; // edi@21 + unsigned int v22; // eax@76 + int v23; // ecx@76 + unsigned int v24; // eax@78 + int v25; // ecx@78 + int v26; // ebx@79 + unsigned int v27; // eax@80 + int v28; // ecx@80 + int v30; // [sp+10h] [bp-28h]@5 + signed int v32; // [sp+10h] [bp-28h]@75 + signed int v33; // [sp+10h] [bp-28h]@77 + int v34; // [sp+10h] [bp-28h]@79 + int pItemTXTNum; // [sp+14h] [bp-24h]@75 + int v37; // [sp+14h] [bp-24h]@77 + signed int v38; // [sp+14h] [bp-24h]@79 + int v42; // [sp+20h] [bp-18h]@6 + int v43; // [sp+20h] [bp-18h]@73 + char pContainer[128]; // [sp+24h] [bp-14h]@12 + + uTextureID_MAGNIF_B = pIcons_LOD->LoadTexture("MAGNIF-B", TEXTURE_16BIT_PALETTE); + //if ( !pParty->uAlignment || pParty->uAlignment == 1 || pParty->uAlignment == 2 ) + uTextureID_BACKDOLL = pIcons_LOD->LoadTexture("BACKDOLL", TEXTURE_16BIT_PALETTE); + uTextureID_right_panel_loop = uTextureID_right_panel; + v30 = 0; + uTextureID_BACKHAND = pIcons_LOD->LoadTexture("BACKHAND", TEXTURE_16BIT_PALETTE); + uTextureID_detaliz_close_button = uExitCancelTextureId; + do + { + v42 = v30 + 1; + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(v30 + 1) ) + { + v0 = v30; + pRace = pPlayers[v30 + 1]->GetRace(); + pSex = pPlayers[v30 + 1]->GetSexByVoice(); + if ( pRace && pRace != 1 && pRace != 2 )//race == 3 + v3 = (pSex != 0) + 3; + else + v3 = (pSex != 0) + 1; + wsprintfA(pContainer, "pc23v%dBod", v3); + papredoll_dbods[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);//Body texture + wsprintfA(pContainer, "pc23v%dlad", v3); + papredoll_dlads[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);// Left Hand + wsprintfA(pContainer, "pc23v%dlau", v3); + papredoll_dlaus[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);// Left Hand2 + wsprintfA(pContainer, "pc23v%drh", v3); + papredoll_drhs[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);// Right Hand + wsprintfA(pContainer, "pc23v%dlh", v3); + papredoll_dlhs[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);// Left Fist + wsprintfA(pContainer, "pc23v%dlhu", v3); + papredoll_dlhus[v0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); // Left Fist 2 + pPlayer = pPlayers[v0 + 1]; + v5 = pPlayer->uCurrentFace; + if ( v5 == 12 || v5 == 13 ) + papredoll_dbrds[(char)v5] = 0; + papredoll_flying_feet[pPlayer->uCurrentFace] = 0; + IsPlayerWearingWatersuit[v30 + 1] = 1; + } + else + { + papredoll_dbods[v30] = pIcons_LOD->LoadTexture(dbod_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlads[v30] = pIcons_LOD->LoadTexture(dlad_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlaus[v30] = pIcons_LOD->LoadTexture(dlau_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_drhs[v30] = pIcons_LOD->LoadTexture(drh_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlhs[v30] = pIcons_LOD->LoadTexture(dlh_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlhus[v30] = pIcons_LOD->LoadTexture(dlhu_texnames_by_face[pPlayers[v30 + 1]->uCurrentFace], TEXTURE_16BIT_PALETTE); + v10 = pPlayers[v30 + 1]->uCurrentFace; + if ( v10 == 12 || v10 == 13 ) + { + wsprintfA(pContainer, "pc%02dbrd", v10 + 1); + papredoll_dbrds[v10] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + wsprintfA(pContainer, "item281pc%02d", v10 + 1); + papredoll_flying_feet[pPlayers[v30 + 1]->uCurrentFace] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + IsPlayerWearingWatersuit[v30 + 1] = 0; + } + ++v30; + } + while ( v42 < 4 ); + uTextureID_ar_up_up = pIcons_LOD->LoadTexture("ar_up_up", TEXTURE_16BIT_PALETTE); + uTextureID_ar_up_dn = pIcons_LOD->LoadTexture("ar_up_dn", TEXTURE_16BIT_PALETTE); + uTextureID_ar_dn_up = pIcons_LOD->LoadTexture("ar_dn_up", TEXTURE_16BIT_PALETTE); + uTextureID_ar_dn_dn = pIcons_LOD->LoadTexture("ar_dn_dn", TEXTURE_16BIT_PALETTE); + papredoll_dbrds[9] = pIcons_LOD->LoadTexture("ib-cd1-d", TEXTURE_16BIT_PALETTE); + papredoll_dbrds[7] = pIcons_LOD->LoadTexture("ib-cd2-d", TEXTURE_16BIT_PALETTE); + papredoll_dbrds[5] = pIcons_LOD->LoadTexture("ib-cd3-d", TEXTURE_16BIT_PALETTE); + papredoll_dbrds[3] = pIcons_LOD->LoadTexture("ib-cd4-d", TEXTURE_16BIT_PALETTE); + papredoll_dbrds[1] = pIcons_LOD->LoadTexture("ib-cd5-d", TEXTURE_16BIT_PALETTE); + for ( v11 = 0; v11 < 54; ++v11 )// test equipment + { + party_has_equipment[v11] = 0; + if ( pParty->pPickedItem.uItemID != v11 + 66 ) + { + for ( uint i = 0; i < 4; ++i) + { + if ( Player_has_item(v11 + 66, &pParty->pPlayers[i], 0) ) + party_has_equipment[v11] = 1; + } + } + } + memset(byte_5111F6.data(), 0, 16); + for (uint i = 0; i < 4; ++i) + { + auto player = pParty->pPlayers + i; + + if (Player_has_item(ITEM_ARTICACT_GOVERNONS_ARMOR, player, 1)) byte_5111F6[0] = 1; + if (Player_has_item(ITEM_ARTIFACT_YORUBA, player, 1)) byte_5111F6[1] = 1; + if (Player_has_item(ITEM_RELIC_HARECS_LEATHER, player, 1)) byte_5111F6[2] = 1; + if (Player_has_item(ITEM_ARTIFACT_LEAGUE_BOOTS, player, 1)) byte_5111F6[3] = 1; + if (Player_has_item(ITEM_RELIC_TALEDONS_HELM, player, 1)) byte_5111F6[4] = 1; + if (Player_has_item(ITEM_RELIC_SCHOLARS_CAP, player, 1)) byte_5111F6[5] = 1; + if (Player_has_item(ITEM_RELIC_PHYNAXIAN_CROWN, player, 1)) byte_5111F6[6] = 1; + if (Player_has_item(ITEM_ARTIFACT_MINDS_EYE, player, 1)) byte_5111F6[7] = 1; + if (Player_has_item(ITEM_RARE_SHADOWS_MASK, player, 1)) byte_5111F6[8] = 1; + if (Player_has_item(ITEM_RILIC_TITANS_BELT, player, 1)) byte_5111F6[9] = 1; + if (Player_has_item(ITEM_ARTIFACT_HEROS_BELT, player, 1)) byte_5111F6[10] = 1; + if (Player_has_item(ITEM_RELIC_TWILIGHT, player, 1)) byte_5111F6[11] = 1; + if (Player_has_item(ITEM_ARTIFACT_CLOAK_OF_THE_SHEEP, player, 1)) byte_5111F6[12] = 1; + if (Player_has_item(ITEM_RARE_SUN_CLOAK, player, 1)) byte_5111F6[13] = 1; + if (Player_has_item(ITEM_RARE_MOON_CLOAK, player, 1)) byte_5111F6[14] = 1; + if (Player_has_item(ITEM_RARE_VAMPIRES_CAPE, player, 1)) byte_5111F6[15] = 1; + if (Player_has_item(ITEM_ELVEN_CHAINMAIL, player, 1)) byte_5111F6[16] = 1; + } + + + for (uint i = 0; i < 2; ++i) + { + for ( uint j = 0; j < 5; ++j )//Belt + { + GetItemTextureFilename(pContainer, j + 100, i + 1, 0); + paperdoll_belt_texture[i][j] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + GetItemTextureFilename(pContainer, 535, i + 1, 0); + paperdoll_belt_texture[i][6] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + for ( uint j = 0; j < 11; ++j )//Helm + { + GetItemTextureFilename(pContainer, j + 89, i + 1, 0); + paperdoll_helm_texture[i][j] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + GetItemTextureFilename(pContainer, 521, i + 1, 0); + paperdoll_helm_texture[i][11] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 522, i + 1, 0); + paperdoll_helm_texture[i][12] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 523, i + 1, 0); + paperdoll_helm_texture[i][13] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 532, i + 1, 0); + paperdoll_helm_texture[i][14] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 544, i + 1, 0); + paperdoll_helm_texture[i][15] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + if ( _43ED6F_check_party_races(true) ) + papredoll_dbrds[11] = pIcons_LOD->LoadTexture("item092v3", TEXTURE_16BIT_PALETTE); + } + v43 = 0; + for (uint i = 0; i < 4; ++i) + { + if ( sub_43EDB9_get_some_race_sex_relation_2(i) ) + { + GetItemTextureFilename(pContainer, 524, i + 1, 0); + paperdoll_belt_texture[i][5] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE);//Titans belt + pItemTXTNum = 66; + for ( v32 = 0; v32 < 13; ++v32 )//simple armor + { + GetItemTextureFilename(pContainer, pItemTXTNum, i + 1, 0); + paperdoll_armor_texture[i][v32][0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, pItemTXTNum, i + 1, 1); + paperdoll_armor_texture[i][v32][1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, pItemTXTNum, i + 1, 2); + paperdoll_armor_texture[i][v32][2] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + pItemTXTNum++; + } + GetItemTextureFilename(pContainer, 516, i + 1, 0);//artefacts + paperdoll_armor_texture[i][v32][0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 516, i + 1, 1); + paperdoll_armor_texture[i][v32][1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 516, i + 1, 2); + paperdoll_armor_texture[i][v32][2] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 505, i + 1, 0); + paperdoll_armor_texture[i][v32 + 1][0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 505, i + 1, 1); + paperdoll_armor_texture[i][v32 + 1][1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 505, i + 1, 2); + paperdoll_armor_texture[i][v32 + 1][2] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 504, i + 1, 0); + paperdoll_armor_texture[i][v32 + 2][0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 504, i + 1, 1); + paperdoll_armor_texture[i][v32 + 2][1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 504, i + 1, 2); + paperdoll_armor_texture[i][v32 + 2][2] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 533, i + 1, 0); + paperdoll_armor_texture[i][v32 + 3][0] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 533, i + 1, 1); + paperdoll_armor_texture[i][v32 + 3][1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 533, i + 1, 2); + paperdoll_armor_texture[i][v32 + 3][2] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + for ( v33 = 0; v33 < 5; ++v33 )//boots + { + GetItemTextureFilename(pContainer, v33 + 115, i + 1, 0); + paperdoll_boots_texture[i][v33] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + GetItemTextureFilename(pContainer, 512, i + 1, 0); + paperdoll_boots_texture[i][v33] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + for ( v38 = 0; v38 < 5; ++v38 )//Cloak + { + GetItemTextureFilename(pContainer, v38 + 105, i + 1, 0); + paperdoll_cloak_texture[i][v38] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, v38 + 105, i + 1, 1); + paperdoll_cloak_collar_texture[i][v38] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + GetItemTextureFilename(pContainer, 525, i + 1, 0); + paperdoll_cloak_texture[i][5] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 530, i + 1, 0); + paperdoll_cloak_texture[i][6] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 547, i + 1, 0); + paperdoll_cloak_texture[i][7] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 548, i + 1, 0); + paperdoll_cloak_texture[i][8] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 550, i + 1, 0); + paperdoll_cloak_texture[i][9] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 525, i + 1, 1); + paperdoll_cloak_collar_texture[i][5] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 530, i + 1, 1); + paperdoll_cloak_collar_texture[i][6] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 547, i + 1, 1); + paperdoll_cloak_collar_texture[i][7] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 548, i + 1, 1); + paperdoll_cloak_collar_texture[i][8] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + GetItemTextureFilename(pContainer, 550, i + 1, 1); + paperdoll_cloak_collar_texture[i][9] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + else + { + v26 = v43; + } + v43 = v26 + 40; + } +} + +//----- (00419401) -------------------------------------------------------- +void CharacterUI_SkillsTab_CreateButtons() + { + // unsigned int v0; // ecx@3 + GUIButton *pButton; // eax@3 + unsigned int current_Y; // esi@8 + int buttons_count; // [sp+10h] [bp-14h]@1 + int first_rows; // [sp+14h] [bp-10h]@19 + int skill_id; // [sp+18h] [bp-Ch]@8 + Player *curr_player; // [sp+1Ch] [bp-8h]@8 + int i; + int uCurrFontHeght; + + buttons_count = 0; + if ( dword_507CC0_activ_ch ) + CharacterUI_ReleaseButtons(); + dword_507CC0_activ_ch = uActiveCharacter; + for ( pButton = pGUIWindow_CurrentMenu->pControlsHead; pButton; pButton = pButton->pNext ) + { + if ( pButton->msg == UIMSG_InventoryLeftClick ) + { + dword_50698C_uX = pButton->uX; + dword_506988_uY = pButton->uY; + dword_506984_uZ = pButton->uZ; + dword_506980_uW = pButton->uW; + pButton->uW = 0; + pButton->uZ = 0; + pButton->uY = 0; + pButton->uX = 0; + } + } + first_rows = 0; + // a5 = pGUIWindow_CurrentMenu->uNumControls; + curr_player = &pParty->pPlayers[uActiveCharacter-1]; + + uCurrFontHeght=pFontLucida->uFontHeight; + current_Y = 2 *uCurrFontHeght + 13; + for(i=0; i<9;++i) + { + skill_id = pWeaponSkills[i]; + if ( curr_player->pActiveSkills[skill_id] & 0x3F ) + { + current_Y += uCurrFontHeght - 3; + ++buttons_count; + ++first_rows; + pGUIWindow_CurrentMenu->CreateButton(24, current_Y, 204, uCurrFontHeght - 3, 3, skill_id | 0x8000, UIMSG_SkillUp, skill_id, 0, "", 0, 0); + } + } + if ( !first_rows ) + current_Y += uCurrFontHeght - 3; + current_Y += 2 * uCurrFontHeght - 6; + for(i=0; i<9;++i) + { + skill_id = pMagicSkills[i]; + if ( curr_player->pActiveSkills[skill_id] & 0x3F && buttons_count < 15 ) + { + current_Y += uCurrFontHeght - 3; + ++buttons_count; + pGUIWindow_CurrentMenu->CreateButton(24, current_Y, 204, uCurrFontHeght - 3, 3, skill_id | 0x8000, UIMSG_SkillUp, skill_id, 0, "", 0, 0); + } + } + first_rows = 0; + current_Y = 2 * uCurrFontHeght + 13; + for(i=0; i<5;++i) + { + skill_id = pArmorSkills[i]; + if ( curr_player->pActiveSkills[skill_id] & 0x3F ) + { + current_Y+= uCurrFontHeght - 3; + ++buttons_count; + ++first_rows; + pGUIWindow_CurrentMenu->CreateButton(246, current_Y, 204, uCurrFontHeght - 3, 3, skill_id | 0x8000, UIMSG_SkillUp, skill_id, 0, "", 0, 0); + } + } + if ( !first_rows ) + current_Y += uCurrFontHeght - 3; + current_Y += 2 * uCurrFontHeght - 6; + for(i=0; i<12; ++i) + { + skill_id = pMiscSkills[i]; + if ( curr_player->pActiveSkills[skill_id] & 0x3F ) + { + current_Y += uCurrFontHeght - 3; + ++buttons_count; + pGUIWindow_CurrentMenu->CreateButton(246, current_Y, 204, uCurrFontHeght - 3, 3, skill_id | 0x8000, UIMSG_SkillUp, skill_id, 0, "", 0, 0); + } + } + + if ( buttons_count ) + pGUIWindow_CurrentMenu->_41D08F_set_keyboard_control_group(buttons_count, 1, 0, pGUIWindow_CurrentMenu->uNumControls); + } + + + +//----- (00418511) -------------------------------------------------------- + void CharacterUI_StatsTab_Draw( Player *player ) + { + //Player *pPlayer; // edi@1 + //unsigned int v4; // eax@2 + int v7; // ebp@4 + int v8; // eax@4 + unsigned int v9; // eax@4 + int v10; // ST34_4@4 + int v13; // ebp@4 + int v14; // eax@4 + unsigned int v15; // eax@4 + int v19; // ebp@4 + int v20; // eax@4 + unsigned int v21; // eax@4 + int v25; // ebp@4 + int v26; // eax@4 + unsigned int v27; // eax@4 + int v31; // ebp@4 + int v32; // eax@4 + unsigned int v33; // eax@4 + int v37; // ebp@4 + int v38; // eax@4 + unsigned int v39; // eax@4 + int v43; // ebp@4 + int v44; // eax@4 + unsigned int v45; // eax@4 + signed int v49; // eax@6 + unsigned int v50; // eax@6 + int v53; // eax@8 + unsigned int v54; // eax@8 + int v58; // ebp@8 + int v59; // eax@8 + unsigned int v60; // eax@8 + unsigned int v62; // eax@8 + signed int v64; // eax@8 + //unsigned __int8 v66; // al@8 + char *v67; // eax@9 + signed int v70; // ebp@11 + signed int v71; // eax@11 + unsigned int v72; // eax@11 + int v75; // ebp@13 + int v76; // eax@13 + unsigned int v77; // eax@13 + char *v78; // ecx@14 + unsigned int v81; // eax@16 + int v83; // eax@16 + char *v85; // eax@16 + int v87; // eax@16 + char *v89; // eax@16 + int v90; // eax@16 + unsigned int v92; // eax@19 + int v93; // eax@19 + unsigned int v95; // eax@22 + int v96; // eax@22 + unsigned int v98; // eax@25 + int v99; // eax@25 + unsigned int v101; // eax@27 + int v102; // eax@27 + unsigned int v104; // eax@30 + unsigned int v106; // eax@32 + int v107; // eax@33 + unsigned int v109; // eax@36 + unsigned int v111; // eax@38 + const char *a2; // [sp+14h] [bp-Ch]@4 + const char *a2a; // [sp+14h] [bp-Ch]@6 + const char *a2b; // [sp+14h] [bp-Ch]@11 + const char *a2c; // [sp+14h] [bp-Ch]@16 + const char *a2d; // [sp+14h] [bp-Ch]@19 + const char *a2e; // [sp+14h] [bp-Ch]@22 + const char *a2f; // [sp+14h] [bp-Ch]@25 + const char *a2g; // [sp+14h] [bp-Ch]@27 + const char *a2h; // [sp+14h] [bp-Ch]@33 + int v131; // [sp+18h] [bp-8h]@16 + int v132; // [sp+18h] [bp-8h]@19 + int v133; // [sp+18h] [bp-8h]@22 + int v134; // [sp+18h] [bp-8h]@25 + int v135; // [sp+18h] [bp-8h]@27 + int v136; // [sp+18h] [bp-8h]@33 + + //pPlayer = &pParty->pPlayers[uPlayerID-1]; + //pPlayer = player; + pRenderer->DrawTextureIndexed(8, 8, pIcons_LOD->LoadTexturePtr("fr_stats", TEXTURE_16BIT_PALETTE)); + sprintf(pTmpBuf.data(), "\f%05d", ui_character_header_text_color); + sprintfex(pTmpBuf2.data(), pGlobalTXT_LocalizationStrings[429], player->pName, pClassNames[player->classType]);//"^Pi[%s] %s" / "%s the %s" + strcat(pTmpBuf.data(), pTmpBuf2.data()); + sprintfex(pTmpBuf2.data(), "\f00000\r180%s: \f%05d%d\f00000\n\n\n", + pGlobalTXT_LocalizationStrings[207], // "Skill points" + player->uSkillPoints ? ui_character_bonus_text_color : ui_character_default_text_color, + player->uSkillPoints); + strcat(pTmpBuf.data(), pTmpBuf2.data()); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, 18, 0, pTmpBuf.data(), 0, 0, 0); + + v10 = 53; + v7 = player->GetBaseStrength(); + v8 = player->GetActualMight(); + v9 = UI_GetHealthManaStringColor(v8, v7); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[144], v9, v8, v7);//Might + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v13 = player->GetBaseIntelligence(); + v14 = player->GetActualIntelligence(); + v15 = UI_GetHealthManaStringColor(v14, v13); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[116], v15, v14, v13);//Intellect + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v19 = player->GetBaseWillpower(); + v20 = player->GetActualWillpower(); + v21 = UI_GetHealthManaStringColor(v20, v19); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[163], v21, v20, v19);// + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v25 = player->GetBaseEndurance(); + v26 = player->GetActualEndurance(); + v27 = UI_GetHealthManaStringColor(v26, v25); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[75], v27, v26, v25);// + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v31 = player->GetBaseAccuracy(); + v32 = player->GetActualAccuracy(); + v33 = UI_GetHealthManaStringColor(v32, v31); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[1], v33, v32, v31); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v37 = player->GetBaseSpeed(); + v38 = player->GetActualSpeed(); + v39 = UI_GetHealthManaStringColor(v38, v37); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n", pGlobalTXT_LocalizationStrings[211], v39, v38, v37); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v43 = player->GetBaseLuck(); + v44 = player->GetActualLuck(); + v45 = UI_GetHealthManaStringColor(v44, v43); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n\n", pGlobalTXT_LocalizationStrings[136], v45, v44, v43); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2 = "%s\f%05u\r424%d\f00000 /\t185%d\n"; + v10 += 2 * LOBYTE(pFontArrus->uFontHeight) + 5; + if ( player->GetMaxHealth() >= 1000 ) + a2 = "%s\f%05u\r388%d\f00000 / %d\n"; + v49 = player->GetMaxHealth(); + v50 = UI_GetHealthManaStringColor(player->sHealth, v49); + sprintf(pTmpBuf.data(), a2, pGlobalTXT_LocalizationStrings[108], v50, player->sHealth, v49); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2a = "%s\f%05u\r424%d\f00000 /\t185%d\n"; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + if ( player->GetMaxMana() >= 1000 ) + a2a = "%s\f%05u\r388%d\f00000 / %d\n"; + v53 = player->GetMaxMana(); + v54 = UI_GetHealthManaStringColor(player->sMana, v53); + sprintf(pTmpBuf.data(), a2a, pGlobalTXT_LocalizationStrings[212], v54, player->sMana, v53); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v58 = player->GetBaseAC(); + v59 = player->GetActualAC(); + v60 = UI_GetHealthManaStringColor(v59, v58); + sprintf(pTmpBuf.data(), "%s\f%05u\r424%d\f00000 /\t185%d\n\n", pGlobalTXT_LocalizationStrings[12], v60, v59, v58); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 26, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += 2 * LOBYTE(pFontArrus->uFontHeight) - 2; + v62 = player->GetMajorConditionIdx(); + v64 = GetConditionDrawColor(v62); + sprintf(pTmpBuf.data(), "%s: \f%05d%s\n", pGlobalTXT_LocalizationStrings[47], v64, aCharacterConditionNames[v62]); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x1Au, v10, 0, pTmpBuf.data(), 226, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) + - 1; + if (player->uQuickSpell) + v67 = pSpellStats->pInfos[player->uQuickSpell].pShortName; + else + v67 = pGlobalTXT_LocalizationStrings[153]; + sprintf(pTmpBuf.data(), "%s: %s", pGlobalTXT_LocalizationStrings[172], v67); + pGUIWindow_CurrentMenu->DrawTextInRect(pFontArrus, 0x1Au, v10, 0, pTmpBuf.data(), 226, 0); + + v10 = 50; + v70 = player->GetBaseAge(); + v71 = player->GetActualAge(); + v72 = UI_GetHealthManaStringColor(v71, v70); + sprintf(pTmpBuf.data(), "%s\f%05u\t100%d\f00000 / %d\n", pGlobalTXT_LocalizationStrings[5], v72, v71, v70); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2b = "%s\f%05u\t100%d\f00000 / %d\n"; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + if ( player->GetBaseLevel() > 99 ) + a2b = "%s\f%05u\t180%d\f00000 / %d\n"; + v75 = player->GetBaseLevel(); + v76 = player->GetActualLevel(); + v77 = UI_GetHealthManaStringColor(v76, v75); + sprintf(pTmpBuf.data(), a2b, pGlobalTXT_LocalizationStrings[131], v77, v76, v75); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + if (player->uExperience <= 9999999) + v78 = pGlobalTXT_LocalizationStrings[83]; // "Experience" + else + v78 = pGlobalTXT_LocalizationStrings[17]; // "Exp." + v81 = player->GetExperienceDisplayColor(); + sprintf(pTmpBuf.data(), "%s\r180\f%05d%lu\f00000\n\n", v78, v81, LODWORD(player->uExperience)); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += 2 * LOBYTE(pFontArrus->uFontHeight); + v83 = player->GetActualAttack(0); + sprintf(pTmpBuf.data(), "%s\t100%+d\n", pGlobalTXT_LocalizationStrings[18], v83); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v85 = player->GetMeleeDamageString(); + sprintf(pTmpBuf.data(), "%s\t100 %s\n", pGlobalTXT_LocalizationStrings[53], v85); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v87 = player->GetRangedAttack(); + sprintf(pTmpBuf.data(), "%s\t100%+d\n", pGlobalTXT_LocalizationStrings[203], v87); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v89 = player->GetRangedDamageString(); + sprintf(pTmpBuf.data(), "%s\t100 %s\n\n", pGlobalTXT_LocalizationStrings[53], v89); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2c = format_4E2E10; + v10 += 2 * LOBYTE(pFontArrus->uFontHeight) - 4; + v131 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_FIRE); + v90 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_FIRE); + if ( v131 > 99 || v90 > 99 ) + a2c = "%s\f%05u\t180%d\f00000 / %d\n"; + v92 = UI_GetHealthManaStringColor(v131, v90); + sprintf(pTmpBuf.data(), a2c, pGlobalTXT_LocalizationStrings[87], v92, v131, v90); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2d = format_4E2E10; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v132 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_AIR); + v93 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_AIR); + if ( v132 > 99 || v93 > 99 ) + a2d = "%s\f%05u\t180%d\f00000 / %d\n"; + v95 = UI_GetHealthManaStringColor(v132, v93); + sprintf(pTmpBuf.data(), a2d, pGlobalTXT_LocalizationStrings[6], v95, v132, v93); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2e = format_4E2E10; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v133 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_WATER); + v96 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_WATER); + if ( v133 > 99 || v96 > 99 ) + a2e = "%s\f%05u\t180%d\f00000 / %d\n"; + v98 = UI_GetHealthManaStringColor(v133, v96); + sprintf(pTmpBuf.data(), a2e, pGlobalTXT_LocalizationStrings[240], v98, v133, v96); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2f = format_4E2E10; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v134 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_EARTH); + v99 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_EARTH); + if ( v134 > 99 ) + a2f = "%s\f%05u\t180%d\f00000 / %d\n"; + v101 = UI_GetHealthManaStringColor(v134, v99); + sprintf(pTmpBuf.data(), a2f, pGlobalTXT_LocalizationStrings[70], v101, v134, v99); + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2g = format_4E2E10; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v135 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_MIND); + v102 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_MIND); + if ( v135 > 99 || v102 > 99 ) + a2g = "%s\f%05u\t180%d\f00000 / %d\n"; + v104 = UI_GetHealthManaStringColor(v135, v102); + sprintf(pTmpBuf.data(), a2g, pGlobalTXT_LocalizationStrings[142], v104, v135, v102); + if ( player->classType == PLAYER_CLASS_LICH && v102 == 200 ) + { + v106 = UI_GetHealthManaStringColor(v135, 200); + sprintf(pTmpBuf.data(), format_4E2E00, pGlobalTXT_LocalizationStrings[142], v106, pGlobalTXT_LocalizationStrings[625]); + } + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); + + a2h = format_4E2E10; + v10 += LOBYTE(pFontArrus->uFontHeight) - 2; + v136 = player->GetActualResistance(CHARACTER_ATTRIBUTE_RESIST_BODY); + v107 = player->GetBaseResistance(CHARACTER_ATTRIBUTE_RESIST_BODY); + if ( v136 > 99 || v107 > 99 ) + a2h = "%s\f%05u\t180%d\f00000 / %d\n"; + v109 = UI_GetHealthManaStringColor(v136, v107); + sprintf(pTmpBuf.data(), a2h, pGlobalTXT_LocalizationStrings[29], v109, v136, v107); + if ( player->classType == PLAYER_CLASS_LICH && v107 == 200 ) + { + v111 = UI_GetHealthManaStringColor(v136, 200); + sprintf(pTmpBuf.data(), format_4E2E00, pGlobalTXT_LocalizationStrings[29], v111, pGlobalTXT_LocalizationStrings[625]); + } + pGUIWindow_CurrentMenu->DrawText(pFontArrus, 266, v10, 0, pTmpBuf.data(), 0, 0, 0); +} + +bool awardSort (int i,int j) { + if (pAwards[i].uPriority == 0) //none + { + return false; + } + else if (pAwards[j].uPriority == 0) + { + return true; + } + else if(pAwards[i].uPriority == 1) //fines,arena stuff,etc + { + return false; + } + else if(pAwards[j].uPriority == 1) + { + return true; + } + else if(pAwards[i].uPriority == 5) //joined guilds + { + return false; + } + else if(pAwards[j].uPriority == 5) + { + return true; + } + else + { + return (pAwards[i].uPriority<pAwards[j].uPriority); + } +} + +//----- (00419100) -------------------------------------------------------- +void FillAwardsData() +{ + auto pPlayer = pPlayers[uActiveCharacter]; + + memset(achieved_awards.data(), 0, 4000); + num_achieved_awards = 0; + + memset(pTmpBuf2.data(), 0, 0x7D0u); + BtnDown_flag = 0; + BtnUp_flag = 0; + dword_50651C = 0; + dword_506528 = 0; + for (int i = 0; i < 105; ++i) + { + if ( _449B57_test_bit(pPlayer->_guilds_member_bits, i) && pAwards[i].pText ) + { + achieved_awards[num_achieved_awards++] = (AwardType)i; + } + } + num_achieved_awards_2 = num_achieved_awards; + num_achieved_awards = 0; + + //sort awards index + if (num_achieved_awards_2 > 0) + { + std::stable_sort(achieved_awards.begin(), achieved_awards.end(), awardSort); + } + } + + +//----- (0043EF2B) -------------------------------------------------------- +void WetsuitOn( unsigned int uPlayerID ) + { + CHARACTER_RACE player_race; // edi@2 + signed int player_sex; // eax@2 + int texture_num; // ecx@5 + char pContainer[20]; // [sp+4h] [bp-1Ch]@7 + + if ( uPlayerID> 0 ) + { + player_race = pPlayers[uPlayerID]->GetRace(); + player_sex = pPlayers[uPlayerID]->GetSexByVoice(); + if ( player_race == CHARACTER_RACE_DWARF ) + texture_num = (player_sex != 0) + 3; + else + texture_num = (player_sex != 0) + 1; + wsprintfA(pContainer, "pc23v%dBod", texture_num); + papredoll_dbods[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + wsprintfA(pContainer, "pc23v%dlad", texture_num); + papredoll_dlads[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + wsprintfA(pContainer, "pc23v%dlau", texture_num); + papredoll_dlaus[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + wsprintfA(pContainer, "pc23v%drh", texture_num); + papredoll_drhs[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + wsprintfA(pContainer, "pc23v%dlh", texture_num); + papredoll_dlhs[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + wsprintfA(pContainer, "pc23v%dlhu", texture_num); + papredoll_dlhus[uPlayerID - 1] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + + if ( pPlayers[uPlayerID]->uCurrentFace == 12 || pPlayers[uPlayerID]->uCurrentFace == 13 ) + papredoll_dbrds[pPlayers[uPlayerID]->uCurrentFace] = 0; + + papredoll_flying_feet[pPlayers[uPlayerID]->uCurrentFace] = 0; + IsPlayerWearingWatersuit[uPlayerID] = 1; + } + } + +//----- (0043F0BD) -------------------------------------------------------- +void WetsuitOff( unsigned int uPlayerID ) + { + char pContainer[20]; // [sp+0h] [bp-18h]@4 + + if (uPlayerID > 0 ) + { + papredoll_dbods[uPlayerID - 1] = pIcons_LOD->LoadTexture(dbod_texnames_by_face[pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlads[uPlayerID - 1] = pIcons_LOD->LoadTexture(dlad_texnames_by_face[pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlaus[uPlayerID - 1] = pIcons_LOD->LoadTexture(dlau_texnames_by_face[pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_drhs [uPlayerID - 1] = pIcons_LOD->LoadTexture(drh_texnames_by_face [pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlhs [uPlayerID - 1] = pIcons_LOD->LoadTexture(dlh_texnames_by_face [pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + papredoll_dlhus[uPlayerID - 1] = pIcons_LOD->LoadTexture(dlhu_texnames_by_face[pPlayers[uPlayerID]->uCurrentFace], TEXTURE_16BIT_PALETTE); + + if ( pPlayers[uPlayerID]->uCurrentFace == 12 || pPlayers[uPlayerID]->uCurrentFace == 13 ) + { + wsprintfA(pContainer, "pc%02dbrd", pPlayers[uPlayerID]->uCurrentFace + 1); + papredoll_dbrds[pPlayers[uPlayerID]->uCurrentFace] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + } + wsprintfA(pContainer, "item281pc%02d", pPlayers[uPlayerID]->uCurrentFace + 1); + papredoll_flying_feet[pPlayers[uPlayerID]->uCurrentFace] = pIcons_LOD->LoadTexture(pContainer, TEXTURE_16BIT_PALETTE); + IsPlayerWearingWatersuit[uPlayerID] = 0; + } + } +//----- (00468F8A) -------------------------------------------------------- +void __cdecl OnPaperdollLeftClick() +{ + int v1; // ecx@1 + unsigned int v2; // edi@1 + unsigned int v3; // edx@4 + unsigned int pSkillType; // esi@5 + unsigned __int16 v5; // ax@7 + unsigned int v6; // edi@19 + int v7; // esi@27 + unsigned int v8; // eax@29 + int v9; // edx@32 + int v10; // esi@34 + int v11; // eax@34 + int v12; // esi@38 + int v13; // eax@38 + char v14; // zf@38 + int v15; // esi@42 + int v16; // eax@42 + int v17; // eax@44 + unsigned int v18; // ecx@55 + unsigned int v19; // eax@55 + int v20; // esi@60 + int v21; // eax@60 + unsigned int v22; // eax@61 + unsigned int v23; // eax@62 + int v24; // esi@65 + int v25; // eax@65 + unsigned int v26; // eax@69 + int v27; // esi@81 + int v28; // eax@81 + int v29; // esi@84 + int v30; // eax@84 + int v31; // eax@85 + unsigned int v32; // ecx@88 + unsigned int v33; // eax@88 + int v34; // esi@90 + unsigned int v35; // eax@91 + int v36; // esi@93 + int v37; // edi@93 + ItemGen *v38; // edi@93 + __int16 v39; // dx@99 + ItemGen _this; // [sp+Ch] [bp-40h]@1 + unsigned int v48; // [sp+30h] [bp-1Ch]@88 + unsigned int v49; // [sp+34h] [bp-18h]@57 + unsigned int v50; // [sp+38h] [bp-14h]@50 + int v51; // [sp+3Ch] [bp-10h]@1 + unsigned int v52; // [sp+40h] [bp-Ch]@5 + //int v53; // [sp+44h] [bp-8h]@1 + //unsigned int v54; // [sp+48h] [bp-4h]@1 + + v51 = 0; + _this.Reset(); + //v0 = pPlayers[uActiveCharacter]; + v1 = pPlayers[uActiveCharacter]->pEquipment.uMainHand; + v2 = pPlayers[uActiveCharacter]->pEquipment.uShield; + //v54 = pPlayers[uActiveCharacter]->pEquipment.uShield; + //v53 = v1; + if ( v1 && pItemsTable->pItems[*(int *)&pPlayers[uActiveCharacter]->pInventoryItems[v1 - 1]].uEquipType == 1 ) + v51 = v1; + v3 = pParty->pPickedItem.uItemID; + if ( pParty->pPickedItem.uItemID ) + { + v52 = pItemsTable->pItems[pParty->pPickedItem.uItemID].uEquipType; + pSkillType = pItemsTable->pItems[pParty->pPickedItem.uItemID].uSkillType; + if ( pSkillType == 4 ) + { + if ( v2 ) + { + LOBYTE(v5) = pPlayers[uActiveCharacter]->GetActualSkillLevel(PLAYER_SKILL_SPEAR); + if ( (signed int)SkillToMastery(v5) < 3 ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + v3 = pParty->pPickedItem.uItemID; + } + } + else + { + if ( (pSkillType == 8 || pSkillType == 1 || pSkillType == 2) + && v1 + && pItemsTable->pItems[*(int *)&pPlayers[uActiveCharacter]->pInventoryItems[v1-1]].uSkillType == 4 ) + { + LOBYTE(v5) = pPlayers[uActiveCharacter]->GetActualSkillLevel(PLAYER_SKILL_SPEAR); + if ( (signed int)SkillToMastery(v5) < 3 ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + } + } + if ( !pPlayers[uActiveCharacter]->CanEquip_RaceAndAlignmentCheck(v3) ) + { + + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + if ( pParty->pPickedItem.uItemID == 604 ) + { + pPlayers[uActiveCharacter]->EquipBody((ITEM_EQUIP_TYPE)3); + WetsuitOn(uActiveCharacter); + return; + } + v6 = v52; + switch ( v52 ) + { + case 2u: + case 3u: + case 5u: + case 6u: + case 7u: + case 8u: + case 9u: + case 0xBu: + if ( !pPlayers[uActiveCharacter]->HasSkill(pSkillType) ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(uActiveCharacter) && (v6 != 3 || bUnderwater) ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + pPlayers[uActiveCharacter]->EquipBody((ITEM_EQUIP_TYPE)v6); + if ( pParty->pPickedItem.uItemID == 604 ) + WetsuitOff(uActiveCharacter); + return; + case 0xAu: + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(uActiveCharacter) ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + v52 = 10; + v7 = (int)&pPlayers[uActiveCharacter]->pEquipment.uRings; + while ( 1 ) + { + if ( !*(int *)v7 ) + { + v8 = pPlayers[uActiveCharacter]->FindFreeInventorySlot(); + if ( (v8 & 0x80000000u) == 0 ) + { + v9 = v52; + pParty->pPickedItem.uBodyAnchor = v52 + 1; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v8], &pParty->pPickedItem, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v8])); + *(&pPlayers[uActiveCharacter]->pEquipment.uShield + v9) = v8 + 1; + pMouse->RemoveHoldingItem(); + break; + } + } + ++v52; + v7 += 4; + if ( (signed int)v52 > 15 ) + break; + } + if ( v52 == 16 ) + { + v52 = pPlayers[uActiveCharacter]->pEquipment.uRings[6] - 1; + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v10 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v52); + *(char *)(v10 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v10 + 532)); + _this.uBodyAnchor = 16; + v11 = v52 + 1; + memcpy((void *)(v10 + 532), &_this, 0x24u); + pPlayers[uActiveCharacter]->pEquipment.uRings[6] = v11; + } + return; + case 4u: + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(uActiveCharacter) ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + if ( !pPlayers[uActiveCharacter]->HasSkill(pSkillType) ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + if ( v2 ) + { + --v2; + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v12 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v2); + *(char *)(v12 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v12 + 532)); + _this.uBodyAnchor = 1; + v13 = v2 + 1; + v14 = v51 == 0; + memcpy((void *)(v12 + 532), &_this, 0x24u); + pPlayers[uActiveCharacter]->pEquipment.uShield = v13; + if ( v14 ) + return; + } + else + { + v52 = pPlayers[uActiveCharacter]->FindFreeInventorySlot(); + if ( (v52 & 0x80000000u) != 0 ) + return; + if ( !v51 ) + { + pParty->pPickedItem.uBodyAnchor = 1; + v17 = v52 + 1; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v52], &pParty->pPickedItem, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v52])); + pPlayers[uActiveCharacter]->pEquipment.uShield = v17; + pMouse->RemoveHoldingItem(); + return; + } + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v15 = (int)((char *)pPlayers[uActiveCharacter] + 36 * (v1 - 1)); + *(char *)(v15 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v15 + 532)); + _this.uBodyAnchor = 1; + v16 = v52 + 1; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v52], &_this, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v52])); + pPlayers[uActiveCharacter]->pEquipment.uShield = v16; + } + pPlayers[uActiveCharacter]->pEquipment.uMainHand = 0; + return; + case 0u: + case 0xCu: + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(uActiveCharacter) + && pParty->pPickedItem.uItemID != 64 + && pParty->pPickedItem.uItemID != 65 ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + if ( !pPlayers[uActiveCharacter]->HasSkill(pSkillType) ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + v50 = 0; + if ( pSkillType == 2 && (unsigned __int16)(pPlayers[uActiveCharacter]->pActiveSkills[2] & 0xFFC0) + || pSkillType == 1 && (signed int)SkillToMastery(pPlayers[uActiveCharacter]->pActiveSkills[1]) >= 3 ) + { + + v18 = pMouse->uMouseClickX; + v19 = pMouse->uMouseClickY; + + v49 = v19; + if ( (signed int)v18 >= 560 ) + { + if ( !v51 ) + { + if ( v2 ) + { + --v2; + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v20 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v2); + *(char *)(v20 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v20 + 532)); + _this.uBodyAnchor = 1; + v21 = v2 + 1; + v14 = v52 == 12; + memcpy((void *)(v20 + 532), &_this, 0x24u); + pPlayers[uActiveCharacter]->pEquipment.uShield = v21; + if ( !v14 ) + return; + v22 = _this.uItemID; + v50 = v22; + if ( v50 ) + { + __debugbreak(); // looks like offset in player's inventory and wand_lut much like case in 0042ECB5 + stru_A750F8[uActiveCharacter - 1]._494836(*((int *)&pSpellDatas[66].uNormalLevelRecovery + v50), uActiveCharacter - 1 + 9); + } + break; + } + v23 = pPlayers[uActiveCharacter]->FindFreeInventorySlot(); + if ( (v23 & 0x80000000u) != 0 ) + return; + pParty->pPickedItem.uBodyAnchor = 1; + v50 = (unsigned int)&pPlayers[uActiveCharacter]->pInventoryItems[v23]; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v23], &pParty->pPickedItem, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v23])); + pPlayers[uActiveCharacter]->pEquipment.uShield = v23 + 1; + pMouse->RemoveHoldingItem(); + if ( v52 != 12 ) + return; + v22 = *(int *)v50; + v50 = v22; + if ( v50 ) + { + __debugbreak(); // looks like offset in player's inventory and wand_lut much like case in 0042ECB5 + stru_A750F8[uActiveCharacter - 1]._494836(*((int *)&pSpellDatas[66].uNormalLevelRecovery + v50), uActiveCharacter - 1 + 9); + } + break; + } + } + } + if ( !v1 ) + { + v26 = pPlayers[uActiveCharacter]->FindFreeInventorySlot(); + if ( (v26 & 0x80000000u) != 0 ) + return; + pParty->pPickedItem.uBodyAnchor = 2; + v50 = (unsigned int)&pPlayers[uActiveCharacter]->pInventoryItems[v26]; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v26], &pParty->pPickedItem, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v26])); + pPlayers[uActiveCharacter]->pEquipment.uMainHand = v26 + 1; + pMouse->RemoveHoldingItem(); + if ( v52 != 12 ) + return; + v22 = *(int *)v50; + v50 = v22; + if ( v50 ) + { + __debugbreak(); // looks like offset in player's inventory and wand_lut much like case in 0042ECB5 + stru_A750F8[uActiveCharacter - 1]._494836(*((int *)&pSpellDatas[66].uNormalLevelRecovery + v50), uActiveCharacter - 1 + 9); + } + break; + } + --v1; + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v24 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v1); + *(char *)(v24 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v24 + 532)); + _this.uBodyAnchor = 2; + v25 = v1 + 1; + v14 = v52 == 12; + memcpy((void *)(v24 + 532), &_this, 0x24u); + pPlayers[uActiveCharacter]->pEquipment.uMainHand = v25; + if ( v14 ) + v50 = _this.uItemID; + if ( v51 ) + pPlayers[uActiveCharacter]->pEquipment.uShield = 0; + if ( v50 ) + { + __debugbreak(); // looks like offset in player's inventory and wand_lut much like case in 0042ECB5 + stru_A750F8[uActiveCharacter - 1]._494836( *((int *)&pSpellDatas[66].uNormalLevelRecovery + v50), uActiveCharacter - 1 + 9); + } + break; + case 1u: + if ( sub_43EE77_ProbablyIfUnderwaterSuitIsEquipped(uActiveCharacter) ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + if ( !pPlayers[uActiveCharacter]->HasSkill(pSkillType) ) + { + pPlayers[uActiveCharacter]->PlaySound(SPEECH_39, 0); + return; + } + if ( v1 ) + { + if ( v2 ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + --v1; + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v27 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v1); + *(char *)(v27 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v27 + 532)); + _this.uBodyAnchor = 2; + v28 = v1 + 1; + memcpy((void *)(v27 + 532), &_this, 0x24u); + pPlayers[uActiveCharacter]->pEquipment.uMainHand = v28; + } + else + { + v52 = pPlayers[uActiveCharacter]->FindFreeInventorySlot(); + if ( (v52 & 0x80000000u) == 0 ) + { + if ( v2 ) + { + memcpy(&_this, &pParty->pPickedItem, sizeof(_this)); + v29 = (int)((char *)pPlayers[uActiveCharacter] + 36 * (v2 - 1)); + *(char *)(v29 + 556) = 0; + pParty->pPickedItem.Reset(); + pParty->SetHoldingItem((ItemGen *)(v29 + 532)); + _this.uBodyAnchor = 2; + v30 = v52 + 1; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v52], &_this, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v52])); + pPlayers[uActiveCharacter]->pEquipment.uShield = 0; + pPlayers[uActiveCharacter]->pEquipment.uMainHand = v30; + } + else + { + pParty->pPickedItem.uBodyAnchor = 2; + v31 = v52 + 1; + memcpy(&pPlayers[uActiveCharacter]->pInventoryItems[v52], &pParty->pPickedItem, sizeof(pPlayers[uActiveCharacter]->pInventoryItems[v52])); + pPlayers[uActiveCharacter]->pEquipment.uMainHand = v31; + pMouse->RemoveHoldingItem(); + } + } + } + return; + default: + pPlayers[uActiveCharacter]->UseItem_DrinkPotion_etc(uActiveCharacter, 0); + return; + } + return; + } + + v32 = pMouse->uMouseClickX; + v33 = pMouse->uMouseClickY; + + v34 = pRenderer->pActiveZBuffer[v32 + pSRZBufferLineOffsets[v33]] & 0xFFFF; + if ( v34 ) + { + v36 = v34 - 1; + v37 = (int)((char *)pPlayers[uActiveCharacter] + 36 * v36); + v50 = v37; + v38 = (ItemGen *)(v37 + 532); + v14 = v38->uItemID == 604; + v52 = pItemsTable->pItems[v38->uItemID].uEquipType; + if ( v14 ) + { + if ( bUnderwater ) + { + pAudioPlayer->PlaySound(SOUND_27, 0, 0, -1, 0, 0, 0, 0); + return; + } + WetsuitOff(uActiveCharacter); + } + if ( unk_50C9A0 ) + { + *((char *)pGUIWindow_Settings->ptr_1C + 8) &= 0x7Fu; + *((short *)pGUIWindow_Settings->ptr_1C + 2) = uActiveCharacter - 1; + v39 = v52; + *((int *)pGUIWindow_Settings->ptr_1C + 3) = v36; + *((short *)pGUIWindow_Settings->ptr_1C + 3) = v39; + ptr_50C9A4 = v38; + unk_50C9A0 = 0; + if ( pMessageQueue_50CBD0->uNumMessages ) + pMessageQueue_50CBD0->uNumMessages = pMessageQueue_50CBD0->pMessages[0].field_8 != 0; + pMouse->SetCursorBitmap("MICON1"); + dword_50C9D4 = 0; + dword_50C9D0 = 113; + dword_50C9D8 = 256; + } + else + { + if ( !ptr_50C9A4 ) + { + pParty->SetHoldingItem(v38); + *(&pPlayers[uActiveCharacter]->uBirthYear + *(char *)(v50 + 556)) = 0; + v38->Reset(); + } + } + } + else + { + v35 = pPlayers[uActiveCharacter]->pEquipment.uBow; + if ( v35 ) + { + auto _a = (ItemGen *)&pPlayers[uActiveCharacter]->pInventoryItems[v35 - 1]; + pParty->SetHoldingItem(_a); + _a->Reset(); + pPlayers[uActiveCharacter]->pEquipment.uBow = 0; + } + } +} +//----- (004196A0) -------------------------------------------------------- +void CharacterUI_ReleaseButtons() +{ + GUIButton *i; // esi@2 + GUIButton *j; // esi@7 + + if ( dword_507CC0_activ_ch ) + { + dword_507CC0_activ_ch = 0; + for ( i = pGUIWindow_CurrentMenu->pControlsHead; i; i = j ) + { + j=i->pNext; + if ( BYTE1(i->field_1C) & 0x80 ) + { + i->Release(); + pAllocator->FreeChunk(i); + } + } + for ( j = pGUIWindow_CurrentMenu->pControlsHead; j; j = j->pNext ) + { + if ( j->msg == UIMSG_InventoryLeftClick) + { + j->uX = dword_50698C_uX; + j->uY = dword_506988_uY; + j->uZ = dword_506984_uZ; + j->uW = dword_506980_uW; + pGUIWindow_CurrentMenu->_41D08F_set_keyboard_control_group(1, 0, 0, 0); + } + } + } +} \ No newline at end of file