//----------------------------------------------------------------------------- CBless::CBless(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; eTarget.x = 0; eTarget.y = 0; eTarget.z = 0; SetDuration(4000); ulCurrentTime = ulDuration + 1; tex_p1 = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu_blueting.bmp"); tex_sol = MakeTCFromFile("Graph\\particles\\(Fx)_pentagram_bless.bmp"); }
//----------------------------------------------------------------------------- CMagicMissile::CMagicMissile(LPDIRECT3DDEVICE7 m_pd3dDevice) : CSpellFx() { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; SetDuration(2000); ulCurrentTime = ulDuration + 1; tex_mm = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_bandelette_blue.bmp"); if (!smissile) { smissile = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_magic_missile\\fx_magic_missile.teo", NULL); EERIE_3DOBJ_RestoreTextures(smissile); } smissile_count++; fColor[0] = 1; fColor[1] = 1; fColor[2] = 1; fColor1[0] = 1; fColor1[1] = 1; fColor1[2] = 1; bExplo = false; bMove = true; }
/*--------------------------------------------------------------------------*/ void CLevitate::Create(int def, float rbase, float rhaut, float hauteur, EERIE_3D * pos, unsigned long _ulDuration) { SetDuration(_ulDuration); if (def < 3) return; this->CreateConeStrip(rbase, rhaut, hauteur, def, 0); this->CreateConeStrip(rbase, rhaut * 1.5f, hauteur * 0.5f, def, 1); this->key = 0; this->pos = *pos; this->rbase = rbase; this->rhaut = rhaut; this->hauteur = hauteur; this->currdurationang = 0; this->scale = 0.f; this->ang = 0.f; this->def = (short)def; this->tsouffle = MakeTCFromFile("Graph\\Obj3D\\Textures\\(FX)_sebsouffle.bmp"); this->timestone = 0; this->nbstone = 0; this->stone[0] = stone0; this->stone[1] = stone1; int nb = 256; while (nb--) { this->tstone[nb].actif = 0; } }
//----------------------------------------------------------------------------- CSummonCreature::CSummonCreature(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; SetDuration(1000); ulCurrentTime = ulDurationIntro + ulDurationRender + ulDurationOuttro + 1; iSize = 100; fOneOniSize = 1.0f / ((float) iSize); fColorBorder[0] = 1; fColorBorder[1] = 1; fColorBorder[2] = 1; fColorRays1[0] = 1; fColorRays1[1] = 1; fColorRays1[2] = 1; fColorRays2[0] = 0; fColorRays2[1] = 0; fColorRays2[2] = 0; tex_light = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu4.bmp"); }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- CMassLightning::CMassLightning(LPDIRECT3DDEVICE7 m_pd3dDevice, long nbmissiles) { SetDuration(2000); pTab = new CLightning*[10]; number = __min(10, nbmissiles); TextureContainer * pTex = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_lightning_red.bmp"); for (int i = 0; i < number; i++) { pTab[i] = new CLightning(pTex); pTab[i]->fDamage = 2; } }
CNegateMagic::CNegateMagic(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; eTarget.x = 0; eTarget.y = 0; eTarget.z = 0; SetDuration(1000); ulCurrentTime = ulDuration + 1; tex_p2 = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu_bluepouf.bmp"); tex_sol = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_negate_magic.bmp"); if (!ssol) { ssol = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_rune_guard\\fx_rune_guard.teo", NULL); EERIE_3DOBJ_RestoreTextures(ssol); } ssol_count++; }
//----------------------------------------------------------------------------- void CIgnit::Create(EERIE_3D * posc, float perim, int speed) { this->pos = *posc; this->perimetre = perim; this->nblight = 0; this->duration = speed; this->currduration = 0; this->key = 0; int nb = 256; while (nb--) { this->tablight[nb].actif = 0; this->tablight[nb].idl = -1; } this->ChangeTexture(MakeTCFromFile("Graph\\Particles\\fire_hit.bmp")); this->ChangeRGBMask(1.f, 1.f, 1.f, RGBA_MAKE(255, 200, 0, 255)); }
//----------------------------------------------------------------------------- CRuneOfGuarding::CRuneOfGuarding(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; eTarget.x = 0; eTarget.y = 0; eTarget.z = 0; SetDuration(1000); ulCurrentTime = ulDuration + 1; tex_p2 = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu_blueting.bmp"); if (!ssol) { ssol = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_rune_guard\\fx_rune_guard.teo", NULL); EERIE_3DOBJ_RestoreTextures(ssol); } ssol_count++; if (!slight) { slight = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_rune_guard\\fx_rune_guard02.teo", NULL); EERIE_3DOBJ_RestoreTextures(slight); } slight_count++; if (!srune) { srune = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_rune_guard\\fx_rune_guard03.teo", NULL); EERIE_3DOBJ_RestoreTextures(srune); } srune_count++; }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- CControlTarget::CControlTarget(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; eTarget.x = 0; eTarget.y = 0; eTarget.z = 0; SetDuration(8000); ulCurrentTime = ulDuration + 1; tex_mm = MakeTCFromFile("Graph\\Obj3D\\textures\\(fx)_ctrl_target.bmp"); fColor[0] = 1; fColor[1] = 1; fColor[2] = 0; fColor1[0] = 0.8f; fColor1[1] = 0.6f; fColor1[2] = 0.2f; }
CCurse::CCurse(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; eTarget.x = 0; eTarget.y = 0; eTarget.z = 0; SetDuration(3000); ulCurrentTime = ulDuration + 1; tex_p1 = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu_blueting.bmp"); if (!svoodoo) { svoodoo = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_voodoodoll\\fx_voodoodoll.teo", NULL); EERIE_3DOBJ_RestoreTextures(svoodoo); } svoodoo_count++; //EERIE_3DOBJ_RestoreTextures(obj_voodoo); }
//----------------------------------------------------------------------------- void ARX_MINIMAP_GetData(long SHOWLEVEL) { if (minimap[SHOWLEVEL].tc == NULL) { char name[256]; char LevelMap[256]; GetLevelNameByNum(SHOWLEVEL, name); sprintf(LevelMap, "Graph\\Levels\\Level%s\\map.bmp", name); minimap[SHOWLEVEL].tc = MakeTCFromFile(LevelMap); if (minimap[SHOWLEVEL].tc) // 4 pix/meter { minimap[SHOWLEVEL].tc->Restore(GDevice); SpecialBorderSurface(minimap[SHOWLEVEL].tc, minimap[SHOWLEVEL].tc->m_dwOriginalWidth, minimap[SHOWLEVEL].tc->m_dwOriginalHeight); minimap[SHOWLEVEL].height = ARX_CLEAN_WARN_CAST_FLOAT(minimap[SHOWLEVEL].tc->m_dwHeight); minimap[SHOWLEVEL].width = ARX_CLEAN_WARN_CAST_FLOAT(minimap[SHOWLEVEL].tc->m_dwWidth); float minx = FLT_MAX; float maxx = FLT_MIN; float miny = FLT_MAX; float maxy = FLT_MIN; EERIEPOLY * ep; EERIE_BKG_INFO * eg; for (long j = 0; j < ACTIVEBKG->Zsize; j++) { for (long i = 0; i < ACTIVEBKG->Xsize; i++) { eg = &ACTIVEBKG->Backg[i+j*ACTIVEBKG->Xsize]; for (long k = 0; k < eg->nbpoly; k++) { ep = &eg->polydata[k]; if (ep) { minx = __min(minx, ep->min.x); maxx = __max(maxx, ep->max.x); miny = __min(miny, ep->min.z); maxy = __max(maxy, ep->max.z); } } } mapmaxy[SHOWLEVEL] = maxy; minimap[SHOWLEVEL].xratio = minx; minimap[SHOWLEVEL].yratio = miny; for (long iii = 0; iii < 32; iii++) { minimap[iii].offsetx = 0; minimap[iii].offsety = 0; } } } } }
//----------------------------------------------------------------------------- void ARX_MINIMAP_Show(LPDIRECT3DDEVICE7 m_pd3dDevice, long SHOWLEVEL, long flag, long fl2) { float sstartx, sstarty; if (!pTexDetect) { GetTextureFile("Graph\\particles\\flare.bmp"); char temp[256]; MakeDir(temp, "Graph\\particles\\flare.bmp"); pTexDetect = D3DTextr_GetSurfaceContainer(temp); } // SHOWLEVEL=8; // First Load Minimap TC & DATA if needed if (minimap[SHOWLEVEL].tc == NULL) { ARX_MINIMAP_GetData(SHOWLEVEL); } if ((minimap[SHOWLEVEL].tc) && (minimap[SHOWLEVEL].tc->m_pddsSurface)) { float startx, starty, casex, casey, ratiooo; float mod_x = (float)MAX_BKGX / (float)MINIMAP_MAX_X; float mod_z = (float)MAX_BKGZ / (float)MINIMAP_MAX_Z; if (flag == 1) { startx = 0; starty = 0; casex = (900) / ((float)MINIMAP_MAX_X); casey = (900) / ((float)MINIMAP_MAX_Z); ratiooo = 900.f / 250.f; if (fl2) { casex = (600) / ((float)MINIMAP_MAX_X); casey = (600) / ((float)MINIMAP_MAX_Z); ratiooo = 600.f / 250.f; } } else { startx = (140); starty = (120); casex = (250) / ((float)MINIMAP_MAX_X); casey = (250) / ((float)MINIMAP_MAX_Z); ratiooo = 1.f; } sstartx = startx; sstarty = starty; float ofx, ofx2, ofy, ofy2, px, py; px = py = 0.f; ofx = mini_offset_x[CURRENTLEVEL]; ofx2 = minimap[SHOWLEVEL].xratio; ofy = mini_offset_y[CURRENTLEVEL]; ofy2 = minimap[SHOWLEVEL].yratio; if ((SHOWLEVEL == ARX_LEVELS_GetRealNum(CURRENTLEVEL)) || (flag == 2)) { // Computes playerpos ofx = mini_offset_x[CURRENTLEVEL]; ofx2 = minimap[SHOWLEVEL].xratio; ofy = mini_offset_y[CURRENTLEVEL]; ofy2 = minimap[SHOWLEVEL].yratio; px = startx + ((player.pos.x + ofx - ofx2) * DIV100 * casex + mini_offset_x[CURRENTLEVEL] * ratiooo * mod_x) / mod_x ; //DIV100*2; py = starty + ((mapmaxy[SHOWLEVEL] - ofy - ofy2) * DIV100 * casey - (player.pos.z + ofy - ofy2) * DIV100 * casey + mini_offset_y[CURRENTLEVEL] * ratiooo * mod_z) / mod_z ; //DIV100*2; if (flag == 1) { sstartx = startx; sstarty = starty; startx = 490.f - px; starty = 220.f - py; px += startx; py += starty; } } D3DTLVERTEX verts[4]; SETTC(m_pd3dDevice, minimap[SHOWLEVEL].tc); for (long k = 0; k < 4; k++) { verts[k].color = 0xFFFFFFFF; verts[k].rhw = 1; verts[k].sz = 0.00001f; } float div = DIV25; TextureContainer * tc = minimap[SHOWLEVEL].tc; float dw = 1.f / (float)max(tc->m_dwDeviceWidth, tc->m_dwOriginalWidth); float dh = 1.f / (float)max(tc->m_dwDeviceHeight, tc->m_dwOriginalHeight); float vx2 = 4.f * dw * mod_x; float vy2 = 4.f * dh * mod_z; float _px; RECT boundaries; float MOD20, MOD20DIV, divXratio, divYratio; boundaries.bottom = boundaries.left = boundaries.right = boundaries.top = 0; MOD20 = MOD20DIV = divXratio = divYratio = 0.f; if (flag != 2) { if (flag == 1) { MOD20 = 20.f * Xratio; MOD20DIV = 1.f / (MOD20); //@PERF do if(fl2){}else{} to make 4 and not 8 flot op if fl2. ARX_CHECK_LONG((360 + MOD20)*Xratio); ARX_CHECK_LONG((555 - MOD20)*Xratio); ARX_CHECK_LONG((85 + MOD20)*Yratio); ARX_CHECK_LONG((355 - MOD20)*Yratio); //CAST boundaries.left = ARX_CLEAN_WARN_CAST_LONG((360 + MOD20) * Xratio); boundaries.right = ARX_CLEAN_WARN_CAST_LONG((555 - MOD20) * Xratio); boundaries.top = ARX_CLEAN_WARN_CAST_LONG((85 + MOD20) * Yratio); boundaries.bottom = ARX_CLEAN_WARN_CAST_LONG((355 - MOD20) * Yratio); if (fl2) { //CHECK (DEBUG) ARX_CHECK_LONG((390 + MOD20)*Xratio); ARX_CHECK_LONG((590 - MOD20)*Xratio); ARX_CHECK_LONG((135 + MOD20)*Yratio); ARX_CHECK_LONG((295 - MOD20)*Yratio); //CAST boundaries.left = ARX_CLEAN_WARN_CAST_LONG((390 + MOD20) * Xratio); boundaries.right = ARX_CLEAN_WARN_CAST_LONG((590 - MOD20) * Xratio); boundaries.top = ARX_CLEAN_WARN_CAST_LONG((135 + MOD20) * Yratio); boundaries.bottom = ARX_CLEAN_WARN_CAST_LONG((295 - MOD20) * Yratio); } } SETALPHABLEND(m_pd3dDevice, TRUE); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ZERO); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCCOLOR); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_ALWAYS); SETTEXTUREWRAPMODE(m_pd3dDevice, D3DTADDRESS_CLAMP); if (fl2) { m_pd3dDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCCOLOR); } } else { divXratio = 1.f / Xratio; divYratio = 1.f / Yratio; } for (long j = -2; j < MINIMAP_MAX_Z + 2; j++) { for (long i = -2; i < MINIMAP_MAX_X + 2; i++) { float vx, vy, vxx, vyy; vxx = ((float)i * (float)ACTIVEBKG->Xdiv * mod_x); vyy = ((float)j * (float)ACTIVEBKG->Zdiv * mod_z); vx = (vxx * div) * dw; vy = (vyy * div) * dh; long okay = 1; float posx = (startx + i * casex) * Xratio; float posy = (starty + j * casey) * Yratio; if (flag == 1) { if ((posx < 360 * Xratio) || (posx > 555 * Xratio) || (posy < 85 * Yratio) || (posy > 355 * Yratio)) okay = 0; if (fl2) { okay = 1; if ((posx < 390 * Xratio) || (posx > 590 * Xratio) || (posy < 135 * Yratio) || (posy > 295 * Yratio)) okay = 0; } } else { if ((posx > 345 * Xratio) || (posy > 290 * Yratio)) okay = 0; } if (okay) { if ((flag == 2) && (i >= 0) && (i < MINIMAP_MAX_X) && (j >= 0) && (j < MINIMAP_MAX_Z)) { float d = Distance2D(posx * divXratio + casex * DIV2, posy * divYratio /*-casey * 2 * Yratio*/, px, py); if (d <= 6.f) { long r; float vv = (6 - d) * DIV6; if (vv >= 0.5f) vv = 1.f; else if (vv > 0.f) vv = vv * 2.f; else vv = 0.f; F2L((float)(vv * 255.f), &r); long ucLevel = __max(r, minimap[SHOWLEVEL].revealed[i][j]); ARX_CHECK_UCHAR(ucLevel); minimap[SHOWLEVEL].revealed[i][j] = ARX_CLEAN_WARN_CAST_UCHAR(ucLevel); } } if (!FOR_EXTERNAL_PEOPLE) { if ((i >= 0) && (i < MINIMAP_MAX_X) && (j >= 0) && (j < MINIMAP_MAX_Z)) { minimap[SHOWLEVEL].revealed[i][j] = 255; } } verts[3].sx = verts[0].sx = (posx); verts[1].sy = verts[0].sy = (posy); verts[2].sx = verts[1].sx = posx + (casex * Xratio); verts[3].sy = verts[2].sy = posy + (casey * Yratio); verts[3].tu = verts[0].tu = vx; verts[1].tv = verts[0].tv = vy; verts[2].tu = verts[1].tu = vx + vx2; verts[3].tv = verts[2].tv = vy + vy2; if (flag != 2) { float v; float oo = 0.f; if ((i < 0) || (i >= MINIMAP_MAX_X) || (j < 0) || (j >= MINIMAP_MAX_Z)) v = 0; else v = ((float)minimap[SHOWLEVEL].revealed[i][j]) * DIV255; if (flag == 1) { long vert = 0; _px = verts[vert].sx - boundaries.left; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.right - verts[vert].sx; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = verts[vert].sy - boundaries.top; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.bottom - verts[vert].sy; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; } if (fl2) verts[0].color = D3DRGB(v * DIV2, v * DIV2, v * DIV2); else verts[0].color = D3DRGB(v, v, v); oo += v; if ((i + 1 < 0) || (i + 1 >= MINIMAP_MAX_X) || (j < 0) || (j >= MINIMAP_MAX_Z)) v = 0; else v = ((float)minimap[SHOWLEVEL].revealed[__min(i+1, MINIMAP_MAX_X-1)][j]) * DIV255; if (flag == 1) { long vert = 1; _px = verts[vert].sx - boundaries.left; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.right - verts[vert].sx; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = verts[vert].sy - boundaries.top; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.bottom - verts[vert].sy; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; } if (fl2) verts[1].color = D3DRGB(v * DIV2, v * DIV2, v * DIV2); else verts[1].color = D3DRGB(v, v, v); oo += v; if ((i + 1 < 0) || (i + 1 >= MINIMAP_MAX_X) || (j + 1 < 0) || (j + 1 >= MINIMAP_MAX_Z)) v = 0; else v = ((float)minimap[SHOWLEVEL].revealed[__min(i+1, MINIMAP_MAX_X-1)][__min(j+1, MINIMAP_MAX_Z-1)]) * DIV255; if (flag == 1) { long vert = 2; _px = verts[vert].sx - boundaries.left; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.right - verts[vert].sx; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = verts[vert].sy - boundaries.top; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.bottom - verts[vert].sy; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; } if (fl2) verts[2].color = D3DRGB(v * DIV2, v * DIV2, v * DIV2); else verts[2].color = D3DRGB(v, v, v); oo += v; if ((i < 0) || (i >= MINIMAP_MAX_X) || (j + 1 < 0) || (j + 1 >= MINIMAP_MAX_Z)) v = 0; else v = ((float)minimap[SHOWLEVEL].revealed[i][__min(j+1, MINIMAP_MAX_Z-1)]) * DIV255; if (flag == 1) { long vert = 3; _px = verts[vert].sx - boundaries.left; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.right - verts[vert].sx; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = verts[vert].sy - boundaries.top; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; _px = boundaries.bottom - verts[vert].sy; if (_px < 0.f) v = 0.f; else if (_px < MOD20) v *= _px * MOD20DIV; } if (fl2) verts[3].color = D3DRGB(v * DIV2, v * DIV2, v * DIV2); else verts[3].color = D3DRGB(v, v, v); oo += v; if (oo > 0.f) { if (fl2) { verts[0].sx += DECALX * Xratio; verts[0].sy += DECALY * Yratio; verts[1].sx += DECALX * Xratio; verts[1].sy += DECALY * Yratio; verts[2].sx += DECALX * Xratio; verts[2].sy += DECALY * Yratio; verts[3].sx += DECALX * Xratio; verts[3].sy += DECALY * Yratio; } EERIEDRAWPRIM(GDevice, D3DPT_TRIANGLEFAN, D3DFVF_TLVERTEX | D3DFVF_DIFFUSE, verts, 4, 0); } } } } } if (flag != 2) { m_pd3dDevice->SetTextureStageState(0, D3DTSS_ADDRESS , D3DTADDRESS_WRAP); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_ZFUNC, D3DCMP_LESSEQUAL); SETALPHABLEND(m_pd3dDevice, FALSE); if ((SHOWLEVEL == ARX_LEVELS_GetRealNum(CURRENTLEVEL))) { // Now Draws Playerpos/angle verts[0].color = 0xFFFF0000; verts[1].color = 0xFFFF0000; verts[2].color = 0xFFFF0000; float val; if (flag == 1) val = 6.f; else val = 3.f; float rx = 0.f; float ry = -val * 1.8f; float rx2 = -val * DIV2; float ry2 = val; float rx3 = val * DIV2; float ry3 = val; float angle = DEG2RAD(player.angle.b); float ca = EEcos(angle); float sa = EEsin(angle); verts[0].sx = (px + rx2 * ca + ry2 * sa) * Xratio; verts[0].sy = (py + ry2 * ca - rx2 * sa) * Yratio; verts[1].sx = (px + rx * ca + ry * sa) * Xratio; verts[1].sy = (py + ry * ca - rx * sa) * Yratio; verts[2].sx = (px + rx3 * ca + ry3 * sa) * Xratio; verts[2].sy = (py + ry3 * ca - rx3 * sa) * Yratio; SETTC(GDevice, NULL); if (fl2) { SETALPHABLEND(m_pd3dDevice, TRUE); verts[0].sx += DECALX * Xratio; verts[0].sy += DECALY * Yratio; verts[1].sx += DECALX * Xratio; verts[1].sy += DECALY * Yratio; verts[2].sx += DECALX * Xratio; verts[2].sy += DECALY * Yratio; } EERIEDRAWPRIM(GDevice, D3DPT_TRIANGLEFAN, D3DFVF_TLVERTEX | D3DFVF_DIFFUSE, verts, 3, 0); if (fl2) SETALPHABLEND(m_pd3dDevice, FALSE); } } // tsu for (long lnpc = 1; lnpc < inter.nbmax; lnpc++) { if ((inter.iobj[lnpc] != NULL) && (inter.iobj[lnpc]->ioflags & IO_NPC)) { if (inter.iobj[lnpc]->_npcdata->life > 0.f) if (!((inter.iobj[lnpc]->GameFlags & GFLAG_MEGAHIDE) || (inter.iobj[lnpc]->show == SHOW_FLAG_MEGAHIDE)) && (inter.iobj[lnpc]->show == SHOW_FLAG_IN_SCENE)) if (!(inter.iobj[lnpc]->show == SHOW_FLAG_HIDDEN)) if (inter.iobj[lnpc]->_npcdata->fDetect >= 0) { if (player.Full_Skill_Etheral_Link >= inter.iobj[lnpc]->_npcdata->fDetect) { float fpx; float fpy; fpx = sstartx + ((inter.iobj[lnpc]->pos.x - 100 + ofx - ofx2) * DIV100 * casex + mini_offset_x[CURRENTLEVEL] * ratiooo * mod_x) / mod_x; fpy = sstarty + ((mapmaxy[SHOWLEVEL] - ofy - ofy2) * DIV100 * casey - (inter.iobj[lnpc]->pos.z + 200 + ofy - ofy2) * DIV100 * casey + mini_offset_y[CURRENTLEVEL] * ratiooo * mod_z) / mod_z; if (flag == 1) { fpx = startx + ((inter.iobj[lnpc]->pos.x - 100 + ofx - ofx2) * DIV100 * casex + mini_offset_x[CURRENTLEVEL] * ratiooo * mod_x) / mod_x; fpy = starty + ((mapmaxy[SHOWLEVEL] - ofy - ofy2) * DIV100 * casey - (inter.iobj[lnpc]->pos.z + 200 + ofy - ofy2) * DIV100 * casey + mini_offset_y[CURRENTLEVEL] * ratiooo * mod_z) / mod_z; } float d = Distance2D(player.pos.x, player.pos.z, inter.iobj[lnpc]->pos.x, inter.iobj[lnpc]->pos.z); if ((d <= 800) && (fabs(inter.iobj[0]->pos.y - inter.iobj[lnpc]->pos.y) < 250.f)) { float col = 1.f; if (d > 600.f) { col = 1.f - (d - 600.f) * DIV200; } if (!fl2) { SETALPHABLEND(m_pd3dDevice, true); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE); m_pd3dDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_ONE); } else SETALPHABLEND(m_pd3dDevice, true); if (fl2) { fpx += DECALX * Xratio; fpy += (DECALY + 15) * Yratio; } fpx *= Xratio; fpy *= Yratio; EERIEDrawBitmap(GDevice, fpx, fpy, 5.f * ratiooo, 5.f * ratiooo, 0, pTexDetect, D3DRGB(col, 0, 0)); if (!fl2) SETALPHABLEND(m_pd3dDevice, false); } } } } } if (flag == 0) for (long i = 0; i < Nb_Mapmarkers; i++) { if (Mapmarkers[i].lvl == SHOWLEVEL + 1) { float pos_x = Mapmarkers[i].x * 8 * ratiooo * ACTIVEBKG->Xmul * casex + startx; float pos_y = Mapmarkers[i].y * 8 * ratiooo * ACTIVEBKG->Zmul * casey + starty; float size = 5.f * ratiooo; verts[0].color = 0xFFFF0000; verts[1].color = 0xFFFF0000; verts[2].color = 0xFFFF0000; verts[3].color = 0xFFFF0000; verts[0].sx = (pos_x - size) * Xratio; verts[0].sy = (pos_y - size) * Yratio; verts[1].sx = (pos_x + size) * Xratio; verts[1].sy = (pos_y - size) * Yratio; verts[2].sx = (pos_x + size) * Xratio; verts[2].sy = (pos_y + size) * Yratio; verts[3].sx = (pos_x - size) * Xratio; verts[3].sy = (pos_y + size) * Yratio; verts[0].tu = 0.f; verts[0].tv = 0.f; verts[1].tu = 1.f; verts[1].tv = 0.f; verts[2].tu = 1.f; verts[2].tv = 1.f; verts[3].tu = 0.f; verts[3].tv = 1.f; if ((!fl2) && (MouseInRect(verts[0].sx, verts[0].sy, verts[2].sx, verts[2].sy))) { if (!Mapmarkers[i].tstring) { _TCHAR output[4096]; MakeLocalised(Mapmarkers[i].string, output, 4096, 0); Mapmarkers[i].tstring = (_TCHAR *)malloc((_tcslen(output) + 1) * sizeof(_TCHAR)); ZeroMemory(Mapmarkers[i].tstring, (_tcslen(output) + 1)*sizeof(_TCHAR)); _tcscpy(Mapmarkers[i].tstring, output); } if (Mapmarkers[i].tstring) { RECT rRect, bRect; SetRect(&bRect , (140), (290) , (140 + 205), (358)); float fLeft = (bRect.left) * Xratio ; float fRight = (bRect.right) * Xratio ; float fTop = (bRect.top) * Yratio ; float fBottom = (bRect.bottom) * Yratio ; ARX_CHECK_INT(fLeft); ARX_CHECK_INT(fRight); ARX_CHECK_INT(fTop); ARX_CHECK_INT(fBottom); SetRect(&rRect , ARX_CLEAN_WARN_CAST_INT(fLeft) , ARX_CLEAN_WARN_CAST_INT(fTop) , ARX_CLEAN_WARN_CAST_INT(fRight) , ARX_CLEAN_WARN_CAST_INT(fBottom)); long lLengthDraw = ARX_UNICODE_ForceFormattingInRect( hFontInGameNote, Mapmarkers[i].tstring, 0, rRect); danaeApp.DANAEEndRender(); _TCHAR Page_Buffer[256]; _tcsncpy(Page_Buffer, Mapmarkers[i].tstring, lLengthDraw); Page_Buffer[lLengthDraw] = _T('\0'); DrawBookTextInRect(ARX_CLEAN_WARN_CAST_FLOAT(bRect.left), ARX_CLEAN_WARN_CAST_FLOAT(bRect.top), ARX_CLEAN_WARN_CAST_FLOAT(bRect.right), ARX_CLEAN_WARN_CAST_FLOAT(bRect.bottom), Page_Buffer, 0, 0x00FF00FF, hFontInGameNote); danaeApp.DANAEStartRender(); } } if (MapMarkerTc == NULL) { MapMarkerTc = MakeTCFromFile("Graph\\interface\\icons\\mapmarker.bmp"); } SETTC(GDevice, MapMarkerTc); if (fl2) { verts[0].sx += DECALX * Xratio; verts[0].sy += DECALY * Yratio; verts[1].sx += DECALX * Xratio; verts[1].sy += DECALY * Yratio; verts[2].sx += DECALX * Xratio; verts[2].sy += DECALY * Yratio; verts[3].sx += DECALX * Xratio; verts[3].sy += DECALY * Yratio; } EERIEDRAWPRIM(GDevice, D3DPT_TRIANGLEFAN, D3DFVF_TLVERTEX | D3DFVF_DIFFUSE, verts, 4, 0); } } } }