/* =========================================================================== ARX FATALIS GPL Source Code Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company. This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code'). Arx Fatalis Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Arx Fatalis Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Arx Fatalis Source Code. If not, see . In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below. If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. =========================================================================== */ /////////////////////////////////////////////////////////////////////////////// // // ARX_Interface.cpp // ARX Interface Management // // Copyright (c) 1999-2000 ARKANE Studios SA. All rights reserved // /////////////////////////////////////////////////////////////////////////////// #include "ARX_Interface.h" #include "ARX_Minimap.h" #include "ARX_Paths.h" #include "ARX_Text.h" #include "ARX_Draw.h" #include "ARX_Menu.h" #include "ARX_INPUT.h" #include "ARX_Equipment.h" #include "ARX_Sound.h" #include "ARX_Spells.h" #include "ARX_Speech.h" #include "ARX_Levels.h" #include "ARX_ChangeLevel.h" #include "ARX_Particles.h" #include "ARX_Damages.h" #include "ARX_NPC.h" #include "ARX_Menu.h" #include "ARX_Menu2.h" #include "ARX_Interactive.h" #include "ARX_speech.h" #include "../danae/Danae_resource.h" #include "ARX_Text.h" #include "ARX_Time.h" #include "DanaeDlg.h" #include "EERIEAnim.h" #include "EERIELight.h" #include "EERIELinkedObj.h" #include "EERIEPhysicsBox.h" #include "EERIEDRAW.h" #include "EERIEObject.h" #include "EERIETexture.h" #include "ARX_collisions.h" #include "ARX_C_Cinematique.h" #include "Hermesmain.h" #include "resource.h" #include #define _CRTDBG_MAP_ALLOC #include extern float MagicSightFader; extern long FINAL_COMMERCIAL_DEMO; extern long NEED_TEST_TEXT; extern float Original_framedelay; extern long FINAL_COMMERCIAL_GAME; extern EERIE_3DOBJ *arrowobj; extern bool bGLOBAL_DINPUT_GAME; extern void InitTileLights(); extern long USE_LIGHT_OPTIM; long Manage3DCursor(long flags); // flags & 1 == simulation long IN_BOOK_DRAW=0; int TSU_TEST_COLLISIONS = 0; extern float INVISIBILITY_OVERRIDE; //----------------------------------------------------------------------------- typedef struct { INTERACTIVE_OBJ * io; TextureContainer * tc; TextureContainer * tc2; float POSX; float POSY; float fRatioX; float fRatioY; } ARX_INTERFACE_HALO_STRUCT; //----------------------------------------------------------------------------- #define GL_DECAL_ICONS 0 #define BOOKMARKS_POS_X 216.f #define BOOKMARKS_POS_Y 60.f #define PAGE_CHAR_SIZE 4096 //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- extern TextureContainer * iconequip[]; extern TextureContainer * Movable; extern TextureContainer * ChangeLevel; extern TextureContainer * inventory_font; extern TextureContainer * scursor[]; extern TextureContainer * pTCCrossHair; extern TextureContainer * mecanism_tc; extern TextureContainer * arrow_left_tc; extern FOG_DEF fogparam; extern CDirectInput *pGetInfoDirectInput; extern CMenuConfig *pMenuConfig; extern D3DTLVERTEX LATERDRAWHALO[]; extern EERIE_LIGHT lightparam; extern INTERACTIVE_OBJ * CURRENT_TORCH; extern STRUCT_SPEECH speech[]; extern _TCHAR WILLADDSPEECH[]; extern float PLAYER_ROTATION; extern float SLID_VALUE; extern long WILLLOADLEVEL; // Is a LoadLevel command waiting ? extern long WILLSAVELEVEL; // Is a SaveLevel command waiting ? extern long BOOKBUTTON; extern long LASTBOOKBUTTON; extern long FORCE_NO_HIDE; extern long GAME_EDITOR; extern long LastSelectedIONum; extern long lSLID_VALUE; extern long CHANGE_LEVEL_ICON; extern long NO_TEXT_AT_ALL; extern long BLOCK_PLAYER_CONTROLS; extern long DeadTime; extern long MOULINEX; extern long HALOCUR; extern long USE_CEDRIC_ANIM; extern long ALLOW_CHEATS; extern long LOOKING_FOR_SPELL_TARGET; extern long WILLRETURNTOFREELOOK; extern float BOW_FOCAL; extern EERIE_S2D DANAEMouse; extern short sActiveInventory; extern unsigned long WILLADDSPEECHTIME; extern unsigned long LOOKING_FOR_SPELL_TARGET_TIME; extern ANIM_HANDLE * herowait_2h; extern float ARXTimeMenu; extern float ARXOldTimeMenu; extern float ARXDiffTimeMenu; extern CINEMATIQUE *ControlCinematique; extern bool bRenderInterList; extern bool bGToggleCombatModeWithKey; extern long PlayerWeaponBlocked; extern unsigned char ucFlick; extern bool bGATI8500; extern bool bSoftRender; extern CARXTextManager *pTextManageFlyingOver; BOOL IsPlayerStriking(); void OptmizeInventory(unsigned int); long ARX_SPELLS_GetInstance(const long &); void ARX_SPELLS_Kill(const long &); extern long SHOW_INGAME_MINIMAP; //----------------------------------------------------------------------------- TextureContainer * NoteTexture=NULL; TextureContainer * NoteTextureLeft=NULL; TextureContainer * NoteTextureRight=NULL; TextureContainer * BasicInventorySkin=NULL; TextureContainer * ThrowObject=NULL; ARX_INTERFACE_HALO_STRUCT * aiHalo=NULL; D3DCOLOR BOOKINTERFACEITEMCOLOR=D3DCOLORWHITE; E_ARX_STATE_MOUSE eMouseState; EERIE_S2D bookclick; EERIE_S2D MemoMouse; EERIE_LIGHT * CDP_EditLight=NULL; FOG_DEF * CDP_EditFog=NULL; HWND CDP_PATHWAYS_Options=NULL; HWND CDP_FogOptions=NULL; HWND CDP_LIGHTOptions=NULL; HWND CDP_IOOptions=NULL; INVENTORY_DATA * TSecondaryInventory; INTERACTIVE_OBJ * CDP_EditIO=NULL; INTERACTIVE_OBJ * FlyingOverIO=NULL; INTERACTIVE_OBJ * STARTED_ACTION_ON_IO=NULL; INTERFACE_TC ITC; STRUCT_NOTE Note; STRUCT_NOTE QuestBook; _TCHAR Page_Buffer[PAGE_CHAR_SIZE+1]; bool bBookHalo = false; bool bGoldHalo = false; bool bHitFlash = false; bool bInventoryClosing = false; bool bInventorySwitch = false; bool bIsAiming = false; float fHitFlash = 0; unsigned long ulHitFlash = 0; unsigned long ulBookHaloTime = 0; unsigned long ulGoldHaloTime = 0; float NotePosX=0; float NotePosY=0; float NoteTextMinx; float NoteTextMiny; float NoteTextMaxx; float NoteTextMaxy; float InventoryX=-60.f; float InventoryDir=0; // 0 stable, 1 to right, -1 to left float CINEMA_DECAL=0.f; float SLID_START=0.f; // Charging Weapon float BOOKDECX=0.f; float BOOKDECY=0.f; float PROGRESS_BAR_TOTAL=0; float PROGRESS_BAR_COUNT=0; float OLD_PROGRESS_BAR_COUNT=0; long TRUE_PLAYER_MOUSELOOK_ON=0; long LAST_PLAYER_MOUSELOOK_ON=0; long MEMO_PLAYER_MOUSELOOK_ON=0; long COMBINEGOLD=0; long PLAYER_MOUSELOOK_ON=0; long Book_Mode=0; long Book_MapPage=1; long Book_SpellPage=1; long CINEMASCOPE=0; float g_TimeStartCinemascope = 0; long CINEMA_INC=0; long SMOOTHSLID=0; long currpos=50; long DRAGGING = 0; long INVERTMOUSE=0; long PLAYER_INTERFACE_HIDE_COUNT=0; long MAGICMODE=-1; long SpecialCursor=0; long FLYING_OVER = 0; long OLD_FLYING_OVER = 0; long LastRune=-1; long BOOKZOOM=0; EERIE_3D ePlayerAngle; long CURCURTIME=0; long CURCURDELAY=70; long CURCURPOS=0; long INTERFACE_HALO_NB=0; long INTERFACE_HALO_MAX_NB=0; long ObjectRotAxis=0; long SPECIAL_DRAW_INTER_SHADOW=0; long PRECAST_NUM=0; long LastMouseClick=0; long LastSelectedNode=-1; long LastSelectedFog=-1; long LastSelectedLight=-1; long MOVETYPE=MOVE_WAIT; //used to redist points - attributes and skill long lCursorRedistValue = 0; long lFadeMapTime = 0; float fInterfaceRatio = 1; unsigned long COMBAT_MODE_ON_START_TIME = 0; long SPECIAL_DRAW_WEAPON=0; bool bGCroucheToggle=false; int iHighLight=0; float fHighLightAng=0.f; long INTERNATIONAL_MODE=1; float INTERFACE_RATIO(float a) { return a * fInterfaceRatio; } float INTERFACE_RATIO_LONG(const long a) { return INTERFACE_RATIO(ARX_CLEAN_WARN_CAST_FLOAT(a)); } float INTERFACE_RATIO_DWORD(const DWORD a) { return INTERFACE_RATIO(ARX_CLEAN_WARN_CAST_FLOAT(a)); } short SHORT_INTERFACE_RATIO(const float _a) { float fRes = INTERFACE_RATIO(_a); ARX_CHECK_SHORT(fRes); return ARX_CLEAN_WARN_CAST_SHORT(fRes); } bool bInverseInventory=false; long lOldTruePlayerMouseLook=TRUE_PLAYER_MOUSELOOK_ON; bool bForceEscapeFreeLook=false; bool bRenderInCursorMode=true; long lChangeWeapon=0; INTERACTIVE_OBJ *pIOChangeWeapon=NULL; static long lTimeToDrawMecanismCursor=0; static long lNbToDrawMecanismCursor=0; static long lOldInterface; //----------------------------------------------------------------------------- float ARX_CAST_TO_INT_THEN_FLOAT( float _f ) { return ( ( _f >= 0 ) ? floor( _f ) : ceil( _f ) ); } //----------------------------------------------------------------------------- BOOL MouseInBookRect(const float x, const float y, const float cx, const float cy) { return ((DANAEMouse.x>=(x+BOOKDECX)*Xratio) && (DANAEMouse.x<=(cx+BOOKDECX)*Xratio) && (DANAEMouse.y>=(y+BOOKDECY)*Yratio) && (DANAEMouse.y <= (cy + BOOKDECY) * Yratio)); } //----------------------------------------------------------------------------- BOOL MouseInCam(EERIE_CAMERA * cam) { return ((DANAEMouse.x>cam->clip.left) && (DANAEMouse.xclip.right) && (DANAEMouse.x>cam->clip.top) && (DANAEMouse.yclip.bottom)); } //----------------------------------------------------------------------------- BOOL MouseInRect(const float x0, const float y0, const float x1=32, const float y1=32) { return ( (DANAEMouse.x>=x0) && (DANAEMouse.x<=x1) && (DANAEMouse.y>=y0) && (DANAEMouse.y<=y1) ); } //----------------------------------------------------------------------------- BOOL ARX_INTERFACE_MouseInBook() { if ((player.Interface & INTER_MAP ) && (!(player.Interface & INTER_COMBATMODE))) return (MouseInBookRect(99,65,599,372)); else return FALSE; } //----------------------------------------------------------------------------- void ARX_INTERFACE_DrawItem(TextureContainer *tc, const float x, const float y, const float z, const D3DCOLOR col) { if ((tc) && (tc->m_pddsSurface)) EERIEDrawBitmap(GDevice, x, y, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), z, tc, col); } //----------------------------------------------------------------------------- void ARX_INTERFACE_DrawNumber(const float x, const float y, const long num, const int _iNb, const D3DCOLOR col) { D3DTLVERTEX v[4]; v[0]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.f ), 1.f, 1, 1, 0.f, 0.f); v[1]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.f ), 1.f, 1, 1, 1.f, 0.f); v[2]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.f ), 1.f, 1, 1, 1.f, 1.f); v[3]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.f ), 1.f, 1, 1, 0.f, 1.f); char format[32]; sprintf(format, "%%0%dd", _iNb); v[0].sz = v[1].sz = v[2].sz = v[3].sz = 0.0000001f; if (inventory_font) { char tx[7]; long tt; float ttx; float divideX = 1.f/((float) inventory_font->m_dwWidth); float divideY = 1.f/((float) inventory_font->m_dwHeight); sprintf(tx, format, num); long removezero=1; for (long i=0;i<6;i++) { tt=tx[i]-'0'; if ((tt==0) && removezero) continue; if (tt>=0) { removezero=0; v[0].sx=v[3].sx=x + i*INTERFACE_RATIO(10); v[1].sx = v[2].sx = v[0].sx + INTERFACE_RATIO(10); v[0].sy=v[1].sy=y; v[2].sy=v[3].sy=y + INTERFACE_RATIO(10); v[0].color=v[1].color=v[2].color=v[3].color=col; ttx = (float)((float)tt * (float)11.f) + 1.5f; v[3].tu=v[0].tu=ttx*divideX; v[1].tu=v[2].tu=(ttx+10.f)*divideX; ttx=0.5f*divideY; v[1].tv = v[0].tv = divideY + ttx; v[2].tv = v[3].tv = divideY * 12; SETTC(GDevice,inventory_font); EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLEFAN, D3DFVF_TLVERTEX| D3DFVF_DIFFUSE| D3DFVF_SPECULAR ,v, 4, 0 ); } } } } //----------------------------------------------------------------------------- // Interface Texture Containers creation //----------------------------------------------------------------------------- void CreateInterfaceTextureContainers() { char temp[512]; memset(&ITC,0,sizeof(INTERFACE_TC)); MakeDir(temp,"Graph\\Interface\\bars\\aim_empty.bmp"); ITC.aim_empty = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\bars\\aim_maxi.bmp"); ITC.aim_maxi = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\bars\\flash_gauge.bmp"); ITC.aim_hit = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\hero_inventory.bmp"); ITC.hero_inventory = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\Ingame_inventory.bmp"); BasicInventorySkin = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\scroll_up.bmp"); ITC.hero_inventory_up = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\scroll_down.bmp"); ITC.hero_inventory_down = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\Hero_inventory_link.bmp"); ITC.hero_inventory_link = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\inv_pick.bmp"); ITC.inventory_pickall = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Inventory\\inv_close.bmp"); ITC.inventory_close = MakeTCFromFile(temp, 0); MakeDir(temp,"Graph\\Interface\\Icons\\lvl_up.bmp"); ITC.Icon_Lvl_Up = MakeTCFromFile(temp, 0); ITC.ingame_sub_inv = NULL; MakeDir(temp,"Graph\\Interface\\Icons\\Backpack.bmp"); ITC.backpack=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\Inventory\\Gold.bmp"); ITC.gold=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\Icons\\Book.bmp"); ITC.book=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\Icons\\Steal.bmp"); ITC.steal=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\Icons\\cant_steal_item.bmp"); ITC.item_cant_steal=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\interface\\bars\\Empty_gauge_Red.bmp"); ITC.empty_gauge_red=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\interface\\bars\\Empty_gauge_Blue.bmp"); ITC.empty_gauge_blue=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\interface\\bars\\Filled_gauge_Red.bmp"); ITC.filled_gauge_red=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\interface\\bars\\Filled_gauge_Blue.bmp"); ITC.filled_gauge_blue=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\target_on.bmp"); ITC.target_on=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\target_off.bmp"); ITC.target_off=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\interaction_on.bmp"); ITC.interaction_on=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\interaction_off.bmp"); ITC.interaction_off=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\magic.bmp"); ITC.magic=D3DTextr_GetSurfaceContainer(temp); MakeDir(temp,"Graph\\Interface\\cursors\\throw.bmp"); ThrowObject = D3DTextr_GetSurfaceContainer(temp); } //----------------------------------------------------------------------------- void KillInterfaceTextureContainers() { D3DTextr_KillTexture(ITC.questbook); D3DTextr_KillTexture(ITC.bookmark_char); D3DTextr_KillTexture(ITC.bookmark_magic); D3DTextr_KillTexture(ITC.bookmark_map); D3DTextr_KillTexture(ITC.bookmark_quest); D3DTextr_KillTexture(ITC.accessible_1); D3DTextr_KillTexture(ITC.accessible_2); D3DTextr_KillTexture(ITC.accessible_3); D3DTextr_KillTexture(ITC.accessible_4); D3DTextr_KillTexture(ITC.accessible_5); D3DTextr_KillTexture(ITC.accessible_6); D3DTextr_KillTexture(ITC.accessible_7); D3DTextr_KillTexture(ITC.accessible_8); D3DTextr_KillTexture(ITC.accessible_9); D3DTextr_KillTexture(ITC.accessible_10); D3DTextr_KillTexture(ITC.current_1); D3DTextr_KillTexture(ITC.current_2); D3DTextr_KillTexture(ITC.current_3); D3DTextr_KillTexture(ITC.current_4); D3DTextr_KillTexture(ITC.current_5); D3DTextr_KillTexture(ITC.current_6); D3DTextr_KillTexture(ITC.current_7); D3DTextr_KillTexture(ITC.current_8); D3DTextr_KillTexture(ITC.current_9); D3DTextr_KillTexture(ITC.current_10); D3DTextr_KillTexture(ITC.heropageleft); D3DTextr_KillTexture(ITC.heropageright); D3DTextr_KillTexture(ITC.symbol_mega); D3DTextr_KillTexture(ITC.symbol_vista); D3DTextr_KillTexture(ITC.symbol_aam); D3DTextr_KillTexture(ITC.symbol_taar); D3DTextr_KillTexture(ITC.symbol_yok); D3DTextr_KillTexture(ITC.pTexCursorRedist); D3DTextr_KillTexture(ITC.pTexSpellBook); D3DTextr_KillTexture(ITC.pTexCornerLeft); D3DTextr_KillTexture(ITC.pTexCornerRight); if (ITC.lpszULevel) { free (ITC.lpszULevel); ITC.lpszULevel = NULL; } if (ITC.lpszUXp) { free (ITC.lpszUXp); ITC.lpszUXp = NULL; } ITC.questbook=NULL; ITC.bookmark_char=NULL; ITC.bookmark_magic=NULL; ITC.bookmark_map=NULL; ITC.bookmark_quest=NULL; ITC.accessible_1=NULL; ITC.accessible_2=NULL; ITC.accessible_3=NULL; ITC.accessible_4=NULL; ITC.accessible_5=NULL; ITC.accessible_6=NULL; ITC.accessible_7=NULL; ITC.accessible_8=NULL; ITC.accessible_9=NULL; ITC.accessible_10=NULL; ITC.current_1=NULL; ITC.current_2=NULL; ITC.current_3=NULL; ITC.current_4=NULL; ITC.current_5=NULL; ITC.current_6=NULL; ITC.current_7=NULL; ITC.current_8=NULL; ITC.current_9=NULL; ITC.current_10=NULL; ITC.heropageleft=NULL; ITC.heropageright=NULL; ITC.symbol_mega=NULL; ITC.symbol_vista=NULL; ITC.symbol_aam=NULL; ITC.symbol_taar=NULL; ITC.symbol_yok=NULL; ITC.pTexCursorRedist=NULL; ITC.pTexSpellBook=NULL; ITC.pTexCornerLeft=NULL; ITC.pTexCornerRight=NULL; ITC.lpszULevel = NULL; ITC.lpszUXp = NULL; } //----------------------------------------------------------------------------- void ARX_INTERFACE_HALO_Render(float _fR, float _fG, float _fB, long _lHaloType, TextureContainer * tc, TextureContainer * tc2, float POSX, float POSY, float fRatioX = 1, float fRatioY = 1) { float power=0.9f-EEsin(FrameTime*DIV50)*DIV10+rnd()*DIV10; if (power>1.f) power=1.f; _fR *= power; _fG *= power; _fB *= power; D3DCOLOR col=D3DRGB(_fR,_fG,_fB); if (_lHaloType & HALO_NEGATIVE) { SETBLENDMODE(GDevice,D3DBLEND_ZERO,D3DBLEND_INVSRCCOLOR); } else { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); } SETALPHABLEND(GDevice,true); DDSURFACEDESC2 ddsdSurfaceDescSrc; DDSURFACEDESC2 ddsdSurfaceDescHalo; ddsdSurfaceDescSrc.dwSize=sizeof(DDSURFACEDESC2); ddsdSurfaceDescHalo.dwSize=sizeof(DDSURFACEDESC2); tc->m_pddsSurface->GetSurfaceDesc(&ddsdSurfaceDescSrc); tc2->m_pddsSurface->GetSurfaceDesc(&ddsdSurfaceDescHalo); float fDeltaXP=((float)tc2->m_dwWidth/(float)ddsdSurfaceDescHalo.dwWidth)*((float)tc->m_dwWidth/(float)ddsdSurfaceDescSrc.dwWidth); float fDeltaYP=((float)tc2->m_dwHeight/(float)ddsdSurfaceDescHalo.dwHeight)*((float)tc->m_dwHeight/(float)ddsdSurfaceDescSrc.dwHeight); float fDeltaX=(float)tc->m_dwWidth/(float)ddsdSurfaceDescSrc.dwWidth; float fDeltaY=(float)tc->m_dwHeight/(float)ddsdSurfaceDescSrc.dwHeight; if(fDeltaX<1.f) { fDeltaXP*=(1.f/fDeltaX); fDeltaX=1.f; } if(fDeltaY<1.f) { fDeltaYP*=(1.f/fDeltaY); fDeltaY=1.f; } float fSizeX = ARX_CLEAN_WARN_CAST_FLOAT(ddsdSurfaceDescHalo.dwWidth); float fSizeY = ARX_CLEAN_WARN_CAST_FLOAT(ddsdSurfaceDescHalo.dwHeight); fSizeX *= fRatioX; fSizeY *= fRatioY; POSX -= (fSizeX - ddsdSurfaceDescHalo.dwWidth)*0.25f; POSY -= (fSizeY - ddsdSurfaceDescHalo.dwHeight)*0.25f; fDeltaXP = 1; fDeltaYP = 1; EERIEDrawBitmap(GDevice,(float)(POSX-tc->halodecalX*fDeltaX),(float)(POSY-tc->halodecalY*fDeltaY) ,((float)fSizeX)*fDeltaXP ,((float)fSizeY)*fDeltaYP,0.00001f ,tc2,col); SETALPHABLEND(GDevice,false); } //----------------------------------------------------------------------------- void ARX_INTERFACE_HALO_Draw(INTERACTIVE_OBJ * io,LPDIRECT3DDEVICE7 m_pd3dDevice,TextureContainer * tc,TextureContainer * tc2,float POSX,float POSY, float _fRatioX = 1, float _fRatioY = 1) { INTERFACE_HALO_NB++; if (INTERFACE_HALO_NB>INTERFACE_HALO_MAX_NB) { INTERFACE_HALO_MAX_NB=INTERFACE_HALO_NB; aiHalo=(ARX_INTERFACE_HALO_STRUCT *)realloc(aiHalo,sizeof(ARX_INTERFACE_HALO_STRUCT)*INTERFACE_HALO_NB); } aiHalo[INTERFACE_HALO_NB-1].io=io; aiHalo[INTERFACE_HALO_NB-1].tc=tc; aiHalo[INTERFACE_HALO_NB-1].tc2=tc2; aiHalo[INTERFACE_HALO_NB-1].POSX=POSX; aiHalo[INTERFACE_HALO_NB-1].POSY=POSY; aiHalo[INTERFACE_HALO_NB-1].fRatioX = _fRatioX; aiHalo[INTERFACE_HALO_NB-1].fRatioY = _fRatioY; } //----------------------------------------------------------------------------- void ReleaseHalo() { if (aiHalo) { free(aiHalo); aiHalo=NULL; } } //----------------------------------------------------------------------------- void ARX_INTERFACE_HALO_Flush(LPDIRECT3DDEVICE7 m_pd3dDevice) { for (long i=0;ihalo.color.r, aiHalo[i].io->halo.color.g, aiHalo[i].io->halo.color.b, aiHalo[i].io->halo.flags, aiHalo[i].tc,aiHalo[i].tc2,aiHalo[i].POSX,aiHalo[i].POSY, aiHalo[i].fRatioX, aiHalo[i].fRatioY); INTERFACE_HALO_NB=0; } //----------------------------------------------------------------------------- bool NeedHalo(INTERACTIVE_OBJ * io) { if ( (!io) || (!(io->ioflags & IO_ITEM)) ) return false; if (io->halo.flags & HALO_ACTIVE) { if ((io->inv) && (io->inv->TextureHalo==NULL)) { io->inv->CreateHalo(GDevice); } return true; } return false; } //----------------------------------------------------------------------------- void InventoryOpenClose(unsigned long t) // 0 switch 1 forceopen 2 forceclose { if ((t==1) && (player.Interface & INTER_INVENTORY)) return; if ((t==2) && (!(player.Interface & INTER_INVENTORY))) return; ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); if ((player.Interface & INTER_INVENTORY)||(player.Interface & INTER_INVENTORYALL)) { bInventoryClosing = true; if (WILLRETURNTOFREELOOK) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; WILLRETURNTOFREELOOK = 0; } } else { player.Interface |= INTER_INVENTORY; InventoryY = ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO(100.f)); if (TRUE_PLAYER_MOUSELOOK_ON) { WILLRETURNTOFREELOOK = 1; } } if ((((player.Interface & INTER_INVENTORYALL)||(TRUE_PLAYER_MOUSELOOK_ON))&&(INTERNATIONAL_MODE))&&(player.Interface & INTER_NOTE)) { ARX_INTERFACE_NoteClose(); } if (!bInventoryClosing && pMenuConfig->bAutoReadyWeapon == false) { TRUE_PLAYER_MOUSELOOK_ON &= ~1; } } //----------------------------------------------------------------------------- void ARX_INTERFACE_NoteInit() { Note.type = NOTE_TYPE_UNDEFINED; Note.text = NULL; Note.textsize = 0; QuestBook.curpage=0; } //----------------------------------------------------------------------------- void ARX_INTERFACE_NoteClear() { Note.type = NOTE_TYPE_UNDEFINED; if (Note.text) free(Note.text); Note.text=NULL; Note.textsize=0; player.Interface&=~INTER_NOTE; if (NoteTexture) { D3DTextr_KillTexture(NoteTexture); NoteTexture=NULL; } if (NoteTextureLeft) { D3DTextr_KillTexture(NoteTextureLeft); NoteTextureLeft=NULL; } if (NoteTextureRight) { D3DTextr_KillTexture(NoteTextureRight); NoteTextureRight=NULL; } } //----------------------------------------------------------------------------- void ARX_INTERFACE_NoteOpen(ARX_INTERFACE_NOTE_TYPE type,char * tex) { if (player.Interface & INTER_NOTE) ARX_INTERFACE_NoteClose(); _TCHAR output[8096]; ARX_INTERFACE_BookOpenClose(2); ARX_INTERFACE_NoteClear(); Note.type=type; MakeLocalised(tex,output,8096); Note.text = (_TCHAR *)malloc((_tcslen(output)+1)*sizeof(_TCHAR)); ZeroMemory(Note.text, (_tcslen(output)+1)*sizeof(_TCHAR)); _tcscpy(Note.text,output); player.Interface|=INTER_NOTE; if (NoteTexture) { D3DTextr_KillTexture(NoteTexture); NoteTexture=NULL; } if (NoteTextureLeft) { D3DTextr_KillTexture(NoteTextureLeft); NoteTextureLeft=NULL; } if (NoteTextureRight) { D3DTextr_KillTexture(NoteTextureRight); NoteTextureRight=NULL; } Note.curpage=0; Note.pages[0]=0; long length=_tcslen(Note.text); long curpage=1; NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Ingame_books.bmp"); RECT rRect; float fWidth = NoteTexture->m_dwWidth*DIV2-10.f ; float fHeight = NoteTexture->m_dwHeight-40.f ; ARX_CHECK_INT(fWidth); ARX_CHECK_INT(fHeight); int tNoteTextMinx = 40; int tNoteTextMaxx = ARX_CLEAN_WARN_CAST_INT(fWidth); int tNoteTextMiny = 40; int tNoteTextMaxy = ARX_CLEAN_WARN_CAST_INT(fHeight); float fMinx = (tNoteTextMaxx-tNoteTextMinx)*Xratio; float fMiny = (tNoteTextMaxy-tNoteTextMiny)*Yratio; ARX_CHECK_INT(fMinx); ARX_CHECK_INT(fMiny); SetRect(&rRect,0,0,ARX_CLEAN_WARN_CAST_INT(fMinx),ARX_CLEAN_WARN_CAST_INT(fMiny)); int lLenghtCurr=0; while(length>0) { long lLengthDraw=ARX_UNICODE_ForceFormattingInRect( hFontInGameNote, Note.text+lLenghtCurr, 0, rRect); length-=lLengthDraw; lLenghtCurr+=lLengthDraw; Note.pages[curpage++]=lLenghtCurr; } Note.pages[curpage++]=-1; Note.totpages=curpage; NoteTexture=NULL; if (Note.totpages > 3) { if (Note.type == NOTE_TYPE_NOTE) Note.type = NOTE_TYPE_BIGNOTE; else Note.type = NOTE_TYPE_BOOK; } switch (Note.type) { case NOTE_TYPE_NOTICE : ARX_SOUND_PlayInterface(SND_MENU_CLICK, 0.9F + 0.2F * rnd()); break; case NOTE_TYPE_BOOK : ARX_SOUND_PlayInterface(SND_BOOK_OPEN, 0.9F + 0.2F * rnd()); break; case NOTE_TYPE_NOTE : ARX_SOUND_PlayInterface(SND_SCROLL_OPEN, 0.9F + 0.2F * rnd()); break; } if (TRUE_PLAYER_MOUSELOOK_ON && (Note.type == NOTE_TYPE_BOOK)) { TRUE_PLAYER_MOUSELOOK_ON&=~1; } if ((player.Interface & INTER_INVENTORYALL)) { bInventoryClosing = true; ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); } } //----------------------------------------------------------------------------- void ARX_INTERFACE_NoteClose() { if (player.Interface & INTER_NOTE) { switch (Note.type) { case NOTE_TYPE_NOTICE : ARX_SOUND_PlayInterface(SND_MENU_CLICK, 0.9F + 0.2F * rnd()); break; case NOTE_TYPE_BOOK : ARX_SOUND_PlayInterface(SND_BOOK_CLOSE, 0.9F + 0.2F * rnd()); break; case NOTE_TYPE_NOTE : ARX_SOUND_PlayInterface(SND_SCROLL_CLOSE, 0.9F + 0.2F * rnd()); break; } ARX_INTERFACE_NoteClear(); } player.Interface &= ~INTER_NOTE; } //----------------------------------------------------------------------------- void ARX_INTERFACE_NoteManage() { if (player.Interface & INTER_NOTE) { long clicknotmanaged=1; if (NoteTexture==NULL) { switch (Note.type) { case NOTE_TYPE_NOTE: NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\BigNote.bmp"); if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx=30.f; NoteTextMaxx=NoteTexture->m_dwWidth-40.f; NoteTextMiny=30.f; NoteTextMaxy=NoteTexture->m_dwHeight-40.f; } break; case NOTE_TYPE_NOTICE: NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Notice.bmp"); if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx=50.f; NoteTextMaxx=NoteTexture->m_dwWidth-50.f; NoteTextMiny=50.f; NoteTextMaxy=NoteTexture->m_dwHeight-50.f; } break; case NOTE_TYPE_BIGNOTE: case NOTE_TYPE_BOOK: if (Note.type == NOTE_TYPE_BIGNOTE) { NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Very_BigNote.bmp"); NoteTextureLeft=MakeTCFromFile("Graph\\Interface\\book\\Left_corner.bmp"); NoteTextureRight=MakeTCFromFile("Graph\\Interface\\book\\Right_corner.bmp"); } else { NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Ingame_books.bmp"); NoteTextureLeft=MakeTCFromFile("Graph\\Interface\\book\\Left_corner.bmp"); NoteTextureRight=MakeTCFromFile("Graph\\Interface\\book\\Right_corner.bmp"); } if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx = 40.f; NoteTextMaxx = NoteTexture->m_dwWidth*DIV2-10.f; NoteTextMiny = 40.f; NoteTextMaxy = NoteTexture->m_dwHeight-40.f; } break; } } if (NoteTexture) { SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_CLAMP); DrawBookInterfaceItem(GDevice, NoteTexture, NotePosX, NotePosY); if (Note.type==NOTE_TYPE_BOOK || Note.type == NOTE_TYPE_BIGNOTE) { float x0, y0; if( (Note.curpage+4)m_dwWidth - NoteTextureRight->m_dwWidth - 1; y0 = -6 + NotePosY + NoteTexture->m_dwHeight - NoteTextureRight->m_dwHeight; if ( Note.type == NOTE_TYPE_BOOK ) { float fWidth = ARX_CLEAN_WARN_CAST_FLOAT( x0 + NoteTextureRight->m_dwWidth ) ; float fHeight = ARX_CLEAN_WARN_CAST_FLOAT( y0 + NoteTextureRight->m_dwHeight ) ; DrawBookInterfaceItem(GDevice, NoteTextureRight,x0, y0); if ( MouseInBookRect(x0, y0, fWidth, fHeight) ) { SpecialCursor=CURSOR_INTERACTION_ON; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { clicknotmanaged=0; ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Note.curpage+=2; } } } } if (Note.curpage>1) { x0 = 8 + NotePosX ; y0 = -6 + NotePosY + NoteTexture->m_dwHeight - NoteTextureLeft->m_dwHeight; if (Note.type == NOTE_TYPE_BOOK) { float fWidth = ARX_CLEAN_WARN_CAST_FLOAT( x0 + NoteTextureLeft->m_dwWidth ) ; float fHeight = ARX_CLEAN_WARN_CAST_FLOAT( y0 + NoteTextureLeft->m_dwHeight ) ; DrawBookInterfaceItem(GDevice, NoteTextureLeft, x0, y0); if ( MouseInBookRect( x0, y0, fWidth, fHeight) ) { SpecialCursor=CURSOR_INTERACTION_ON; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { clicknotmanaged=0; ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Note.curpage-=2; } } } } if (Note.pages[Note.curpage]>=0) { if(Note.pages[Note.curpage+1]>0) { _tcsncpy(Page_Buffer,Note.text+Note.pages[Note.curpage],Note.pages[Note.curpage+1]-Note.pages[Note.curpage]); Page_Buffer[Note.pages[Note.curpage+1]-Note.pages[Note.curpage]]=_T('\0'); danaeApp.DANAEEndRender(); DrawBookTextInRect(NotePosX+NoteTextMinx, NotePosY+NoteTextMiny, NotePosX+NoteTextMaxx, NotePosY+NoteTextMaxy,Page_Buffer,0,0x00FF00FF, hFontInGameNote); danaeApp.DANAEStartRender(); if(Note.pages[Note.curpage+2]>0) { _tcsncpy(Page_Buffer,Note.text+Note.pages[Note.curpage+1],Note.pages[Note.curpage+2]-Note.pages[Note.curpage+1]); Page_Buffer[Note.pages[Note.curpage+2]-Note.pages[Note.curpage+1]]=_T('\0'); danaeApp.DANAEEndRender(); DrawBookTextInRect(NotePosX+NoteTextMinx + (NoteTextMaxx-NoteTextMinx) +20, NotePosY+NoteTextMiny, NotePosX+NoteTextMaxx + (NoteTextMaxx-NoteTextMinx) +20, NotePosY+NoteTextMaxy,Page_Buffer,0,0x00FF00FF, hFontInGameNote); danaeApp.DANAEStartRender(); } } else { if(Note.pages[Note.curpage]>=0) { _tcscpy(Page_Buffer,Note.text+Note.pages[Note.curpage]); danaeApp.DANAEEndRender(); DrawBookTextInRect( NotePosX+NoteTextMinx, NotePosY+NoteTextMiny, NotePosX+NoteTextMaxx, NotePosY+NoteTextMaxy,Page_Buffer,0,0x00FF00FF, hFontInGameNote); danaeApp.DANAEStartRender(); } } } SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_WRAP); } else { danaeApp.DANAEEndRender(); DrawBookTextInRect( NotePosX+NoteTextMinx, NotePosY+NoteTextMiny, NotePosX+NoteTextMaxx, NotePosY+NoteTextMaxy,Note.text,0,0x00FF00FF, hFontInGameNote); danaeApp.DANAEStartRender(); } } if (NoteTexture) if (MouseInBookRect(NotePosX, NotePosY, NotePosX+NoteTexture->m_dwWidth, NotePosY+NoteTexture->m_dwHeight)) { if ((((EERIEMouseButton & 1) && (!(LastMouseClick & 1)) && (TRUE_PLAYER_MOUSELOOK_ON) )||(EERIEMouseButton & 2) && (!(LastMouseClick & 2))) && clicknotmanaged) { ARX_INTERFACE_NoteClose(); EERIEMouseButton &= ~2; } } } } //----------------------------------------------------------------------------- void ARX_INTERFACE_BookOpenClose(unsigned long t) // 0 switch 1 forceopen 2 forceclose { if ((t==1) && (player.Interface & INTER_MAP)) return; if ((t==2) && (!(player.Interface & INTER_MAP))) return; if (player.Interface & INTER_MAP) { ARX_SOUND_PlayInterface(SND_BOOK_CLOSE, 0.9F + 0.2F * rnd()); SendIOScriptEvent(inter.iobj[0],SM_BOOK_CLOSE,"",NULL); player.Interface &=~ INTER_MAP; ARX_MINIMAP_PurgeTC(); if(ARXmenu.mda) { for (long i=0;iflyover[i]!=NULL) ARX_Menu_Release_Text(ARXmenu.mda->flyover[i]); } free((void*)ARXmenu.mda); ARXmenu.mda=NULL; } } else { SendIOScriptEvent(inter.iobj[0],0,"","BOOK_OPEN"); ARX_SOUND_PlayInterface(SND_BOOK_OPEN, 0.9F + 0.2F * rnd()); SendIOScriptEvent(inter.iobj[0],SM_BOOK_OPEN,"",NULL); ARX_INTERFACE_NoteClose(); player.Interface |= INTER_MAP; Book_MapPage=ARX_LEVELS_GetRealNum(CURRENTLEVEL)+1; if (Book_MapPage>8) Book_MapPage=8; if (Book_MapPage<1) Book_MapPage=1; if(!ARXmenu.mda) { ARXmenu.mda = (MENU_DYNAMIC_DATA *)malloc(sizeof(MENU_DYNAMIC_DATA)); memset(ARXmenu.mda,0,sizeof(MENU_DYNAMIC_DATA)); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_STRENGTH], _T("system_charsheet_strength")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_MIND], _T("system_charsheet_intel")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_DEXTERITY], _T("system_charsheet_Dex")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_CONSTITUTION], _T("system_charsheet_consti")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_STEALTH], _T("system_charsheet_stealth")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_MECANISM], _T("system_charsheet_mecanism")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_INTUITION], _T("system_charsheet_intuition")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_ETHERAL_LINK], _T("system_charsheet_etheral_link")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_OBJECT_KNOWLEDGE], _T("system_charsheet_objknoledge")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_CASTING], _T("system_charsheet_casting")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_PROJECTILE], _T("system_charsheet_projectile")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_CLOSE_COMBAT], _T("system_charsheet_closecombat")); ARX_Allocate_Text(ARXmenu.mda->flyover[BOOK_DEFENSE], _T("system_charsheet_defense")); ARX_Allocate_Text(ARXmenu.mda->flyover[BUTTON_QUICK_GENERATION],_T("system_charsheet_quickgenerate")); ARX_Allocate_Text(ARXmenu.mda->flyover[BUTTON_DONE], _T("system_charsheet_done")); ARX_Allocate_Text(ARXmenu.mda->flyover[BUTTON_SKIN], _T("system_charsheet_skin")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_ATTRIBUTES], _T("system_charsheet_atributes")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_SKILLS], _T("system_charsheet_skills")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_STATUS], _T("system_charsheet_status")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_LEVEL], _T("system_charsheet_level")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_XP], _T("system_charsheet_xpoints")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_HP], _T("system_charsheet_hp")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_MANA], _T("system_charsheet_mana")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_AC], _T("system_charsheet_AC")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_RESIST_MAGIC], _T("system_charsheet_res_magic")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_RESIST_POISON], _T("system_charsheet_res_poison")); ARX_Allocate_Text(ARXmenu.mda->flyover[WND_DAMAGE], _T("system_charsheet_damage")); } } if (player.Interface&INTER_COMBATMODE) { player.Interface&=~INTER_COMBATMODE; ARX_EQUIPMENT_LaunchPlayerUnReadyWeapon(); } if (player.Interface & INTER_INVENTORYALL) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); bInventoryClosing = true; } BOOKZOOM = 0; bBookHalo = false; ulBookHaloTime = 0; pTextManage->Clear(); TRUE_PLAYER_MOUSELOOK_ON &= ~1; } //------------------------------------------------------------------------------------- // Keyboard/Mouse Management //------------------------------------------------------------------------------------- //----------------------------------------------------------------------------- void ResetPlayerInterface() { player.Interface |= INTER_LIFE_MANA; SLID_VALUE = 0; lSLID_VALUE = 0; SLID_START=(float)ARXTime; } extern long MouseDragX, MouseDragY; //----------------------------------------------------------------------------- void ReleaseInfosCombine() { INTERACTIVE_OBJ * io = NULL; if (player.bag) for (int iNbBag=0; iNbBagioflags&=~IO_CAN_COMBINE; } } if (SecondaryInventory) { for (long j=0;jsizey;j++) for (long i=0;isizex;i++) { io=SecondaryInventory->slot[i][j].io; if ( io ) { io->ioflags&=~IO_CAN_COMBINE; } } } } //----------------------------------------------------------------------------- void GetInfosCombineWithIO(INTERACTIVE_OBJ * _pWithIO) { if(!COMBINE) { return; } char tcIndent[256]; char tcIsClass[256]; sprintf(tcIndent,COMBINE->filename); strcpy(tcIsClass,GetName(tcIndent)); sprintf(tcIndent,"%s_%04d",tcIsClass,COMBINE->ident); MakeUpcase(tcIndent); char tTxtCombineDest[256]; if( (_pWithIO)&& (_pWithIO!=COMBINE)&& (_pWithIO->script.data) ) { char* pCopyScript=new char[_pWithIO->script.size]; memcpy(pCopyScript,_pWithIO->script.data,_pWithIO->script.size); char* pCopyOverScript=NULL; if(_pWithIO->over_script.data) { pCopyOverScript=new char[_pWithIO->over_script.size]; memcpy(pCopyOverScript,_pWithIO->over_script.data,_pWithIO->over_script.size); } char* pcDataEnd=NULL; char *pcFound=NULL; if(pCopyOverScript) { pcDataEnd=((char*)pCopyOverScript)+_pWithIO->over_script.size; pcFound=strstr((char*)pCopyOverScript,"ON COMBINE"); if(pcFound) { unsigned int uiNbOpen=0; char *pcToken=strtok(pcFound,"\r\n"); if(strstr(pcToken,"{")) { uiNbOpen++; } while(pcToken) { pcToken=strtok(NULL,"\r\n"); strupr(pcToken); bool bCanCombine=false; char* pStartString; char* pEndString; if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"ISCLASS")) ) { pStartString=strstr(pStartString,"\""); if(pStartString) { pStartString++; pEndString=strstr(pStartString,"\""); if(pEndString) { memcpy(tTxtCombineDest,pStartString,pEndString-pStartString); tTxtCombineDest[pEndString-pStartString]=0; if(!stricmp(tTxtCombineDest,tcIsClass)) { //same class bCanCombine=true; } } } } else { if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"==")) ) { pStartString=strstr(pStartString,"\""); if(pStartString) { pStartString++; pEndString=strstr(pStartString,"\""); if(pEndString) { memcpy(tTxtCombineDest,pStartString,pEndString-pStartString); tTxtCombineDest[pEndString-pStartString]=0; if(!stricmp(tTxtCombineDest,tcIndent)) { //same class bCanCombine=true; } } } } else { if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"ISGROUP")) ) { pStartString=strstr(pStartString," "); if(pStartString) { pStartString++; pEndString=strstr(pStartString," "); char* pEndString2=strstr(pStartString,")"); if(pEndString2nb_iogroups ); for( unsigned int uiNbGroups = 0 ; uiNbGroups < ARX_CAST_USHORT( COMBINE->nb_iogroups ) ; uiNbGroups++ ) { if(!stricmp(tTxtCombineDest,COMBINE->iogroups[uiNbGroups].name)) { //same class bCanCombine=true; } } } } } } } if(strstr(pcToken,"{")) { uiNbOpen++; } if(strstr(pcToken,"}")) { uiNbOpen--; } if(bCanCombine) { uiNbOpen=0; _pWithIO->ioflags|=IO_CAN_COMBINE; } else { _pWithIO->ioflags&=~IO_CAN_COMBINE; } if(!uiNbOpen) { break; } } } } if(_pWithIO->ioflags&IO_CAN_COMBINE) { delete[] pCopyScript; delete[] pCopyOverScript; return; } pcDataEnd=((char*)pCopyScript)+_pWithIO->script.size; pcFound=strstr((char*)pCopyScript,"ON COMBINE"); if(pcFound) { unsigned int uiNbOpen=0; char *pcToken=strtok(pcFound,"\r\n"); if(strstr(pcToken,"{")) { uiNbOpen++; } while(pcToken) { pcToken=strtok(NULL,"\r\n"); strupr(pcToken); bool bCanCombine=false; char* pStartString; char* pEndString; if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"ISCLASS")) ) { pStartString=strstr(pStartString,"\""); if(pStartString) { pStartString++; pEndString=strstr(pStartString,"\""); if(pEndString) { memcpy(tTxtCombineDest,pStartString,pEndString-pStartString); tTxtCombineDest[pEndString-pStartString]=0; if(!stricmp(tTxtCombineDest,tcIsClass)) { //same class bCanCombine=true; } } } } else { if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"==")) ) { pStartString=strstr(pStartString,"\""); if(pStartString) { pStartString++; pEndString=strstr(pStartString,"\""); if(pEndString) { memcpy(tTxtCombineDest,pStartString,pEndString-pStartString); tTxtCombineDest[pEndString-pStartString]=0; if(!stricmp(tTxtCombineDest,tcIndent)) { //same class bCanCombine=true; } } } } else { if( strstr(pcToken,"^$PARAM1")&& (pStartString=strstr(pcToken,"ISGROUP")) ) { pStartString=strstr(pStartString," "); if(pStartString) { pStartString++; pEndString=strstr(pStartString," "); char* pEndString2=strstr(pStartString,")"); if(pEndString2nb_iogroups ); for( unsigned int uiNbGroups = 0 ; uiNbGroups < ARX_CAST_USHORT( COMBINE->nb_iogroups ) ; uiNbGroups++ ) { if(!stricmp(tTxtCombineDest,COMBINE->iogroups[uiNbGroups].name)) { //same class bCanCombine=true; } } } } } } } if(strstr(pcToken,"{")) { uiNbOpen++; } if(strstr(pcToken,"}")) { uiNbOpen--; } if(bCanCombine) { uiNbOpen=0; _pWithIO->ioflags|=IO_CAN_COMBINE; } else { _pWithIO->ioflags&=~IO_CAN_COMBINE; } if(!uiNbOpen) { break; } } } delete[] pCopyScript; delete[] pCopyOverScript; } } //----------------------------------------------------------------------------- void GetInfosCombine() { INTERACTIVE_OBJ * io = NULL; if (player.bag) for (int iNbBag=0; iNbBagsizey;j++) { for (long i=0;isizex;i++) { io=SecondaryInventory->slot[i][j].io; GetInfosCombineWithIO(io); } } } } //----------------------------------------------------------------------------- BOOL DANAE::ManageEditorControls() { float val = 0.f; EERIE_3D trans; eMouseState = MOUSE_IN_WORLD; if (TRUE_PLAYER_MOUSELOOK_ON && (pMenuConfig->bAutoReadyWeapon == false) && (pMenuConfig->bMouseLookToggle)) { float fX = DANAESIZX * 0.5f; float fY = DANAESIZY * 0.5f; ARX_CHECK_SHORT(fX); ARX_CHECK_SHORT(fY); DANAEMouse.x = ARX_CLEAN_WARN_CAST_SHORT(fX); DANAEMouse.y = ARX_CLEAN_WARN_CAST_SHORT(fY); } ///////////////////////////////////////////////////// // begining to count time for sliding interface if ((!PLAYER_INTERFACE_HIDE_COUNT) && (SMOOTHSLID==0)) { bool bOk = true; if (TRUE_PLAYER_MOUSELOOK_ON) { if (!(player.Interface & INTER_COMBATMODE) && (player.doingmagic!=2) && !InInventoryPos(&DANAEMouse)) { bOk = false; float t=(float)ARXTime; if (t-SLID_START>10000.f) { SLID_VALUE+=(float)Original_framedelay*DIV10; if (SLID_VALUE>100.f) SLID_VALUE=100.f; F2L(SLID_VALUE,&lSLID_VALUE); } else { bOk = true; } } } if (bOk) { SLID_VALUE-=(float)Original_framedelay*DIV10; if (SLID_VALUE<0.f) SLID_VALUE=0.f; F2L(SLID_VALUE,&lSLID_VALUE); } } // on ferme if ((player.Interface & INTER_COMBATMODE) || (player.doingmagic>=2)) { INTERACTIVE_OBJ * io = NULL; if (SecondaryInventory!=NULL) { io = (INTERACTIVE_OBJ *)SecondaryInventory->io; } else if (player.Interface & INTER_STEAL) { io = ioSteal; } if (io!=NULL) { InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } } if (SMOOTHSLID==1) { SLID_VALUE+=(float)Original_framedelay*DIV10; if (SLID_VALUE > 100.f) { SLID_VALUE = 100.f; SMOOTHSLID = 0; } F2L(SLID_VALUE,&lSLID_VALUE); } else if (SMOOTHSLID==-1) { SLID_VALUE-=(float)Original_framedelay*DIV10; if (SLID_VALUE < 0.f) { SLID_VALUE = 0.f; SMOOTHSLID = 0; } F2L(SLID_VALUE,&lSLID_VALUE); } if (CINEMA_INC==1) { CINEMA_DECAL+=(float)Original_framedelay*DIV10; if (CINEMA_DECAL > 100.f) { CINEMA_DECAL = 100.f; CINEMA_INC = 0; } } else if (CINEMA_INC==-1) { CINEMA_DECAL-=(float)Original_framedelay*DIV10; if (CINEMA_DECAL < 0.f) { CINEMA_DECAL = 0.f; CINEMA_INC = 0; } } ///////////////////////////////////////////////////// if (EERIEMouseButton & 1) { if ( !(LastMouseClick &1) ) { STARTDRAG.x=DANAEMouse.x; STARTDRAG.y=DANAEMouse.y; DRAGGING=0; if (pMenuConfig->bAutoReadyWeapon == false) { MouseDragX = 0; MouseDragY = 0; } } else { if ((abs(DANAEMouse.x-STARTDRAG.x)>2) && (abs(DANAEMouse.y-STARTDRAG.y)>2) || ((pMenuConfig->bAutoReadyWeapon == false) && ((abs(MouseDragX) > 2) || (abs(MouseDragY) > 2)))) { DRAGGING=1; } } } else { DRAGGING=0; } //------------------------------------------------------------------------- // interface //------------------------------------------------------------------------- // torch float px = 0; float py = 0; if (!BLOCK_PLAYER_CONTROLS) { if ((!(player.Interface & INTER_COMBATMODE))) { if (!TRUE_PLAYER_MOUSELOOK_ON) { px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(110); if (px < INTERFACE_RATIO(10)) px = INTERFACE_RATIO(10); py = DANAESIZY - INTERFACE_RATIO(158+32); if (CURRENT_TORCH != NULL) { if (MouseInRect(px,py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(64))) { eMouseState=MOUSE_IN_TORCH_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((LastMouseClick & 1) && (!(EERIEMouseButton & 1)) ) { INTERACTIVE_OBJ * temp = CURRENT_TORCH; if ((temp!=NULL) && temp->locname[0]) { if (((CURRENT_TORCH->ioflags & IO_ITEM) && CURRENT_TORCH->_itemdata->equipitem) && (player.Full_Skill_Object_Knowledge + player.Full_Attribute_Mind >= CURRENT_TORCH->_itemdata->equipitem->elements[IO_EQUIPITEM_ELEMENT_Identify_Value].value) ) { SendIOScriptEvent(FlyingOverIO,SM_IDENTIFY,""); } MakeLocalised(temp->locname,WILLADDSPEECH,256,-1); if (temp->ioflags & IO_GOLD) { _TCHAR UText[256]; _stprintf(UText, _T("%d %s"), temp->_itemdata->price, WILLADDSPEECH); _tcscpy(WILLADDSPEECH, UText); } if ((temp->poisonous>0) && (temp->poisonous_count!=0)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Poisoned]",Text,256,-1); _stprintf(UText, _T("%s (%s %d)"), WILLADDSPEECH, Text, (long)temp->poisonous); _tcscpy(WILLADDSPEECH, UText); } if ((temp->ioflags & IO_ITEM) && (temp->durability<100.f)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Durability]",Text,256,-1); _stprintf(UText, _T("%s %s %3.0f/%3.0f"), WILLADDSPEECH, Text, temp->durability,temp->max_durability); _tcscpy(WILLADDSPEECH, UText); } WILLADDSPEECHTIME = ARXTimeUL(); } } if ((EERIEMouseButton & 1) && (LastMouseClick &1)) { if ( (abs(DANAEMouse.x-STARTDRAG.x)>2) || (abs(DANAEMouse.y-STARTDRAG.y)>2) ) DRAGGING = 1; } if ((DRAGINTER == NULL) && (!PLAYER_MOUSELOOK_ON) && DRAGGING) { INTERACTIVE_OBJ * io=CURRENT_TORCH; CURRENT_TORCH->show=SHOW_FLAG_IN_SCENE; ARX_SOUND_PlaySFX(SND_TORCH_END); ARX_SOUND_Stop(SND_TORCH_LOOP); CURRENT_TORCH=NULL; SHOW_TORCH=0; DynLight[0].exist=0; Set_DragInter(io); DRAGINTER->ignition=1; } else { if ((EERIEMouseButton & 4) && (COMBINE == NULL)) { COMBINE = CURRENT_TORCH; } if (!(EERIEMouseButton & 2) && (LastMouseClick & 2)) { ARX_PLAYER_ClickedOnTorch(CURRENT_TORCH); EERIEMouseButton &= ~2; TRUE_PLAYER_MOUSELOOK_ON&=~1; } } } } // redist if ((player.Skill_Redistribute) || (player.Attribute_Redistribute)) { px = DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE + GL_DECAL_ICONS; py = DANAESIZY - INTERFACE_RATIO(218); if (MouseInRect(px, py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(32))) { eMouseState=MOUSE_IN_REDIST_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { ARX_INTERFACE_BookOpenClose(1); EERIEMouseButton &=~1; } return FALSE; } } // gold if (player.gold>0) { px = DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE + GL_DECAL_ICONS; py = DANAESIZY - INTERFACE_RATIO(183); if (MouseInRect(px,py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(32))) { eMouseState=MOUSE_IN_GOLD_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((player.gold > 0) && (!ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE)) && (COMBINE==NULL) && (!COMBINEGOLD)) { if (EERIEMouseButton & 4) COMBINEGOLD=1; } if (DRAGINTER == NULL) return FALSE; } } // book px = DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE + GL_DECAL_ICONS; py = DANAESIZY - INTERFACE_RATIO(148); if (MouseInRect(px, py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(32))) { eMouseState=MOUSE_IN_BOOK_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { ARX_INTERFACE_BookOpenClose(0); EERIEMouseButton &=~1; } return FALSE; } // inventaire px = DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE + GL_DECAL_ICONS; py = DANAESIZY - INTERFACE_RATIO(113); static float flDelay=0; if (MouseInRect(px, py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(32))||flDelay) { eMouseState=MOUSE_IN_INVENTORY_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if (EERIEMouseButton & 4) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); if (player.Interface | INTER_INVENTORYALL) { OptmizeInventory(0); OptmizeInventory(1); OptmizeInventory(2); } else { OptmizeInventory(sActiveInventory); } flDelay=0; EERIEMouseButton&=~4; } else if (((EERIEMouseButton & 1) && !(LastMouseClick & 1)) || flDelay) { if (!flDelay) { flDelay=ARX_TIME_Get(); return false; } else { if ((ARX_TIME_Get() - flDelay) < 300) { return false; } else { flDelay=0; } } if (player.Interface & INTER_INVENTORYALL) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); bInventoryClosing = true; } else { if (INTERNATIONAL_MODE) { bInverseInventory=!bInverseInventory; lOldTruePlayerMouseLook=TRUE_PLAYER_MOUSELOOK_ON; } else { InventoryOpenClose(0); } } EERIEMouseButton &=~1; } else if ((EERIEMouseButton & 2) && !(LastMouseClick & 2)) { ARX_INTERFACE_BookOpenClose(2); ARX_INVENTORY_OpenClose(NULL); if (player.Interface & INTER_INVENTORYALL) { bInventoryClosing = true; } else { if ((player.Interface & INTER_INVENTORY)) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); bInventoryClosing = true; bInventorySwitch = true; } else { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); player.Interface |= INTER_INVENTORYALL; float fInventoryY = INTERFACE_RATIO( 121.f ) * (player.bag); ARX_CHECK_LONG( fInventoryY ); InventoryY = ARX_CLEAN_WARN_CAST_LONG( fInventoryY ); ARX_INTERFACE_NoteClose(); if (TRUE_PLAYER_MOUSELOOK_ON) { WILLRETURNTOFREELOOK = 1; } } } EERIEMouseButton &= ~2; TRUE_PLAYER_MOUSELOOK_ON&=~1; } if (DRAGINTER == NULL) return FALSE; } } // steal if (player.Interface & INTER_STEAL) { px = ARX_CLEAN_WARN_CAST_FLOAT(-lSLID_VALUE); py = DANAESIZY - INTERFACE_RATIO(78 + 32); if (MouseInRect(px, py, px + INTERFACE_RATIO(32), py + INTERFACE_RATIO(32))) { eMouseState=MOUSE_IN_STEAL_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { ARX_INVENTORY_OpenClose(ioSteal); if (player.Interface&(INTER_INVENTORY | INTER_INVENTORYALL)) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); } if (SecondaryInventory != NULL) { SendIOScriptEvent(ioSteal, SM_STEAL,""); if (INTERNATIONAL_MODE) { bForceEscapeFreeLook=true; lOldTruePlayerMouseLook=!TRUE_PLAYER_MOUSELOOK_ON; } } EERIEMouseButton &=~1; } if (DRAGINTER == NULL) return FALSE; } } } } // gros player book if (player.Interface & INTER_MAP) { px = 97 * Xratio; py = 64 * Yratio; if (ITC.playerbook) { if (MouseInRect(px, py, px + ITC.playerbook->m_dwWidth * Xratio, py + ITC.playerbook->m_dwHeight * Yratio)) { eMouseState = MOUSE_IN_BOOK; } } } // gros book/note if (player.Interface & INTER_NOTE) { switch (Note.type) { case NOTE_TYPE_NOTE: NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\BigNote.bmp"); if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx=30.f; NoteTextMaxx=NoteTexture->m_dwWidth-40.f; NoteTextMiny=30.f; NoteTextMaxy=NoteTexture->m_dwHeight-40.f; } break; case NOTE_TYPE_NOTICE: NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Notice.bmp"); if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx=50.f; NoteTextMaxx=NoteTexture->m_dwWidth-50.f; NoteTextMiny=50.f; NoteTextMaxy=NoteTexture->m_dwHeight-50.f; } break; case NOTE_TYPE_BIGNOTE: case NOTE_TYPE_BOOK: if (Note.type ==NOTE_TYPE_BIGNOTE) { NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Very_BigNote.bmp"); NoteTextureLeft=MakeTCFromFile("Graph\\Interface\\book\\Left_corner.bmp"); NoteTextureRight=MakeTCFromFile("Graph\\Interface\\book\\Right_corner.bmp"); } else { NoteTexture=MakeTCFromFile("Graph\\Interface\\book\\Ingame_books.bmp"); NoteTextureLeft=MakeTCFromFile("Graph\\Interface\\book\\Left_corner.bmp"); NoteTextureRight=MakeTCFromFile("Graph\\Interface\\book\\Right_corner.bmp"); } if (NoteTexture) { NotePosX = 320-NoteTexture->m_dwWidth*DIV2; NotePosY=47.f; NoteTextMinx = 40.f; NoteTextMaxx = NoteTexture->m_dwWidth*DIV2-10.f; NoteTextMiny = 40.f; NoteTextMaxy = NoteTexture->m_dwHeight-30.f; } break; } px = NotePosX * Xratio; py = NotePosY * Yratio; if (NoteTexture) if (MouseInRect(px, py, px+NoteTexture->m_dwWidth * Xratio, py+NoteTexture->m_dwHeight * Yratio)) { eMouseState = MOUSE_IN_NOTE; return FALSE; } } if (!PLAYER_INTERFACE_HIDE_COUNT && (TSecondaryInventory!=NULL)) { px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(16); py = INTERFACE_RATIO_DWORD(BasicInventorySkin->m_dwHeight) - INTERFACE_RATIO(16); INTERACTIVE_OBJ * temp=(INTERACTIVE_OBJ *)TSecondaryInventory->io; if (temp && !(temp->ioflags & IO_SHOP) && !(temp == ioSteal)) { if (MouseInRect(px,py, px + INTERFACE_RATIO(16), py + INTERFACE_RATIO(16))) { eMouseState = MOUSE_IN_INVENTORY_PICKALL_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { if (TSecondaryInventory) { // play un son que si un item est pris ARX_INVENTORY_TakeAllFromSecondaryInventory(); } EERIEMouseButton &=~1; } if (DRAGINTER == NULL) return FALSE; } } //py = 20; px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO_DWORD(BasicInventorySkin->m_dwWidth) - INTERFACE_RATIO(32); if (MouseInRect(px,py, px + INTERFACE_RATIO(16), py + INTERFACE_RATIO(16))) { eMouseState = MOUSE_IN_INVENTORY_CLOSE_ICON; SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { INTERACTIVE_OBJ * io = NULL; if (SecondaryInventory!=NULL) { io = (INTERACTIVE_OBJ *)SecondaryInventory->io; } else if (player.Interface & INTER_STEAL) { io = ioSteal; } if (io!=NULL) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } EERIEMouseButton &=~1; } if (DRAGINTER == NULL) return FALSE; } } //------------------------------------------------------------------------- // Single Click On Object if ( ( LastMouseClick & 1 ) && ( !( EERIEMouseButton & 1 ) ) ) { if ( FlyingOverIO && ( !DRAGINTER ) ) { SendIOScriptEvent( FlyingOverIO, SM_CLICKED, "" ); bool bOk = true; if ( SecondaryInventory != NULL ) { INTERACTIVE_OBJ * temp = (INTERACTIVE_OBJ *)SecondaryInventory->io; if (IsInSecondaryInventory(FlyingOverIO)) if ( temp->ioflags & IO_SHOP ) bOk = false; } if ( !( FlyingOverIO->ioflags & IO_MOVABLE ) ) if ( ( FlyingOverIO->ioflags & IO_ITEM ) && bOk ) { if ( ARX_IMPULSE_Pressed( CONTROLS_CUST_STEALTHMODE ) ) { if ( !InPlayerInventoryPos( &DANAEMouse ) && !ARX_INTERFACE_MouseInBook() ) { long sx, sy; bool bSecondary = false; sx = sy = 0 ; if ( TSecondaryInventory && IsInSecondaryInventory( FlyingOverIO ) ) { if ( SecondaryInventory ) { bool bfound = true; for ( long j = 0 ; j < SecondaryInventory->sizey && bfound ; j++ ) { for ( long i = 0 ; i < SecondaryInventory->sizex && bfound ; i++ ) { if ( SecondaryInventory->slot[i][j].io == FlyingOverIO ) { sx = i; sy = j; bfound = false; } } } if (bfound) ARX_CHECK_NO_ENTRY(); } bSecondary = true; } RemoveFromAllInventories( FlyingOverIO ); FlyingOverIO->show = SHOW_FLAG_IN_INVENTORY; if ( FlyingOverIO->ioflags & IO_GOLD ) { ARX_SOUND_PlayInterface( SND_GOLD ); } ARX_SOUND_PlayInterface( SND_INVSTD ); if ( !CanBePutInInventory( FlyingOverIO ) ) { if ( TSecondaryInventory && bSecondary ) { extern short sInventory, sInventoryX, sInventoryY; sInventory = 2; ARX_CHECK_SHORT(sx); ARX_CHECK_SHORT(sy); sInventoryX = ARX_CLEAN_WARN_CAST_SHORT(sx); sInventoryY = ARX_CLEAN_WARN_CAST_SHORT(sy); CanBePutInSecondaryInventory( TSecondaryInventory, FlyingOverIO, &sx, &sy ); } if ( !bSecondary ) { FlyingOverIO->show = SHOW_FLAG_IN_SCENE; } } if (DRAGINTER == FlyingOverIO) { DRAGINTER = NULL; } FlyingOverIO = NULL; } } } } } if (!(player.Interface & INTER_COMBATMODE)) { // Dropping an Interactive Object that has been dragged if ((!(EERIEMouseButton & 1)) && (LastMouseClick & 1) && (DRAGINTER!=NULL)) { //if (ARX_EQUIPMENT_PutOnPlayer(DRAGINTER)) if (InInventoryPos(&DANAEMouse)) // Attempts to put it in inventory { if (!PutInInventory()) { } } else if (eMouseState == MOUSE_IN_INVENTORY_ICON) { if (!PutInInventory()) { } } else if (ARX_INTERFACE_MouseInBook()) { if (Book_Mode == 0) { SendIOScriptEvent(DRAGINTER,SM_INVENTORYUSE,""); COMBINE=NULL; } } else if (DRAGINTER->ioflags & IO_GOLD) { ARX_PLAYER_AddGold(DRAGINTER->_itemdata->price); ARX_SOUND_PlayInterface(SND_GOLD); if (DRAGINTER->scriptload) { RemoveFromAllInventories(DRAGINTER); ReleaseInter(DRAGINTER); } else { DRAGINTER->show=SHOW_FLAG_IN_INVENTORY; DRAGINTER->GameFlags&=~GFLAG_ISINTREATZONE; } Set_DragInter(NULL); } else if (DRAGINTER!=NULL) { if (!EDITMODE) // test for NPC & FIX { if ((DRAGINTER->ioflags & IO_NPC) || (DRAGINTER->ioflags & IO_FIX) ) { Set_DragInter(NULL); goto suivant2; } } if (!((DRAGINTER->ioflags & IO_ITEM) && (DRAGINTER->_itemdata->count > 1))) if ((DRAGINTER->obj) && (DRAGINTER->obj->pbox)) { if ( (!InInventoryPos(&DANAEMouse))) //Put object in fromt of player { if (ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK) goto suivant2; long res=Manage3DCursor(0); if (res==0) // Throw Object { INTERACTIVE_OBJ * io=DRAGINTER; ARX_PLAYER_Remove_Invisibility(); io->obj->pbox->active=1; io->obj->pbox->stopcount=0; float vx=-((float)DANAEMouse.x-(float)subj.centerx); vx/=3.f; EERIE_3D pos; pos.x = io->pos.x = player.pos.x; pos.z = io->pos.z = player.pos.z; pos.y=io->pos.y=player.pos.y+80.f; io->velocity.x=0.f; io->velocity.y=0.f; io->velocity.z=0.f; io->stopped=1; float y_ratio=(float)((float)DANAEMouse.y-(float)DANAECENTERY)/(float)DANAESIZY*2; float x_ratio=-(float)((float)DANAEMouse.x-(float)DANAECENTERX)/(float)DANAECENTERX; EERIE_3D viewvector; viewvector.x=-(float)EEsin(DEG2RAD(player.angle.b+(x_ratio*30.f)))*EEcos(DEG2RAD(player.angle.a)); viewvector.y = EEsin(DEG2RAD(player.angle.a)) + y_ratio; viewvector.z= (float)EEcos(DEG2RAD(player.angle.b+(x_ratio*30.f)))*EEcos(DEG2RAD(player.angle.a)); io->soundtime=0; io->soundcount=0; EERIE_PHYSICS_BOX_Launch(io->obj,&pos,&viewvector); ARX_SOUND_PlaySFX(SND_WHOOSH, &pos); io->show=SHOW_FLAG_IN_SCENE; Set_DragInter(NULL); } } } suivant2: ; } } if (COMBINE) { if ((!CURRENT_TORCH) || (CURRENT_TORCH && (COMBINE != CURRENT_TORCH))) { EERIE_3D pos; if (GetItemWorldPosition(COMBINE,&pos)) { if (EEDistance3D(&pos,&player.pos)>300.f) COMBINE=NULL; } else COMBINE=NULL; } } if ((EERIEMouseButton & 1) && !(LastMouseClick & 1) && ((COMBINE !=NULL) || COMBINEGOLD)) { ReleaseInfosCombine(); INTERACTIVE_OBJ * io; if ((io=FlyingOverIO)!=NULL) { if (COMBINEGOLD) { char temp[256]; strcpy(temp,"GOLD_COIN"); SendIOScriptEvent(io,SM_COMBINE,temp); } else { if (io!=COMBINE) { char temp[256]; char temp2[256]; sprintf(temp,COMBINE->filename); strcpy(temp2,GetName(temp)); sprintf(temp,"%s_%04d",temp2,COMBINE->ident); MakeUpcase(temp); EVENT_SENDER=COMBINE; if (!specialstrcmp(temp2,"KEYRING")) ARX_KEYRING_Combine(io); else SendIOScriptEvent(io,SM_COMBINE,temp); } } } else // GLights { float fMaxdist = 300; if (Project.telekinesis) fMaxdist = 850; for (long i=0;iexist) && (EEDistance3D(&GLight[i]->pos, &player.pos) <= fMaxdist) && (!(GLight[i]->extras & EXTRAS_NO_IGNIT))) { if (MouseInRect(GLight[i]->mins.x, GLight[i]->mins.y, GLight[i]->maxs.x, GLight[i]->maxs.y)) { if (COMBINE->ioflags & IO_ITEM) { if ((COMBINE == CURRENT_TORCH) || (COMBINE->_itemdata->LightValue == 1)) { if (GLight[i]->status != 1) { GLight[i]->status = 1; ARX_SOUND_PlaySFX(SND_TORCH_START, &GLight[i]->pos); } } if (COMBINE->_itemdata->LightValue == 0) { if (GLight[i]->status != 0) { GLight[i]->status = 0; ARX_SOUND_PlaySFX(SND_TORCH_END, &GLight[i]->pos); SendIOScriptEvent(COMBINE, SM_CUSTOM, "DOUSE"); } } } } } } } COMBINEGOLD=0; bool bQuitCombine = true; if ((player.Interface & INTER_INVENTORY)) { if (player.bag) { float fCenterX = DANAECENTERX + INTERFACE_RATIO(-320 + 35) + INTERFACE_RATIO_DWORD(ITC.hero_inventory->m_dwWidth) - INTERFACE_RATIO(32 + 3) ; float fSizY = DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + INTERFACE_RATIO(- 3 + 25) ; float posx = ARX_CAST_TO_INT_THEN_FLOAT( fCenterX ); float posy = ARX_CAST_TO_INT_THEN_FLOAT( fSizY ); if (sActiveInventory > 0) { if (MouseInRect(posx, posy, posx+INTERFACE_RATIO(32), posy+INTERFACE_RATIO(32))) bQuitCombine = false; } if (sActiveInventory < player.bag-1) { float fRatio = INTERFACE_RATIO(32 + 5) ; ARX_CHECK_INT(posy + fRatio); posy += ARX_CLEAN_WARN_CAST_INT(fRatio); if (MouseInRect(posx, posy, posx+INTERFACE_RATIO(32), posy+INTERFACE_RATIO(32))) bQuitCombine = false; } } } if (bQuitCombine) { COMBINE=NULL; EERIEMouseButton &= ~1; } } //lights if (COMBINE) { float fMaxdist = 300; if (Project.telekinesis) fMaxdist = 850; for (long i=0;iexist) && (EEDistance3D(&GLight[i]->pos, &player.pos) <= fMaxdist) && (!(GLight[i]->extras & EXTRAS_NO_IGNIT))) { if (MouseInRect(GLight[i]->mins.x, GLight[i]->mins.y, GLight[i]->maxs.x, GLight[i]->maxs.y)) { SpecialCursor = CURSOR_INTERACTION_ON; } } } } // Double Clicked and not already combining. if ((EERIEMouseButton & 4) && (COMBINE==NULL)) { long accept_combine=1; if ((SecondaryInventory!=NULL) && (InSecondaryInventoryPos(&DANAEMouse))) { INTERACTIVE_OBJ * io=(INTERACTIVE_OBJ *)SecondaryInventory->io; if (io->ioflags & IO_SHOP) accept_combine=0; } if (accept_combine) { if ((FlyingOverIO) && ( (FlyingOverIO->ioflags & IO_ITEM) && !(FlyingOverIO->ioflags & IO_MOVABLE))) { COMBINE=FlyingOverIO; GetInfosCombine(); EERIEMouseButton&=~4; } else if (InInventoryPos(&DANAEMouse)) EERIEMouseButton&=4; } } // Checks for Object Dragging if (!EDITMODE) if (( DRAGGING && !PLAYER_MOUSELOOK_ON && (!ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE)) && (DRAGINTER==NULL) ) || // mode system shock ( DRAGGING && (pMenuConfig->bAutoReadyWeapon == false) && (!ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE)) && (DRAGINTER==NULL)) ) { if ( !TakeFromInventory(&STARTDRAG)) { bool bOk = false; INTERACTIVE_OBJ *io = InterClick(&STARTDRAG); if (io && !BLOCK_PLAYER_CONTROLS) { if (ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK) { if (io->show == SHOW_FLAG_ON_PLAYER) bOk = true; } else { bOk = true; } } if (bOk) { Set_DragInter(io); if (io!=NULL) { ARX_PLAYER_Remove_Invisibility(); if (DRAGINTER->show==SHOW_FLAG_ON_PLAYER) { ARX_EQUIPMENT_UnEquip(inter.iobj[0],DRAGINTER); RemoveFromAllInventories(DRAGINTER); DRAGINTER->bbox2.x=-1; } if (!EDITMODE) { if ((io->ioflags & IO_NPC) || (io->ioflags & IO_FIX)) { Set_DragInter(NULL); goto suivant; } } if (io->ioflags & IO_UNDERWATER) { io->ioflags&=~IO_UNDERWATER; ARX_SOUND_PlayInterface(SND_PLOUF, 0.8F + 0.4F * rnd()); } DRAGINTER->show=SHOW_FLAG_NOT_DRAWN; ARX_SOUND_PlayInterface(SND_INVSTD); } } else Set_DragInter(NULL); suivant: ; } else ARX_PLAYER_Remove_Invisibility(); } } // Load Level Command if (((EDITMODE)&&((this->kbd.inkey[INKEY_L]) && ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])))) || WILLLOADLEVEL) { char loadfrom[512]; if (WILLLOADLEVEL != 2 ) { CheckIO_NOT_SAVED(); ADDED_IO_NOT_SAVED=0; WILLLOADLEVEL=0; if (OKBox("Erase Current Level ?","Load Level...")) { strcpy(loadfrom, ""); if (HERMESFileSelectorOpen(loadfrom,"Load Danae Level","Danae Level File (*.DLF)\0*.DLF\0\0",this->m_hWnd)) { char pp[256]; strcpy(pp,GetName(loadfrom)); LoadLevelScreen(GDevice,GetLevelNumByName(pp)); Pause(TRUE); if (CDP_LIGHTOptions!=NULL) SendMessage(CDP_LIGHTOptions,WM_CLOSE,0,0); if (CDP_FogOptions!=NULL) SendMessage(CDP_FogOptions,WM_CLOSE,0,0); CDP_LIGHTOptions=NULL; CDP_FogOptions=NULL; SetEditMode(1); DanaeClearLevel(); PROGRESS_BAR_TOTAL = 108; OLD_PROGRESS_BAR_COUNT=PROGRESS_BAR_COUNT=0; LoadLevelScreen(); DanaeLoadLevel(m_pd3dDevice,loadfrom); FORBID_SAVE=0; FirstFrame=1; this->kbd.inkey[INKEY_L]=0; this->kbd.inkey[INKEY_LEFTSHIFT]=0; this->kbd.inkey[INKEY_RIGHTSHIFT]=0; Pause(FALSE); return TRUE; } } } this->kbd.inkey[INKEY_L]=0; this->kbd.inkey[INKEY_LEFTSHIFT]=0; this->kbd.inkey[INKEY_RIGHTSHIFT]=0; } // Save Level Command if (EDITMODE) if ((this->kbd.inkey[INKEY_S]) && ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) || WILLSAVELEVEL) { WILLSAVELEVEL=0; if (FORBID_SAVE) ShowPopup("You can't Save Editor Level While a Game is in progress. Please reload an Editor Level to be able to save."); else if (OKBox("Save Current Level ?", "Save Level...")) { char saveto[512]; strcpy(saveto, ""); Pause(TRUE); HERMESFileSelectorSave(saveto,"Save Danae Level","Danae Level File (*.DLF)\0*.DLF\0\0",this->m_hWnd); DanaeSaveLevel(saveto); Pause(FALSE); } this->kbd.inkey[INKEY_S]=0; this->kbd.inkey[INKEY_LEFTSHIFT]=0; this->kbd.inkey[INKEY_RIGHTSHIFT]=0; } // PATHWAYS edition Sub-Commands if (EDITION==EDITION_PATHWAYS) { val=10.f; if (EERIEMouseButton & 1) { if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_COMMAND,MAKEWPARAM(IDAPPLY,0),0); ARX_PATHS_SelectedAP=NULL; ARX_PATHS_SelectedNum=-1; if ((ARX_PATHS_FlyingOverAP!=NULL) && (ARX_PATHS_FlyingOverNum!=-1)) { ARX_PATHS_SelectedAP=ARX_PATHS_FlyingOverAP; ARX_PATHS_SelectedNum=ARX_PATHS_FlyingOverNum; if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_INITDIALOG,0,0); } } if (this->kbd.inkey[INKEY_PAD8]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=-(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(player.angle.b))*val; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PAD8]=0; } if (this->kbd.inkey[INKEY_PAD2]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=-(float)EEcos(DEG2RAD(player.angle.b))*val; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=0.f; trans.y=-val; trans.z=0.f; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { trans.x=0.f; trans.y=val; trans.z=0.f; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum,ARX_PATHS_HIERARCHYMOVE | ARX_PATH_MOD_TRANSLATE,&trans,0,0); } this->kbd.inkey[INKEY_PADMINUS]=0; } if (this->kbd.inkey[INKEY_PADDIVIDE]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { ARX_PATHS_SelectedNum--; if (ARX_PATHS_SelectedNum<1) ARX_PATHS_SelectedNum=ARX_PATHS_SelectedAP->nb_pathways; if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_INITDIALOG,0,0); } this->kbd.inkey[INKEY_PADDIVIDE]=0; } if (this->kbd.inkey[INKEY_PADMULTIPLY]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { ARX_PATHS_SelectedNum++; if (ARX_PATHS_SelectedNum>ARX_PATHS_SelectedAP->nb_pathways) ARX_PATHS_SelectedNum=1; if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_INITDIALOG,0,0); } this->kbd.inkey[INKEY_PADMULTIPLY]=0; } if (this->kbd.inkey[INKEY_RETURN]) { if (danaeApp.m_pFramework->m_bIsFullscreen) { ARX_TIME_Pause(); Pause(TRUE); DialogBox( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_PATHWAYDLG), this->m_hWnd, PathwayOptionsProc); Pause(FALSE); ARX_TIME_UnPause(); } else CDP_PATHWAYS_Options=(CreateDialogParam( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_PATHWAYDLG), this->m_hWnd, PathwayOptionsProc,0 )); this->kbd.inkey[INKEY_RETURN]=0; } if (this->kbd.inkey[INKEY_N]) { EERIE_3D pos; pos.x=player.pos.x-(float)EEsin(DEG2RAD(player.angle.b))*150.f; pos.z=player.pos.z+(float)EEcos(DEG2RAD(player.angle.b))*150.f; pos.y=player.pos.y+80.f; if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_COMMAND,MAKEWPARAM(IDAPPLY,0),0); ARX_PATHS_SelectedAP=ARX_PATHS_AddNew(&pos); ARX_PATHS_SelectedNum=1; if (CDP_PATHWAYS_Options) SendMessage(CDP_PATHWAYS_Options,WM_INITDIALOG,0,0); this->kbd.inkey[INKEY_N]=0; } if (this->kbd.inkey[INKEY_DEL]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) ARX_PATHS_DeletePathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum); this->kbd.inkey[INKEY_DEL]=0; } if (this->kbd.inkey[INKEY_SPACE]) { if ((ARX_PATHS_SelectedAP!=NULL) && (ARX_PATHS_SelectedNum!=-1)) { long v=ARX_PATHS_AddPathWay(ARX_PATHS_SelectedAP,ARX_PATHS_SelectedNum); EERIE_3D pos; if (v<=2) { pos.x=-(float)EEsin(DEG2RAD(player.angle.b))*100.f; pos.z=+(float)EEcos(DEG2RAD(player.angle.b))*100.f; } else { pos.x=ARX_PATHS_SelectedAP->pathways[v-2].rpos.x-(float)EEsin(DEG2RAD(player.angle.b))*100.f; pos.z=ARX_PATHS_SelectedAP->pathways[v-2].rpos.z+(float)EEcos(DEG2RAD(player.angle.b))*100.f; } if (v-1>=0) { pos.y=ARX_PATHS_SelectedAP->pathways[v-1].rpos.y; } else pos.y=0.f; ARX_PATHS_SelectedNum=v; ARX_PATHS_ModifyPathWay(ARX_PATHS_SelectedAP,v,ARX_PATH_MOD_ALL,&pos,0,2000); } this->kbd.inkey[INKEY_SPACE]=0; } } // LightSources Edition Key/Mouse Management ------------------------------- if (EDITION == EDITION_LIGHTS) { if (EERIEMouseButton & 1) { PrecalcIOLighting(NULL,0,1); for (long i=0;iexist) { if ( (DANAEMouse.x>=GLight[i]->mins.x) && (DANAEMouse.x<=GLight[i]->maxs.x) && (DANAEMouse.y>=GLight[i]->mins.y) && (DANAEMouse.y<=GLight[i]->maxs.y) ) { if ((CONSTANTUPDATELIGHT) && (CDP_LIGHTOptions) && CDP_EditLight) { SendMessage(CDP_LIGHTOptions,WM_COMMAND,IDAPPLY,0); } EERIE_LIGHT_UnselectAll(); GLight[i]->selected=1; LastSelectedLight=i; if (CDP_LIGHTOptions) { memcpy(&lightparam,GLight[LastSelectedLight],sizeof(EERIE_LIGHT)); CDP_EditLight=GLight[LastSelectedLight]; SendMessage(CDP_LIGHTOptions,WM_INITDIALOG,0,0); } EERIEMouseButton &=~1; } } } } if (this->kbd.inkey[INKEY_DEL]) { PrecalcIOLighting(NULL,0,1); if ( (this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) { if (OKBox("Destroy ALL Lights from this level ???","GAIA Popup")) { if (CDP_LIGHTOptions) { SendMessage(CDP_LIGHTOptions,WM_CLOSE,0,0); CDP_LIGHTOptions=NULL; } EERIE_LIGHT_ClearAll(); } this->kbd.inkey[INKEY_LEFTSHIFT]=0; this->kbd.inkey[INKEY_RIGHTSHIFT]=0; } else if (OKBox("Destroy Selected Light ?","GAIA Popup")) { if (CDP_LIGHTOptions) { SendMessage(CDP_LIGHTOptions,WM_CLOSE,0,0); CDP_LIGHTOptions=NULL; } EERIE_LIGHT_ClearSelected(); LastSelectedLight=-1; RecalcLightZone(player.pos.x,player.pos.y,player.pos.z,12); } this->kbd.inkey[INKEY_DEL]=0; } val=10.f; if ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) val=2.f; if (this->kbd.inkey[INKEY_RETURN]) { PrecalcIOLighting(NULL,0,1); launchlightdialog(); this->kbd.inkey[INKEY_RETURN]=0; } if (this->kbd.inkey[INKEY_SPACE]) { PrecalcIOLighting(NULL,0,1); if ((CONSTANTUPDATELIGHT) && (CDP_LIGHTOptions) && CDP_EditLight) { SendMessage(CDP_LIGHTOptions,WM_COMMAND,IDAPPLY,0); } long num = EERIE_LIGHT_Create(); if (num != -1) { GLight[num]->exist = 1; GLight[num]->fallend = 600.f; GLight[num]->fallstart = 400.f; GLight[num]->intensity = 1.2f; GLight[num]->maxs.x = -1; GLight[num]->mins.x = -1; GLight[num]->pos.x = player.pos.x - (float)EEsin(DEG2RAD(player.angle.b)) * 150.f; GLight[num]->pos.z = player.pos.z + (float)EEcos(DEG2RAD(player.angle.b)) * 150.f; GLight[num]->pos.y = player.pos.y + 80.f; GLight[num]->rgb.r = 1.f; GLight[num]->rgb.g = 0.f; GLight[num]->rgb.b = 0.f; GLight[num]->selected = 1; GLight[num]->extras |= EXTRAS_NOCASTED; GLight[num]->tl = -1; GLight[num]->status = 1; EERIE_LIGHT_UnselectAll(); LastSelectedLight = num; if (CDP_LIGHTOptions) { memcpy(&lightparam,GLight[LastSelectedLight],sizeof(EERIE_LIGHT)); CDP_EditLight=GLight[LastSelectedLight]; SendMessage(CDP_LIGHTOptions,WM_INITDIALOG,0,0); } GLight[num]->treat = 1; RecalcLightZone(GLight[LastSelectedLight]->pos.x,GLight[LastSelectedLight]->pos.y,GLight[LastSelectedLight]->pos.z,(long)(GLight[LastSelectedLight]->fallend*ACTIVEBKG->Xmul)+1); } this->kbd.inkey[INKEY_SPACE]=0; } if (this->kbd.inkey[INKEY_PAD8]) { PrecalcIOLighting(NULL,0,1); trans.x=-(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(player.angle.b))*val; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD8]=0; } if (this->kbd.inkey[INKEY_PAD2]) { PrecalcIOLighting(NULL,0,1); trans.x=(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=-(float)EEcos(DEG2RAD(player.angle.b))*val; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { PrecalcIOLighting(NULL,0,1); trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { PrecalcIOLighting(NULL,0,1); trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { PrecalcIOLighting(NULL,0,1); trans.x = 0.f; trans.y = -val; trans.z = 0.f; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { PrecalcIOLighting(NULL,0,1); trans.x = 0.f; trans.y = val; trans.z = 0.f; EERIE_LIGHT_TranslateSelected(&trans); this->kbd.inkey[INKEY_PADMINUS]=0; } } // Particles Edition Key/Mouse Management ------------------------------- if ((EDITION==EDITION_PARTICLES) && EDITMODE) { if (EERIEMouseButton & 1) { } if (this->kbd.inkey[INKEY_DEL]) { if (OKBox("Destroy Selected Particle ?","GAIA Popup")) { } this->kbd.inkey[INKEY_DEL]=0; } val=10.f; if ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) val=2.f; if (this->kbd.inkey[INKEY_RETURN]) { // Launch Particle Dialog this->kbd.inkey[INKEY_RETURN]=0; } if (this->kbd.inkey[INKEY_SPACE]) { // Create a Particle FX this->kbd.inkey[INKEY_SPACE]=0; } if (this->kbd.inkey[INKEY_PAD8]) { // Translate FRONT trans.x=-(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(player.angle.b))*val; this->kbd.inkey[INKEY_PAD8]=0; } if (this->kbd.inkey[INKEY_PAD2]) { // translate BACK trans.x=(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=-(float)EEcos(DEG2RAD(player.angle.b))*val; this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { // translate RIGHT trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { // translate LEFT trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { // translate UP trans.x = 0.f; trans.y = -val; trans.z = 0.f; this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { // translate DOWN trans.x = 0.f; trans.y = val; trans.z = 0.f; this->kbd.inkey[INKEY_PADMINUS]=0; } } // NODES Edition Key/Mouse Management ------------------------------- if ((EDITION==EDITION_NODES) && (EDITMODE)) { if (EERIEMouseButton & 1) { for (long i=0;i=nodes.nodes[i].bboxmin.x) && (DANAEMouse.x<=nodes.nodes[i].bboxmax.x) && (DANAEMouse.y>=nodes.nodes[i].bboxmin.y) && (DANAEMouse.y<=nodes.nodes[i].bboxmax.y) ) { UnselectAllNodes(); SelectNode(i); LastSelectedNode=i; EERIEMouseButton &=~1; } } } } if (!(this->kbd.inkey[INKEY_LEFTSHIFT]) && !(this->kbd.inkey[INKEY_RIGHTSHIFT])) if ((this->kbd.inkey[INKEY_L]) && (LastSelectedNode!=-1)) { for (long i=0;i=nodes.nodes[i].bboxmin.x) && (DANAEMouse.x<=nodes.nodes[i].bboxmax.x) && (DANAEMouse.y>=nodes.nodes[i].bboxmin.y) && (DANAEMouse.y<=nodes.nodes[i].bboxmax.y) ) { LinkNodeToNode(i,LastSelectedNode); } } } this->kbd.inkey[INKEY_L]=0; } if ((this->kbd.inkey[INKEY_U]) && (LastSelectedNode!=-1)) { for (long i=0;i=nodes.nodes[i].bboxmin.x) && (DANAEMouse.x<=nodes.nodes[i].bboxmax.x) && (DANAEMouse.y>=nodes.nodes[i].bboxmin.y) && (DANAEMouse.y<=nodes.nodes[i].bboxmax.y) ) { UnLinkNodeFromNode(i,LastSelectedNode); } } } this->kbd.inkey[INKEY_U]=0; } float val=10.f; if ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) { val=1.f; } if (this->kbd.inkey[INKEY_RETURN]) { for (long i=0;ikbd.inkey[INKEY_RETURN]=0; } if (this->kbd.inkey[INKEY_N]) { long n=GetFreeNode(); if (n!=-1) { ClearNode(n,0); nodes.nodes[n].exist=1; nodes.nodes[n].pos.x=player.pos.x-(float)EEsin(DEG2RAD(player.angle.b))*150.f; nodes.nodes[n].pos.z=player.pos.z+(float)EEcos(DEG2RAD(player.angle.b))*150.f; nodes.nodes[n].pos.y=player.pos.y+80.f; MakeNodeName(n); UnselectAllNodes(); SelectNode(n); LastSelectedNode=n; EERIEPOLY * ep=CheckInPoly(nodes.nodes[n].pos.x,nodes.nodes[n].pos.y+PLAYER_BASE_HEIGHT,nodes.nodes[n].pos.z); if (ep!=NULL) { float tempo; if (GetTruePolyY(ep,&nodes.nodes[n].pos,&tempo)) nodes.nodes[n].pos.y=tempo-80.f; } } this->kbd.inkey[INKEY_N]=0; } if (this->kbd.inkey[INKEY_DEL]) { ClearSelectedNodes(); this->kbd.inkey[INKEY_DEL]=0; } if (this->kbd.inkey[INKEY_PAD8]) { float ag=GetNearestSnappedAngle(player.angle.b); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PAD8]=0; } if (this->kbd.inkey[INKEY_PAD2]) { float ag=GetNearestSnappedAngle(player.angle.b); ag=DEG2RAD(ag); trans.x=(float)EEsin(ag)*val; trans.y=0.f; trans.z=-(float)EEcos(ag)*val; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { float ag=GetNearestSnappedAngle(MAKEANGLE(player.angle.b-90.f)); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { float ag=GetNearestSnappedAngle(MAKEANGLE(player.angle.b+90.f)); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { trans.x=0.f; trans.y=-val; trans.z=0.f; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { trans.x=0.f; trans.y=val; trans.z=0.f; TranslateSelectedNodes(&trans); this->kbd.inkey[INKEY_PADMINUS]=0; } } // Fog Key/Mouse Management ------------------------------- if ((EDITION==EDITION_FOGS) && (EDITMODE)) { if (EERIEMouseButton & 1) { for (long i=0;i=fogs[i].bboxmin.x) && (DANAEMouse.x<=fogs[i].bboxmax.x) && (DANAEMouse.y>=fogs[i].bboxmin.y) && (DANAEMouse.y<=fogs[i].bboxmax.y) ) { ARX_FOGS_UnselectAll(); ARX_FOGS_Select(i); LastSelectedFog=i; if (CDP_FogOptions) { memcpy(&fogparam,&fogs[LastSelectedFog],sizeof(FOG_DEF)); CDP_EditFog=&fogs[LastSelectedFog]; SendMessage(CDP_FogOptions,WM_INITDIALOG,0,0); } EERIEMouseButton &=~1; } } } } if ( !( this->kbd.inkey[INKEY_LEFTSHIFT] ) && !( this->kbd.inkey[INKEY_RIGHTSHIFT] ) ) { val=10.f; } if ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) { val=1.f; if ((LastSelectedFog!=-1) && (fogs[LastSelectedFog].special & FOG_DIRECTIONAL) && ((EERIEMouseXdep) || (EERIEMouseYdep))) { fogs[LastSelectedFog].angle.a+=EERIEMouseYdep; fogs[LastSelectedFog].angle.b+=EERIEMouseXdep; fogs[LastSelectedFog].move.x=1.f; fogs[LastSelectedFog].move.y=0.f; fogs[LastSelectedFog].move.z=0.f; EERIE_3D out; _YRotatePoint(&fogs[LastSelectedFog].move,&out,EEcos(DEG2RAD(MAKEANGLE(fogs[LastSelectedFog].angle.b))),EEsin(DEG2RAD(MAKEANGLE(fogs[LastSelectedFog].angle.b)))); _XRotatePoint(&out,&fogs[LastSelectedFog].move,EEcos(DEG2RAD(MAKEANGLE(fogs[LastSelectedFog].angle.a))),EEsin(DEG2RAD(MAKEANGLE(fogs[LastSelectedFog].angle.a)))); } } if (this->kbd.inkey[INKEY_RETURN]) { if ((LastSelectedFog>-1) && (!CDP_FogOptions)) { memcpy(&fogparam,&fogs[LastSelectedFog],sizeof(FOG_DEF)); CDP_EditFog=&fogs[LastSelectedFog]; if (danaeApp.m_pFramework->m_bIsFullscreen) { ARX_TIME_Pause(); Pause(TRUE); DialogBox( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_FOGDIALOG), this->m_hWnd, FogOptionsProc); Pause(FALSE); ARX_TIME_UnPause(); } else CDP_FogOptions=(CreateDialogParam( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_FOGDIALOG), this->m_hWnd, FogOptionsProc,0 )); } this->kbd.inkey[INKEY_RETURN]=0; } if (this->kbd.inkey[INKEY_SPACE]) { long n=ARX_FOGS_GetFree(); if (n!=-1) { fogs[n].exist=1; ARX_FOGS_UnselectAll(); ARX_FOGS_Select(n); LastSelectedFog=n; fogs[n].pos.x=player.pos.x-(float)EEsin(DEG2RAD(player.angle.b))*150.f; fogs[n].pos.z=player.pos.z+(float)EEcos(DEG2RAD(player.angle.b))*150.f; fogs[n].pos.y=player.pos.y+80.f; EERIEPOLY * ep=CheckInPoly(fogs[n].pos.x,fogs[n].pos.y+PLAYER_BASE_HEIGHT,fogs[n].pos.z); if (ep!=NULL) { float tempo; if (GetTruePolyY(ep,&fogs[n].pos,&tempo)) fogs[n].pos.y=tempo-80.f; } fogs[n].special=0; fogs[n].frequency=17.f; fogs[n].speed=1.f; fogs[n].move.x=1.f; fogs[n].move.y=0.f; fogs[n].move.z=0.f; fogs[n].rgb.r=0.3f; fogs[n].rgb.g=0.3f; fogs[n].rgb.b=0.5f; fogs[n].size=80.f; fogs[n].tolive=4500; fogs[n].scale=8.f; fogs[n].blend=0; fogs[n].angle.a=0.f; fogs[n].angle.b=0.f; fogs[n].rotatespeed=0.001f; if (CDP_FogOptions) { memcpy(&fogparam,&fogs[LastSelectedFog],sizeof(FOG_DEF)); CDP_EditFog=&fogs[LastSelectedFog]; SendMessage(CDP_FogOptions,WM_INITDIALOG,0,0); } } this->kbd.inkey[INKEY_SPACE]=0; } if (this->kbd.inkey[INKEY_DEL]) { if (OKBox("Destroy Selected Fog ?","GAIA Popup")) { if (CDP_FogOptions) { SendMessage(CDP_FogOptions,WM_CLOSE,0,0); CDP_FogOptions=NULL; } ARX_FOGS_KillSelected(); } this->kbd.inkey[INKEY_DEL]=0; } if ( this->kbd.inkey[INKEY_PAD8] ) { trans.x = -(float)EEsin( DEG2RAD( player.angle.b ) ) * val; trans.y = 0.f; trans.z = (float)EEcos( DEG2RAD( player.angle.b ) ) * val; ARX_FOGS_TranslateSelected( &trans ); this->kbd.inkey[INKEY_PAD8] = 0; } if (this->kbd.inkey[INKEY_PAD2]) { EERIE_3D trans; trans.x=(float)EEsin(DEG2RAD(player.angle.b))*val; trans.y=0.f; trans.z=-(float)EEcos(DEG2RAD(player.angle.b))*val; ARX_FOGS_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { EERIE_3D trans; trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b-90.f)))*val; ARX_FOGS_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { EERIE_3D trans; trans.x=-(float)EEsin(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; trans.y=0.f; trans.z=(float)EEcos(DEG2RAD(MAKEANGLE(player.angle.b+90.f)))*val; ARX_FOGS_TranslateSelected(&trans); this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { EERIE_3D trans; trans.x=0.f; trans.y=-val; trans.z=0.f; ARX_FOGS_TranslateSelected(&trans); this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { EERIE_3D trans; trans.x=0.f; trans.y=val; trans.z=0.f; ARX_FOGS_TranslateSelected(&trans); this->kbd.inkey[INKEY_PADMINUS]=0; } } // IO Edition Key/Mouse Management ------------------------------- if (EDITMODE) { float val; if ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT])) { val=1.f; } else val=20.f; if (this->kbd.inkey[INKEY_HOME]) { ResetSelectedIORot(); this->kbd.inkey[INKEY_HOME]=0; } if (this->kbd.inkey[INKEY_DEL]) { DeleteSelectedIO(); this->kbd.inkey[INKEY_DEL]=0; } if (this->kbd.inkey[INKEY_PAD7]) { GroundSnapSelectedIO(); this->kbd.inkey[INKEY_PAD7]=0; } if (this->kbd.inkey[INKEY_PAD0]) { if (ValidIONum(LastSelectedIONum)) { inter.iobj[LastSelectedIONum]->angle.a=0.f; inter.iobj[LastSelectedIONum]->angle.b=0.f; inter.iobj[LastSelectedIONum]->angle.g=0.f; inter.iobj[LastSelectedIONum]->initangle.a=0.f; inter.iobj[LastSelectedIONum]->initangle.b=0.f; inter.iobj[LastSelectedIONum]->initangle.g=0.f; } this->kbd.inkey[INKEY_PAD0]=0; } if (this->kbd.inkey[INKEY_PAD8]) { EERIE_3D trans; float ag=GetNearestSnappedAngle(player.angle.b); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PAD8]=0; } if (this->kbd.inkey[INKEY_PAD2]) { EERIE_3D trans; float ag=GetNearestSnappedAngle(player.angle.b); ag=DEG2RAD(ag); trans.x=(float)EEsin(ag)*val; trans.y=0.f; trans.z=-(float)EEcos(ag)*val; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PAD2]=0; } if (this->kbd.inkey[INKEY_PAD6]) { EERIE_3D trans; float ag=GetNearestSnappedAngle(MAKEANGLE(player.angle.b-90.f)); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PAD6]=0; } if (this->kbd.inkey[INKEY_PAD4]) { EERIE_3D trans; float ag=GetNearestSnappedAngle(MAKEANGLE(player.angle.b+90.f)); ag=DEG2RAD(ag); trans.x=-(float)EEsin(ag)*val; trans.y=0.f; trans.z=(float)EEcos(ag)*val; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PAD4]=0; } if (this->kbd.inkey[INKEY_PADADD]) { EERIE_3D trans; trans.x=0.f; trans.y=-val; trans.z=0.f; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PADADD]=0; } if (this->kbd.inkey[INKEY_PADMINUS]) { EERIE_3D trans; trans.x=0.f; trans.y=val; trans.z=0.f; TranslateSelectedIO(&trans); this->kbd.inkey[INKEY_PADMINUS]=0; } if (this->kbd.inkey[INKEY_PAD9]) { ObjectRotAxis++; if (ObjectRotAxis>2) ObjectRotAxis=0; this->kbd.inkey[INKEY_PAD9]=0; } if (val!=1.f) val=45.f; if (this->kbd.inkey[INKEY_PADMULTIPLY]) { EERIE_3D rot; rot.a=rot.b=rot.g=0.f; if (ObjectRotAxis==0) rot.b=val; else if (ObjectRotAxis==1) rot.a=val; else rot.g=val; RotateSelectedIO(&rot); this->kbd.inkey[INKEY_PADMULTIPLY]=0; } if (this->kbd.inkey[INKEY_PADDIVIDE]) { EERIE_3D rot; rot.a=rot.b=rot.g=0.f; if (ObjectRotAxis==0) rot.b=-val; else if (ObjectRotAxis==1) rot.a=-val; else rot.g=-val; RotateSelectedIO(&rot); this->kbd.inkey[INKEY_PADDIVIDE]=0; } } if (EDITMODE) if ((this->kbd.inkey[INKEY_RETURN]) && (ValidIONum(LastSelectedIONum))) { //CDP_IOOptions if (CDP_IOOptions) { SendMessage(CDP_IOOptions,WM_COMMAND,MAKELONG(IDOK,0),0); } if (!CDP_IOOptions) { CDP_EditIO=inter.iobj[LastSelectedIONum]; if (danaeApp.m_pFramework->m_bIsFullscreen) { ARX_TIME_Pause(); Pause(TRUE); DialogBox( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_SCRIPTDIALOG), this->m_hWnd, IOOptionsProc); Pause(FALSE); ARX_TIME_UnPause(); } else CDP_IOOptions=(CreateDialogParam( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_SCRIPTDIALOG), this->m_hWnd, IOOptionsProc,0 )); } this->kbd.inkey[INKEY_RETURN]=0; } return FALSE; } //----------------------------------------------------------------------------- // Switches from/to combat Mode i=-1 for switching from actual configuration // 2 to force Draw Weapon // 1 to force Combat Mode On // 0 to force Combat Mode Off //----------------------------------------------------------------------------- void ARX_INTERFACE_Combat_Mode(long i) { if ( (i>=1) && (player.Interface & INTER_COMBATMODE) ) return; if ( (i==0) && !(player.Interface & INTER_COMBATMODE) ) return; if (EDITMODE) return; if ((player.Interface & INTER_COMBATMODE) && (inter.iobj[0])) { player.Interface&=~INTER_COMBATMODE; player.Interface&=~INTER_NO_STRIKE; ARX_EQUIPMENT_LaunchPlayerUnReadyWeapon(); long weapontype=ARX_EQUIPMENT_GetPlayerWeaponType(); if (inter.iobj[0] && arrowobj && (weapontype == WEAPON_BOW)) { EERIE_LINKEDOBJ_UnLinkObjectFromObject(inter.iobj[0]->obj, arrowobj); } player.doingmagic=0; } else if (((inter.iobj[0]->animlayer[1].cur_anim == NULL) || (inter.iobj[0]->animlayer[1].cur_anim == inter.iobj[0]->anims[ANIM_WAIT])) && (inter.iobj[0])) { ARX_INTERFACE_BookOpenClose(2); player.Interface|=INTER_COMBATMODE; if (i==2) { player.Interface|=INTER_NO_STRIKE; if (pMenuConfig->bMouseLookToggle) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; } } ARX_EQUIPMENT_LaunchPlayerReadyWeapon(); player.doingmagic=0; } } long CSEND=0; extern void ApplySPArm(); long MOVE_PRECEDENCE=0; extern long DISABLE_JUMP; extern unsigned long REQUEST_JUMP; //----------------------------------------------------------------------------- void DANAE::ManagePlayerControls() { if (((EERIEMouseButton & 4) && (!EDITMODE) && !(player.Interface & INTER_COMBATMODE)) && (!player.doingmagic) && (!(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK)) && (eMouseState != MOUSE_IN_NOTE) ) { INTERACTIVE_OBJ * t; t=InterClick(&DANAEMouse); if (t!=NULL) { if (t->ioflags & IO_NPC) { if (t->script.data!=NULL) { if (t->_npcdata->life>0.f) { SendIOScriptEvent(t,SM_CHAT,""); EERIEMouseButton&=~4; if (DRAGGING) DRAGGING = 0; } else { if (t->inventory!=NULL) { if (player.Interface & INTER_STEAL) if (ioSteal && t != ioSteal) { SendIOScriptEvent(ioSteal, SM_STEAL,"OFF"); player.Interface &= ~INTER_STEAL; } ARX_INVENTORY_OpenClose(t); if (player.Interface&(INTER_INVENTORY | INTER_INVENTORYALL)) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); } if (INTERNATIONAL_MODE) { if (SecondaryInventory) { bForceEscapeFreeLook=true; lOldTruePlayerMouseLook=!TRUE_PLAYER_MOUSELOOK_ON; } } } } } } else { if (t->inventory!=NULL) { if (player.Interface & INTER_STEAL) if (ioSteal && t != ioSteal) { SendIOScriptEvent(ioSteal, SM_STEAL,"OFF"); player.Interface &= ~INTER_STEAL; } ARX_INVENTORY_OpenClose(t); if (INTERNATIONAL_MODE) { if (SecondaryInventory) { bForceEscapeFreeLook=true; lOldTruePlayerMouseLook=!TRUE_PLAYER_MOUSELOOK_ON; } } } else if (t->script.data!=NULL) SendIOScriptEvent(t,SM_ACTION,""); EERIEMouseButton&=~4; if (DRAGGING) DRAGGING = 0; EERIEMouseButton = 0; } EERIEMouseButton&=~4; EERIEMouseButton = 0; } } long NOMOREMOVES=0; float MoveDiv; float FD; FD = 1.f; EERIE_3D tm; tm.x=tm.y=tm.z=0.f; // Checks STEALTH Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_STEALTHMODE) ) { MoveDiv=0.02f; player.Current_Movement|=PLAYER_MOVE_STEALTH; } else MoveDiv=0.0333333f; { float tr; if (eyeball.exist==2) { FD=18.f; EERIE_3D old; Vector_Copy(&old,&eyeball.pos); // Checks WALK_FORWARD Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_WALKFORWARD) ) { tr=DEG2RAD(eyeball.angle.b); eyeball.pos.x+=-(float)EEsin(tr)*20.f*(float)FD*0.033f; eyeball.pos.z+=+(float)EEcos(tr)*20.f*(float)FD*0.033f; MustRefresh=TRUE; NOMOREMOVES=1; } // Checks WALK_BACKWARD Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_WALKBACKWARD) ) { tr=DEG2RAD(eyeball.angle.b); eyeball.pos.x+=(float)EEsin(tr)*20.f*(float)FD*0.033f; eyeball.pos.z+=-(float)EEcos(tr)*20.f*(float)FD*0.033f; MustRefresh=TRUE; NOMOREMOVES=1; } // Checks STRAFE_LEFT Key Status. if( (ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFELEFT)|| (ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFE)&&ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNLEFT))) && !NOMOREMOVES) { tr=DEG2RAD(MAKEANGLE(eyeball.angle.b+90.f)); eyeball.pos.x+=-(float)EEsin(tr)*10.f*(float)FD*0.033f; eyeball.pos.z+=+(float)EEcos(tr)*10.f*(float)FD*0.033f; MustRefresh=TRUE; NOMOREMOVES=1; } // Checks STRAFE_RIGHT Key Status. if( (ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFERIGHT)|| (ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFE)&&ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNRIGHT))) && !NOMOREMOVES) { tr=DEG2RAD(MAKEANGLE(eyeball.angle.b-90.f)); eyeball.pos.x+=-(float)EEsin(tr)*10.f*(float)FD*0.033f; //eyeball.pos.y+=FD*0.33f; eyeball.pos.z+=(float)EEcos(tr)*10.f*(float)FD*0.033f; MustRefresh=TRUE; NOMOREMOVES=1; } IO_PHYSICS phys; phys.cyl.height=-110.f; phys.cyl.origin.x=eyeball.pos.x; phys.cyl.origin.y=eyeball.pos.y+70.f; phys.cyl.origin.z=eyeball.pos.z; phys.cyl.radius=45.f; EERIE_CYLINDER test; memcpy(&test,&phys.cyl,sizeof(EERIE_CYLINDER)); BOOL npc = AttemptValidCylinderPos(&test, NULL, CFLAG_JUST_TEST | CFLAG_NPC); float val=CheckAnythingInCylinder(&phys.cyl,inter.iobj[0],CFLAG_NO_NPC_COLLIDE | CFLAG_JUST_TEST); if ((val > -40.f)) { if (val <= 70.f) { eyeball.pos.y+=val-70.f; } if (!npc) { MagicSightFader+=_framedelay*DIV200; if (MagicSightFader>1.f) MagicSightFader=1.f; } } else { memcpy(&eyeball.pos,&old,sizeof(EERIE_3D)); } } float t; float multi; if (EDITMODE || ARXPausedTimer) FD=40.f; BOOL left=ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFELEFT); if(!left) { if(ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFE)&&ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNLEFT)) { left=TRUE; } } BOOL right=ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFERIGHT); if(!right) { if(ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFE)&&ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNRIGHT)) { right=TRUE; } } // Checks WALK_BACKWARD Key Status. if ( ARX_IMPULSE_Pressed(CONTROLS_CUST_WALKBACKWARD) && !NOMOREMOVES ) { CurrFightPos=3; multi = 1; if (MoveDiv==0.02f) MOVETYPE=MOVE_WALK; else MOVETYPE=MOVE_RUN; if (left || right) { multi = 0.8f; } if (Project.improvespeed) multi+=1.2f; t=DEG2RAD(player.angle.b); multi=5.f*(float)FD*MoveDiv*multi; tm.x+=(float)EEsin(t)*multi; tm.z-=(float)EEcos(t)*multi; player.Current_Movement|=PLAYER_MOVE_WALK_BACKWARD; if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_WALKBACKWARD) ) MOVE_PRECEDENCE=PLAYER_MOVE_WALK_BACKWARD; } else if (MOVE_PRECEDENCE==PLAYER_MOVE_WALK_BACKWARD) MOVE_PRECEDENCE=0; // Checks WALK_FORWARD Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_WALKFORWARD) && !NOMOREMOVES) { CurrFightPos=2; multi = 1; if (MoveDiv==0.02f) MOVETYPE=MOVE_WALK; else MOVETYPE=MOVE_RUN; if (left || right) { multi=0.8f; } if (Project.improvespeed) multi+=1.5; t=DEG2RAD(player.angle.b); multi=10.f*(float)FD*MoveDiv*multi; tm.x-=(float)EEsin(t)*multi; tm.z+=(float)EEcos(t)*multi; player.Current_Movement|=PLAYER_MOVE_WALK_FORWARD; if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_WALKFORWARD) ) MOVE_PRECEDENCE=PLAYER_MOVE_WALK_FORWARD; } else if (MOVE_PRECEDENCE==PLAYER_MOVE_WALK_FORWARD) MOVE_PRECEDENCE=0; // Checks STRAFE_LEFT Key Status. if (left && !NOMOREMOVES) { CurrFightPos=0; t=DEG2RAD(MAKEANGLE(player.angle.b+90.f)); multi=6.f*(float)FD*MoveDiv; tm.x-=(float)EEsin(t)*multi; tm.z+=(float)EEcos(t)*multi; player.Current_Movement|=PLAYER_MOVE_STRAFE_LEFT; if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_STRAFELEFT) ) MOVE_PRECEDENCE=PLAYER_MOVE_STRAFE_LEFT; } else if (MOVE_PRECEDENCE==PLAYER_MOVE_STRAFE_LEFT) MOVE_PRECEDENCE=0; // Checks STRAFE_RIGHT Key Status. if ( right && !NOMOREMOVES) { CurrFightPos=1; t=DEG2RAD(MAKEANGLE(player.angle.b-90.f)); multi=6.f*(float)FD*MoveDiv; tm.x-=(float)EEsin(t)*multi; tm.z+=(float)EEcos(t)*multi; player.Current_Movement|=PLAYER_MOVE_STRAFE_RIGHT; if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_STRAFERIGHT) ) MOVE_PRECEDENCE=PLAYER_MOVE_STRAFE_RIGHT; } else if (MOVE_PRECEDENCE==PLAYER_MOVE_STRAFE_RIGHT) MOVE_PRECEDENCE=0; moveto.x=player.pos.x+tm.x; moveto.y=player.pos.y+tm.y; moveto.z=player.pos.z+tm.z; } if (!USE_PLAYERCOLLISIONS) { if (this->kbd.inkey[INKEY_PAGEUP]) { if (!USE_PLAYERCOLLISIONS) moveto.y=player.pos.y=player.pos.y-10.f; } if (this->kbd.inkey[INKEY_PAGEDOWN]) { moveto.y=player.pos.y=player.pos.y+10.f; } } // To remove for FINAL_RELEASE--------------------------------------- if (ALLOW_CHEATS || GAME_EDITOR) { if (this->kbd.inkey[INKEY_PAD5]) { moveto.y=player.pos.y=FirstPolyPosY(player.pos.x,player.pos.z)-180.f; player.angle.a=0.f; player.desiredangle.a=0.f; this->kbd.inkey[INKEY_PAD5]=0; } if ((this->kbd.inkey[INKEY_A]) && ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT]) ) ) { BLOCK_PLAYER_CONTROLS=0; player.life=player.Full_maxlife; player.mana=player.Full_maxmana; player.poison=0.f; player.hunger=100; DeadTime=0; ARX_SOUND_PlayInterface(SND_PLAYER_FILLLIFEMANA, 0.9F + 0.2F * rnd()); } } // End of things to remove------------------------------------------- // Checks CROUCH Key Status. if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_CROUCHTOGGLE)) { bGCroucheToggle=!bGCroucheToggle; } if( ARX_IMPULSE_Pressed(CONTROLS_CUST_CROUCH)|| bGCroucheToggle ) { player.Current_Movement|=PLAYER_CROUCH; } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_UNEQUIPWEAPON)) { ARX_EQUIPMENT_UnEquipPlayerWeapon(); } // Can only lean outside of combat mode if (!(player.Interface & INTER_COMBATMODE)) { // Checks LEAN_LEFT Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_LEANLEFT) ) { player.Current_Movement|=PLAYER_LEAN_LEFT; } // Checks LEAN_RIGHT Key Status. if (ARX_IMPULSE_Pressed(CONTROLS_CUST_LEANRIGHT) ) { player.Current_Movement|=PLAYER_LEAN_RIGHT; } } // Checks JUMP Key Status. if ((player.jumpphase==0) && ARX_IMPULSE_NowPressed(CONTROLS_CUST_JUMP) ) { REQUEST_JUMP = ARXTimeUL(); } // MAGIC if (ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE)) { if (!(player.Current_Movement & PLAYER_CROUCH) && (!BLOCK_PLAYER_CONTROLS) && (ARXmenu.currentmode==AMCM_OFF)) { if (!ARX_SOUND_IsPlaying(SND_MAGIC_AMBIENT)) ARX_SOUND_PlaySFX(SND_MAGIC_AMBIENT, NULL, 1.0F, ARX_SOUND_PLAY_LOOPED); } } else { ARX_SOUND_Stop(SND_MAGIC_AMBIENT); ARX_SOUND_Stop(SND_MAGIC_DRAW); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_DRINKPOTIONLIFE)) { SendInventoryObjectCommand("GRAPH\\OBJ3D\\TEXTURES\\ITEM_POTION_LIFE.BMP", SM_INVENTORYUSE); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_DRINKPOTIONMANA)) { SendInventoryObjectCommand("GRAPH\\OBJ3D\\TEXTURES\\ITEM_POTION_MANA.BMP", SM_INVENTORYUSE); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_TORCH)) { if (CURRENT_TORCH) { ARX_PLAYER_KillTorch(); } else { INTERACTIVE_OBJ * io = ARX_INVENTORY_GetTorchLowestDurability(); if (io) { INTERACTIVE_OBJ * ioo = io; if (io->_itemdata->count>1) { ioo=CloneIOItem(io); MakeTemporaryIOIdent(ioo); ioo->show=SHOW_FLAG_NOT_DRAWN; ioo->scriptload=1; ioo->_itemdata->count=1; io->_itemdata->count--; } ARX_PLAYER_ClickedOnTorch(ioo); } } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_MINIMAP)) { SHOW_INGAME_MINIMAP=!SHOW_INGAME_MINIMAP; } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_PREVIOUS)) { if (eMouseState == MOUSE_IN_BOOK) { if (player.Interface & INTER_MAP) { if (Book_Mode > 0) { Book_Mode --; ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); } } } else if (InPlayerInventoryPos(&DANAEMouse)) { if (!PLAYER_INTERFACE_HIDE_COUNT) { if ((player.Interface & INTER_INVENTORY)) { if (player.bag) { if (sActiveInventory > 0) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory --; } } } } } else { if (player.Interface & INTER_MAP) { if (Book_Mode > 0) { Book_Mode --; ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); } } else { if (!PLAYER_INTERFACE_HIDE_COUNT) { if ((player.Interface & INTER_INVENTORY)) { if (player.bag) { if (sActiveInventory > 0) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory --; } } } } } } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_NEXT)) { if (eMouseState == MOUSE_IN_BOOK) { if (player.Interface & INTER_MAP) { if (Book_Mode < 3) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode ++; } } } else if (InPlayerInventoryPos(&DANAEMouse)) { if (!PLAYER_INTERFACE_HIDE_COUNT) { if ((player.Interface & INTER_INVENTORY)) { if (player.bag) { if (sActiveInventory < player.bag - 1) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory ++; } } } } } else { if (player.Interface & INTER_MAP) { if (Book_Mode < 3) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode ++; } } else { if (!PLAYER_INTERFACE_HIDE_COUNT) { if ((player.Interface & INTER_INVENTORY)) { if (player.bag) { if (sActiveInventory < player.bag - 1) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory ++; } } } } } } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_BOOKCHARSHEET)) { if (!(player.Interface & INTER_MAP)) { Book_Mode = 0; ARX_INTERFACE_BookOpenClose(0); } else if ((player.Interface & INTER_MAP) && (Book_Mode != 0)) { Book_Mode = 0; } else { ARX_INTERFACE_BookOpenClose(2); } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_BOOKSPELL)) { if (!(player.Interface & INTER_MAP)) { if (player.rune_flags) { Book_Mode = 1; ARX_INTERFACE_BookOpenClose(0); } } else if ((player.Interface & INTER_MAP) && (Book_Mode != 1)) { Book_Mode = 1; } else { ARX_INTERFACE_BookOpenClose(2); } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_BOOKMAP)) { if (!(player.Interface & INTER_MAP)) { Book_Mode = 2; ARX_INTERFACE_BookOpenClose(0); } else if ((player.Interface & INTER_MAP) && (Book_Mode != 2)) { Book_Mode = 2; } else { ARX_INTERFACE_BookOpenClose(2); } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_BOOKQUEST)) { if (!(player.Interface & INTER_MAP)) { Book_Mode = 3; ARX_INTERFACE_BookOpenClose(0); } else if ((player.Interface & INTER_MAP) && (Book_Mode != 3)) { Book_Mode = 3; } else { ARX_INTERFACE_BookOpenClose(2); } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_CANCELCURSPELL)) { for (long i=MAX_SPELLS-1;i>=0;i--) { if ((spells[i].exist) && (spells[i].caster==0)) if (spellicons[spells[i].type].bDuration) { ARX_SPELLS_AbortSpellSound(); spells[i].tolive=0; break; } } } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_PRECAST1)) { if ((player.Interface & INTER_COMBATMODE) && !bIsAiming || !player.doingmagic) if (Precast[0].typ != -1) ARX_SPELLS_Precast_Launch(0); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_PRECAST2)) { if ((player.Interface & INTER_COMBATMODE) && !bIsAiming || !player.doingmagic) if (Precast[1].typ != -1) ARX_SPELLS_Precast_Launch(1); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_PRECAST3)) { if ((player.Interface & INTER_COMBATMODE) && !bIsAiming || !player.doingmagic) if (Precast[2].typ != -1) ARX_SPELLS_Precast_Launch(2); } if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_WEAPON)||lChangeWeapon) { bool bGo = true; if (lChangeWeapon > 0) { if (lChangeWeapon == 2) { lChangeWeapon--; } else { if( (inter.iobj[0]->animlayer[1].cur_anim==NULL)|| (inter.iobj[0]->animlayer[1].cur_anim == inter.iobj[0]->anims[ANIM_WAIT])) { lChangeWeapon--; if (pIOChangeWeapon) { SendIOScriptEvent(pIOChangeWeapon,SM_INVENTORYUSE,""); pIOChangeWeapon=NULL; } } else { bGo=false; } } } if (bGo) { if (player.Interface & INTER_COMBATMODE) { ARX_INTERFACE_Combat_Mode(0); bGToggleCombatModeWithKey=false; SPECIAL_DRAW_WEAPON=0; if (pMenuConfig->bMouseLookToggle) TRUE_PLAYER_MOUSELOOK_ON=MEMO_PLAYER_MOUSELOOK_ON; } else { MEMO_PLAYER_MOUSELOOK_ON=TRUE_PLAYER_MOUSELOOK_ON; SPECIAL_DRAW_WEAPON=1; TRUE_PLAYER_MOUSELOOK_ON|=1; SLID_START=(float)ARXTime; lFadeMapTime = lARXTime; ARX_INTERFACE_Combat_Mode(2); bGToggleCombatModeWithKey=true; } } } if(EERIEMouseButton&1) bGToggleCombatModeWithKey=false; if( (INTERNATIONAL_MODE)&& (bForceEscapeFreeLook)) { TRUE_PLAYER_MOUSELOOK_ON&=~1; if (!ARX_IMPULSE_Pressed(CONTROLS_CUST_FREELOOK)) { bForceEscapeFreeLook=false; } } else { if(eMouseState!=MOUSE_IN_INVENTORY_ICON) { if (!pMenuConfig->bMouseLookToggle) { if (ARX_IMPULSE_Pressed(CONTROLS_CUST_FREELOOK)) { if (!(TRUE_PLAYER_MOUSELOOK_ON & 1)) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; } } else { if(INTERNATIONAL_MODE) { TRUE_PLAYER_MOUSELOOK_ON &= ~1; } } } else { if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_FREELOOK)) { if (!(TRUE_PLAYER_MOUSELOOK_ON & 1)) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; } else { TRUE_PLAYER_MOUSELOOK_ON&=~1; if (player.Interface & INTER_COMBATMODE) ARX_INTERFACE_Combat_Mode(0); } } } } } if( (player.Interface&INTER_COMBATMODE)&& (ARX_IMPULSE_NowUnPressed(CONTROLS_CUST_FREELOOK)) ) { if(INTERNATIONAL_MODE) { ARX_INTERFACE_Combat_Mode(0); } else { player.Interface&=~INTER_COMBATMODE; ARX_EQUIPMENT_LaunchPlayerUnReadyWeapon(); } } if (EDITMODE) return;//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Checks INVENTORY Key Status. if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_INVENTORY)) { if (player.Interface & INTER_COMBATMODE) { ARX_INTERFACE_Combat_Mode(0); } if (INTERNATIONAL_MODE) { bInverseInventory=!bInverseInventory; lOldTruePlayerMouseLook=TRUE_PLAYER_MOUSELOOK_ON; if (!pMenuConfig->bMouseLookToggle) { bForceEscapeFreeLook=true; } } else { InventoryOpenClose(0); } } // Checks BOOK Key Status. if (ARX_IMPULSE_NowPressed(CONTROLS_CUST_BOOK)) ARX_INTERFACE_BookOpenClose(0); // Check For Combat Mode ON/OFF if ( (EERIEMouseButton & 1) && (EDITION==EDITION_IO) && (!(player.Interface & INTER_COMBATMODE)) && (!(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK)) && (!EDITMODE) && (!SpecialCursor) && (PLAYER_MOUSELOOK_ON) && (DRAGINTER==NULL) && (!InInventoryPos(&DANAEMouse) && (pMenuConfig->bAutoReadyWeapon)) ) { if (!(LastMouseClick & 1)) { COMBAT_MODE_ON_START_TIME = ARXTimeUL(); } else { if (ARXTime-COMBAT_MODE_ON_START_TIME>10) { ARX_INTERFACE_Combat_Mode(1); if (! pMenuConfig->bAutoReadyWeapon) bGToggleCombatModeWithKey=true; } } } if (INTERNATIONAL_MODE) { if (lOldTruePlayerMouseLook!=TRUE_PLAYER_MOUSELOOK_ON) { bInverseInventory=false; if( TRUE_PLAYER_MOUSELOOK_ON & 1 ) { if (!CSEND) { CSEND=1; SendIOScriptEvent(inter.iobj[0],SM_EXPLORATIONMODE,""); } } } else { if (CSEND) { CSEND=0; SendIOScriptEvent(inter.iobj[0],SM_CURSORMODE,""); } } static long lOldInterfaceTemp=0; if (TRUE_PLAYER_MOUSELOOK_ON) { if(bInverseInventory) { bRenderInCursorMode=true; if(MAGICMODE<0) { InventoryOpenClose(1); } } else { if(!bInventoryClosing) { lTimeToDrawMecanismCursor=0; lNbToDrawMecanismCursor=0; if (player.Interface & INTER_INVENTORYALL) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); bInventoryClosing = true; lOldInterfaceTemp=INTER_INVENTORYALL; } bRenderInCursorMode=false; InventoryOpenClose(2); if((player.Interface &INTER_INVENTORY)) { INTERACTIVE_OBJ * io = NULL; if (SecondaryInventory!=NULL) { io = (INTERACTIVE_OBJ *)SecondaryInventory->io; } else if (player.Interface & INTER_STEAL) { io = ioSteal; } if (io!=NULL) { InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } } if(pMenuConfig->bMouseLookToggle) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; } } } } else { if (bInverseInventory) { if (!bInventoryClosing) { bRenderInCursorMode=false; InventoryOpenClose(2); if ((player.Interface & INTER_INVENTORY)) { INTERACTIVE_OBJ * io = NULL; if (SecondaryInventory!=NULL) { io = (INTERACTIVE_OBJ *)SecondaryInventory->io; } else if (player.Interface & INTER_STEAL) { io = ioSteal; } if (io!=NULL) { InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } } if(pMenuConfig->bMouseLookToggle) { TRUE_PLAYER_MOUSELOOK_ON |= 1; SLID_START=(float)ARXTime; } } } else { bRenderInCursorMode=true; if(MAGICMODE<0) { if(lOldInterfaceTemp) { lOldInterface=lOldInterfaceTemp; lOldInterfaceTemp=0; ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); } if(lOldInterface) { player.Interface|=lOldInterface; player.Interface&=~INTER_INVENTORY; } else { InventoryOpenClose(1); } } } } if (bRenderInCursorMode) { if (eyeball.exist != 0) { long lNumSpell=ARX_SPELLS_GetInstance(SPELL_FLYING_EYE); if (lNumSpell >= 0) { ARX_SPELLS_Kill(lNumSpell); } } } } } //----------------------------------------------------------------------------- void ARX_INTERFACE_Reset() { SMOOTHSLID=0; PLAYER_INTERFACE_HIDE_COUNT=0; BLOCK_PLAYER_CONTROLS=0; SLID_VALUE=0; CINEMASCOPE=0; CINEMA_INC=0; CINEMA_DECAL=0; } //----------------------------------------------------------------------------- void ARX_INTERFACE_SetCinemascope(long status,long smooth) { if (status) { CINEMASCOPE=1;//++; g_TimeStartCinemascope = ARX_TIME_Get(); } else { CINEMASCOPE=0;//--; g_TimeStartCinemascope = 0; } ARX_CHECK_NOT_NEG(CINEMASCOPE); if (CINEMASCOPE) { if (smooth) { CINEMA_INC=1; } else CINEMA_DECAL=100; } else { if (smooth) { CINEMA_INC=-1; } else CINEMA_DECAL=0; } if (player.Interface & INTER_INVENTORY) { player.Interface &=~ INTER_INVENTORY; } if (player.Interface & INTER_INVENTORYALL) { player.Interface &=~ INTER_INVENTORYALL; } } //----------------------------------------------------------------------------- void ARX_INTERFACE_PlayerInterfaceModify(long showhide,long smooth) { if (showhide == 0) { InventoryOpenClose(2); ARX_INTERFACE_BookOpenClose(2); ARX_INTERFACE_NoteClose(); } if (showhide) PLAYER_INTERFACE_HIDE_COUNT = 0; else PLAYER_INTERFACE_HIDE_COUNT = 1; if (PLAYER_INTERFACE_HIDE_COUNT<0) PLAYER_INTERFACE_HIDE_COUNT=0; if (smooth) { if (showhide) SMOOTHSLID=-1; else SMOOTHSLID=1; } else { if (showhide) SLID_VALUE=0.f; else SLID_VALUE=100.f; F2L(SLID_VALUE,&lSLID_VALUE); } } extern void ARX_PrepareBackgroundNRMLs(); //----------------------------------------------------------------------------- void DANAE::ManageKeyMouse() { if (ARXmenu.currentmode == AMCM_OFF) { INTERACTIVE_OBJ * pIO = NULL; if (!BLOCK_PLAYER_CONTROLS) { if (TRUE_PLAYER_MOUSELOOK_ON && !(player.Interface & INTER_COMBATMODE) && (eMouseState != MOUSE_IN_NOTE) ) { POINT pos; pos.x=EERIEMouseX; pos.y=EERIEMouseY; EERIE_S2D poss; ARX_CHECK_SHORT(pos.x); ARX_CHECK_SHORT(pos.y); poss.x=ARX_CLEAN_WARN_CAST_SHORT(pos.x); poss.y=ARX_CLEAN_WARN_CAST_SHORT(pos.y); poss.x=MemoMouse.x; poss.y=MemoMouse.y; // mode systemshock if (pMenuConfig->bMouseLookToggle && pMenuConfig->bAutoReadyWeapon == false) { float fX = DANAESIZX * 0.5f; float fY = DANAESIZY * 0.5f; ARX_CHECK_SHORT(fX); ARX_CHECK_SHORT(fY); DANAEMouse.x = ARX_CLEAN_WARN_CAST_SHORT(fX); DANAEMouse.y = ARX_CLEAN_WARN_CAST_SHORT(fY); pIO = FlyingOverObject(&DANAEMouse,1); if (pIO) { FlyingOverIO = pIO; MemoMouse.x = DANAEMouse.x; MemoMouse.y = DANAEMouse.y; } } else pIO = FlyingOverObject(&poss,1); } else pIO = FlyingOverObject(&DANAEMouse,1); } if (pIO && (ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK)) { for (long i=0;iGameFlags & GFLAG_INTERACTIVITY) && !(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK) && (eMouseState != MOUSE_IN_NOTE) ) { if (!(EERIEMouseButton & 2) && (LastMouseClick & 2) && (STARTED_ACTION_ON_IO == pIO)) { if (pIO->ioflags & IO_ITEM) { FlyingOverIO = pIO; COMBINE=NULL; if (DRAGINTER == NULL) { bool bOk = true; if (SecondaryInventory!=NULL) { INTERACTIVE_OBJ * temp=(INTERACTIVE_OBJ *)SecondaryInventory->io; if (IsInSecondaryInventory(FlyingOverIO)) if (temp->ioflags & IO_SHOP) bOk = false; } INTERACTIVE_OBJ * io=inter.iobj[0]; ANIM_USE * useanim=&io->animlayer[1]; long type=ARX_EQUIPMENT_GetPlayerWeaponType(); switch (type) { case WEAPON_DAGGER: if(useanim->cur_anim==io->anims[ANIM_DAGGER_UNREADY_PART_1]) bOk=false; break; case WEAPON_1H: if(useanim->cur_anim==io->anims[ANIM_1H_UNREADY_PART_1]) bOk=false; break; case WEAPON_2H: if(useanim->cur_anim==io->anims[ANIM_2H_UNREADY_PART_1]) bOk=false; break; case WEAPON_BOW: if(useanim->cur_anim==io->anims[ANIM_MISSILE_UNREADY_PART_1]) bOk=false; break; default: break; } if (bOk) { if (!((FlyingOverIO->_itemdata->playerstacksize <= 1) && (FlyingOverIO->_itemdata->count > 1))) { SendIOScriptEvent(FlyingOverIO,SM_INVENTORYUSE,""); if (!((pMenuConfig->bAutoReadyWeapon == false) && (pMenuConfig->bMouseLookToggle))) { TRUE_PLAYER_MOUSELOOK_ON&=~1; } } } } if ((pMenuConfig->bAutoReadyWeapon == false) && (pMenuConfig->bMouseLookToggle)) { EERIEMouseButton &= ~2; } } } else //!TRUE_PLAYER_MOUSELOOK_ON { if ((EERIEMouseButton & 2) && !(LastMouseClick & 2)) { STARTED_ACTION_ON_IO=FlyingOverIO; } } } if ((eMouseState == MOUSE_IN_WORLD) || ((eMouseState == MOUSE_IN_BOOK) && (!((ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK) && (Book_Mode !=2)))) ) { if (pMenuConfig->bMouseLookToggle) { if (eMouseState != MOUSE_IN_NOTE) { if ((EERIEMouseButton & 2) && !(LastMouseClick & 2)&&(pMenuConfig)&&(pMenuConfig->bLinkMouseLookToUse)) { if (!(FlyingOverIO && (FlyingOverIO->ioflags & IO_ITEM)) || DRAGINTER) { if (!(TRUE_PLAYER_MOUSELOOK_ON & 1)) { if (!InInventoryPos(&DANAEMouse)) { if (!((player.Interface & INTER_MAP) && Book_Mode != 2)) { TRUE_PLAYER_MOUSELOOK_ON|=1; EERIEMouseButton &= ~2; SLID_START=(float)ARXTime; lFadeMapTime = lARXTime; } } } else { if (!((pMenuConfig->bAutoReadyWeapon == false) && (pMenuConfig->bMouseLookToggle) && FlyingOverIO && (FlyingOverIO->ioflags & IO_ITEM))) { TRUE_PLAYER_MOUSELOOK_ON&=~1; if (player.Interface & INTER_COMBATMODE && !(player.Interface & INTER_NOTE)) ARX_INTERFACE_Combat_Mode(0); } } } } } } else { if (eMouseState != MOUSE_IN_NOTE) { if( (EERIEMouseButton & 2) && (!(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK & (Book_Mode !=2))) && (!(TRUE_PLAYER_MOUSELOOK_ON & 1) || SPECIAL_DRAW_WEAPON)&& (pMenuConfig) && (pMenuConfig->bLinkMouseLookToUse)) { if (SPECIAL_DRAW_WEAPON) SPECIAL_DRAW_WEAPON=0; else if (!InInventoryPos(&DANAEMouse)) { if (SPECIAL_DRAW_WEAPON) { TRUE_PLAYER_MOUSELOOK_ON&=~1; SPECIAL_DRAW_WEAPON=0; } else { TRUE_PLAYER_MOUSELOOK_ON|=1; SLID_START=(float)ARXTime; lFadeMapTime = lARXTime; } } } else if ((!(EERIEMouseButton & 2)) && pMenuConfig->bLinkMouseLookToUse && (LastMouseClick & 2)) { if (!SPECIAL_DRAW_WEAPON) { if (!ARX_IMPULSE_Pressed(CONTROLS_CUST_FREELOOK)) TRUE_PLAYER_MOUSELOOK_ON&=~1; if ((player.Interface & INTER_COMBATMODE) && !ARX_IMPULSE_Pressed(CONTROLS_CUST_FREELOOK)) ARX_INTERFACE_Combat_Mode(0); } EERIEMouseButton &= ~2; } } if (TRUE_PLAYER_MOUSELOOK_ON && (!(EERIEMouseButton & 2)) && !SPECIAL_DRAW_WEAPON) { if (!ARX_IMPULSE_Pressed(CONTROLS_CUST_FREELOOK)) TRUE_PLAYER_MOUSELOOK_ON&=~1; } } } PLAYER_MOUSELOOK_ON=TRUE_PLAYER_MOUSELOOK_ON; if ((player.doingmagic==2)&& (pMenuConfig->bMouseLookToggle)) PLAYER_MOUSELOOK_ON=0; } if(ARXmenu.currentmode!=AMCM_OFF) { PLAYER_MOUSELOOK_ON=0; } // Checks For MouseGrabbing/Restoration after Grab bool bRestoreCoordMouse=true; if((PLAYER_MOUSELOOK_ON) && (!LAST_PLAYER_MOUSELOOK_ON)) { MemoMouse.x=DANAEMouse.x; MemoMouse.y=DANAEMouse.y; EERIEMouseGrab=1; } else if ((!PLAYER_MOUSELOOK_ON) && (LAST_PLAYER_MOUSELOOK_ON)) { EERIEMouseGrab=0; POINT pos; pos.x=MemoMouse.x; pos.y=MemoMouse.y; if ( this->m_pDeviceInfo->bWindowed) { pos.x+=this->m_pFramework->Xstart; pos.y+=this->m_pFramework->Ystart; } ClientToScreen(this->m_hWnd,&pos); SetCursorPos(pos.x,pos.y); DANAEMouse.x=MemoMouse.x; DANAEMouse.y=MemoMouse.y; if( (danaeApp.m_pFramework->m_bIsFullscreen)&& (bGLOBAL_DINPUT_GAME) ) { if(pGetInfoDirectInput) { pGetInfoDirectInput->fMouseAXTemp = DANAEMouse.x ; pGetInfoDirectInput->fMouseAYTemp = DANAEMouse.y ; ARX_CHECK_INT(pGetInfoDirectInput->fMouseAXTemp); ARX_CHECK_INT(pGetInfoDirectInput->fMouseAYTemp); pGetInfoDirectInput->iMouseAX=ARX_CLEAN_WARN_CAST_INT(pGetInfoDirectInput->fMouseAXTemp); pGetInfoDirectInput->iMouseAY=ARX_CLEAN_WARN_CAST_INT(pGetInfoDirectInput->fMouseAYTemp); } } bRestoreCoordMouse=false; } LAST_PLAYER_MOUSELOOK_ON=PLAYER_MOUSELOOK_ON; PLAYER_ROTATION=0; if (Project.interpolatemouse) // mouse smoothing... { float v=EERIEMouseXdep*DIV1000; if (v>3.1415927f) { v=3.1415927f; } else if (v<-3.1415927f) { v=-3.1415927f; } F2L((float)(EEsin(v)*600.f),&EERIEMouseXdep); v=EERIEMouseYdep*DIV1000; if (v>3.1415927f) { v=3.1415927f; } else if (v<-3.1415927f) { v=-3.1415927f; } F2L((float)(EEsin(v)*600.f),&EERIEMouseYdep); } ARX_Menu_Manage(this->m_pd3dDevice); EERIE_3D tm; tm.x=tm.y=tm.z=0.f; INTERACTIVE_OBJ * t; MOVETYPE=MOVE_WAIT; if(bRestoreCoordMouse) { ARX_CHECK_SHORT(EERIEMouseX-this->m_pFramework->Xstart); ARX_CHECK_SHORT(EERIEMouseX-this->m_pFramework->Ystart); ARX_CHECK_SHORT(EERIEMouseX); ARX_CHECK_SHORT(EERIEMouseY); if ( this->m_pDeviceInfo->bWindowed) { DANAEMouse.x=ARX_CLEAN_WARN_CAST_SHORT(EERIEMouseX-this->m_pFramework->Xstart); DANAEMouse.y=ARX_CLEAN_WARN_CAST_SHORT(EERIEMouseY-this->m_pFramework->Ystart); } else { DANAEMouse.x=ARX_CLEAN_WARN_CAST_SHORT(EERIEMouseX); DANAEMouse.y=ARX_CLEAN_WARN_CAST_SHORT(EERIEMouseY); } } // Player/Eyeball Freelook Management if (!BLOCK_PLAYER_CONTROLS) { GetInventoryObj_INVENTORYUSE(&DANAEMouse); if ((!(player.Interface & INTER_MAP )) || ((player.Interface & INTER_MAP ) && ((!(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK & (Book_Mode != 2))/*ARX_INTERFACE_MouseInBook()*/) || (Book_Mode==2) || (Book_Mode==3) || (Book_Mode!=-1))) || (player.Interface & INTER_COMBATMODE)) { static int flPushTimeX[2]={0,0}; static int flPushTimeY[2]={0,0}; bool bKeySpecialMove=false; if(!ARX_IMPULSE_Pressed(CONTROLS_CUST_STRAFE)) { float fTime = ARX_TIME_Get(); ARX_CHECK_INT(fTime); int iTime = ARX_CLEAN_WARN_CAST_INT(fTime); if(ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNLEFT)) { if(!flPushTimeX[0]) { flPushTimeX[0] = iTime; } bKeySpecialMove=true; } else flPushTimeX[0]=0; if(ARX_IMPULSE_Pressed(CONTROLS_CUST_TURNRIGHT)) { if(!flPushTimeX[1]) { flPushTimeX[1] = iTime; } bKeySpecialMove=true; } else flPushTimeX[1]=0; } if (USE_PLAYERCOLLISIONS) { float fTime = ARX_TIME_Get(); ARX_CHECK_INT(fTime); int iTime = ARX_CLEAN_WARN_CAST_INT(fTime); if(ARX_IMPULSE_Pressed(CONTROLS_CUST_LOOKUP)) { if(!flPushTimeY[0]) { flPushTimeY[0] = iTime; } bKeySpecialMove=true; } else flPushTimeY[0]=0; if(ARX_IMPULSE_Pressed(CONTROLS_CUST_LOOKDOWN)) { if(!flPushTimeY[1]) { flPushTimeY[1] = iTime; } bKeySpecialMove=true; } else flPushTimeY[1]=0; } if(bKeySpecialMove) { int iAction=0; if( flPushTimeX[0]|| flPushTimeX[1] ) { if(flPushTimeX[0]iMouseRX > 8)) { EERIEMouseYdep=0; EERIEMouseXdep=pGetInfoDirectInput->iMouseRX; bKeySpecialMove=true; } else { if( (!DANAEMouse.x)&& (pGetInfoDirectInput->iMouseRX < -8)) { EERIEMouseYdep=0; EERIEMouseXdep=pGetInfoDirectInput->iMouseRX; bKeySpecialMove=true; } } if( (DANAEMouse.y==(DANAESIZY-1))&& (pGetInfoDirectInput->iMouseRY > 8)) { EERIEMouseYdep=pGetInfoDirectInput->iMouseRY; EERIEMouseXdep=0; bKeySpecialMove=true; } else { if( (!DANAEMouse.y)&& (pGetInfoDirectInput->iMouseRY < -8)) { EERIEMouseYdep=pGetInfoDirectInput->iMouseRY; EERIEMouseXdep=0; bKeySpecialMove=true; } } } } } if(ARX_IMPULSE_Pressed(CONTROLS_CUST_CENTERVIEW)) { eyeball.angle.a=eyeball.angle.g=0.f; player.desiredangle.a=player.desiredangle.g=player.angle.a=player.angle.g=0.f; } float fd; if( 0 && (danaeApp.m_pFramework->m_bIsFullscreen) && (bGLOBAL_DINPUT_GAME) ) { fd = (Original_framedelay) * .3f * (640.f / (float)DANAESIZX); } else { fd = (((float)pGetInfoDirectInput->iSensibility) + 1.f) * 0.1f * ((640.f / (float)DANAESIZX)); if( (pMenuConfig)&& (pMenuConfig->bMouseSmoothing) ) { float of=Original_framedelay; if (of<=0.f) fd=0.f; else if (of>80.f) { of=80.f; fd*=of; } else fd*=of; } else if (fd > 200) fd=200; } fd *= ((float)DANAESIZX) * DIV640; if ((eyeball.exist==2) && (PLAYER_MOUSELOOK_ON||bKeySpecialMove)) { if (EERIEMouseYdep!=0) { float ia; if( (pMenuConfig)&& (pMenuConfig->bMouseSmoothing) ) { ia=((float)EERIEMouseYdep*DIV60)*fd; } else { ia=((float)EERIEMouseYdep*DIV5)*fd; } if (INVERTMOUSE) ia=-ia; if (eyeball.angle.a<70.f) { if (eyeball.angle.a+ia<70.f) eyeball.angle.a+=ia; } else if (eyeball.angle.a>300.f) { if (eyeball.angle.a+ia>300.f) eyeball.angle.a+=ia; } eyeball.angle.a=MAKEANGLE(eyeball.angle.a); } if (EERIEMouseXdep!=0) { float ib; if( (pMenuConfig)&& (pMenuConfig->bMouseSmoothing) ) { ib=((float)EERIEMouseXdep*DIV50)*fd; } else { ib=((float)EERIEMouseXdep*DIV5)*fd; } eyeball.angle.b=MAKEANGLE(eyeball.angle.b-ib); } } else if (PLAYER_MOUSELOOK_ON || bKeySpecialMove) if (ARXmenu.currentmode != AMCM_NEWQUEST) { if ((EERIEMouseYdep != 0)) { float ia; if( (pMenuConfig)&& (pMenuConfig->bMouseSmoothing) ) { ia=((float)EERIEMouseYdep*DIV60*fd); } else { ia = ((float)EERIEMouseYdep * DIV5 * fd); } if ((inter.iobj[0]) && EEfabs(ia)>2.f) inter.iobj[0]->lastanimtime=0; if (INVERTMOUSE) ia=-ia; float iangle=player.angle.a; player.desiredangle.a=player.angle.a; player.desiredangle.a+=ia; player.desiredangle.a=MAKEANGLE(player.desiredangle.a); if ((player.desiredangle.a>=74.9f) && (player.desiredangle.a<=301.f)) { if (iangle<75.f) player.desiredangle.a=74.9f; //69 else player.desiredangle.a=301.f; } } if ((EERIEMouseXdep != 0)) { float ib; if( (pMenuConfig)&& (pMenuConfig->bMouseSmoothing) ) { ib=((float)EERIEMouseXdep*DIV50*fd); } else { ib = ((float)EERIEMouseXdep * DIV5 * fd); } if (ib!=0.f) player.Current_Movement|=PLAYER_ROTATE; player.desiredangle.b=player.angle.b; player.desiredangle.b=MAKEANGLE(player.desiredangle.b-ib); PLAYER_ROTATION=ib; } } } } { if (EDITMODE) { if (EERIEMouseButton & 1) { t = FlyingOverIO; if (t!=NULL) { SelectIO(t); EERIEMouseButton&=~1; } } } //////// else if ((!BLOCK_PLAYER_CONTROLS) && !(player.Interface & INTER_COMBATMODE)) { if (DRAGINTER == NULL) if ((LastMouseClick & 1) && !(EERIEMouseButton & 1) && !(EERIEMouseButton & 4) && !(LastMouseClick & 4)) { INTERACTIVE_OBJ * temp; temp = FlyingOverIO; if ((temp!=NULL) && temp->locname[0] ) { if (((FlyingOverIO->ioflags & IO_ITEM) && FlyingOverIO->_itemdata->equipitem) && (player.Full_Skill_Object_Knowledge + player.Full_Attribute_Mind >= FlyingOverIO->_itemdata->equipitem->elements[IO_EQUIPITEM_ELEMENT_Identify_Value].value) ) { SendIOScriptEvent(FlyingOverIO,SM_IDENTIFY,""); } MakeLocalised(temp->locname,WILLADDSPEECH,256,-1); if (temp->ioflags & IO_GOLD) { _TCHAR UText[256]; _stprintf(UText, _T("%d %s"), temp->_itemdata->price, WILLADDSPEECH); _tcscpy(WILLADDSPEECH, UText); } if ((temp->poisonous>0) && (temp->poisonous_count!=0)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Poisoned]",Text,256,-1); _stprintf(UText, _T("%s (%s %d)"), WILLADDSPEECH, Text, (long)temp->poisonous); _tcscpy(WILLADDSPEECH, UText); } if ((temp->ioflags & IO_ITEM) && (temp->durability<100.f)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Durability]",Text,256,-1); _stprintf(UText, _T("%s %s %3.0f/%3.0f"), WILLADDSPEECH, Text, temp->durability,temp->max_durability); _tcscpy(WILLADDSPEECH, UText); } WILLADDSPEECHTIME = ARXTimeUL(); if (INTERNATIONAL_MODE) { bool bAddText = true; if( (temp->obj)&& (temp->obj->pbox)&& (temp->obj->pbox->active == 1)) { bAddText=false; } if (bAddText) { //------------ ONLY IN DEBUG ARX_CHECK_LONG( 120 * Xratio ); ARX_CHECK_LONG( 14 * Yratio ); ARX_CHECK_LONG( ( 120 + 500 ) * Xratio ); ARX_CHECK_LONG( ( 14 + 200 ) * Yratio ); //------------ RECT rDraw = { ARX_CLEAN_WARN_CAST_LONG( 120 * Xratio ), ARX_CLEAN_WARN_CAST_LONG( 14 * Yratio ), ARX_CLEAN_WARN_CAST_LONG( ( 120 + 500 ) * Xratio ), ARX_CLEAN_WARN_CAST_LONG((14 + 200) * Yratio) }; pTextManage->Clear(); pTextManage->AddText(InBookFont, WILLADDSPEECH, rDraw, RGB(232,204,143), 0x00FF00FF, 2000+_tcslen(WILLADDSPEECH)*60); } WILLADDSPEECH[0]=0; } } } else { if( (INTERNATIONAL_MODE)&& (pMenuConfig)&& (pMenuConfig->bAutoDescription)) { INTERACTIVE_OBJ * temp; temp = FlyingOverIO; if ((temp!=NULL) && temp->locname[0] ) { if (((FlyingOverIO->ioflags & IO_ITEM) && FlyingOverIO->_itemdata->equipitem) && (player.Full_Skill_Object_Knowledge + player.Full_Attribute_Mind >= FlyingOverIO->_itemdata->equipitem->elements[IO_EQUIPITEM_ELEMENT_Identify_Value].value) ) { SendIOScriptEvent(FlyingOverIO,SM_IDENTIFY,""); } MakeLocalised(temp->locname,WILLADDSPEECH,256,-1); if (temp->ioflags & IO_GOLD) { _TCHAR UText[256]; _stprintf(UText, _T("%d %s"), temp->_itemdata->price, WILLADDSPEECH); _tcscpy(WILLADDSPEECH, UText); } if ((temp->poisonous>0) && (temp->poisonous_count!=0)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Poisoned]",Text,256,-1); _stprintf(UText, _T("%s (%s %d)"), WILLADDSPEECH, Text, (long)temp->poisonous); _tcscpy(WILLADDSPEECH, UText); } if ((temp->ioflags & IO_ITEM) && (temp->durability<100.f)) { _TCHAR Text[256]; _TCHAR UText[256]; MakeLocalised("[Description_Durability]",Text,256,-1); _stprintf(UText, _T("%s %s %3.0f/%3.0f"), WILLADDSPEECH, Text, temp->durability,temp->max_durability); _tcscpy(WILLADDSPEECH, UText); } WILLADDSPEECHTIME = ARXTimeUL();//treat warning C4244 conversion from 'float' to 'unsigned long' bool bAddText=true; if( (temp->obj)&& (temp->obj->pbox)&& (temp->obj->pbox->active == 1)) { bAddText=false; } if (bAddText) { //------------ ONLY IN DEBUG ARX_CHECK_LONG( 120 * Xratio ); ARX_CHECK_LONG( 14 * Yratio ); ARX_CHECK_LONG( ( 120 + 500 ) * Xratio ); ARX_CHECK_LONG( ( 14 + 200 ) * Yratio ); //------------ RECT rDraw = { ARX_CLEAN_WARN_CAST_LONG( 120 * Xratio ), ARX_CLEAN_WARN_CAST_LONG( 14 * Yratio ), ARX_CLEAN_WARN_CAST_LONG( ( 120 + 500 ) * Xratio ), ARX_CLEAN_WARN_CAST_LONG((14 + 200) * Yratio) }; pTextManage->Clear(); pTextManage->AddText(InBookFont, WILLADDSPEECH, rDraw, RGB(232,204,143), 0x00FF00FF ); } WILLADDSPEECH[0]=0; } } } } if ((EERIEMouseButton & 4) || (LastMouseClick & 4)) WILLADDSPEECH[0]=0; if (WILLADDSPEECH[0]!=0) if (WILLADDSPEECHTIME+300=0) && (CDP_EditIO!=inter.iobj[LastSelectedIONum])) { SendMessage(CDP_IOOptions,WM_COMMAND,MAKELONG(IDOK,0),0); } if ((!CDP_IOOptions) && (ValidIONum(LastSelectedIONum))) { CDP_EditIO=inter.iobj[LastSelectedIONum]; if (danaeApp.m_pFramework->m_bIsFullscreen) { ARX_TIME_Pause(); Pause(TRUE); DialogBox( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_SCRIPTDIALOG), this->m_hWnd, IOOptionsProc); Pause(FALSE); ARX_TIME_UnPause(); } else CDP_IOOptions=(CreateDialogParam( (HINSTANCE)GetWindowLong( this->m_hWnd, GWL_HINSTANCE ), MAKEINTRESOURCE(IDD_SCRIPTDIALOG), this->m_hWnd, IOOptionsProc,0 )); } } } if ( (!FINAL_COMMERCIAL_DEMO) && (!FINAL_COMMERCIAL_GAME) && (ARXmenu.currentmode == AMCM_OFF)) { if (this->kbd.inkey[41]) { if (NEED_TEST_TEXT) { NEED_TEST_TEXT=0; USE_PLAYERCOLLISIONS=1; } else { NEED_TEST_TEXT=1; USE_PLAYERCOLLISIONS=0; } } this->kbd.inkey[41]=0; } #ifndef NOEDITOR if (!FINAL_COMMERCIAL_DEMO) { if ((ALLOW_CHEATS || GAME_EDITOR) && (ARXmenu.currentmode == AMCM_OFF)) { if ((this->kbd.inkey[INKEY_C]) && ((this->kbd.inkey[INKEY_LEFTSHIFT]) || (this->kbd.inkey[INKEY_RIGHTSHIFT]) ) ) { if (USE_PLAYERCOLLISIONS) USE_PLAYERCOLLISIONS=0; else USE_PLAYERCOLLISIONS=1; this->kbd.inkey[INKEY_C]=0; } if ((this->kbd.inkey[INKEY_W])) { ARX_PLAYER_Poison(0.f); ARX_PLAYER_Modify_XP(1000); this->kbd.inkey[INKEY_W]=0; } } } if ( (GAME_EDITOR) && (ARXmenu.currentmode == AMCM_OFF)) { if (this->kbd.inkey[INKEY_F7]) { if (EDITION==EDITION_LIGHTS) { SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B010,FALSE); //Zones SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B004,FALSE); //Nodes SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B007,FALSE); //Lights SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B008,FALSE); //Fogs EDITION=EDITION_IO; } else { SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B010,FALSE); //Zones SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B004,FALSE); //Nodes SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B007,TRUE); //Lights SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B008,FALSE); //Fogs EDITION=EDITION_LIGHTS; } this->kbd.inkey[INKEY_F7]=0; } if (this->kbd.inkey[INKEY_F9]) { if (EDITMODE) { SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B006,FALSE); SetEditMode(0); ARX_TIME_Get(); SendGameReadyMsg(); } else { SendMessage(danaeApp.ToolBar->hWnd,TB_CHECKBUTTON ,DANAE_B006,TRUE); SetEditMode(1); RestoreAllIOInitPos(); } this->kbd.inkey[INKEY_F9]=0; } if (this->kbd.inkey[INKEY_F8]) { if (ARXPausedTimer) ARX_TIME_UnPause(); else ARX_TIME_Pause(); this->kbd.inkey[INKEY_F8]=0; } #endif } if (GAME_EDITOR) { if ((this->kbd.inkey[INKEY_F1]) && (FirstFrame==0)) { ARX_PARTICLES_ClearAll(); ARX_SPELLS_ClearAll(); if (CDP_PATHWAYS_Options!=NULL) SendMessage(CDP_PATHWAYS_Options,WM_CLOSE,0,0); if (CDP_LIGHTOptions!=NULL) SendMessage(CDP_LIGHTOptions,WM_CLOSE,0,0); if (CDP_FogOptions!=NULL) SendMessage(CDP_FogOptions,WM_CLOSE,0,0); CDP_LIGHTOptions=NULL; CDP_FogOptions=NULL; ARX_TIME_Pause(); DanaeSwitchFullScreen(); ReloadAllTextures(GDevice); if(ControlCinematique) { ControlCinematique->m_pd3dDevice=GDevice; ActiveAllTexture(ControlCinematique); } ARX_TIME_UnPause(); LaunchDummyParticle(); this->kbd.inkey[INKEY_F1]=0; } } if ( (GAME_EDITOR) && (ARXmenu.currentmode == AMCM_OFF)) { if (MouseInCam(&subj)) { if (this->kbd.nbkeydown) { if (this->kbd.inkey[INKEY_0]) { if (USE_LIGHT_OPTIM) USE_LIGHT_OPTIM=0; else { InitTileLights(); USE_LIGHT_OPTIM=1; } this->kbd.inkey[INKEY_0]=0; } if (this->kbd.inkey[INKEY_7]) { unsigned long tim = ARX_TIME_GetUL();//treat warning C4244 conversion from 'float' to 'unsigned long' RecalcLightZone(player.pos.x,player.pos.y,player.pos.z,12); tim=ARX_TIME_GetUL() - tim;//treat warning C4244 conversion from 'float' to 'unsigned long' this->kbd.inkey[INKEY_7]=0; } if (this->kbd.inkey[INKEY_9]) { ARX_SPELLS_Launch(SPELL_FLYING_EYE,0); this->kbd.inkey[INKEY_9]=0; } if (this->kbd.inkey[INKEY_1]) { ARX_SPELLS_Launch(SPELL_FIREBALL,0); this->kbd.inkey[INKEY_1]=0; } if (this->kbd.inkey[INKEY_2]) { if (Project.improve) { for (long i=0;ikbd.inkey[INKEY_2]=0; } if (this->kbd.inkey[INKEY_6]) { if (inter.iobj[0]->invisibility>0.f) { for (long i=0;ikbd.inkey[INKEY_6]=0; } if (this->kbd.inkey[INKEY_5]) { if (Project.telekinesis) { for (long i=0;ikbd.inkey[INKEY_5]=0; } if (this->kbd.inkey[INKEY_4]) { if (Project.improvespeed) { for (long i=0;ikbd.inkey[INKEY_4]=0; } if (this->kbd.inkey[INKEY_3]) { ARX_SPELLS_Launch(SPELL_HEAL,0); this->kbd.inkey[INKEY_3]=0; } if (this->kbd.inkey[INKEY_8]) { ARX_SPELLS_Launch(SPELL_ICE_PROJECTILE,0); this->kbd.inkey[INKEY_8]=0; } if (this->kbd.inkey[INKEY_PAD1]) { extern long TSU_TEST; TSU_TEST = TSU_TEST ++; if (TSU_TEST>2) TSU_TEST = 0; this->kbd.inkey[INKEY_PAD1] = 0; } } } } } } static float fDecPulse; //----------------------------------------------------------------------------- void ARX_INTERFACE_DrawSecondaryInventory(bool _bSteal) { // To recode in a better way... if (TSecondaryInventory->io && TSecondaryInventory->io->inventory_skin) { char temp[256]; sprintf(temp,"Graph\\Interface\\Inventory\\%s.bmp",TSecondaryInventory->io->inventory_skin); TextureContainer * tc=MakeTCFromFile(temp); if (tc) ITC.ingame_inventory=tc; else ITC.ingame_inventory=BasicInventorySkin; } else if (ITC.ingame_inventory!=BasicInventorySkin) { ITC.ingame_inventory=BasicInventorySkin; } ARX_INTERFACE_DrawItem(ITC.ingame_inventory,INTERFACE_RATIO(InventoryX),0.f); long i,j; RECT rect; rect.top=0; rect.bottom=0; for (j=0;jsizey;j++) { for (i=0;isizex;i++) { INTERACTIVE_OBJ * io=TSecondaryInventory->slot[i][j].io; if (io!=NULL) { bool bItemSteal = false; TextureContainer * tc=io->inv; TextureContainer * tc2=NULL; if (NeedHalo(io)) tc2 = io->inv->TextureHalo; if (_bSteal) { if (!ARX_PLAYER_CanStealItem(io)) { bItemSteal = true; tc = ITC.item_cant_steal; tc2 = NULL; } } if ((tc!=NULL) && (TSecondaryInventory->slot[i][j].show || bItemSteal) ) { if (io->ioflags & IO_GOLD) { long num=0; if (io->_itemdata->price<=3) num=io->_itemdata->price-1; else if (io->_itemdata->price<=8) num=3; else if (io->_itemdata->price<=20) num=4; else if (io->_itemdata->price<=50) num=5; else num=6; io->obj=GoldCoinsObj[num]; io->inv=GoldCoinsTC[num]; } if (tc->m_pddsSurface) { float px = INTERFACE_RATIO(InventoryX) + (float)i*INTERFACE_RATIO(32) + INTERFACE_RATIO(2); float py = (float)j*INTERFACE_RATIO(32) + INTERFACE_RATIO(13); D3DCOLOR color; if ((io->poisonous) && (io->poisonous_count!=0)) color=0xFF00FF00; else color=D3DCOLORWHITE; EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc,color); if (!bItemSteal && (io==FlyingOverIO)) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc, D3DCOLORWHITE); SETALPHABLEND(GDevice,false); } else { if (!bItemSteal && (io->ioflags & IO_CAN_COMBINE)) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); float fColorPulse = 255.f * fabs( cos( DEG2RAD( fDecPulse ) ) ); DWORD dwColor = ARX_CLEAN_WARN_CAST_DWORD(fColorPulse); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc, (dwColor<<16)|(dwColor<<8)|dwColor); SETALPHABLEND(GDevice,false); } } if (tc2!=NULL) { ARX_INTERFACE_HALO_Draw(io, GDevice,tc,tc2, px, py, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } if ((io->ioflags & IO_ITEM) && (io->_itemdata->count!=1)) ARX_INTERFACE_DrawNumber(px, py, io->_itemdata->count, 3, D3DCOLORWHITE); } } } } } } //----------------------------------------------------------------------------- void ARX_INTERFACE_DrawInventory(short _sNum, int _iX=0, int _iY=0) { fDecPulse += FrameDiff * 0.5f; float fCenterX = DANAECENTERX - INTERFACE_RATIO(320) + INTERFACE_RATIO(35) + _iX ; float fSizY = DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + _iY; ARX_CHECK_INT(fCenterX); ARX_CHECK_INT(fSizY); float fPosX = ARX_CAST_TO_INT_THEN_FLOAT( fCenterX ); float fPosY = ARX_CAST_TO_INT_THEN_FLOAT( fSizY ); ARX_INTERFACE_DrawItem(ITC.hero_inventory, fPosX, fPosY - INTERFACE_RATIO(5)); RECT rect; rect.top=0; rect.bottom=0; for (long j=0;jinv; TextureContainer * tc2=NULL; if (NeedHalo(io)) tc2 = io->inv->TextureHalo; if (tc!=NULL) { float px = fPosX + i*INTERFACE_RATIO(32) + INTERFACE_RATIO(7); float py = fPosY + j*INTERFACE_RATIO(32) + INTERFACE_RATIO(6); if (tc->m_pddsSurface) { D3DCOLOR color; if ((io->poisonous) && (io->poisonous_count!=0)) color=0xFF00FF00; else color=D3DCOLORWHITE; EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc,color); if (io==FlyingOverIO) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc,D3DCOLORWHITE); SETALPHABLEND(GDevice,false); } else { if (io->ioflags & IO_CAN_COMBINE) { float fColorPulse = 255.f * fabs( cos( DEG2RAD( fDecPulse ) ) ); DWORD dwColor = ARX_CLEAN_WARN_CAST_DWORD(fColorPulse); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(tc->m_dwWidth), INTERFACE_RATIO_DWORD(tc->m_dwHeight), 0.001f, tc,(dwColor<<16)|(dwColor<<8)|dwColor); SETALPHABLEND(GDevice,false); } } } if (tc2) { ARX_INTERFACE_HALO_Render( io->halo.color.r, io->halo.color.g, io->halo.color.b, io->halo.flags, tc, tc2, px, py, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } if ((io->ioflags & IO_ITEM) && (io->_itemdata->count!=1)) ARX_INTERFACE_DrawNumber(px, py, io->_itemdata->count, 3, D3DCOLORWHITE); } } } } extern TextureContainer * stealth_gauge_tc; extern float CURRENT_PLAYER_COLOR; extern long EXTERNALVIEW; //----------------------------------------------------------------------------- // Stealth Gauge Drawing //----------------------------------------------------------------------------- void ARX_INTERFACE_Draw_Stealth_Gauge() { if ((stealth_gauge_tc) && (!CINEMASCOPE)) { float v=GetPlayerStealth(); if (CURRENT_PLAYER_COLOR=15) v=1.f; else v=(t*DIV15)*0.9f+0.1f; D3DCOLOR col=_EERIERGB(v); SETALPHABLEND(GDevice, true); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); GDevice->SetRenderState( D3DRENDERSTATE_ZENABLE,false); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(stealth_gauge_tc->m_dwWidth), INTERFACE_RATIO_DWORD(stealth_gauge_tc->m_dwHeight), 0.01f, stealth_gauge_tc,col); danaeApp.EnableZBuffer(); SETALPHABLEND(GDevice, false); } } } //----------------------------------------------------------------------------- // Damaged Equipment Drawing //----------------------------------------------------------------------------- void ARX_INTERFACE_DrawDamagedEquipment() { if (CINEMASCOPE || BLOCK_PLAYER_CONTROLS) return; if (player.Interface & INTER_INVENTORYALL) return; long needdraw=0; for (long i=0;i<5;i++) { if (iconequip[i]) { long eq=-1; switch (i) { case 0: eq = EQUIP_SLOT_WEAPON; break; case 1: eq = EQUIP_SLOT_SHIELD; break; case 2: eq = EQUIP_SLOT_HELMET; break; case 3: eq = EQUIP_SLOT_ARMOR; break; case 4: eq = EQUIP_SLOT_LEGGINGS; break; } if (player.equiped[eq]>0) { INTERACTIVE_OBJ * io=inter.iobj[player.equiped[eq]]; float ratio=io->durability/io->max_durability; if (ratio<=0.5f) { needdraw|=1<SetRenderState( D3DRENDERSTATE_CULLMODE,D3DCULL_NONE); SETZWRITE(GDevice, true); GDevice->SetRenderState( D3DRENDERSTATE_FOGENABLE, false); float px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(10 + 32 + 100); if ( px < INTERFACE_RATIO( 10 + 32 ) ) px = INTERFACE_RATIO( 10 + 32 ); float py = DANAESIZY - INTERFACE_RATIO(158); for (long i=0;i<5;i++) { if ( (needdraw&(1<0) { INTERACTIVE_OBJ * io=inter.iobj[player.equiped[eq]]; float ratio=io->durability/io->max_durability; D3DCOLOR col=EERIERGB(1.f-ratio,ratio,0); EERIEDrawBitmap2(GDevice, px,py, INTERFACE_RATIO_DWORD(iconequip[i]->m_dwWidth), INTERFACE_RATIO_DWORD(iconequip[i]->m_dwHeight), 0.001f, iconequip[i],col); } } } currpos += ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO(33.f)); SETALPHABLEND(GDevice, false); } } //----------------------------------------------------------------------------- void DrawBookInterfaceItem(LPDIRECT3DDEVICE7 m_pd3dDevice,TextureContainer *tc,float x,float y,float z) { if ((tc) && (tc->m_pddsSurface)) { EERIEDrawBitmap2(m_pd3dDevice, (x+BOOKDECX)*Xratio, (y+BOOKDECY)*Yratio, (float)(tc->m_dwWidth)*Xratio, (float)(tc->m_dwHeight)*Yratio, z, tc, BOOKINTERFACEITEMCOLOR); } } //----------------------------------------------------------------------------- void ARX_INTERFACE_RELEASESOUND() { ARX_SOUND_PlayInterface(SND_MENU_RELEASE); } //----------------------------------------------------------------------------- void ARX_INTERFACE_ERRORSOUND() { ARX_SOUND_PlayInterface(SND_MENU_CLICK); } //----------------------------------------------------------------------------- BOOL CheckAttributeClick(float x, float y, float * val, TextureContainer * tc) { BOOL rval=FALSE; float t; t=*val; if (MouseInBookRect(x,y,x+32,y+32)) { rval=TRUE; if (((BOOKBUTTON & 1) || (BOOKBUTTON & 2))&& (tc)) DrawBookInterfaceItem(GDevice,tc,x,y); if (!(BOOKBUTTON & 1) && (LASTBOOKBUTTON & 1)) { if ((player.Attribute_Redistribute > 0)) { player.Attribute_Redistribute--; t++; *val=t; ARX_INTERFACE_RELEASESOUND(); } else ARX_INTERFACE_ERRORSOUND(); } if (!(BOOKBUTTON & 2) && (LASTBOOKBUTTON & 2)) { if (ARXmenu.currentmode == AMCM_NEWQUEST) { if ((t >6) && (player.level==0)) { player.Attribute_Redistribute++; t --; *val=t; ARX_INTERFACE_RELEASESOUND(); } else ARX_INTERFACE_ERRORSOUND(); } else ARX_INTERFACE_ERRORSOUND(); } } return rval; } //----------------------------------------------------------------------------- BOOL CheckSkillClick(float x, float y, float * val, TextureContainer * tc, float * oldval) { BOOL rval=FALSE; float t,ot; t=*val; ot=*oldval; if ( MouseInBookRect( x, y, x + 32, y + 32 ) ) { rval=TRUE; if (((BOOKBUTTON & 1) || (BOOKBUTTON & 2))&& (tc)) DrawBookInterfaceItem(GDevice,tc,x,y); if (!(BOOKBUTTON & 1) && (LASTBOOKBUTTON & 1)) { if ((player.Skill_Redistribute > 0)) { player.Skill_Redistribute--; t++; *val=t; ARX_INTERFACE_RELEASESOUND(); } else ARX_INTERFACE_ERRORSOUND(); } if (!(BOOKBUTTON & 2) && (LASTBOOKBUTTON & 2)) { if (ARXmenu.currentmode == AMCM_NEWQUEST) { if ((t > ot) && (player.level==0)) { player.Skill_Redistribute++; t --; *val=t; ARX_INTERFACE_RELEASESOUND(); } else ARX_INTERFACE_ERRORSOUND(); } else ARX_INTERFACE_ERRORSOUND(); } } return rval; } //####################################################################################################### //AFFICHAGE ICONE DE SPELLS DE DURATION //####################################################################################################### //--------------------------------------------------------------------------- void StdDraw(float posx,float posy,D3DCOLOR color,TextureContainer * tcc,long flag,long i) { TextureContainer * tc; if (tcc==NULL) { if (ITC.unknown==NULL) ITC.unknown= MakeTCFromFile("Graph\\interface\\icons\\spell_unknown.bmp"); tc=ITC.unknown; } else tc=tcc; if (tc) { EERIEDrawBitmap(GDevice, posx, posy, INTERFACE_RATIO_DWORD(tc->m_dwWidth) * 0.5f, INTERFACE_RATIO_DWORD(tc->m_dwHeight) * 0.5f, 0.01f, tc, color); if (flag & 2) { SETBLENDMODE(GDevice,D3DBLEND_ZERO,D3DBLEND_ONE); EERIEDrawBitmap(GDevice,posx-1,posy-1,INTERFACE_RATIO_DWORD(tc->m_dwWidth)*0.5f,INTERFACE_RATIO_DWORD(tc->m_dwHeight)*0.5f,0.0001f, tc,color); EERIEDrawBitmap(GDevice,posx+1,posy+1,INTERFACE_RATIO_DWORD(tc->m_dwWidth)*0.5f,INTERFACE_RATIO_DWORD(tc->m_dwHeight)*0.5f,0.0001f, tc,color); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); } if (!(flag & 1)) { if (!(player.Interface & INTER_COMBATMODE)) if (MouseInRect(posx,posy, posx+INTERFACE_RATIO(32),posy+INTERFACE_RATIO(32))) { SpecialCursor=CURSOR_INTERACTION_ON; if ((LastMouseClick & 1) && (!(EERIEMouseButton & 1)) ) { if (flag & 2) { if (Precast[PRECAST_NUM].typ >= 0) _tcscpy(WILLADDSPEECH, spellicons[Precast[PRECAST_NUM].typ].name); WILLADDSPEECHTIME = ARXTimeUL(); } else { if (spells[i].type >= 0) _tcscpy(WILLADDSPEECH, spellicons[spells[i].type].name); WILLADDSPEECHTIME = ARXTimeUL(); } } if (EERIEMouseButton & 4) { if (flag & 2) { ARX_SPELLS_Precast_Launch(PRECAST_NUM); EERIEMouseButton&=~4; } else { ARX_SPELLS_AbortSpellSound(); EERIEMouseButton&=~4; spells[i].tolive=0; } } } } } } //--------------------------------------------------------------------------- void ManageSpellIcon(long i,float rrr,long flag) { float POSX=DANAESIZX-INTERFACE_RATIO(35); long lPOSX; F2L(POSX,&lPOSX); D3DCOLOR color; float posx = POSX+lSLID_VALUE; float posy = (float)currpos; long typ=spells[i].type; if (flag & 1) { color=D3DRGB(rrr,0,0); } else if (flag & 2) { color=D3DRGB(0,rrr*DIV2,rrr); float px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(110); if (px < INTERFACE_RATIO(10)) px = INTERFACE_RATIO(10); posx = px + INTERFACE_RATIO(33 + 33 + 33) + PRECAST_NUM * INTERFACE_RATIO(33); posy =DANAESIZY - INTERFACE_RATIO(126+32); // niveau du stealth typ = i; } else { color=D3DRGB(rrr,rrr,rrr); } bool bOk=true; if (spells[i].bDuration) { if( (player.mana<20)|| ((spells[i].timcreation+spells[i].tolive-ARXTime)<2000) ) { if(ucFlick&1) bOk=false; } } else { if(player.mana<20) { if(ucFlick&1) bOk=false; } } if ( ( (bOk) && (typ>=0) && (typSetRenderState(D3DRENDERSTATE_ZENABLE, false); for (long i=0;iangle.b!=0.f) { if (necklace.runes[i]->angle.b>300.f) necklace.runes[i]->angle.b=300.f; angle.b=EEsin((float)ARX_TIME_Get()*DIV200)*necklace.runes[i]->angle.b*DIV40; } necklace.runes[i]->angle.b-=_framedelay*0.2f; if (necklace.runes[i]->angle.b<0.f) necklace.runes[i]->angle.b=0.f; DynLight[0].exist=0; float tt; F2L((382+xpos*45+BOOKDECX+3)*Xratio,&bookcam.centerx); F2L((100+ypos*64+BOOKDECY+2)*Yratio,&bookcam.centery); SetActiveCamera(&bookcam); PrepareCamera(&bookcam); tt=angle.b; angle.b=-20.f; angle.b=tt; angle.b-=20.f; angle.b+=20.f; SETZWRITE(GDevice,TRUE); SETALPHABLEND(GDevice,FALSE); DynLight[0].exist=1; F2L((382+xpos*45+BOOKDECX)*Xratio,&bookcam.centerx); F2L((100+ypos*64+BOOKDECY)*Yratio,&bookcam.centery); SetActiveCamera(&bookcam); PrepareCamera(&bookcam); // Now draw the rune DrawEERIEInter(GDevice,necklace.runes[i],&angle,&pos,NULL); if(bRenderInterList) { PopAllTriangleList(true); } xpos++; if (xpos > 4) { xpos = 0; ypos++; } // Checks for Mouse floating over a rune... if ((!found2) && MouseInRect(BBOXMIN.x, BBOXMIN.y, BBOXMAX.x, BBOXMAX.y)) { long r=0; for (long j=0;jnbfaces;j++) { n=PtIn2DPolyProj( necklace.runes[i], &necklace.runes[i]->facelist[j] , (float)DANAEMouse.x, (float)DANAEMouse.y); if (n!=0.f) { r=1; break; } } if (r) { SETALPHABLEND(GDevice,TRUE); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); DrawEERIEInter(GDevice,necklace.runes[i],&angle,&pos,NULL); necklace.runes[i]->angle.b+=_framedelay*2.f; if(bRenderInterList) { PopAllTriangleList(true); } SETALPHABLEND(GDevice,FALSE); SpecialCursor=CURSOR_INTERACTION_ON; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) if (LastRune!=i) { switch(i) { case RUNE_AAM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "AAM", ARX_SOUND_GetDuration(SND_SYMB_AAM)); ARX_SOUND_PlayInterface(SND_SYMB_AAM); break; case RUNE_CETRIUS: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "CETRIUS", ARX_SOUND_GetDuration(SND_SYMB_CETRIUS)); ARX_SOUND_PlayInterface(SND_SYMB_CETRIUS); break; case RUNE_COMUNICATUM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "COMUNICATUM", ARX_SOUND_GetDuration(SND_SYMB_COMUNICATUM)); ARX_SOUND_PlayInterface(SND_SYMB_COMUNICATUM); break; case RUNE_COSUM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "COSUM", ARX_SOUND_GetDuration(SND_SYMB_COSUM)); ARX_SOUND_PlayInterface(SND_SYMB_COSUM); break; case RUNE_FOLGORA: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "FOLGORA", ARX_SOUND_GetDuration(SND_SYMB_FOLGORA)); ARX_SOUND_PlayInterface(SND_SYMB_FOLGORA); break; case RUNE_FRIDD: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "FRIDD", ARX_SOUND_GetDuration(SND_SYMB_FRIDD)); ARX_SOUND_PlayInterface(SND_SYMB_FRIDD); break; case RUNE_KAOM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "KAOM", ARX_SOUND_GetDuration(SND_SYMB_KAOM)); ARX_SOUND_PlayInterface(SND_SYMB_KAOM); break; case RUNE_MEGA: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "MEGA", ARX_SOUND_GetDuration(SND_SYMB_MEGA)); ARX_SOUND_PlayInterface(SND_SYMB_MEGA); break; case RUNE_MORTE: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "MORTE", ARX_SOUND_GetDuration(SND_SYMB_MORTE)); ARX_SOUND_PlayInterface(SND_SYMB_MORTE); break; case RUNE_MOVIS: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "MOVIS", ARX_SOUND_GetDuration(SND_SYMB_MOVIS)); ARX_SOUND_PlayInterface(SND_SYMB_MOVIS); break; case RUNE_NHI: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "NHI", ARX_SOUND_GetDuration(SND_SYMB_NHI)); ARX_SOUND_PlayInterface(SND_SYMB_NHI); break; case RUNE_RHAA: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "RHAA", ARX_SOUND_GetDuration(SND_SYMB_RHAA)); ARX_SOUND_PlayInterface(SND_SYMB_RHAA); break; case RUNE_SPACIUM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "SPACIUM", ARX_SOUND_GetDuration(SND_SYMB_SPACIUM)); ARX_SOUND_PlayInterface(SND_SYMB_SPACIUM); break; case RUNE_STREGUM: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "STREGUM", ARX_SOUND_GetDuration(SND_SYMB_STREGUM)); ARX_SOUND_PlayInterface(SND_SYMB_STREGUM); break; case RUNE_TAAR: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "TAAR", ARX_SOUND_GetDuration(SND_SYMB_TAAR)); ARX_SOUND_PlayInterface(SND_SYMB_TAAR); break; case RUNE_TEMPUS: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "TEMPUS", ARX_SOUND_GetDuration(SND_SYMB_TEMPUS)); ARX_SOUND_PlayInterface(SND_SYMB_TEMPUS); break; case RUNE_TERA: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "TERA", ARX_SOUND_GetDuration(SND_SYMB_TERA)); ARX_SOUND_PlayInterface(SND_SYMB_TERA); break; case RUNE_VISTA: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "VISTA", ARX_SOUND_GetDuration(SND_SYMB_VISTA)); ARX_SOUND_PlayInterface(SND_SYMB_VISTA); break; case RUNE_VITAE: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "VITAE", ARX_SOUND_GetDuration(SND_SYMB_VITAE)); ARX_SOUND_PlayInterface(SND_SYMB_VITAE); break; case RUNE_YOK: ARX_SPELLS_RequestSymbolDraw(inter.iobj[0], "YOK", ARX_SOUND_GetDuration(SND_SYMB_YOK)); ARX_SOUND_PlayInterface(SND_SYMB_YOK); break; } } LastRune=i; } } } } } GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE, true); SETCULL( GDevice, D3DCULL_CCW); if (!found2) LastRune=-1; // Now Draws Spells for this level... ARX_PLAYER_ComputePlayerFullStats(); float posx=0; float posy=0; float fPosX = 0; float fPosY = 0; bool bFlyingOver = false; for (int i=0; i < SPELL_COUNT; i++) { if ((spellicons[i].level==Book_SpellPage) && (!spellicons[i].bSecret)) { // check if player can cast it bool bOk = true; long j = 0; while ((j < 4) && (spellicons[i].symbols[j] != 255)) { if (!(player.rune_flags & (1<0) FLYING_OVER=0; } if( (OLD_FLYING_OVER != FLYING_OVER)|| (INTERNATIONAL_MODE) ) { OLD_FLYING_OVER=FLYING_OVER; pTextManage->Clear(); UNICODE_ARXDrawTextCenteredScroll(ARX_CLEAN_WARN_CAST_FLOAT(DANAECENTERX), 12, (DANAECENTERX)*0.82f, spellicons[i].description, RGB(232,204,143), 0x00FF00FF, hFontInGame, 1000, 0.01f, 2, INTERNATIONAL_MODE?0:max(3000, 70*_tcslen(spellicons[i].description))); } long count=0; for (long j=0;j<6;j++) { if (spellicons[i].symbols[j]!=255) count++; } for (int j=0;j<6;j++) { if (spellicons[i].symbols[j]!=255) { pos.x = (240-(count*32)*DIV2+j*32); pos.y = (306); DrawBookInterfaceItem(GDevice, necklace.pTexTab[spellicons[i].symbols[j]] , pos.x, pos.y); } } } if (spellicons[i].tc) { SETALPHABLEND(GDevice, true); SETBLENDMODE(GDevice,D3DBLEND_ZERO,D3DBLEND_INVSRCCOLOR); if (flyingover) { BOOKINTERFACEITEMCOLOR=0xFFFFFFFF; if ((EERIEMouseButton & 1) && !(LastMouseClick & 1)) { player.SpellToMemorize.bSpell = true; for (long j=0;j<6;j++) { player.SpellToMemorize.iSpellSymbols[j] = spellicons[i].symbols[j]; } player.SpellToMemorize.lTimeCreation = ARXTimeUL(); } } else BOOKINTERFACEITEMCOLOR = 0xFFa8d0df; DrawBookInterfaceItem(GDevice, spellicons[i].tc, fPosX, fPosY); BOOKINTERFACEITEMCOLOR = D3DCOLORWHITE; SETALPHABLEND(GDevice, false); } posx ++; if (posx>=2) { posx = 0; posy ++; } } } } if (!bFlyingOver) { OLD_FLYING_OVER = -1; FLYING_OVER = -1; } memcpy(&DynLight[0],&tl,sizeof(EERIE_LIGHT)); SetActiveCamera(oldcam); PrepareCamera(oldcam); } } // Restore bGATI8500 + bSoftRender. bSoftRender = bOldSoftRender; bGATI8500 = bOldGATI8500; } //----------------------------------------------------------------------------- void ARX_INTERFACE_ManageOpenedBook() { bool bOldGATI8500 = bGATI8500; bool bOldSoftRender = bSoftRender; bGATI8500 = false; bSoftRender = false; GDevice->SetRenderState( D3DRENDERSTATE_FOGENABLE, FALSE ); if (ITC.questbook==NULL) { ITC.playerbook=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\char_sheet_book.bmp"); ITC.ic_casting=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_casting.bmp"); ITC.ic_close_combat=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_close_combat.bmp"); ITC.ic_constitution =MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_constit.bmp"); ITC.ic_defense=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_defense.bmp"); ITC.ic_dexterity=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_dext.bmp"); ITC.ic_etheral_link=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_etheral_link.bmp"); ITC.ic_mind=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_intel.bmp"); ITC.ic_intuition=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_intuition.bmp"); ITC.ic_mecanism=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_mecanism.bmp"); ITC.ic_object_knowledge=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_obj_knowledge.bmp"); ITC.ic_projectile=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_projectile.bmp"); ITC.ic_stealth=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_stealth.bmp"); ITC.ic_strength=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\buttons_carac\\icone_strenght.bmp"); ITC.questbook=MakeTCFromFile("Graph\\Interface\\book\\questbook.bmp"); ITC.pTexSpellBook = MakeTCFromFile("Graph\\Interface\\book\\SpellBook.bmp"); ITC.bookmark_char=MakeTCFromFile("Graph\\Interface\\book\\bookmark_char.bmp"); ITC.bookmark_magic=MakeTCFromFile("Graph\\Interface\\book\\bookmark_magic.bmp"); ITC.bookmark_map=MakeTCFromFile("Graph\\Interface\\book\\bookmark_map.bmp"); ITC.bookmark_quest=MakeTCFromFile("Graph\\Interface\\book\\bookmark_quest.bmp"); ITC.accessible_1=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_1.bmp"); ITC.accessible_2=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_2.bmp"); ITC.accessible_3=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_3.bmp"); ITC.accessible_4=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_4.bmp"); ITC.accessible_5=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_5.bmp"); ITC.accessible_6=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_6.bmp"); ITC.accessible_7=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_7.bmp"); ITC.accessible_8=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_8.bmp"); ITC.accessible_9=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_9.bmp"); ITC.accessible_10=MakeTCFromFile("Graph\\Interface\\book\\Accessible\\accessible_10.bmp"); ITC.current_1=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_1.bmp"); ITC.current_2=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_2.bmp"); ITC.current_3=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_3.bmp"); ITC.current_4=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_4.bmp"); ITC.current_5=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_5.bmp"); ITC.current_6=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_6.bmp"); ITC.current_7=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_7.bmp"); ITC.current_8=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_8.bmp"); ITC.current_9=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_9.bmp"); ITC.current_10=MakeTCFromFile("Graph\\Interface\\book\\Current_Page\\Current_10.bmp"); ITC.heropageleft=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\Hero_left_X24_Y24.BMP" ); ITC.heropageright=MakeTCFromFile("Graph\\Interface\\book\\character_sheet\\Hero_right_X305_Y270.BMP" ); ITC.symbol_mega = NULL; ITC.symbol_vista = NULL; ITC.symbol_aam = NULL; ITC.symbol_taar = NULL; ITC.symbol_yok = NULL; ITC.pTexCursorRedist=MakeTCFromFile("Graph\\Interface\\cursors\\add_points.bmp" ); ITC.pTexCornerLeft=MakeTCFromFile("Graph\\Interface\\book\\Left_corner_original.bmp"); ITC.pTexCornerRight=MakeTCFromFile("Graph\\Interface\\book\\Right_corner_original.bmp"); ARX_Allocate_Text(ITC.lpszULevel, _T("system_charsheet_player_lvl")); ARX_Allocate_Text(ITC.lpszUXp, _T("system_charsheet_player_xp")); ANIM_Set(&player.useanim,herowaitbook); player.useanim.flags|=EA_LOOP; ARXOldTimeMenu=ARXTimeMenu=ARX_TIME_Get(); ARXDiffTimeMenu=0; } BOOKDECX = 0; BOOKDECY = 0; GDevice->SetTextureStageState(0,D3DTSS_MINFILTER,D3DTFP_LINEAR); GDevice->SetTextureStageState(0,D3DTSS_MAGFILTER,D3DTFP_LINEAR); if (ARXmenu.currentmode != AMCM_NEWQUEST) { GDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS); if (Book_Mode == 0) { DrawBookInterfaceItem(GDevice, ITC.playerbook, 97, 64, 0.9999f); } else if (Book_Mode == 1) { DrawBookInterfaceItem(GDevice, ITC.pTexSpellBook, 97, 64, 0.9999f); } else if (Book_Mode == 2) { DrawBookInterfaceItem(GDevice, ITC.questbook, 97, 64, 0.9999f); } else { DrawBookInterfaceItem(GDevice,ITC.questbook, 97, 64, 0.9999f); } GDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_LESSEQUAL); } else { float x, y; x = 0; if ( ITC.playerbook ) { x = ARX_CLEAN_WARN_CAST_FLOAT( ( 640 - ITC.playerbook->m_dwWidth ) / 2 ); y = ARX_CLEAN_WARN_CAST_FLOAT( ( 480 - ITC.playerbook->m_dwHeight ) / 2 ); DrawBookInterfaceItem( GDevice, ITC.playerbook, x, y );//95.f+2.f,47.f+17.f); } BOOKDECX = x - 97; BOOKDECY = x - 64 + 19; } if (ARXmenu.currentmode != AMCM_NEWQUEST) { bool bOnglet[11]; long max_onglet = 0; long Book_Page = 1; //--------------------------------------------------------------------- // Checks Clicks in bookmarks // Character Sheet if (Book_Mode != 0) { float px=BOOKMARKS_POS_X; float py=BOOKMARKS_POS_Y; DrawBookInterfaceItem(GDevice,ITC.bookmark_char,px,py); // Check for cursor on charcter sheet bookmark if ( ITC.bookmark_char && MouseInBookRect(px,py,px+ITC.bookmark_char->m_dwWidth,py+ITC.bookmark_char->m_dwHeight)) { // Draw highlighted Character sheet icon BOOKINTERFACEITEMCOLOR=0xFF555555; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); DrawBookInterfaceItem(GDevice,ITC.bookmark_char,px,py); SETALPHABLEND(GDevice,FALSE); BOOKINTERFACEITEMCOLOR=0xFFFFFFFF; // Set cursor to interacting SpecialCursor=CURSOR_INTERACTION_ON; // Check for click if (bookclick.x!=-1) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode=0; pTextManage->Clear(); } } } if (Book_Mode != 1) { if (player.rune_flags) { float px=BOOKMARKS_POS_X+32; float py=BOOKMARKS_POS_Y; DrawBookInterfaceItem(GDevice,ITC.bookmark_magic,px,py); //////////////// TO BE REDONE/REMOVED - START if (NewSpell==1) { NewSpell=2; for (long nk=0;nk<2;nk++) MagFX(BOOKDECX+220.f,BOOKDECY+49.f,0.000001f); } //////////////// TO BE REDONE/REMOVED - END if ( ITC.bookmark_magic && MouseInBookRect(px,py,px+ITC.bookmark_magic->m_dwWidth,py+ITC.bookmark_magic->m_dwHeight)) { // Draw highlighted Magic sheet icon BOOKINTERFACEITEMCOLOR=0xFF555555; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); DrawBookInterfaceItem(GDevice,ITC.bookmark_magic,px,py); SETALPHABLEND(GDevice,FALSE); BOOKINTERFACEITEMCOLOR=0xFFFFFFFF; // Set cursor to interacting SpecialCursor=CURSOR_INTERACTION_ON; // Check for click if (bookclick.x!=-1) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode=1; pTextManage->Clear(); } } } } if (Book_Mode!=2) { float px=BOOKMARKS_POS_X+64; float py=BOOKMARKS_POS_Y; DrawBookInterfaceItem(GDevice,ITC.bookmark_map,px,py); if ( ITC.bookmark_map && MouseInBookRect(px,py,px+ITC.bookmark_map->m_dwWidth,py+ITC.bookmark_map->m_dwHeight)) { BOOKINTERFACEITEMCOLOR=0xFF555555; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); DrawBookInterfaceItem(GDevice,ITC.bookmark_map,px,py); SETALPHABLEND(GDevice,FALSE); BOOKINTERFACEITEMCOLOR=0xFFFFFFFF; // Set cursor to interacting SpecialCursor=CURSOR_INTERACTION_ON; // Check for click if (bookclick.x!=-1) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode=2; pTextManage->Clear(); } } } if (Book_Mode!=3) { float px=BOOKMARKS_POS_X+96; float py=BOOKMARKS_POS_Y; DrawBookInterfaceItem(GDevice,ITC.bookmark_quest,px,py); if ( ITC.bookmark_quest && MouseInBookRect(px,py,px+ITC.bookmark_quest->m_dwWidth,py+ITC.bookmark_quest->m_dwHeight)) { BOOKINTERFACEITEMCOLOR=0xFF555555; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); DrawBookInterfaceItem(GDevice,ITC.bookmark_quest,px,py); SETALPHABLEND(GDevice,FALSE); BOOKINTERFACEITEMCOLOR=0xFFFFFFFF; // Set cursor to interacting SpecialCursor=CURSOR_INTERACTION_ON; // Check for click if (bookclick.x!=-1) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); Book_Mode=3; pTextManage->Clear(); } } } if (Book_Mode==2) max_onglet=8; else max_onglet=10; if (Book_Mode==1) Book_Page = Book_SpellPage; else Book_Page = Book_MapPage; ZeroMemory(&bOnglet, 11*sizeof(bool)); // calcul de la page de spells if (Book_Mode == 1) { max_onglet = 0; for (long i=0; i0) FLYING_OVER=NULL; } } //------------------------------ SEB 04/12/2001 if (ARXmenu.mda && ARXmenu.mda->flyover[FLYING_OVER]) //=ARXmenu.mda->flyover[FLYING_OVER]; { if( (FLYING_OVER!=OLD_FLYING_OVER)|| (INTERNATIONAL_MODE) ) { float fRandom = rnd() * 2 ; ARX_CHECK_INT(fRandom); int t = ARX_CLEAN_WARN_CAST_INT(fRandom); pTextManage->Clear(); OLD_FLYING_OVER=FLYING_OVER; if (FLYING_OVER == WND_XP) { _TCHAR tex[512]; _stprintf(tex, _T("%s %8d"), ARXmenu.mda->flyover[WND_XP], GetXPforLevel(player.level+1)-player.xp); UNICODE_ARXDrawTextCenteredScroll( (DANAESIZX*0.5f), 4, (DANAECENTERX)*0.82f, tex, RGB(232+t,204+t,143+t), 0x00FF00FF, hFontInGame, 1000, 0.01f, 3, INTERNATIONAL_MODE?0:max(3000, 70*_tcslen(tex))); } else { UNICODE_ARXDrawTextCenteredScroll( (DANAESIZX*0.5f), 4, (DANAECENTERX)*0.82f, ARXmenu.mda->flyover[FLYING_OVER], RGB(232+t,204+t,143+t), 0x00FF00FF, hFontInGame, 1000, 0.01f, 3, INTERNATIONAL_MODE?0:max(3000, 70*_tcslen(ARXmenu.mda->flyover[FLYING_OVER]))); } } } else { OLD_FLYING_OVER=-1; } //------------------------------ danaeApp.DANAEEndRender(); _stprintf(tex, _T("%3.0f"),player.Full_Attribute_Strength); if (player.Mod_Attribute_Strength<0.f) Color = 0x000000FF; else if (player.Mod_Attribute_Strength>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Full_Attribute_Strength == 6) Color = 0x000000FF; } DrawBookTextCenter( 391, 129, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Attribute_Mind); if (player.Mod_Attribute_Mind<0.f) Color = 0x000000FF; else if (player.Mod_Attribute_Mind>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Full_Attribute_Mind == 6) Color = 0x000000FF; } DrawBookTextCenter( 440, 129, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Attribute_Dexterity); if (player.Mod_Attribute_Dexterity<0.f) Color = 0x000000FF; else if (player.Mod_Attribute_Dexterity>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Full_Attribute_Dexterity == 6) Color = 0x000000FF; } DrawBookTextCenter( 490, 129, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Attribute_Constitution); if (player.Mod_Attribute_Constitution<0.f) Color = 0x000000FF; else if (player.Mod_Attribute_Constitution>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Full_Attribute_Constitution == 6) Color = 0x000000FF; } DrawBookTextCenter( 538, 129, tex, Color, 0x00FF00FF,InBookFont); // Player Skills _stprintf(tex, _T("%3.0f"),player.Full_Skill_Stealth); if (player.Mod_Skill_Stealth<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Stealth>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Stealth == 0) Color = 0x000000FF; } DrawBookTextCenter( 405, 210, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Mecanism); if (player.Mod_Skill_Mecanism<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Mecanism>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Mecanism == 0) Color = 0x000000FF; } DrawBookTextCenter( 469, 210, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Intuition); if (player.Mod_Skill_Intuition<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Intuition>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Intuition == 0) Color = 0x000000FF; } DrawBookTextCenter( 533, 210, tex, Color, 0x00FF00FF,InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Etheral_Link); if (player.Mod_Skill_Etheral_Link<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Etheral_Link>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Etheral_Link == 0) Color = 0x000000FF; } DrawBookTextCenter( 405, 265, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Object_Knowledge); if (player.Mod_Skill_Object_Knowledge<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Object_Knowledge>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Object_Knowledge == 0) Color = 0x000000FF; } DrawBookTextCenter( 469, 265, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Casting); if (player.Mod_Skill_Casting<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Casting>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Casting == 0) Color = 0x000000FF; } DrawBookTextCenter( 533, 265, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Close_Combat); if (player.Mod_Skill_Close_Combat<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Close_Combat>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Close_Combat == 0) Color = 0x000000FF; } DrawBookTextCenter( 405, 319, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Projectile); if (player.Mod_Skill_Projectile<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Projectile>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Projectile == 0) Color = 0x000000FF; } DrawBookTextCenter( 469, 319, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_Skill_Defense); if (player.Mod_Skill_Defense<0.f) Color = 0x000000FF; else if (player.Mod_Skill_Defense>0.f) Color = 0x00FF0000; else Color = 0; if (ARXmenu.currentmode==AMCM_NEWQUEST) { if (player.Skill_Defense == 0) Color = 0x000000FF; } DrawBookTextCenter( 533, 319, tex, Color, 0x00FF00FF, InBookFont); // Secondary Attributes _stprintf(tex, _T("%d"),F2L_RoundUp(player.Full_maxlife)); if ((player.Mod_maxlife<0.f) || (player.Full_maxlife < player.maxlife)) Color = 0x000000FF; else if ((player.Mod_maxlife>0.f) || (player.Full_maxlife > player.maxlife)) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 324, 158, tex, Color,0x00FF00FF, InBookFont); _stprintf(tex, _T("%d"),F2L_RoundUp(player.Full_maxmana)); if ((player.Mod_maxmana<0.f) || (player.Full_maxmana < player.maxmana)) Color = 0x000000FF; else if ((player.Mod_maxmana>0.f) || (player.Full_maxmana > player.maxmana)) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 324, 218, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%d"), F2L_RoundUp(player.Full_damages)); if (player.Mod_damages<0.f) Color = 0x000000FF; else if (player.Mod_damages>0.f) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 324, 278, tex, Color, 0x00FF00FF, InBookFont); float ac = player.Full_armor_class; _stprintf(tex, _T("%d"),F2L_RoundUp(ac)); if (player.Mod_armor_class<0.f) Color = 0x000000FF; else if (player.Mod_armor_class>0.f) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 153, 158, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_resist_magic); if (player.Mod_resist_magic<0.f) Color = 0x000000FF; else if (player.Mod_resist_magic>0.f) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 153, 218, tex, Color, 0x00FF00FF, InBookFont); _stprintf(tex, _T("%3.0f"),player.Full_resist_poison); if (player.Mod_resist_poison<0.f) Color = 0x000000FF; else if (player.Mod_resist_poison>0.f) Color = 0x00FF0000; else Color = 0; DrawBookTextCenter( 153, 278, tex, Color, 0x00FF00FF, InBookFont); danaeApp.DANAEStartRender(); } else if (Book_Mode==2) { long SHOWLEVEL = Book_MapPage - 1; if ((SHOWLEVEL>=0) && (SHOWLEVEL<32)) ARX_MINIMAP_Show(GDevice,SHOWLEVEL,0); SHOWLEVEL = ARX_LEVELS_GetRealNum(CURRENTLEVEL); if ((SHOWLEVEL>=0) && (SHOWLEVEL<32)) ARX_MINIMAP_Show(GDevice,SHOWLEVEL,1); } else if (Book_Mode==3) { if (nb_PlayerQuest > 0) { //----------------------------------------------------------------- // stuff pour le texte NotePosX = (97 ); NotePosY = (64 ); NoteTextMinx = 40.f; NoteTextMaxx = ITC.questbook->m_dwWidth*DIV2-10.f; NoteTextMiny = 40.f; NoteTextMaxy = ITC.questbook->m_dwHeight-65.f; float fPosX = 97; float fPosY = 64; float x0 = 0; float y0 = 0; // calcul du nombre de pages RECT rRect; long lCurPage = 1; float fMinX = (NoteTextMaxx-NoteTextMinx)*Xratio ; float fMinY = (NoteTextMaxy-NoteTextMiny)*Yratio ; ARX_CHECK_INT(fMinX); ARX_CHECK_INT(fMinY); SetRect(&rRect, 0, 0, ARX_CLEAN_WARN_CAST_INT(fMinX), ARX_CLEAN_WARN_CAST_INT(fMinY) ); int lLenghtCurr=0; long lLenght = 0; _TCHAR *lpszQuests = NULL; QuestBook.pages[0]=0; for (long i=0; i0) { danaeApp.DANAEEndRender(); long lLengthDraw=ARX_UNICODE_ForceFormattingInRect( hFontInGameNote, lpszQuests + lLenghtCurr, 0, rRect); danaeApp.DANAEStartRender(); lLenght -= lLengthDraw; lLenghtCurr += lLengthDraw; if (lCurPage + 1 < MAX_PAGES) QuestBook.pages[lCurPage++] = lLenghtCurr; } if (lCurPage + 1 < MAX_PAGES) QuestBook.pages[lCurPage++] = -1; else QuestBook.pages[MAX_PAGES-1] = -1; QuestBook.totpages = lCurPage; //--------------------------------------------------------------------- // render if (QuestBook.curpage >= QuestBook.totpages) QuestBook.curpage = QuestBook.totpages-1; if (QuestBook.curpage < 0) QuestBook.curpage = 0; if (QuestBook.curpage>1) { x0 = 8 + fPosX; y0 = -6 + fPosY + ITC.questbook->m_dwHeight - ITC.pTexCornerLeft->m_dwHeight; DrawBookInterfaceItem(GDevice, ITC.pTexCornerLeft, x0, y0); if (MouseInBookRect(x0,y0,x0+ITC.pTexCornerLeft->m_dwWidth,y0+ITC.pTexCornerLeft->m_dwHeight)) { SpecialCursor=CURSOR_INTERACTION_ON; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); QuestBook.curpage -= 2; } } } if ((QuestBook.curpage + 4) < QuestBook.totpages) { x0 = -15 + fPosX + ITC.questbook->m_dwWidth - ITC.pTexCornerRight->m_dwWidth; y0 = -6 + fPosY + ITC.questbook->m_dwHeight - ITC.pTexCornerRight->m_dwHeight; DrawBookInterfaceItem(GDevice, ITC.pTexCornerRight, x0, y0); if (MouseInBookRect(x0,y0,x0+ITC.pTexCornerRight->m_dwWidth,y0+ITC.pTexCornerRight->m_dwHeight)) { SpecialCursor=CURSOR_INTERACTION_ON; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { ARX_SOUND_PlayInterface(SND_BOOK_PAGE_TURN, 0.9F + 0.2F * rnd()); QuestBook.curpage+=2; } } } if (QuestBook.pages[QuestBook.curpage]>=0) { if(QuestBook.pages[QuestBook.curpage+1]>0) { _tcsncpy(Page_Buffer, lpszQuests + QuestBook.pages[QuestBook.curpage], QuestBook.pages[QuestBook.curpage+1] - QuestBook.pages[QuestBook.curpage]); Page_Buffer[QuestBook.pages[QuestBook.curpage+1] - QuestBook.pages[QuestBook.curpage]]=_T('\0'); DrawBookTextInRect( NotePosX + NoteTextMinx, NotePosY + NoteTextMiny, NotePosX + NoteTextMaxx, NotePosY + NoteTextMaxy, Page_Buffer, 0, 0x00FF00FF, hFontInGameNote); if(QuestBook.pages[QuestBook.curpage+2]>0) { _tcsncpy(Page_Buffer, lpszQuests + QuestBook.pages[QuestBook.curpage+1], QuestBook.pages[QuestBook.curpage+2] - QuestBook.pages[QuestBook.curpage+1]); Page_Buffer[QuestBook.pages[QuestBook.curpage+2] - QuestBook.pages[QuestBook.curpage+1]]=_T('\0'); DrawBookTextInRect( NotePosX + NoteTextMinx + (NoteTextMaxx - NoteTextMinx) +20, NotePosY + NoteTextMiny, NotePosX + NoteTextMaxx + (NoteTextMaxx - NoteTextMinx) +20, NotePosY + NoteTextMaxy, Page_Buffer, 0, 0x00FF00FF, hFontInGameNote); } } else { if(QuestBook.pages[QuestBook.curpage]>=0) { _tcscpy(Page_Buffer, lpszQuests + QuestBook.pages[QuestBook.curpage]); DrawBookTextInRect( NotePosX + NoteTextMinx, NotePosY + NoteTextMiny, NotePosX+NoteTextMaxx, NotePosY + NoteTextMaxy, Page_Buffer, 0, 0x00FF00FF, hFontInGameNote); } } } delete []lpszQuests; } } if ((Book_Mode==0) && (inter.iobj[0]->obj!=NULL)) { SETZWRITE(GDevice,true); danaeApp.EnableZBuffer(); SetFilteringMode(GDevice,1); D3DRECT rec; if (BOOKZOOM) { F2L((float)((118.F+BOOKDECX)*Xratio),&rec.x1); F2L((float)((69.f +BOOKDECY)*Yratio),&rec.y1); F2L((float)((280.f + BOOKDECY)*Xratio), &rec.x2); F2L((float)((310.f+BOOKDECY)*Yratio),&rec.y2); GDevice->Clear( 1, &rec, D3DCLEAR_ZBUFFER, 0, 1.f, 0L ); if (ARXmenu.currentmode!=AMCM_OFF) danaeApp.SetClipping(139.f*Xratio,0,139.f*Xratio,310.f*Yratio); } else { F2L((float)((118.F+BOOKDECX)*Xratio),&rec.x1); F2L((float)((69.f +BOOKDECY)*Yratio),&rec.y1); F2L((float)((300.f+50+BOOKDECX)*Xratio),&rec.x2); F2L((float)((338.f+BOOKDECY)*Yratio),&rec.y2); GDevice->Clear( 1, &rec, D3DCLEAR_ZBUFFER, 0, 1.f, 0L ); rec.x2 -= 50; } if (ARXmenu.currentmode==AMCM_OFF) BOOKZOOM=0; EERIE_3D pos; EERIE_LIGHT eLight1; EERIE_LIGHT eLight2; eLight1.pos.x=50.f; eLight1.pos.y=50.f; eLight1.pos.z=200.f; eLight1.exist=1; eLight1.rgb.r = 0.15f; eLight1.rgb.g = 0.06f; eLight1.rgb.b = 0.003f; eLight1.intensity = 8.8f; eLight1.fallstart = 2020; eLight1.fallend=eLight1.fallstart+60; eLight1.rgb255.r=eLight1.rgb.r*255.f; eLight1.rgb255.g=eLight1.rgb.g*255.f; eLight1.rgb255.b=eLight1.rgb.b*255.f; eLight1.falldiff=eLight1.fallend-eLight1.fallstart; eLight1.falldiffmul=1.f/eLight1.falldiff; eLight1.precalc=eLight1.intensity*GLOBAL_LIGHT_FACTOR; eLight2.exist=1; eLight2.pos.x=-50.f; eLight2.pos.y=-50.f; eLight2.pos.z = -200.f; eLight2.rgb.r=0.6f; eLight2.rgb.g=0.6f; eLight2.rgb.b=0.6f; eLight2.intensity=3.8f; eLight2.fallstart = 0; eLight2.fallend=eLight2.fallstart+3460.f; eLight2.rgb255.r=eLight2.rgb.r*255.f; eLight2.rgb255.g=eLight2.rgb.g*255.f; eLight2.rgb255.b=eLight2.rgb.b*255.f; eLight2.falldiff=eLight2.fallend-eLight2.fallstart; eLight2.falldiffmul=1.f/eLight2.falldiff; eLight2.precalc=eLight2.intensity*GLOBAL_LIGHT_FACTOR; EERIE_LIGHT * SavePDL[2]; SavePDL[0]=PDL[0]; SavePDL[1]=PDL[1]; int iSavePDL=TOTPDL; PDL[0] = &eLight1; PDL[1] = &eLight2; TOTPDL = 2; EERIE_CAMERA * oldcam=ACTIVECAM; bookcam.centerx=(rec.x2-rec.x1)/2+rec.x1; bookcam.centery=(rec.y2-rec.y1)/2+rec.y1; SetActiveCamera(&bookcam); PrepareCamera(&bookcam); D3DVIEWPORT7 vp; if (BOOKZOOM) { vp.dwX = ARX_CLEAN_WARN_CAST_DWORD( rec.x1 + 52.f * Xratio ); vp.dwY = rec.y1; vp.dwWidth = ARX_CLEAN_WARN_CAST_DWORD( rec.x2 - rec.x1 - 73.f * Xratio ); vp.dwHeight = ARX_CLEAN_WARN_CAST_DWORD( rec.y2 - rec.y1 - 17.f * Yratio ); } else { vp.dwX = rec.x1; vp.dwY = rec.y1; vp.dwWidth = rec.x2 - rec.x1; vp.dwHeight = rec.y2 - rec.y1; } vp.dvMinZ = 0.f; vp.dvMaxZ = 1.f; GDevice->SetViewport(&vp); ePlayerAngle.a=0.f; ePlayerAngle.g=0.f; if (BOOKZOOM) { pos.x=8; pos.y=162.f; pos.z=75.f; eLight1.pos.z=-90.f; } else { ePlayerAngle.b=-20.f; pos.x=20.f; pos.y=96.f; pos.z=260.f; } if (!BOOKZOOM) ARX_EQUIPMENT_AttachPlayerWeaponToHand(); long ti=Project.improve; Project.improve=0; if (inter.iobj[0]->invisibility>0.f) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); } INVISIBILITY_OVERRIDE=inter.iobj[0]->invisibility; if (INVISIBILITY_OVERRIDE>0.5f) INVISIBILITY_OVERRIDE=0.5f; FORCE_NO_HIDE=1; IN_BOOK_DRAW=1; EERIE_VERTEX * vertexlist=(EERIE_VERTEX *)malloc(sizeof(EERIE_VERTEX)*inter.iobj[0]->obj->nbvertex); memcpy(vertexlist,inter.iobj[0]->obj->vertexlist3,sizeof(EERIE_VERTEX)*inter.iobj[0]->obj->nbvertex); if (player.useanim.cur_anim != NULL) { ARX_CHECK_ULONG(Original_framedelay); EERIEDrawAnimQuat(GDevice,inter.iobj[0]->obj, &player.useanim,&ePlayerAngle,&pos, ARX_CLEAN_WARN_CAST_ULONG(Original_framedelay), NULL,D3DCOLORWHITE,NULL); } else { DrawEERIEInter(GDevice,inter.iobj[0]->obj,&ePlayerAngle,&pos,NULL); } INVISIBILITY_OVERRIDE=0; IN_BOOK_DRAW=0; if(ARXmenu.currentmode==AMCM_NEWQUEST) { if(bRenderInterList) { GDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_NONE); SETALPHABLEND(GDevice,FALSE); PopAllTriangleList(true); SETALPHABLEND(GDevice,TRUE); PopAllTriangleListTransparency(); SETALPHABLEND(GDevice,FALSE); GDevice->SetTextureStageState( 0, D3DTSS_MIPFILTER, D3DTFP_POINT); } } PDL[0]=SavePDL[0]; PDL[1]=SavePDL[1]; TOTPDL=iSavePDL; memcpy(inter.iobj[0]->obj->vertexlist3,vertexlist,sizeof(EERIE_VERTEX)*inter.iobj[0]->obj->nbvertex); free(vertexlist); FORCE_NO_HIDE=0; Project.improve=ti; vp.dwX = 0; vp.dwY = 0; vp.dwWidth = DANAESIZX; vp.dwHeight = DANAESIZY; vp.dvMinZ = 0.f; vp.dvMaxZ = 1.f; GDevice->SetViewport(&vp); if (ARXmenu.currentmode!=AMCM_OFF) { danaeApp.SetClipping(0,0,(float)DANAESIZX,(float)DANAESIZY); } SETALPHABLEND(GDevice,FALSE); SETCULL(GDevice,D3DCULL_NONE); SetActiveCamera(oldcam); INTERACTIVE_OBJ * io=inter.iobj[0]; if (io) { player.useanim.cur_anim = herowaitbook; if ( (player.equiped[EQUIP_SLOT_WEAPON]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_WEAPON] )) { if (inter.iobj[player.equiped[EQUIP_SLOT_WEAPON]]->type_flags & OBJECT_TYPE_2H) { player.useanim.cur_anim = herowait_2h; } } SETCULL(GDevice,D3DCULL_NONE); if ( (player.equiped[EQUIP_SLOT_ARMOR]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_ARMOR] )) { INTERACTIVE_OBJ * tod=inter.iobj[player.equiped[EQUIP_SLOT_ARMOR]]; if (tod) { tod->bbox1.x = 195; tod->bbox1.y = 116; tod->bbox2.x = 284; tod->bbox2.y = 182; float fX1 = (tod->bbox1.x+BOOKDECX) * Xratio ; float fX2 = (tod->bbox2.x+BOOKDECX) * Xratio ; float fY1 = (tod->bbox1.y+BOOKDECY) * Yratio ; float fY2 = (tod->bbox2.y+BOOKDECY) * Yratio ; ARX_CHECK_SHORT(fX1); ARX_CHECK_SHORT(fY1); ARX_CHECK_SHORT(fX2); ARX_CHECK_SHORT(fY2); tod->bbox1.x = ARX_CLEAN_WARN_CAST_SHORT(fX1); tod->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fX2); tod->bbox1.y = ARX_CLEAN_WARN_CAST_SHORT(fY1); tod->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fY2); tod->ioflags|=IO_ICONIC; } } if ( (player.equiped[EQUIP_SLOT_LEGGINGS]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_LEGGINGS] )) { INTERACTIVE_OBJ * tod=inter.iobj[player.equiped[EQUIP_SLOT_LEGGINGS]]; if (tod) { tod->bbox1.x = 218; tod->bbox1.y = 183; tod->bbox2.x = 277; tod->bbox2.y = 322; float fX1 = (tod->bbox1.x+BOOKDECX) * Xratio ; float fX2 = (tod->bbox2.x+BOOKDECX) * Xratio ; float fY1 = (tod->bbox1.y+BOOKDECY) * Yratio ; float fY2 = (tod->bbox2.y+BOOKDECY) * Yratio ; ARX_CHECK_SHORT(fX1); ARX_CHECK_SHORT(fY1); ARX_CHECK_SHORT(fX2); ARX_CHECK_SHORT(fY2); tod->bbox1.x = ARX_CLEAN_WARN_CAST_SHORT(fX1); tod->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fX2); tod->bbox1.y = ARX_CLEAN_WARN_CAST_SHORT(fY1); tod->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fY2); tod->ioflags|=IO_ICONIC; } } if ( (player.equiped[EQUIP_SLOT_HELMET]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_HELMET] )) { INTERACTIVE_OBJ * tod=inter.iobj[player.equiped[EQUIP_SLOT_HELMET]]; if (tod) { tod->bbox1.x = 218; tod->bbox1.y = 75; tod->bbox2.x = 260; tod->bbox2.y = 115; float fX1 = (tod->bbox1.x+BOOKDECX) * Xratio ; float fX2 = (tod->bbox2.x+BOOKDECX) * Xratio ; float fY1 = (tod->bbox1.y+BOOKDECY) * Yratio ; float fY2 = (tod->bbox2.y+BOOKDECY) * Yratio ; ARX_CHECK_SHORT(fX1); ARX_CHECK_SHORT(fY1); ARX_CHECK_SHORT(fX2); ARX_CHECK_SHORT(fY2); tod->bbox1.x = ARX_CLEAN_WARN_CAST_SHORT(fX1); tod->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fX2); tod->bbox1.y = ARX_CLEAN_WARN_CAST_SHORT(fY1); tod->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fY2); tod->ioflags|=IO_ICONIC; } } TextureContainer * tc; TextureContainer * tc2=NULL; SETCULL(GDevice,D3DCULL_NONE); if ( (player.equiped[EQUIP_SLOT_RING_LEFT]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_RING_LEFT] )) { INTERACTIVE_OBJ * todraw=inter.iobj[player.equiped[EQUIP_SLOT_RING_LEFT]]; tc=todraw->inv; if (NeedHalo(todraw)) tc2 = todraw->inv->TextureHalo; if (tc) { todraw->bbox1.x=146; todraw->bbox1.y=312; if ((todraw->poisonous) && (todraw->poisonous_count!=0)) BOOKINTERFACEITEMCOLOR=0xFF00FF00; else BOOKINTERFACEITEMCOLOR=D3DCOLORWHITE; DrawBookInterfaceItem(GDevice,tc,todraw->bbox1.x,todraw->bbox1.y,0); BOOKINTERFACEITEMCOLOR=D3DCOLORWHITE; if (tc2!=NULL) { ARX_INTERFACE_HALO_Draw(todraw,GDevice,tc,tc2,todraw->bbox1.x*Xratio,todraw->bbox1.y*Yratio, Xratio, Yratio); } float fWidth = todraw->bbox1.x + ARX_CLEAN_WARN_CAST_FLOAT( tc->m_dwWidth ); float fHeight = todraw->bbox1.y + ARX_CLEAN_WARN_CAST_FLOAT( tc->m_dwHeight ); ARX_CHECK_SHORT(fWidth); ARX_CHECK_SHORT(fHeight); todraw->bbox2.x=ARX_CLEAN_WARN_CAST_SHORT(fWidth); todraw->bbox2.y=ARX_CLEAN_WARN_CAST_SHORT(fHeight); float fX1 = (todraw->bbox1.x+BOOKDECX) * Xratio ; float fX2 = (todraw->bbox2.x+BOOKDECX) * Xratio ; float fY1 = (todraw->bbox1.y+BOOKDECY) * Yratio ; float fY2 = (todraw->bbox2.y+BOOKDECY) * Yratio ; ARX_CHECK_SHORT(fX1); ARX_CHECK_SHORT(fY1); ARX_CHECK_SHORT(fX2); ARX_CHECK_SHORT(fY2); todraw->bbox1.x = ARX_CLEAN_WARN_CAST_SHORT(fX1); todraw->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fX2); todraw->bbox1.y = ARX_CLEAN_WARN_CAST_SHORT(fY1); todraw->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fY2); todraw->ioflags|=IO_ICONIC; } } tc2=NULL; if ( (player.equiped[EQUIP_SLOT_RING_RIGHT]!=0) && ValidIONum(player.equiped[EQUIP_SLOT_RING_RIGHT] )) { INTERACTIVE_OBJ * todraw=inter.iobj[player.equiped[EQUIP_SLOT_RING_RIGHT]]; tc=todraw->inv; if (NeedHalo(todraw)) tc2=todraw->inv->TextureHalo; if (tc) { todraw->bbox1.x=296; todraw->bbox1.y=312; if ((todraw->poisonous) && (todraw->poisonous_count!=0)) BOOKINTERFACEITEMCOLOR=0xFF00FF00; else BOOKINTERFACEITEMCOLOR=D3DCOLORWHITE; DrawBookInterfaceItem(GDevice,tc,todraw->bbox1.x,todraw->bbox1.y,0); BOOKINTERFACEITEMCOLOR=D3DCOLORWHITE; if (tc2!=NULL) { ARX_INTERFACE_HALO_Draw(todraw,GDevice,tc,tc2,todraw->bbox1.x*Xratio,todraw->bbox1.y*Yratio, Xratio, Yratio); } float fWidth = todraw->bbox1.x + ARX_CLEAN_WARN_CAST_FLOAT( tc->m_dwWidth ); float fHeight = todraw->bbox1.y + ARX_CLEAN_WARN_CAST_FLOAT( tc->m_dwHeight ); ARX_CHECK_SHORT(fWidth); ARX_CHECK_SHORT(fHeight); todraw->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fWidth); todraw->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fHeight); float fX1 = (todraw->bbox1.x+BOOKDECX) * Xratio ; float fX2 = (todraw->bbox2.x+BOOKDECX) * Xratio ; float fY1 = (todraw->bbox1.y+BOOKDECY) * Yratio ; float fY2 = (todraw->bbox2.y+BOOKDECY) * Yratio ; ARX_CHECK_SHORT(fX1); ARX_CHECK_SHORT(fY1); ARX_CHECK_SHORT(fX2); ARX_CHECK_SHORT(fY2); todraw->bbox1.x = ARX_CLEAN_WARN_CAST_SHORT(fX1); todraw->bbox2.x = ARX_CLEAN_WARN_CAST_SHORT(fX2); todraw->bbox1.y = ARX_CLEAN_WARN_CAST_SHORT(fY1); todraw->bbox2.y = ARX_CLEAN_WARN_CAST_SHORT(fY2); todraw->ioflags|=IO_ICONIC; } } if (!BOOKZOOM) ARX_EQUIPMENT_AttachPlayerWeaponToBack(); //blue halo rendering (keyword : BLUE HALO RENDERING HIGHLIGHT AURA) if (HALOCUR>0) { SETTC(GDevice,NULL); SETBLENDMODE(GDevice,D3DBLEND_SRCCOLOR,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); SETCULL(GDevice,D3DCULL_NONE); SETZWRITE(GDevice,FALSE); for (int i=0;i>> DO NOT USE VERTEX BUFFER HERE <<< SETBLENDMODE(GDevice,D3DBLEND_SRCCOLOR,D3DBLEND_ONE); } else EERIEDRAWPRIM(GDevice,D3DPT_TRIANGLEFAN, D3DFVF_TLVERTEX| D3DFVF_DIFFUSE , vert, 4, 0, 0 ); //>>> DO NOT USE VERTEX BUFFER HERE <<< } HALOCUR=0; SETALPHABLEND(GDevice,FALSE); } } } // Restoring bSoftRender (Fix && bGATI8500). bSoftRender = bOldSoftRender; bGATI8500 = bOldGATI8500; } //----------------------------------------------------------------------------- void DANAE::DrawAllInterfaceFinish() { currpos = ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO(50.f)); float rrr; rrr=1.f-PULSATE*DIV2; if (rrr>1.f) rrr=1.f; else if (rrr<0.f) rrr=0.f; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,TRUE); PRECAST_NUM=0; for (long i=0;inb_spells_on;i++) { if (spells[inter.iobj[0]->spells_on[i]].caster!=0) if (spellicons[spells[i].type].bDuration) ManageSpellIcon(inter.iobj[0]->spells_on[i],rrr,1); } } if (!(player.Interface & INTER_INVENTORYALL) && !(player.Interface & INTER_MAP)) { for (int i=0;i0) &&(ARXTime>=Precast[i].launch_time)) { float tt=(ARXTime-Precast[i].launch_time)*DIV1000; if (tt>1.f) tt=1.f; val*=(1.f-tt); } ManageSpellIcon(Precast[i].typ,val,2); } } } } void ARX_INTERFACE_DrawCurrentTorch() { if ((player.Interface & INTER_NOTE) && (TSecondaryInventory != NULL) && ((Note.type == NOTE_TYPE_BIGNOTE) || (Note.type == NOTE_TYPE_BOOK)) ) return; float px, py; px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(110); if (px < INTERFACE_RATIO(10)) px = INTERFACE_RATIO(10); py = DANAESIZY - INTERFACE_RATIO(158+32); GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,false); EERIEDrawBitmap(GDevice, px, py, INTERFACE_RATIO_DWORD(CURRENT_TORCH->inv->m_dwWidth), INTERFACE_RATIO_DWORD(CURRENT_TORCH->inv->m_dwHeight), 0.001f, CURRENT_TORCH->inv,D3DCOLORWHITE); danaeApp.EnableZBuffer(); if ( rnd() > 0.2f ) { long j=ARX_PARTICLES_GetFree(); if ( ( j != -1 ) && ( !ARXPausedTimer ) ) { ParticleCount++; PARTICLE_DEF * pd = &particle[j]; pd->special = FIRE_TO_SMOKE; pd->exist = TRUE; pd->zdec = 0; pd->ov.x = px + INTERFACE_RATIO( 12 ) + rnd() * INTERFACE_RATIO( 3.f ) - rnd() * INTERFACE_RATIO( 6.f ); pd->ov.y = py + rnd() * INTERFACE_RATIO( 6.f ); pd->ov.z = 0.0000001f; pd->move.x = INTERFACE_RATIO(1.5f)-rnd()*INTERFACE_RATIO(3.f); pd->move.y = -INTERFACE_RATIO(5.f)+rnd()*INTERFACE_RATIO(1.f); pd->move.z = 0.f; pd->scale.x = 1.8f; pd->scale.y = 1.8f; pd->scale.z = 1.f; pd->timcreation = lARXTime; pd->tolive = 500+(unsigned long)(rnd()*400.f); pd->tc = fire2; pd->r = 1.f; pd->g = 0.6f; pd->b = 0.5f; pd->siz = INTERFACE_RATIO(14.f); pd->type = PARTICLE_2D; } } } extern float GLOBAL_SLOWDOWN; extern long SPLASH_THINGS_STAGE; //----------------------------------------------------------------------------- void DANAE::DrawAllInterface() { GDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_POINT ); GDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_POINT ); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_CLAMP); if (!EDITMODE) { //--------------------------------------------------------------------- if (player.Interface & INTER_COMBATMODE) { float j; if (AimTime==0) j=0.2f; else { if (BOW_FOCAL) { j=(float)(BOW_FOCAL)/710.f; } else { float at=(float)ARXTime-(float)AimTime; if (at>0.f) bIsAiming = true; else bIsAiming = false; at=at*(1.f+(1.f-GLOBAL_SLOWDOWN)); float aim = ARX_CLEAN_WARN_CAST_FLOAT(player.Full_AimTime); j=at/aim; } if (j>1.f) j=1.f; else if (j<0.2f) j=0.2f; } SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, TRUE ); ARX_INTERFACE_DrawItem(ITC.aim_maxi, DANAECENTERX + INTERFACE_RATIO(-320+262.f), DANAESIZY + INTERFACE_RATIO(-72.f), 0.0001f, D3DRGB(j,j,j)); GDevice->SetRenderState( D3DRENDERSTATE_ALPHABLENDENABLE, FALSE ); ARX_INTERFACE_DrawItem(ITC.aim_empty, DANAECENTERX + INTERFACE_RATIO(-320+262.f), DANAESIZY + INTERFACE_RATIO(-72.f), 0.0001f, D3DRGB(1,1,1)); if (bHitFlash) { if (player.Full_Skill_Etheral_Link >= 40) { float j = 1.0f - fHitFlash; SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, true ); long col = 0; if (j < 0.5f) col = D3DRGB(j*2.0f,1,0); else col = D3DRGB(1,fHitFlash,0); ARX_INTERFACE_DrawItem(ITC.aim_hit, DANAECENTERX + INTERFACE_RATIO(-320+262.f-25), DANAESIZY + INTERFACE_RATIO(-72.f-30), 0.0001f, col); GDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, false); } } } if (bHitFlash) { float fCalc = ulHitFlash + Original_framedelay ; ARX_CHECK_ULONG(fCalc); ulHitFlash = ARX_CLEAN_WARN_CAST_ULONG(fCalc); if (ulHitFlash >= 500) { bHitFlash = false; ulHitFlash = 0; } } //--------------------------------------------------------------------- INTERACTIVE_OBJ * io = NULL; if (SecondaryInventory!=NULL) { io = (INTERACTIVE_OBJ *)SecondaryInventory->io; } else if (player.Interface & INTER_STEAL) { io = ioSteal; } if (io!=NULL) { float dist=Distance3D(io->pos.x,io->pos.y,io->pos.z, player.pos.x,player.pos.y+80.f,player.pos.z); if (Project.telekinesis) { if (dist > 900.f) { if (InventoryDir != -1) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } else { if (player.Interface & INTER_STEAL) { player.Interface &= ~INTER_STEAL; } } } } else if (dist > 350.f) { if (InventoryDir != -1) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); InventoryDir=-1; SendIOScriptEvent(io,SM_INVENTORY2_CLOSE,""); TSecondaryInventory=SecondaryInventory; SecondaryInventory=NULL; } else { if (player.Interface & INTER_STEAL) { player.Interface &= ~INTER_STEAL; } } } } else if (InventoryDir != -1) { InventoryDir = -1; } if (!PLAYER_INTERFACE_HIDE_COUNT && (TSecondaryInventory != NULL)) { ARX_INTERFACE_DrawSecondaryInventory((bool)((player.Interface & INTER_STEAL) != 0)); } if (!PLAYER_INTERFACE_HIDE_COUNT) { if ((player.Interface & INTER_INVENTORY)) { if ((player.Interface & INTER_COMBATMODE) || (player.doingmagic>=2)) { long t; F2L((float)(Original_framedelay*DIV5)+2,&t); InventoryY += ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO_LONG(t)); if ( InventoryY > INTERFACE_RATIO( 110.f ) ) InventoryY = ARX_CLEAN_WARN_CAST_LONG( INTERFACE_RATIO( 110.f ) ); } else { if (bInventoryClosing) { long t; F2L((float)(Original_framedelay*DIV5)+2,&t); InventoryY += ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO_LONG(t)); if (InventoryY > INTERFACE_RATIO(110)) { InventoryY = ARX_CLEAN_WARN_CAST_LONG( INTERFACE_RATIO( 110.f ) ); bInventoryClosing = false; player.Interface &=~ INTER_INVENTORY; if (bInventorySwitch) { bInventorySwitch = false; ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); player.Interface |= INTER_INVENTORYALL; ARX_INTERFACE_NoteClose(); InventoryY = ARX_CLEAN_WARN_CAST_LONG( INTERFACE_RATIO( 121.f ) * (player.bag) ); lOldInterface=INTER_INVENTORYALL; } } } else if (InventoryY>0) { InventoryY -= ARX_CLEAN_WARN_CAST_LONG( INTERFACE_RATIO( ( Original_framedelay * DIV5 ) + 2.f ) ); if (InventoryY<0) InventoryY=0; } } if (player.bag) { ARX_INTERFACE_DrawInventory(sActiveInventory); float fCenterX = DANAECENTERX + INTERFACE_RATIO(-320 + 35) + INTERFACE_RATIO_DWORD(ITC.hero_inventory->m_dwWidth) - INTERFACE_RATIO(32 + 3) ; float fSizY = DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + INTERFACE_RATIO(- 3 + 25) ; ARX_CHECK_INT(fCenterX); ARX_CHECK_INT(fSizY); float posx = ARX_CAST_TO_INT_THEN_FLOAT( fCenterX ); float posy = ARX_CAST_TO_INT_THEN_FLOAT( fSizY ); if (sActiveInventory > 0) { ARX_INTERFACE_DrawItem(ITC.hero_inventory_up, posx, posy); if (MouseInRect(posx, posy, posx+INTERFACE_RATIO(32), posy+INTERFACE_RATIO(32))) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); SpecialCursor=CURSOR_INTERACTION_ON; ARX_INTERFACE_DrawItem(ITC.hero_inventory_up, posx, posy); SETALPHABLEND(GDevice,false); SpecialCursor=CURSOR_INTERACTION_ON; if (((EERIEMouseButton & 1) && !(LastMouseClick & 1)) || ((!(EERIEMouseButton & 1)) && (LastMouseClick & 1) && (DRAGINTER!=NULL))) { if (sActiveInventory > 0) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory --; } EERIEMouseButton &=~1; } } } if (sActiveInventory < player.bag-1) { float fRatio = INTERFACE_RATIO(32 + 5); ARX_CHECK_INT(posy + fRatio); posy += ARX_CLEAN_WARN_CAST_INT(fRatio); ARX_INTERFACE_DrawItem(ITC.hero_inventory_down, posx, DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + INTERFACE_RATIO(-3 + 64)); if (MouseInRect(posx, posy, posx+INTERFACE_RATIO(32), posy+INTERFACE_RATIO(32))) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.hero_inventory_down, posx, DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + INTERFACE_RATIO(-3 + 64)); SETALPHABLEND(GDevice,false); SpecialCursor=CURSOR_INTERACTION_ON; if (((EERIEMouseButton & 1) && !(LastMouseClick & 1)) || ((!(EERIEMouseButton & 1)) && (LastMouseClick & 1) && (DRAGINTER!=NULL))) { if (sActiveInventory < player.bag-1) { ARX_SOUND_PlayInterface(SND_BACKPACK, 0.9F + 0.2F * rnd()); sActiveInventory ++; } EERIEMouseButton &=~1; } } } } } else if ((player.Interface & INTER_INVENTORYALL) || bInventoryClosing) { float fSpeed = DIV3; if ((player.Interface & INTER_COMBATMODE) || (player.doingmagic>=2)) { if (InventoryY < INTERFACE_RATIO(121)*player.bag) { InventoryY += ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO((Original_framedelay * fSpeed) + 2.f)); } } else { if (bInventoryClosing) { InventoryY += ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO((Original_framedelay * fSpeed) + 2.f)); if ( InventoryY > INTERFACE_RATIO(121) * player.bag ) { bInventoryClosing = false; if (player.Interface & INTER_INVENTORYALL) { player.Interface &=~ INTER_INVENTORYALL; } lOldInterface=0; } } else if (InventoryY>0) { InventoryY -= ARX_CLEAN_WARN_CAST_LONG(INTERFACE_RATIO((Original_framedelay * fSpeed) + 2.f)); if (InventoryY<0) { InventoryY=0; } } } const float fBag = (player.bag-1)*INTERFACE_RATIO(-121); float fCenterX = DANAECENTERX + INTERFACE_RATIO(-320+35); float fSizY = DANAESIZY - INTERFACE_RATIO(101) + INTERFACE_RATIO_LONG(InventoryY) + INTERFACE_RATIO(-3.f + 25 - 32); const float fOffsetY = INTERFACE_RATIO(121); ARX_CHECK_INT(fBag); ARX_CHECK_INT(fCenterX); ARX_CHECK_INT(fSizY); ARX_CHECK_INT(fBag + fOffsetY); int iOffsetY = ARX_CLEAN_WARN_CAST_INT(fBag); int posx = ARX_CLEAN_WARN_CAST_INT(fCenterX); int posy = ARX_CLEAN_WARN_CAST_INT(fSizY); iOffsetY +=ARX_CLEAN_WARN_CAST_INT(fOffsetY); for (int i=0; im_dwWidth)*0.5f + INTERFACE_RATIO(-16), posy+iOffsetY + INTERFACE_RATIO(-5)); ARX_INTERFACE_DrawItem(ITC.hero_inventory_link, posx+INTERFACE_RATIO_DWORD(ITC.hero_inventory->m_dwWidth) + INTERFACE_RATIO(-45-32), posy+iOffsetY + INTERFACE_RATIO(-15)); ARX_CHECK_INT(iOffsetY + fOffsetY); iOffsetY += ARX_CLEAN_WARN_CAST_INT(fOffsetY); } iOffsetY = ARX_CLEAN_WARN_CAST_INT(fBag); for (short i=0; ibAutoReadyWeapon == false) && !(player.Interface & INTER_COMBATMODE) && (!ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE))) ) { if ((FlyingOverIO->ioflags & IO_ITEM) && (!DRAGINTER)) if (SecondaryInventory!=NULL) { INTERACTIVE_OBJ * temp=(INTERACTIVE_OBJ *)SecondaryInventory->io; if (temp->ioflags & IO_SHOP) { float px = DANAEMouse.x; float py = ARX_CLEAN_WARN_CAST_FLOAT(DANAEMouse.y - 10); if (InSecondaryInventoryPos(&DANAEMouse)) { long amount=ARX_INTERACTIVE_GetPrice(FlyingOverIO,temp); // achat float famount = amount - amount * ( (float)player.Full_Skill_Intuition ) * 0.005f; ARX_CHECK_LONG( famount ); //Should always be OK because amount is supposed positive amount = ARX_CLEAN_WARN_CAST_LONG( famount ); if ( amount <= player.gold ) ARX_INTERFACE_DrawNumber(px,py,amount,6,D3DRGB(0,1,0)); else ARX_INTERFACE_DrawNumber(px,py,amount,6,D3DRGB(1,0,0)); } else if (InPlayerInventoryPos(&DANAEMouse)) { long amount = ARX_CLEAN_WARN_CAST_LONG( ARX_INTERACTIVE_GetPrice( FlyingOverIO, temp ) / 3.0f ); // achat float famount = amount + amount * ( (float) player.Full_Skill_Intuition ) * 0.005f; ARX_CHECK_LONG( famount ); //Should always be OK because amount is supposed positive amount = ARX_CLEAN_WARN_CAST_LONG( famount ); if (amount) { if ((!(temp->shop_category)) || ((temp->shop_category) && (IsIOGroup(FlyingOverIO,temp->shop_category)))) ARX_INTERFACE_DrawNumber(px,py,amount,6,D3DRGB(0,1,0)); else ARX_INTERFACE_DrawNumber(px,py,amount,6,D3DRGB(1,0,0)); } } } } SpecialCursor=CURSOR_INTERACTION_ON; } ARX_INTERFACE_DrawDamagedEquipment(); if ((!(player.Interface & INTER_COMBATMODE))) { if (player.Interface & INTER_MINIBACK) { // Draw/Manage Book Icon float px=DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE+GL_DECAL_ICONS; float py=DANAESIZY - INTERFACE_RATIO(148); ARX_INTERFACE_DrawItem(ITC.book, px, py); if (eMouseState == MOUSE_IN_BOOK_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.book, px, py); SETALPHABLEND(GDevice,false); } // Draw/Manage BackPack Icon px=DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE+GL_DECAL_ICONS; py=DANAESIZY - INTERFACE_RATIO(113); ARX_INTERFACE_DrawItem(ITC.backpack,px,py); if (eMouseState == MOUSE_IN_INVENTORY_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.backpack,px,py); SETALPHABLEND(GDevice,false); } // Draw/Manage Steal Icon if (player.Interface & INTER_STEAL) { px = ARX_CLEAN_WARN_CAST_FLOAT(-lSLID_VALUE); py = DANAESIZY - INTERFACE_RATIO(78.f + 32); ARX_INTERFACE_DrawItem(ITC.steal, px, py); if (eMouseState == MOUSE_IN_STEAL_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.steal, px, py); SETALPHABLEND(GDevice,false); } } // Draw / Manage Pick All - Close Secondary inventory icon if (!PLAYER_INTERFACE_HIDE_COUNT && (TSecondaryInventory!=NULL)) { px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO(16); py = INTERFACE_RATIO_DWORD(BasicInventorySkin->m_dwHeight) - INTERFACE_RATIO(16); INTERACTIVE_OBJ * temp=(INTERACTIVE_OBJ *)TSecondaryInventory->io; if (temp && !(temp->ioflags & IO_SHOP) && !(temp == ioSteal)) { ARX_INTERFACE_DrawItem(ITC.inventory_pickall, px, py); if (eMouseState == MOUSE_IN_INVENTORY_PICKALL_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.inventory_pickall, px, py); SETALPHABLEND(GDevice,false); } } px = INTERFACE_RATIO(InventoryX) + INTERFACE_RATIO_DWORD(BasicInventorySkin->m_dwWidth) - INTERFACE_RATIO(32); ARX_INTERFACE_DrawItem(ITC.inventory_close, px, py); if (eMouseState == MOUSE_IN_INVENTORY_CLOSE_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.inventory_close, px, py); SETALPHABLEND(GDevice,false); } } // Draw/Manage Advancement Icon if ((player.Skill_Redistribute) || (player.Attribute_Redistribute)) { px=DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE+GL_DECAL_ICONS; py=DANAESIZY - INTERFACE_RATIO(218); ARX_INTERFACE_DrawItem(ITC.Icon_Lvl_Up,px,py); if (eMouseState == MOUSE_IN_REDIST_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); ARX_INTERFACE_DrawItem(ITC.Icon_Lvl_Up,px,py); SETALPHABLEND(GDevice,false); } } // Draw/Manage Gold Purse Icon if (player.gold>0) { px = DANAESIZX - INTERFACE_RATIO(35) + lSLID_VALUE+2+GL_DECAL_ICONS; py = DANAESIZY - INTERFACE_RATIO(183); ARX_INTERFACE_DrawItem(ITC.gold, px, py); if (eMouseState == MOUSE_IN_GOLD_ICON) { SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); SETALPHABLEND(GDevice,true); SpecialCursor=CURSOR_INTERACTION_ON; ARX_INTERFACE_DrawItem(ITC.gold, px, py); SETALPHABLEND(GDevice,false); ARX_INTERFACE_DrawNumber(px-INTERFACE_RATIO(30),py + INTERFACE_RATIO(10-25), player.gold, 6, D3DRGB(1,1,1)); } } if (bGoldHalo) { float fCalc = ulGoldHaloTime + Original_framedelay; ARX_CHECK_ULONG(fCalc); ulGoldHaloTime = ARX_CLEAN_WARN_CAST_ULONG(fCalc); if (ulGoldHaloTime >= 1000) //1seconde { bGoldHalo = false; } TextureContainer *tc = ITC.gold; TextureContainer *tc2 = NULL; if (ITC.gold->CreateHalo(GDevice)) tc2=ITC.gold->TextureHalo; if (tc2 != NULL) { ARX_INTERFACE_HALO_Render(0.9f, 0.9f, 0.1f, HALO_ACTIVE, tc, tc2, px, py, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } } if (bBookHalo) { float fCalc = ulBookHaloTime + Original_framedelay; ARX_CHECK_ULONG(fCalc); ulBookHaloTime = ARX_CLEAN_WARN_CAST_ULONG(fCalc); if (ulBookHaloTime >= 3000) //3secondes { bBookHalo = false; } float POSX = DANAESIZX-INTERFACE_RATIO(35)+lSLID_VALUE+GL_DECAL_ICONS; float POSY = DANAESIZY-INTERFACE_RATIO(148); TextureContainer *tc = ITC.book; TextureContainer * tc2 = NULL; if (ITC.book->CreateHalo(GDevice)) tc2=ITC.book->TextureHalo; if (tc2 != NULL) { ARX_INTERFACE_HALO_Render(0.2f, 0.4f, 0.8f, HALO_ACTIVE, tc, tc2, POSX, POSY, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } } } if (CURRENT_TORCH) ARX_INTERFACE_DrawCurrentTorch(); } if ((CHANGE_LEVEL_ICON>-1) && (ChangeLevel) ) { //Setting px and py as float to avoid warning on function ARX_INTERFACE_DrawItem and MouseInRect float px = DANAESIZX - INTERFACE_RATIO_DWORD(ChangeLevel->m_dwWidth); float py = 0; GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,false); float vv = 0.9f - EEsin(FrameTime*DIV50)*DIV2+rnd()*DIV10; if ( vv < 0.f ) vv = 0; else if ( vv > 1.f ) vv = 1.f; ARX_INTERFACE_DrawItem( ChangeLevel, px, py, 0.0001f, D3DRGB( vv, vv, vv ) ); danaeApp.EnableZBuffer(); if (MouseInRect(px, py, px + INTERFACE_RATIO_DWORD(ChangeLevel->m_dwWidth), py + INTERFACE_RATIO_DWORD(ChangeLevel->m_dwHeight))) { SpecialCursor=CURSOR_INTERACTION_ON; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { CHANGE_LEVEL_ICON=200; } } } // Draw stealth gauge if (SPLASH_THINGS_STAGE<11) ARX_INTERFACE_Draw_Stealth_Gauge(); // book if ((player.Interface & INTER_MAP )&& (!(player.Interface & INTER_COMBATMODE))) { ARX_INTERFACE_ManageOpenedBook(); ARX_INTERFACE_ManageOpenedBook_Finish(); } if (CurrSpellSymbol || player.SpellToMemorize.bSpell) { int count = 0; int count2 = 0; for (long j=0;j<6;j++) { if (player.SpellToMemorize.iSpellSymbols[j] != 255) count++; if (SpellSymbol[j] != 255) count2 ++; } count = (count2>count)?count2:count; EERIE_3D pos; pos.x = DANAESIZX - ((count) * INTERFACE_RATIO(32)); if (CHANGE_LEVEL_ICON>-1) pos.x -= INTERFACE_RATIO(32); pos.y = 0; for (int i=0; i<6; i++) { bool bHalo = false; if (SpellSymbol[i] != 255) { if (SpellSymbol[i] == player.SpellToMemorize.iSpellSymbols[i]) { bHalo = true; } else { player.SpellToMemorize.iSpellSymbols[i] = SpellSymbol[i]; for (int j=i+1; j<6; j++) { player.SpellToMemorize.iSpellSymbols[j] = 255; } } } if (player.SpellToMemorize.iSpellSymbols[i]!=255) { EERIEDrawBitmap2(GDevice, pos.x, pos.y, INTERFACE_RATIO(32), INTERFACE_RATIO(32), 0, necklace.pTexTab[player.SpellToMemorize.iSpellSymbols[i]] , D3DRGB(1,1,1)); if (bHalo) { TextureContainer *tc = necklace.pTexTab[player.SpellToMemorize.iSpellSymbols[i]]; TextureContainer *tc2; tc->CreateHalo(GDevice); tc2 = tc->TextureHalo; ARX_INTERFACE_HALO_Render(0.2f, 0.4f, 0.8f, HALO_ACTIVE, tc, tc2, pos.x, pos.y, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } if (!(player.rune_flags & (1< 30000) { player.SpellToMemorize.bSpell = false; } } if (player.Interface & INTER_LIFE_MANA) { D3DTLVERTEX v[4]; float px, py; v[0]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.001f ), 1.f, D3DCOLORWHITE, 1, 0.f, 0.f); v[1]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.001f ), 1.f, D3DCOLORWHITE, 1, 1.f, 0.f); v[2]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.001f ), 1.f, D3DCOLORWHITE, 1, 1.f, 1.f); v[3]= D3DTLVERTEX( D3DVECTOR( 0, 0, 0.001f ), 1.f, D3DCOLORWHITE, 1, 0.f, 1.f); GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,false); px = DANAESIZX - INTERFACE_RATIO(33) + INTERFACE_RATIO(1) + lSLID_VALUE; py = DANAESIZY - INTERFACE_RATIO(81); ARX_INTERFACE_DrawItem(ITC.empty_gauge_blue, px, py, 0.f); //399 float fnl=(float)player.life/(float)player.Full_maxlife; float fnm=(float)player.mana/(float)player.Full_maxmana; //--------------------------------------------------------------------- //RED GAUGE unsigned long ulColor=0xFFFF0000; float fSLID_VALUE_neg = ARX_CLEAN_WARN_CAST_FLOAT(-lSLID_VALUE); if (player.poison>0.f) { float val = __min(player.poison, 0.2f) * 255.f * 5.f; long g; F2L(val,&g); ulColor=0xFF000000 | ((255-g) <<16) | (g & 255)<<8; } if ((fInterfaceRatio>1.9f) && ITC.filled_gauge_blue) { float vuv=(1.f-fnl)*ITC.filled_gauge_red->m_dwHeight; long vvv; F2L(vuv,&vvv); vuv = (float)vvv / ITC.filled_gauge_red->m_dwHeight; //ir= EERIEDrawBitmap2DecalY(GDevice, fSLID_VALUE_neg, DANAESIZY - INTERFACE_RATIO(78), INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwWidth), INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwHeight), 0.f, ITC.filled_gauge_red, ulColor, vuv); } else EERIEDrawBitmap2DecalY(GDevice, fSLID_VALUE_neg, DANAESIZY - INTERFACE_RATIO(78), INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwWidth), INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwHeight), 0.f, ITC.filled_gauge_red, ulColor, (1.f - fnl)); if (!(player.Interface & INTER_COMBATMODE)) { if (MouseInRect(fSLID_VALUE_neg, DANAESIZY - INTERFACE_RATIO(78), fSLID_VALUE_neg + INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwWidth), DANAESIZY - INTERFACE_RATIO(78) + INTERFACE_RATIO_DWORD(ITC.filled_gauge_red->m_dwHeight))) { if( (EERIEMouseButton & 1)&& (!(LastMouseClick & 1)) ) { _TCHAR txt[256]; ARX_CHECK_INT(player.life); ARX_SPEECH_Add(NULL, _itot(ARX_CLEAN_WARN_CAST_INT(player.life),txt,10) ); } } } //--------------------------------------------------------------------- //END RED GAUGE GDevice->SetRenderState(D3DRENDERSTATE_ZENABLE,false); px = 0.f-lSLID_VALUE; py = DANAESIZY - INTERFACE_RATIO(78); ARX_INTERFACE_DrawItem(ITC.empty_gauge_red, px, py, 0.001f); //--------------------------------------------------------------------- //BLUE GAUGE float LARGG=INTERFACE_RATIO_DWORD(ITC.filled_gauge_blue->m_dwWidth); float HAUTT=INTERFACE_RATIO_DWORD(ITC.filled_gauge_blue->m_dwHeight); if ((fInterfaceRatio>1.9f) && ITC.filled_gauge_blue) { float vuv=(1.f-fnm)*ITC.filled_gauge_blue->m_dwHeight; long vvv; F2L(vuv,&vvv); vuv = (float)vvv / ITC.filled_gauge_blue->m_dwHeight; //ir= EERIEDrawBitmap2DecalY(GDevice, DANAESIZX - INTERFACE_RATIO(33) + INTERFACE_RATIO(1) + lSLID_VALUE, DANAESIZY - INTERFACE_RATIO(81), LARGG, HAUTT, 0.f, ITC.filled_gauge_blue, ARX_OPAQUE_WHITE /*-1*/, vuv); } else EERIEDrawBitmap2DecalY(GDevice, DANAESIZX - INTERFACE_RATIO(33) + INTERFACE_RATIO(1) + lSLID_VALUE, DANAESIZY - INTERFACE_RATIO(81), LARGG, HAUTT, 0.f, ITC.filled_gauge_blue, ARX_OPAQUE_WHITE /*-1*/, (1.f - fnm)); if (!(player.Interface & INTER_COMBATMODE)) { if(MouseInRect(DANAESIZX - INTERFACE_RATIO(33) + lSLID_VALUE,DANAESIZY - INTERFACE_RATIO(81),DANAESIZX - INTERFACE_RATIO(33) + lSLID_VALUE+LARGG,DANAESIZY - INTERFACE_RATIO(81)+HAUTT)) { if( (EERIEMouseButton & 1)&& (!(LastMouseClick & 1)) ) { _TCHAR txt[256]; ARX_CHECK_INT(player.mana); ARX_SPEECH_Add(NULL, _itot(ARX_CLEAN_WARN_CAST_INT(player.mana),txt,10) ); } } } //--------------------------------------------------------------------- //END BLUE GAUGE if (INTERNATIONAL_MODE) { if (bRenderInCursorMode) { SETALPHABLEND(GDevice, true); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); if (mecanism_tc && (MAGICMODE < 0) && (lNbToDrawMecanismCursor < 3)) { long lColorMecanism=D3DRGB(1,1,1); if(lTimeToDrawMecanismCursor>300) { lColorMecanism=0; if(lTimeToDrawMecanismCursor>400) { lTimeToDrawMecanismCursor=0; lNbToDrawMecanismCursor++; } } lTimeToDrawMecanismCursor += ARX_CLEAN_WARN_CAST_LONG(FrameDiff); EERIEDrawBitmap( GDevice, 0,0, INTERFACE_RATIO_DWORD(mecanism_tc->m_dwWidth), INTERFACE_RATIO_DWORD(mecanism_tc->m_dwHeight), 0.01f, mecanism_tc, lColorMecanism ); } if (arrow_left_tc) { float fSizeX=INTERFACE_RATIO_DWORD(arrow_left_tc->m_dwWidth); float fSizeY=INTERFACE_RATIO_DWORD(arrow_left_tc->m_dwHeight); long lColor=D3DRGB(.5f,.5f,.5f); static float fArrowMove=0.f; fArrowMove+=.5f*FrameDiff; if (fArrowMove > 180.f) { fArrowMove=0.f; } float fMove=fabs(sin(DEG2RAD(fArrowMove)))*fSizeX*.5f; EERIEDrawBitmap( GDevice, //left 0+fMove, (DANAESIZY-fSizeY)*.5f, fSizeX, fSizeY, 0.01f, arrow_left_tc, lColor ); EERIEDrawBitmapUVs( GDevice, //right DANAESIZX-fSizeX-fMove, (DANAESIZY-fSizeY)*.5f, fSizeX, fSizeY, 0.01f, arrow_left_tc, lColor, 1.f,0.f, 0.f,0.f, 1.f,1.f, 0.f,1.f); EERIEDrawBitmapUVs( GDevice, //up (DANAESIZX-fSizeY)*.5f, 0.f+fMove, fSizeY, fSizeX, 0.01f, arrow_left_tc, lColor, 0.f,1.f, 0.f,0.f, 1.f,1.f, 1.f,0.f); EERIEDrawBitmapUVs( GDevice, //down (DANAESIZX-fSizeY)*.5f, (DANAESIZY-fSizeX)-fMove, fSizeY, fSizeX, 0.01f, arrow_left_tc, lColor, 1.f,1.f, 1.f,0.f, 0.f,1.f, 0.f,0.f); } SETALPHABLEND(GDevice, false); } } } } danaeApp.EnableZBuffer(); GDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_LINEAR ); GDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR ); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_WRAP); } extern long FRAME_COUNT; extern INTERACTIVE_OBJ * DESTROYED_DURING_RENDERING; extern float STARTED_ANGLE; long SPECIAL_DRAGINTER_RENDER=0; long CANNOT_PUT_IT_HERE=0; long Manage3DCursor(long flags) { if (BLOCK_PLAYER_CONTROLS) return 0; float ag=player.angle.a; if (ag>180) ag=ag-360; float drop_miny=(float)(DANAECENTERY)-DANAECENTERY*(ag*DIV70); if ((DANAEMouse.yioflags & IO_INVERTED) { temp.a=180.f; temp.b = -MAKEANGLE(io->angle.b - ((player.angle.b) - (STARTED_ANGLE + 90))); } else { temp.a = 0; temp.b = MAKEANGLE(io->angle.b - ((player.angle.b) - (STARTED_ANGLE + 90))); } temp.g = 0; EERIE_3D pos; float angle=DEG2RAD(MAKEANGLE(player.angle.b)); float angle2=DEG2RAD(MAKEANGLE(player.angle.b-90.f)); float zrange=(DANAESIZY-DANAEMouse.y)/(DANAESIZY-drop_miny); //between 0 (bottom) and 1 (top) float va=player.angle.a; if (va>180) va=0; float vd=(100.f-va)*DIV90; float mod=va-50.f; if (mod<0) mod=0; mod*=DIV20; va = (vd) * (1.3f + 0.3f * mod); vd=((1.f-zrange)*0.6f-vd)*150.f; if (va<0) va=0; if (vd<0) vd=0; float mx = DANAEMouse.x; float my = DANAEMouse.y; if (TRUE_PLAYER_MOUSELOOK_ON && (pMenuConfig->bAutoReadyWeapon)) { mx = MemoMouse.x; my = MemoMouse.y; } pos.x=player.pos.x+EEsin(angle2)*(DANAECENTERX-mx)*0.7f*va -EEsin(angle)*(va*zrange*400.f+vd); pos.z=player.pos.z-EEcos(angle2)*(DANAECENTERX-mx)*0.7f*va +EEcos(angle)*(va*zrange*400.f+vd); pos.y=player.pos.y; { EERIE_3D objcenter; Vector_Init(&objcenter); float maxdist= 0.f; float miny= 99999999.f; float maxy= -99999999.f; EERIE_3D minoff; EERIE_3D maxoff; maxoff.x=minoff.x=io->obj->vertexlist[0].v.x; maxoff.y=minoff.y=io->obj->vertexlist[0].v.y; maxoff.z=minoff.z=io->obj->vertexlist[0].v.z; for (long i=0;iobj->nbvertex;i++) { maxoff.x=__max(maxoff.x,io->obj->vertexlist[i].v.x); maxoff.y=__max(maxoff.y,io->obj->vertexlist[i].v.y); maxoff.z=__max(maxoff.z,io->obj->vertexlist[i].v.z); minoff.x=__min(minoff.x,io->obj->vertexlist[i].v.x); minoff.y=__min(minoff.y,io->obj->vertexlist[i].v.y); minoff.z=__min(minoff.z,io->obj->vertexlist[i].v.z); miny=__min(miny,io->obj->vertexlist[i].v.y); maxy=__max(maxy,io->obj->vertexlist[i].v.y); } EERIE_CYLINDER cyl; cyl.origin.x=pos.x-(maxoff.x-minoff.x)*DIV2; cyl.origin.y=pos.y; cyl.origin.z=pos.z-(maxoff.z-minoff.z)*DIV2; cyl.height=-50.f; cyl.radius=40.f; EERIE_3D orgn,dest,mvectx,mvecty; mvectx.x = mvecty.x = -(float)EEsin(DEG2RAD(player.angle.b - 90.f)); mvectx.y = mvecty.y = 0; mvectx.z = mvecty.z = +(float)EEcos(DEG2RAD(player.angle.b - 90.f)); TRUEVector_Normalize(&mvectx); float xmod,ymod; xmod=(float)(DANAEMouse.x-DANAECENTERX)/(float)DANAECENTERX*160.f; ymod=(float)(DANAEMouse.y-DANAECENTERY)/(float)DANAECENTERY*220.f; mvectx.x*=xmod; mvectx.y*=xmod; mvectx.z*=xmod; mvecty.x = 0; mvecty.y=ymod; mvecty.z = 0; orgn.x=player.pos.x-(float)EEsin(DEG2RAD(player.angle.b))*(float)EEcos(DEG2RAD(player.angle.a))*50.f + mvectx.x; orgn.y=player.pos.y+(float)EEsin(DEG2RAD(player.angle.a))*50.f +mvectx.y+mvecty.y; orgn.z=player.pos.z+(float)EEcos(DEG2RAD(player.angle.b))*(float)EEcos(DEG2RAD(player.angle.a))*50.f + mvectx.z; dest.x=player.pos.x-(float)EEsin(DEG2RAD(player.angle.b))*(float)EEcos(DEG2RAD(player.angle.a))*10000.f + mvectx.x; dest.y=player.pos.y+(float)EEsin(DEG2RAD(player.angle.a))*10000.f +mvectx.y+mvecty.y*5.f; dest.z=player.pos.z+(float)EEcos(DEG2RAD(player.angle.b))*(float)EEcos(DEG2RAD(player.angle.a))*10000.f + mvectx.z; pos.x=orgn.x; pos.y=orgn.y; pos.z=orgn.z; EERIE_3D movev; movev.x=dest.x-orgn.x; movev.y=dest.y-orgn.y; movev.z=dest.z-orgn.z; TRUEVector_Normalize(&movev); float lastanything = 0.f; float height = -( maxy - miny ); if ( height > -30.f ) height = -30.f; objcenter.x = minoff.x + (maxoff.x - minoff.x) * DIV2; objcenter.y = 0; objcenter.z = minoff.z + (maxoff.z - minoff.z) * DIV2; for ( int i = 0 ; i < io->obj->nbvertex ; i++ ) { maxdist = __max( maxdist, TRUEDistance2D( objcenter.x, objcenter.z, io->obj->vertexlist[i].v.x, io->obj->vertexlist[i].v.z) - 4.f); } if (io->obj->pbox) { for (int i=1;iobj->pbox->nb_physvert;i++) { maxdist=__max(maxdist, TRUEDistance2D( io->obj->pbox->vert[0].initpos.x, io->obj->pbox->vert[0].initpos.z, io->obj->pbox->vert[i].initpos.x, io->obj->pbox->vert[i].initpos.z) + 14.f); } } VRotateY(&objcenter,temp.b); if ( maxdist < 15.f ) maxdist = 15.f; if ( maxdist > 150.f ) maxdist = 150.f; bool bCollidposNoInit = true; EERIE_3D collidpos; EERIE_CYLINDER cyl2; float inc = 10.f; long iterating = 40; collidpos.x = collidpos.y = collidpos.z = 0; cyl2.height = __min(-30.f, height); cyl2.radius = __max(20.f, maxdist); while ( iterating>0 ) { cyl2.origin.x = pos.x + movev.x * inc; cyl2.origin.y = pos.y + maxy + movev.y * inc; cyl2.origin.z = pos.z + movev.z * inc; float anything = CheckAnythingInCylinder( &cyl2, io, CFLAG_JUST_TEST | CFLAG_COLLIDE_NOCOL | CFLAG_NO_NPC_COLLIDE ); if ( anything < 0.f ) { if ( iterating == 40 ) { CANNOT_PUT_IT_HERE = 1; return -1; } iterating = 0; Vector_Copy( &collidpos, &cyl2.origin ); bCollidposNoInit = false; if ( lastanything < 0.f ) { pos.y += lastanything; collidpos.y += lastanything; } } else { pos.x = cyl2.origin.x; pos.y = cyl2.origin.y; pos.z = cyl2.origin.z; lastanything = anything; } iterating--; } collidpos.x -= objcenter.x; collidpos.z -= objcenter.z; pos.x -= objcenter.x; pos.z -= objcenter.z; if ( iterating != -1 ) { CANNOT_PUT_IT_HERE = 1; return 0; } if ((iterating == -1) && (EEDistance3D(&player.pos, &pos) < 300.f)) { if ( flags & 1 ) { io->obj->drawflags |= DRAWFLAG_HIGHLIGHT; ARX_INTERACTIVE_Teleport( io, &pos, 1 ); int iOldFrameCount = FRAME_COUNT; FRAME_COUNT = 0; io->GameFlags &= ~GFLAG_NOCOMPUTATION; float old = io->invisibility; if( bCollidposNoInit ) { ARX_CHECK_NO_ENTRY(); } EERIE_3D vec; vec.x = collidpos.x - pos.x; vec.y = collidpos.y - pos.y; vec.z = collidpos.z - pos.z; TRUEVector_Normalize(&vec); if (SPECIAL_DRAGINTER_RENDER) { if (((lastanything<0.f) && (EEfabs(lastanything)>EEfabs(height))) || (lastanything>EEfabs(height))) { io->invisibility = 0.5f; DrawEERIEInter(GDevice,io->obj,&temp,&collidpos,io); io->invisibility=old; } else if (lastanything>0.f) DrawEERIEInter(GDevice, io->obj, &temp, &pos, io); else DrawEERIEInter(GDevice,io->obj,&temp,&pos,io); } PrecalcIOLighting(NULL,0,1); FRAME_COUNT=iOldFrameCount; if ( (!SPECIAL_DRAGINTER_RENDER) && (INTERTRANSPOLYSPOS) ) ARXDRAW_DrawAllInterTransPolyPos(GDevice); if (!SPECIAL_DRAGINTER_RENDER && !DESTROYED_DURING_RENDERING) { io->obj->drawflags&=~DRAWFLAG_HIGHLIGHT; if (io->ignition>0.f) ManageIgnition(io); } } else { if (EEfabs(lastanything) > __min(EEfabs(height), 12)) { INTERACTIVE_OBJ * io=DRAGINTER; ARX_PLAYER_Remove_Invisibility(); io->obj->pbox->active=1; io->obj->pbox->stopcount=0; float vx=-((float)DANAEMouse.x-(float)subj.centerx); vx/=3.f; EERIE_3D pos; pos.x = io->pos.x = collidpos.x; pos.z = io->pos.z = collidpos.z; pos.y=io->pos.y=collidpos.y; io->velocity.x=0.f; io->velocity.y=0.f; io->velocity.z=0.f; io->stopped=1; EERIE_3D viewvector; movev.x*=0.0001f; movev.z*=0.0001f; movev.y=0.1f; Vector_Copy(&viewvector,&movev); EERIE_3D angle; angle.a=temp.a; angle.b=temp.b; angle.g=temp.g; io->soundtime=0; io->soundcount=0; EERIE_PHYSICS_BOX_Launch(io->obj,&pos,&viewvector,1,&angle); ARX_SOUND_PlaySFX(SND_WHOOSH, &pos); io->show=SHOW_FLAG_IN_SCENE; Set_DragInter(NULL); } else { ARX_PLAYER_Remove_Invisibility(); ARX_SOUND_PlayInterface(SND_INVSTD); ARX_INTERACTIVE_Teleport(io,&pos,1); io->angle.a=temp.a; io->angle.b=270.f-temp.b; io->angle.g=temp.g; io->stopped=0; io->show=SHOW_FLAG_IN_SCENE; io->obj->pbox->active=0; Set_DragInter(NULL); } } SETCULL(GDevice,D3DCULL_NONE); return 1; } else { CANNOT_PUT_IT_HERE=-1; } } return 0; } //----------------------------------------------------------------------------- void ARX_INTERFACE_RenderCursor(long flag) { if (!SPECIAL_DRAGINTER_RENDER) { ManageIgnition_2(DRAGINTER); GDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_POINT ); GDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_POINT ); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_CLAMP); } TextureContainer * surf; if (!SPECIAL_DRAGINTER_RENDER) if (LOOKING_FOR_SPELL_TARGET) { if (ARXTime>LOOKING_FOR_SPELL_TARGET_TIME+7000) { ARX_SOUND_PlaySFX(SND_MAGIC_FIZZLE, &player.pos); ARX_SPELLS_CancelSpellTarget(); } if ( (FlyingOverIO) && ( ((LOOKING_FOR_SPELL_TARGET & 1) && (FlyingOverIO->ioflags & IO_NPC)) || ((LOOKING_FOR_SPELL_TARGET & 2) && (FlyingOverIO->ioflags & IO_ITEM)) ) ) { surf=ITC.target_on; if (!(EERIEMouseButton & 1) && (LastMouseClick & 1)) { ARX_SPELLS_LaunchSpellTarget(FlyingOverIO); } } else { surf=ITC.target_off; if(ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE)) { ARX_SOUND_PlaySFX(SND_MAGIC_FIZZLE, &player.pos); ARX_SPELLS_CancelSpellTarget(); } } float POSX=DANAEMouse.x; float POSY=DANAEMouse.y; if (TRUE_PLAYER_MOUSELOOK_ON) { POSX = MemoMouse.x; POSY = MemoMouse.y; } float fTexSizeX = INTERFACE_RATIO_DWORD(surf->m_dwWidth); float fTexSizeY = INTERFACE_RATIO_DWORD(surf->m_dwHeight); EERIEDrawBitmap(GDevice,(float)(POSX-(fTexSizeX*0.5f)),(float)(POSY-(surf->m_dwHeight*0.5f)), fTexSizeX, fTexSizeY, 0.f, surf,D3DCOLORWHITE); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_WRAP); return; } SPECIAL_DRAW_INTER_SHADOW = 0; if (flag || ((!BLOCK_PLAYER_CONTROLS) && (!PLAYER_INTERFACE_HIDE_COUNT))) { RECT rect; if (!SPECIAL_DRAGINTER_RENDER) SETCULL(GDevice,D3DCULL_NONE); if ((COMBINE) || (COMBINEGOLD)) { if (SpecialCursor==CURSOR_INTERACTION_ON) SpecialCursor=CURSOR_COMBINEON; else SpecialCursor=CURSOR_COMBINEOFF; } if ((SpecialCursor) || !PLAYER_MOUSELOOK_ON || (DRAGINTER!=NULL) || ((FlyingOverIO) && PLAYER_MOUSELOOK_ON && !(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK) && (eMouseState != MOUSE_IN_NOTE) && (FlyingOverIO->ioflags & IO_ITEM) && (FlyingOverIO->GameFlags & GFLAG_INTERACTIVITY) && (pMenuConfig->bAutoReadyWeapon == false)) || ((MAGICMODE==1) && PLAYER_MOUSELOOK_ON)) { if (!SPECIAL_DRAGINTER_RENDER) { if(FlyingOverIO||DRAGINTER) { fHighLightAng+=(float)(FrameDiff*0.5); if(fHighLightAng>90.f) fHighLightAng=90.f; float fHLight = 100.f*sin(DEG2RAD(fHighLightAng)); ARX_CHECK_INT(fHLight); iHighLight = ARX_CLEAN_WARN_CAST_INT(fHLight); } else { fHighLightAng=0.f; iHighLight = 0; } } CANNOT_PUT_IT_HERE=0; float ag=player.angle.a; if (ag>180) ag=ag-360; float drop_miny=(float)(DANAECENTERY)-DANAECENTERY*(ag*DIV70); if ((DANAEMouse.y>drop_miny) && DRAGINTER && !InInventoryPos(&DANAEMouse) && !(ARX_MOUSE_OVER & ARX_MOUSE_OVER_BOOK)) { if (Manage3DCursor(1)==0) CANNOT_PUT_IT_HERE = -1; if (SPECIAL_DRAGINTER_RENDER) { CANNOT_PUT_IT_HERE=0; return; } } else CANNOT_PUT_IT_HERE = -1; if (SPECIAL_DRAGINTER_RENDER) return; float POSX,POSY; POSX=(float)DANAEMouse.x; POSY=(float)DANAEMouse.y; if ((SpecialCursor) && (!DRAGINTER)) { if (((COMBINE!=NULL) && (COMBINE->inv!=NULL)) || COMBINEGOLD) { if (TRUE_PLAYER_MOUSELOOK_ON && (pMenuConfig->bAutoReadyWeapon)) { POSX = MemoMouse.x; POSY = MemoMouse.y; } TextureContainer * tc; if (COMBINEGOLD) tc=GoldCoinsTC[5]; else tc=COMBINE->inv; if (tc->m_pddsSurface==NULL) { D3DTextr_Restore(tc->m_strName,GDevice); } float MODIF=0.f; float fTexSizeX = INTERFACE_RATIO_DWORD(tc->m_dwWidth); float fTexSizeY = INTERFACE_RATIO_DWORD(tc->m_dwHeight); if (SpecialCursor==CURSOR_COMBINEON) { EERIEDrawBitmap(GDevice,(float)POSX+MODIF,(float)POSY+MODIF ,(float)fTexSizeX ,(float)fTexSizeY,0.00001f ,tc,0xFFFFFFFF); if ((FlyingOverIO!=NULL) && (FlyingOverIO->ioflags & IO_BLACKSMITH)) { float v=ARX_DAMAGES_ComputeRepairPrice(COMBINE,FlyingOverIO); if (v>0.f) { long t; F2L(v,&t); ARX_INTERFACE_DrawNumber(POSX+MODIF-16,POSY+MODIF-10,t,6,0xFF00FFFF); } } } else EERIEDrawBitmap(GDevice,(float)POSX+MODIF,(float)POSY+MODIF ,(float)fTexSizeX ,(float)fTexSizeY,0.00001f ,tc,0xFFFFAA66); } switch (SpecialCursor) { case CURSOR_REDIST: { surf = ITC.pTexCursorRedist; } break; case CURSOR_COMBINEOFF: surf=ITC.target_off; POSX -= 16.f; POSY -= 16.f; break; case CURSOR_COMBINEON: surf=ITC.target_on; if (surf) POSX -= 16.f; POSY -= 16.f; break; case CURSOR_FIREBALLAIM: surf=ITC.target_on; if (surf) { rect.right = surf->m_dwWidth; rect.bottom = surf->m_dwHeight; } else { ARX_CHECK_NO_ENTRY(); rect.right = 0; rect.bottom = 0; } POSX = 320.f - rect.right / 2.f; POSY = 280.f - rect.bottom / 2.f; break; case CURSOR_INTERACTION_ON: ARX_CHECK_LONG( Original_framedelay ); CURCURTIME += ARX_CLEAN_WARN_CAST_LONG( Original_framedelay ); if (CURCURPOS!=3) { while(CURCURTIME>CURCURDELAY) { CURCURTIME-=CURCURDELAY; CURCURPOS++; } } if (CURCURPOS>7) CURCURPOS=0; surf=scursor[CURCURPOS]; break; default: if (CURCURPOS!=0) { ARX_CHECK_LONG( Original_framedelay ); CURCURTIME += ARX_CLEAN_WARN_CAST_LONG( Original_framedelay ); while(CURCURTIME>CURCURDELAY) { CURCURTIME-=CURCURDELAY; CURCURPOS++; } } if (CURCURPOS>7) CURCURPOS=0; surf=scursor[CURCURPOS]; break; } if ((surf)) { if (SpecialCursor == CURSOR_REDIST) { EERIEDrawBitmap(GDevice,(float)POSX,(float)POSY, surf->m_dwWidth * Xratio, surf->m_dwHeight * Yratio, 0.f, surf,D3DCOLORWHITE); danaeApp.DANAEEndRender(); _TCHAR temp[256]; _stprintf(temp, _T("%3d"), lCursorRedistValue); ARX_TEXT_Draw(GDevice, InBookFont, DANAEMouse.x + 6* Xratio, DANAEMouse.y + 11* Yratio, 999, 999, temp, D3DCOLORBLACK, 0x00FF00FF); danaeApp.DANAEStartRender(); } else { float fTexSizeX = INTERFACE_RATIO_DWORD(surf->m_dwWidth); float fTexSizeY = INTERFACE_RATIO_DWORD(surf->m_dwHeight); EERIEDrawBitmap(GDevice,(float)POSX,(float)POSY, fTexSizeX, fTexSizeY, 0.f, surf,D3DCOLORWHITE); } } SpecialCursor=0; } else { if (!(player.Current_Movement & PLAYER_CROUCH) && (!BLOCK_PLAYER_CONTROLS && (ARX_IMPULSE_Pressed(CONTROLS_CUST_MAGICMODE))) && (ARXmenu.currentmode==AMCM_OFF)) { if (MAGICMODE<0) { if (player.Interface & INTER_MAP ) { ARX_INTERFACE_BookOpenClose(2); // Forced Closing } MAGICMODE=1; } surf=ITC.magic; float POSX=DANAEMouse.x; float POSY=DANAEMouse.y; if (TRUE_PLAYER_MOUSELOOK_ON) { POSX = MemoMouse.x; POSY = MemoMouse.y; } float fTexSizeX = INTERFACE_RATIO_DWORD(surf->m_dwWidth); float fTexSizeY = INTERFACE_RATIO_DWORD(surf->m_dwHeight); EERIEDrawBitmap( GDevice, (float)(POSX - (fTexSizeX*0.5f)), (float)(POSY - (fTexSizeY*0.5f)), (float)fTexSizeX, (float)fTexSizeY, 0.f, surf, D3DCOLORWHITE); } else { if (MAGICMODE>-1) { ARX_SOUND_Stop(SND_MAGIC_DRAW); MAGICMODE=-1; } if ((DRAGINTER!=NULL) && (DRAGINTER->inv!=NULL)) { TextureContainer * tc; TextureContainer * tc2=NULL; tc=DRAGINTER->inv; if (NeedHalo(DRAGINTER)) tc2=DRAGINTER->inv->TextureHalo;//>_itemdata->halo_tc; if (tc->m_pddsSurface==NULL) { tc->Restore(GDevice); } D3DCOLOR color; if ((DRAGINTER->poisonous) && (DRAGINTER->poisonous_count!=0)) color=0xFF00FF00; else color=D3DCOLORWHITE; float mx = POSX; float my = POSY; if (TRUE_PLAYER_MOUSELOOK_ON && (pMenuConfig->bAutoReadyWeapon)) { mx = MemoMouse.x; my = MemoMouse.y; } float fTexSizeX = INTERFACE_RATIO_DWORD(tc->m_dwWidth); float fTexSizeY = INTERFACE_RATIO_DWORD(tc->m_dwHeight); if (!(DRAGINTER->ioflags & IO_MOVABLE)) { EERIEDrawBitmap(GDevice,(float)mx,(float)my ,(float)fTexSizeX ,(float)fTexSizeY,0.00001f ,tc,color); if ((DRAGINTER->ioflags & IO_ITEM) && (DRAGINTER->_itemdata->count!=1)) ARX_INTERFACE_DrawNumber(mx+2.f,my+13.f, DRAGINTER->_itemdata->count, 3, D3DCOLORWHITE); } else { if ((InInventoryPos(&DANAEMouse) || InSecondaryInventoryPos(&DANAEMouse)) || (CANNOT_PUT_IT_HERE != -1)) { EERIEDrawBitmap(GDevice,(float)mx,(float)my ,(float)fTexSizeX ,(float)fTexSizeY,0.00001f ,tc,color); } } //cross not over inventory icon if ((CANNOT_PUT_IT_HERE!=0) && (eMouseState != MOUSE_IN_INVENTORY_ICON)) { if (!InInventoryPos(&DANAEMouse) && !InSecondaryInventoryPos(&DANAEMouse) && !ARX_INTERFACE_MouseInBook()) { TextureContainer * tcc=Movable; if (CANNOT_PUT_IT_HERE==-1) tcc=ThrowObject; if ((tcc) && (tcc!=tc)) // to avoid movable double red cross... EERIEDrawBitmap(GDevice,(float)mx+16,(float)my ,INTERFACE_RATIO_DWORD(tcc->m_dwWidth) ,INTERFACE_RATIO_DWORD(tcc->m_dwHeight),0.00001f ,tcc,D3DCOLORWHITE); } } if (tc2) { ARX_INTERFACE_HALO_Draw(DRAGINTER,GDevice,tc,tc2,mx,my, INTERFACE_RATIO(1), INTERFACE_RATIO(1)); } } else { if (CURCURPOS != 0) { ARX_CHECK_LONG( Original_framedelay ); CURCURTIME += ARX_CLEAN_WARN_CAST_LONG( Original_framedelay ); while(CURCURTIME>CURCURDELAY) { CURCURTIME-=CURCURDELAY; CURCURPOS++; } } if (CURCURPOS>7) CURCURPOS=0; surf=scursor[CURCURPOS]; if (surf) { EERIEDrawBitmap(GDevice,(float)POSX,(float)POSY, INTERFACE_RATIO_DWORD(surf->m_dwWidth), INTERFACE_RATIO_DWORD(surf->m_dwHeight), 0.f, surf,D3DCOLORWHITE); } } } } } else //mode system shock { if (SPECIAL_DRAGINTER_RENDER) return; if(FlyingOverIO||DRAGINTER) { fHighLightAng+=(float)(FrameDiff*0.5f); if(fHighLightAng>90.f) fHighLightAng=90.f; float fHLight = 100.f*sin(DEG2RAD(fHighLightAng)); ARX_CHECK_INT(fHLight); iHighLight = ARX_CLEAN_WARN_CAST_INT(fHLight); } else { fHighLightAng=0.f; iHighLight = 0; } if (TRUE_PLAYER_MOUSELOOK_ON && pMenuConfig && pMenuConfig->bShowCrossHair) { if (!(player.Interface & INTER_COMBATMODE)) { CURCURPOS=0; float POSX, POSY; surf = pTCCrossHair; if (!surf) { surf=ITC.target_off; } if (surf) { SETALPHABLEND(GDevice, true); SETBLENDMODE(GDevice,D3DBLEND_ONE,D3DBLEND_ONE); POSX = DANAESIZX*0.5f - INTERFACE_RATIO_DWORD(surf->m_dwWidth)*0.5f; POSY = DANAESIZY*0.5f - INTERFACE_RATIO_DWORD(surf->m_dwHeight)*0.5f; D3DCOLOR col=D3DRGB(0.5f, 0.5f, 0.5f); EERIEDrawBitmap(GDevice,(float)POSX,(float)POSY, INTERFACE_RATIO_DWORD(surf->m_dwWidth), INTERFACE_RATIO_DWORD(surf->m_dwHeight), 0.f, surf, col); SETALPHABLEND(GDevice, false); } } } } GDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTFN_LINEAR ); GDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTFG_LINEAR ); SETTEXTUREWRAPMODE(GDevice,D3DTADDRESS_WRAP); } }