Mercurial > mm7
comparison Render.cpp @ 144:8ab4484c22e0
Billboard drawing's up (actors, decorations, misc sprites)
author | Nomad |
---|---|
date | Tue, 12 Feb 2013 11:59:49 +0200 |
parents | b099dd069171 |
children | 796b79187c27 ee11772d0ad2 |
comparison
equal
deleted
inserted
replaced
143:b099dd069171 | 144:8ab4484c22e0 |
---|---|
16 #include "ObjectList.h" | 16 #include "ObjectList.h" |
17 #include "LayingItem.h" | 17 #include "LayingItem.h" |
18 #include "DecorationList.h" | 18 #include "DecorationList.h" |
19 #include "Allocator.h" | 19 #include "Allocator.h" |
20 #include "OSInfo.h" | 20 #include "OSInfo.h" |
21 #include "Actor.h" | |
21 #include "Log.h" | 22 #include "Log.h" |
22 | 23 |
23 #include "mm7_data.h" | 24 #include "mm7_data.h" |
24 | 25 |
25 | 26 |
195 auto p = pBillboardRenderList + i; | 196 auto p = pBillboardRenderList + i; |
196 | 197 |
197 soft_billboard.uScreenSpaceX = p->uScreenSpaceX; | 198 soft_billboard.uScreenSpaceX = p->uScreenSpaceX; |
198 soft_billboard.uParentBillboardID = i; | 199 soft_billboard.uParentBillboardID = i; |
199 soft_billboard.uScreenSpaceY = p->uScreenSpaceY; | 200 soft_billboard.uScreenSpaceY = p->uScreenSpaceY; |
200 soft_billboard.field_10 = p->field_0; | 201 soft_billboard._screenspace_x_scaler_packedfloat = p->_screenspace_x_scaler_packedfloat; |
201 soft_billboard.field_14 = p->field_4; | 202 soft_billboard._screenspace_y_scaler_packedfloat = p->_screenspace_y_scaler_packedfloat; |
202 soft_billboard.sZValue = p->sZValue; | 203 soft_billboard.sZValue = p->sZValue; |
203 soft_billboard.uFlags = p->field_1E; | 204 soft_billboard.uFlags = p->field_1E; |
204 soft_billboard.uTintColor = p->uTintColor; | 205 soft_billboard.uTintColor = p->uTintColor; |
205 v2 = p->uHwSpriteID; | 206 v2 = p->uHwSpriteID; |
206 if ( v2 != -1 ) | 207 if ( v2 != -1 ) |
2928 LABEL_74: | 2929 LABEL_74: |
2929 --pOutdoorCamera->numStru148s; | 2930 --pOutdoorCamera->numStru148s; |
2930 goto LABEL_75; | 2931 goto LABEL_75; |
2931 } | 2932 } |
2932 } | 2933 } |
2933 // 47F44B: using guessed type int __stdcall WorldPosToGridCellX(int); | |
2934 // 47F458: using guessed type int __stdcall WorldPosToGridCellZ(int); | |
2935 // 4D864C: using guessed type char byte_4D864C; | |
2936 | 2934 |
2937 | 2935 |
2938 //----- (0047BACF) -------------------------------------------------------- | 2936 //----- (0047BACF) -------------------------------------------------------- |
2939 void Render::TransformBillboardsAndSetPalettesODM() | 2937 void Render::TransformBillboardsAndSetPalettesODM() |
2940 { | 2938 { |
2941 //int v0; // edi@1 | 2939 //int v0; // edi@1 |
2942 char *v1; // esi@2 | 2940 //char *v1; // esi@2 |
2943 unsigned int v2; // edx@3 | 2941 //unsigned int v2; // edx@3 |
2944 int v3; // eax@3 | 2942 //int v3; // eax@3 |
2945 int v4; // edi@3 | 2943 //int v4; // edi@3 |
2946 int v5; // eax@3 | 2944 //int v5; // eax@3 |
2947 __int16 v6; // di@3 | 2945 //__int16 v6; // di@3 |
2948 int v7; // eax@3 | 2946 //int v7; // eax@3 |
2949 int v8; // ebx@4 | 2947 //int v8; // ebx@4 |
2950 unsigned __int16 *v9; // eax@7 | 2948 unsigned __int16 *v9; // eax@7 |
2951 char v10; // zf@9 | 2949 char v10; // zf@9 |
2952 DWORD v11; // eax@13 | 2950 //DWORD v11; // eax@13 |
2953 int v12; // eax@13 | 2951 int v12; // eax@13 |
2954 int v13; // eax@14 | 2952 int v13; // eax@14 |
2955 RenderBillboardTransform_local0 billboard; // [sp+4h] [bp-60h]@1 | 2953 RenderBillboardTransform_local0 billboard; // [sp+4h] [bp-60h]@1 |
2956 int v15; // [sp+54h] [bp-10h]@13 | 2954 int v15; // [sp+54h] [bp-10h]@13 |
2957 //int v16; // [sp+58h] [bp-Ch]@1 | 2955 //int v16; // [sp+58h] [bp-Ch]@1 |
2958 int v17; // [sp+5Ch] [bp-8h]@2 | 2956 //int v17; // [sp+5Ch] [bp-8h]@2 |
2959 int v18; // [sp+60h] [bp-4h]@13 | 2957 int v18; // [sp+60h] [bp-4h]@13 |
2960 | 2958 |
2961 billboard.uParentBillboardID = -1; | 2959 billboard.uParentBillboardID = -1; |
2962 billboard.pTarget = pRenderer->pTargetSurface; | 2960 billboard.pTarget = pRenderer->pTargetSurface; |
2963 billboard.pTargetZ = pRenderer->pActiveZBuffer; | 2961 billboard.pTargetZ = pRenderer->pActiveZBuffer; |
2964 billboard.uTargetPitch = pRenderer->uTargetSurfacePitch; | 2962 billboard.uTargetPitch = pRenderer->uTargetSurfacePitch; |
2965 billboard.uViewportX = pViewport->uViewportX; | 2963 billboard.uViewportX = pViewport->uViewportX; |
2966 billboard.uViewportY = pViewport->uViewportY; | 2964 billboard.uViewportY = pViewport->uViewportY; |
2967 billboard.uViewportZ = pViewport->uViewportZ - 1; | 2965 billboard.uViewportZ = pViewport->uViewportZ - 1; |
2968 billboard.uViewportW = pViewport->uViewportW; | 2966 billboard.uViewportW = pViewport->uViewportW; |
2969 //v0 = 0; | |
2970 pOutdoorCamera->uNumBillboards = uNumBillboardsToDraw; | 2967 pOutdoorCamera->uNumBillboards = uNumBillboardsToDraw; |
2971 | 2968 |
2972 //v16 = 0; | 2969 for (int i = 0; i < ::uNumBillboardsToDraw; ++i) |
2973 for (int i = 0; i < uNumBillboardsToDraw; ++i) | |
2974 { | 2970 { |
2975 auto pBillboard = pBillboardRenderList + i; | 2971 auto pBillboard = pBillboardRenderList + i; |
2976 v17 = 0; | 2972 |
2977 v1 = (char *)&pBillboardRenderList[i].uScreenSpaceY; | 2973 billboard.uScreenSpaceX = pBillboard->uScreenSpaceX; |
2978 //do | 2974 billboard.uScreenSpaceY = pBillboard->uScreenSpaceY; |
2979 //{ | 2975 billboard.uParentBillboardID = i; |
2980 billboard.uScreenSpaceX = pBillboard->uScreenSpaceX; | 2976 billboard._screenspace_x_scaler_packedfloat = pBillboard->_screenspace_x_scaler_packedfloat; |
2981 v2 = *((short *)v1 - 5); | 2977 billboard.uTintColor = pBillboard->uTintColor; |
2982 billboard.uScreenSpaceY = pBillboard->uScreenSpaceY; | 2978 billboard._screenspace_y_scaler_packedfloat = pBillboard->_screenspace_y_scaler_packedfloat; |
2983 v3 = *((int *)v1 - 10); | 2979 billboard.sZValue = pBillboard->sZValue; |
2984 billboard.uParentBillboardID = i; | 2980 billboard.uFlags = pBillboard->field_1E; |
2985 v4 = *((int *)v1 + 1); | 2981 if (pBillboard->uHwSpriteID != -1) |
2986 billboard.field_10 = v3; | 2982 { |
2987 v5 = *((int *)v1 - 9); | 2983 if (pRenderer->pRenderD3D) |
2988 billboard.uTintColor = v4; | 2984 pRenderer->TransformBillboard(&billboard, |
2989 v6 = *((short *)v1 - 8); | 2985 &pSprites_LOD->pHardwareSprites[pBillboard->uHwSpriteID], |
2990 billboard.field_14 = v5; | 2986 pBillboard->uPaletteSubindex, pBillboard); |
2991 v7 = *((int *)v1 - 6); | 2987 else |
2992 billboard.sZValue = *((int *)v1 - 6); | 2988 { |
2993 billboard.uFlags = v2; | 2989 assert(false); |
2994 if ( v6 != -1 ) | 2990 |
2995 { | 2991 auto v1 = (char *)&pBillboard->uScreenSpaceY; |
2996 v8 = *((short *)v1 + 1); | |
2997 if ( pRenderer->pRenderD3D ) | |
2998 { | |
2999 billboard.sZValue = v7; | |
3000 billboard.uFlags = v2; | |
3001 pRenderer->TransformBillboard(&billboard, &pSprites_LOD->pHardwareSprites[v6], v8, (RenderBillboard *)(v1 - 40)); | |
3002 } | |
3003 else | |
3004 { | |
3005 if ( *(v1 - 10) & 2 ) | 2992 if ( *(v1 - 10) & 2 ) |
3006 v9 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 0, 1); | 2993 v9 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 0, 1); |
3007 else | 2994 else |
3008 v9 = GetBillboardPalette((RenderBillboard *)(v1 - 40), *((short *)v1 - 7), v7, *((short *)v1 + 1)); | 2995 v9 = GetBillboardPalette((RenderBillboard *)(v1 - 40), *((short *)v1 - 7), pBillboard->sZValue, *((short *)v1 + 1)); |
3009 v10 = (*(v1 - 9) & 1) == 0; | 2996 v10 = (*(v1 - 9) & 1) == 0; |
3010 billboard.pPalette = v9; | 2997 billboard.pPalette = v9; |
3011 if ( !v10 ) | 2998 if ( !v10 ) |
3012 billboard.pPalette = pPaletteManager->field_261600[*((short *)v1 - 7)]; | 2999 billboard.pPalette = pPaletteManager->field_261600[*((short *)v1 - 7)]; |
3013 if ( !(billboard.uFlags & 0x40) && billboard.uFlags & 0x80 ) | 3000 if ( !(billboard.uFlags & 0x40) && billboard.uFlags & 0x80 ) |
3014 { | 3001 { |
3015 v11 = GetTickCount(); | 3002 v12 = stru_5C6E00->SinCos(i * 5 + GetTickCount()); |
3016 v12 = stru_5C6E00->SinCos(v17 + v11); | |
3017 v15 = abs(v12); | 3003 v15 = abs(v12); |
3018 v18 = (unsigned __int64)(15i64 * v15) >> 16; | 3004 v18 = (unsigned __int64)(15i64 * v15) >> 16; |
3019 billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 15 - v18, 1); | 3005 billboard.pPalette2 = PaletteManager::Get_Dark_or_Red_LUT(*((short *)v1 - 7), 15 - v18, 1); |
3020 } | 3006 } |
3021 v13 = *((short *)v1 - 8); | 3007 v13 = *((short *)v1 - 8); |
3022 if ( v13 >= 0 ) | 3008 if ( v13 >= 0 ) |
3023 pSprites_LOD->pSpriteHeaders[v13]._4ACC38(&billboard, 1); | 3009 pSprites_LOD->pSpriteHeaders[v13]._4ACC38(&billboard, 1); |
3024 } | 3010 } |
3025 } | 3011 } |
3026 v17 += 5; | |
3027 //v0 = v16 + 1; | |
3028 v1 += 52; | |
3029 //++v16; | |
3030 //} | |
3031 //while ( v16 < (signed int)uNumBillboardsToDraw ); | |
3032 } | 3012 } |
3033 } | 3013 } |
3034 | 3014 |
3035 | 3015 |
3036 //----- (0047AF11) -------------------------------------------------------- | 3016 //----- (0047AF11) -------------------------------------------------------- |
3037 void Render::DrawLayingItems_Shooting_Magic_ODM() | 3017 void Render::DrawLayingItems_Shooting_Magic_ODM() |
3038 { | 3018 { |
3039 char *v0; // edi@2 | 3019 //char *v0; // edi@2 |
3040 ObjectDesc *v1; // ebx@4 | 3020 ObjectDesc *v1; // ebx@4 |
3041 __int16 v2; // cx@5 | 3021 __int16 v2; // cx@5 |
3042 RenderBillboard *v3; // esi@10 | 3022 RenderBillboard *v3; // esi@10 |
3043 SpriteFrame *v4; // eax@10 | 3023 SpriteFrame *v4; // eax@10 |
3044 SpriteFrame *v5; // ebx@10 | 3024 SpriteFrame *v5; // ebx@10 |
3075 int v36; // [sp+1Ch] [bp-24h]@10 | 3055 int v36; // [sp+1Ch] [bp-24h]@10 |
3076 int v37; // [sp+1Ch] [bp-24h]@23 | 3056 int v37; // [sp+1Ch] [bp-24h]@23 |
3077 int a6; // [sp+20h] [bp-20h]@10 | 3057 int a6; // [sp+20h] [bp-20h]@10 |
3078 int a6a; // [sp+20h] [bp-20h]@23 | 3058 int a6a; // [sp+20h] [bp-20h]@23 |
3079 int v40; // [sp+24h] [bp-1Ch]@25 | 3059 int v40; // [sp+24h] [bp-1Ch]@25 |
3080 signed int v41; // [sp+28h] [bp-18h]@1 | 3060 //signed int v41; // [sp+28h] [bp-18h]@1 |
3081 int v42; // [sp+2Ch] [bp-14h]@23 | 3061 int v42; // [sp+2Ch] [bp-14h]@23 |
3082 int y; // [sp+30h] [bp-10h]@10 | 3062 int y; // [sp+30h] [bp-10h]@10 |
3083 int x; // [sp+34h] [bp-Ch]@10 | 3063 int x; // [sp+34h] [bp-Ch]@10 |
3084 int z; // [sp+38h] [bp-8h]@10 | 3064 int z; // [sp+38h] [bp-8h]@10 |
3085 signed __int16 v46; // [sp+3Ch] [bp-4h]@12 | 3065 signed __int16 v46; // [sp+3Ch] [bp-4h]@12 |
3086 | 3066 |
3087 v41 = 0; | 3067 //v41 = 0; |
3088 if ( (signed int)uNumLayingItems > 0 ) | 3068 for (int i = 0; i < uNumLayingItems; ++i) |
3089 { | 3069 { |
3090 v0 = (char *)&pLayingItems[0].uSectorID; | 3070 auto v0 = (char *)&pLayingItems[i].uSectorID; |
3091 do | 3071 //v0 = (char *)&pLayingItems[0].uSectorID; |
3092 { | 3072 //do |
3073 //{ | |
3093 if ( *((short *)v0 - 13) ) | 3074 if ( *((short *)v0 - 13) ) |
3094 { | 3075 { |
3095 v1 = &pObjectList->pObjects[*((short *)v0 - 13)]; | 3076 v1 = &pObjectList->pObjects[*((short *)v0 - 13)]; |
3096 if ( !(v1->uFlags & 1) ) | 3077 if ( !(v1->uFlags & 1) ) |
3097 { | 3078 { |
3100 { | 3081 { |
3101 a5 = *(short *)v0; | 3082 a5 = *(short *)v0; |
3102 x = *((int *)v0 - 6); | 3083 x = *((int *)v0 - 6); |
3103 y = *((int *)v0 - 5); | 3084 y = *((int *)v0 - 5); |
3104 z = *((int *)v0 - 4); | 3085 z = *((int *)v0 - 4); |
3105 v3 = &pBillboardRenderList[uNumBillboardsToDraw]; | 3086 v3 = &pBillboardRenderList[::uNumBillboardsToDraw]; |
3106 v4 = pSpriteFrameTable->GetFrame(v1->uSpriteID, *((short *)v0 + 1)); | 3087 v4 = pSpriteFrameTable->GetFrame(v1->uSpriteID, *((short *)v0 + 1)); |
3107 v5 = v4; | 3088 v5 = v4; |
3108 v28 = v4; | 3089 v28 = v4; |
3109 v36 = v4->uFlags; | 3090 v36 = v4->uFlags; |
3110 a6 = v4->uGlowRadius * *((short *)v0 + 3); | 3091 a6 = v4->uGlowRadius * *((short *)v0 + 3); |
3188 HIDWORD(v23) = SLOWORD(pOutdoorCamera->int_fov_rad); | 3169 HIDWORD(v23) = SLOWORD(pOutdoorCamera->int_fov_rad); |
3189 v35 = pViewport->uScreenCenterX | 3170 v35 = pViewport->uScreenCenterX |
3190 - ((signed int)(((unsigned __int64)(v25 * (signed __int64)v40) >> 16) + 32768) >> 16); | 3171 - ((signed int)(((unsigned __int64)(v25 * (signed __int64)v40) >> 16) + 32768) >> 16); |
3191 v32 = LOWORD(pViewport->uScreenCenterY) | 3172 v32 = LOWORD(pViewport->uScreenCenterY) |
3192 - (((unsigned int)((unsigned __int64)(v23 / v42 * v31) >> 16) + 32768) >> 16); | 3173 - (((unsigned int)((unsigned __int64)(v23 / v42 * v31) >> 16) + 32768) >> 16); |
3193 if ( (signed int)uNumBillboardsToDraw >= 500 ) | 3174 if (::uNumBillboardsToDraw >= 500) |
3194 return; | 3175 return; |
3195 ++uNumBillboardsToDraw; | 3176 ++::uNumBillboardsToDraw; |
3196 ++uNumSpritesDrawnThisFrame; | 3177 ++uNumSpritesDrawnThisFrame; |
3197 *(v0 - 2) |= 1u; | 3178 *(v0 - 2) |= 1u; |
3198 v3->uPalette = v28->uPaletteIndex; | 3179 v3->uPalette = v28->uPaletteIndex; |
3199 v3->uIndoorSectorID = a5; | 3180 v3->uIndoorSectorID = a5; |
3200 v3->field_0 = (unsigned __int64)(v28->scale * (signed __int64)v24) >> 16; | 3181 v3->_screenspace_x_scaler_packedfloat = (unsigned __int64)(v28->scale * (signed __int64)v24) >> 16; |
3201 v26 = (unsigned __int64)(v28->scale * (signed __int64)v24) >> 16; | 3182 v26 = (unsigned __int64)(v28->scale * (signed __int64)v24) >> 16; |
3202 v3->pSpriteFrame = v28; | 3183 v3->pSpriteFrame = v28; |
3203 v3->field_4 = v26; | 3184 v3->_screenspace_y_scaler_packedfloat = v26; |
3204 v3->field_1E = v46; | 3185 v3->field_1E = v46; |
3205 v3->some_x = x; | 3186 v3->some_x = x; |
3206 v3->some_y = y; | 3187 v3->some_y = y; |
3207 v3->some_z = z; | 3188 v3->some_z = z; |
3208 v3->uScreenSpaceX = v35; | 3189 v3->uScreenSpaceX = v35; |
3209 v3->uScreenSpaceY = v32; | 3190 v3->uScreenSpaceY = v32; |
3210 HIWORD(v26) = HIWORD(v42); | 3191 HIWORD(v26) = HIWORD(v42); |
3211 LOWORD(v26) = 0; | 3192 LOWORD(v26) = 0; |
3212 v27 = (*(v0 - 2) & 0x20) == 0; | 3193 v27 = (*(v0 - 2) & 0x20) == 0; |
3213 v3->sZValue = v26 + (8 * v41 | 2); | 3194 v3->sZValue = v26 + (8 * i | OBJECT_Item); |
3214 v3->uPaletteSubindex = 0; | 3195 v3->uPaletteSubindex = 0; |
3215 v3->uTintColor = 0; | 3196 v3->uTintColor = 0; |
3216 if ( !v27 ) | 3197 if ( !v27 ) |
3217 { | 3198 { |
3218 if ( !pRenderer->pRenderD3D ) | 3199 if ( !pRenderer->pRenderD3D ) |
3224 } | 3205 } |
3225 } | 3206 } |
3226 } | 3207 } |
3227 } | 3208 } |
3228 LABEL_34: | 3209 LABEL_34: |
3229 ++v41; | 3210 ; |
3230 v0 += 112; | 3211 //++v41; |
3231 } | 3212 //v0 += 112; |
3232 while ( v41 < (signed int)uNumLayingItems ); | 3213 //} |
3214 //while ( v41 < (signed int)uNumLayingItems ); | |
3233 } | 3215 } |
3234 } | 3216 } |
3235 // 4E94D3: using guessed type char byte_4E94D3; | 3217 // 4E94D3: using guessed type char byte_4E94D3; |
3236 // 5187E4: using guessed type int uNumSpritesDrawnThisFrame; | 3218 // 5187E4: using guessed type int uNumSpritesDrawnThisFrame; |
3237 | 3219 |
3452 } | 3434 } |
3453 | 3435 |
3454 | 3436 |
3455 | 3437 |
3456 //----- (0047A95E) -------------------------------------------------------- | 3438 //----- (0047A95E) -------------------------------------------------------- |
3457 void Render::DrawDecorations() | 3439 void Render::PrepareDecorationsRenderList_ODM() |
3458 { | 3440 { |
3459 char *v0; // esi@2 | 3441 //char *v0; // esi@2 |
3460 DecorationDesc *v1; // ebx@6 | 3442 DecorationDesc *v1; // ebx@6 |
3461 __int16 v2; // ax@6 | 3443 __int16 v2; // ax@6 |
3462 double v3; // st7@7 | 3444 double v3; // st7@7 |
3463 int v4; // eax@9 | 3445 int v4; // eax@9 |
3464 int v5; // edx@9 | 3446 int v5; // edx@9 |
3489 int v30; // ecx@37 | 3471 int v30; // ecx@37 |
3490 int v31; // ebx@37 | 3472 int v31; // ebx@37 |
3491 Particle_ local_0; // [sp+Ch] [bp-98h]@7 | 3473 Particle_ local_0; // [sp+Ch] [bp-98h]@7 |
3492 int x; // [sp+74h] [bp-30h]@9 | 3474 int x; // [sp+74h] [bp-30h]@9 |
3493 int y; // [sp+78h] [bp-2Ch]@9 | 3475 int y; // [sp+78h] [bp-2Ch]@9 |
3494 int v35; // [sp+7Ch] [bp-28h]@1 | 3476 //int v35; // [sp+7Ch] [bp-28h]@1 |
3495 int v36; // [sp+80h] [bp-24h]@9 | 3477 int v36; // [sp+80h] [bp-24h]@9 |
3496 unsigned __int16 *v37; // [sp+84h] [bp-20h]@9 | 3478 unsigned __int16 *v37; // [sp+84h] [bp-20h]@9 |
3497 int v38; // [sp+88h] [bp-1Ch]@9 | 3479 int v38; // [sp+88h] [bp-1Ch]@9 |
3498 int v39; // [sp+8Ch] [bp-18h]@24 | 3480 int v39; // [sp+8Ch] [bp-18h]@24 |
3499 int v40; // [sp+90h] [bp-14h]@24 | 3481 int v40; // [sp+90h] [bp-14h]@24 |
3500 int v41; // [sp+94h] [bp-10h]@24 | 3482 int v41; // [sp+94h] [bp-10h]@24 |
3501 int v42; // [sp+98h] [bp-Ch]@9 | 3483 int v42; // [sp+98h] [bp-Ch]@9 |
3502 int a5; // [sp+9Ch] [bp-8h]@9 | 3484 int a5; // [sp+9Ch] [bp-8h]@9 |
3503 int b; // [sp+A0h] [bp-4h]@22 | 3485 int b; // [sp+A0h] [bp-4h]@22 |
3504 | 3486 |
3505 v35 = 0; | 3487 //v35 = 0; |
3506 if ( (signed int)uNumLevelDecorations > 0 ) | 3488 //if ( (signed int)uNumLevelDecorations > 0 ) |
3507 { | 3489 //{ |
3508 v0 = (char *)&pLevelDecorations[0].vPosition.y; | 3490 //v0 = (char *)&pLevelDecorations[0].vPosition.y; |
3509 do | 3491 //do |
3510 { | 3492 for (int i = 0; i < uNumLevelDecorations; ++i) |
3493 { | |
3494 auto v0 = (char *)&pLevelDecorations[i].vPosition.y; | |
3495 | |
3511 if ( (!(*(v0 - 6) & 0x40) || ((LevelDecoration *)(v0 - 8))->_47A825()) && !(*(v0 - 6) & 0x20) ) | 3496 if ( (!(*(v0 - 6) & 0x40) || ((LevelDecoration *)(v0 - 8))->_47A825()) && !(*(v0 - 6) & 0x20) ) |
3512 { | 3497 { |
3513 v1 = &pDecorationList->pDecorations[*((short *)v0 - 4)]; | 3498 v1 = &pDecorationList->pDecorations[*((short *)v0 - 4)]; |
3514 v2 = v1->uFlags; | 3499 v2 = v1->uFlags; |
3515 if ( (char)v2 >= 0 ) | 3500 if ( (char)v2 >= 0 ) |
3623 v42 = pSprites_LOD->pSpriteHeaders[(signed __int16)*v37].uWidth >> 1; | 3608 v42 = pSprites_LOD->pSpriteHeaders[(signed __int16)*v37].uWidth >> 1; |
3624 b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16; | 3609 b = (unsigned __int64)(v42 * (signed __int64)v41) >> 16; |
3625 } | 3610 } |
3626 if ( b + v25 >= (signed int)pViewport->uViewportX && v25 - b <= (signed int)pViewport->uViewportZ ) | 3611 if ( b + v25 >= (signed int)pViewport->uViewportX && v25 - b <= (signed int)pViewport->uViewportZ ) |
3627 { | 3612 { |
3628 if ( (signed int)uNumBillboardsToDraw >= 500 ) | 3613 if (::uNumBillboardsToDraw >= 500) |
3629 return; | 3614 return; |
3630 v27 = &pBillboardRenderList[uNumBillboardsToDraw++]; | 3615 v27 = &pBillboardRenderList[::uNumBillboardsToDraw++]; |
3631 ++uNumDecorationsDrawnThisFrame; | 3616 ++uNumDecorationsDrawnThisFrame; |
3632 v27->uHwSpriteID = *v37; | 3617 v27->uHwSpriteID = *v37; |
3633 v28 = v9->uPaletteIndex; | 3618 v28 = v9->uPaletteIndex; |
3634 v27->field_0 = v26; | 3619 v27->_screenspace_x_scaler_packedfloat = v26; |
3635 v27->field_4 = v26; | 3620 v27->_screenspace_y_scaler_packedfloat = v26; |
3636 v29 = v38; | 3621 v29 = v38; |
3637 v27->uScreenSpaceX = v25; | 3622 v27->uScreenSpaceX = v25; |
3638 HIBYTE(v29) |= 2u; | 3623 HIBYTE(v29) |= 2u; |
3639 v27->uPalette = v28; | 3624 v27->uPalette = v28; |
3640 v27->field_1E = v29; | 3625 v27->field_1E = v29; |
3641 v27->some_x = x; | 3626 v27->some_x = x; |
3642 v27->some_y = y; | 3627 v27->some_y = y; |
3643 v27->some_z = v36; | 3628 v27->some_z = v36; |
3644 v27->uScreenSpaceY = v40; | 3629 v27->uScreenSpaceY = v40; |
3645 HIWORD(v30) = HIWORD(v39); | 3630 HIWORD(v30) = HIWORD(v39); |
3646 v31 = 8 * v35 | 5; | 3631 v31 = 8 * i | OBJECT_Decoration; |
3647 LOWORD(v30) = 0; | 3632 LOWORD(v30) = 0; |
3648 v27->uIndoorSectorID = 0; | 3633 v27->uIndoorSectorID = 0; |
3649 v27->sZValue = v30 + v31; | 3634 v27->sZValue = v30 + v31; |
3650 v27->uPaletteSubindex = 0; | 3635 v27->uPaletteSubindex = 0; |
3651 v27->pSpriteFrame = v9; | 3636 v27->pSpriteFrame = v9; |
3692 local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01"); | 3677 local_0.uTextureID = pBitmaps_LOD->LoadTexture("effpar01"); |
3693 pGame->pParticleEngine->AddParticle(&local_0); | 3678 pGame->pParticleEngine->AddParticle(&local_0); |
3694 } | 3679 } |
3695 } | 3680 } |
3696 LABEL_38: | 3681 LABEL_38: |
3697 ++v35; | 3682 ; |
3698 v0 += 32; | 3683 //++v35; |
3699 } | 3684 //v0 += 32; |
3700 while ( v35 < (signed int)uNumLevelDecorations ); | 3685 } |
3701 } | 3686 //while ( v35 < (signed int)uNumLevelDecorations ); |
3702 } | 3687 } |
3703 // 4E94D0: using guessed type char byte_4E94D0; | 3688 // 4E94D0: using guessed type char byte_4E94D0; |
3704 // 5187EC: using guessed type int uNumDecorationsDrawnThisFrame; | 3689 // 5187EC: using guessed type int uNumDecorationsDrawnThisFrame; |
3705 | 3690 |
3706 | 3691 |
7024 //----- (004A194A) -------------------------------------------------------- | 7009 //----- (004A194A) -------------------------------------------------------- |
7025 void Render::BltBackToFontFast(int a2, int a3, RECT *a4) | 7010 void Render::BltBackToFontFast(int a2, int a3, RECT *a4) |
7026 { | 7011 { |
7027 IDirectDrawSurface *pFront; // eax@3 | 7012 IDirectDrawSurface *pFront; // eax@3 |
7028 IDirectDrawSurface *pBack; // [sp-Ch] [bp-Ch]@3 | 7013 IDirectDrawSurface *pBack; // [sp-Ch] [bp-Ch]@3 |
7029 RECT *v6; // [sp-8h] [bp-8h]@3 | |
7030 DWORD v7; // [sp-4h] [bp-4h]@3 | |
7031 | 7014 |
7032 if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) | 7015 if ( pVersion->pVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT || pVersion->pVersionInfo.dwMajorVersion != 4 ) |
7033 { | 7016 { |
7034 pFront = (IDirectDrawSurface *)this->pFrontBuffer4; | 7017 pFront = (IDirectDrawSurface *)this->pFrontBuffer4; |
7035 v7 = DDBLTFAST_WAIT; | |
7036 v6 = a4; | |
7037 pBack = (IDirectDrawSurface *)this->pBackBuffer4; | 7018 pBack = (IDirectDrawSurface *)this->pBackBuffer4; |
7038 } | 7019 } |
7039 else | 7020 else |
7040 { | 7021 { |
7041 pFront = (IDirectDrawSurface *)this->pFrontBuffer2; | 7022 pFront = (IDirectDrawSurface *)this->pFrontBuffer2; |
7042 v7 = DDBLTFAST_WAIT; | |
7043 v6 = a4; | |
7044 pBack = (IDirectDrawSurface *)this->pBackBuffer2; | 7023 pBack = (IDirectDrawSurface *)this->pBackBuffer2; |
7045 } | 7024 } |
7046 pFront->BltFast(0, 0, pBack, v6, v7); | 7025 pFront->BltFast(0, 0, pBack, a4, DDBLTFAST_WAIT); |
7047 } | 7026 } |
7048 | 7027 |
7049 //----- (004A1B22) -------------------------------------------------------- | 7028 //----- (004A1B22) -------------------------------------------------------- |
7050 unsigned int Render::Billboard_ProbablyAddToListAndSortByZOrder(unsigned int a1) | 7029 unsigned int Render::Billboard_ProbablyAddToListAndSortByZOrder(float z) |
7051 { | 7030 { |
7052 unsigned int v2; // ebx@1 | 7031 //unsigned int v2; // ebx@1 |
7053 double v4; // st7@5 | 7032 //double v4; // st7@5 |
7054 unsigned int v5; // esi@5 | 7033 //unsigned int v5; // esi@5 |
7055 int v6; // ecx@5 | 7034 //int v6; // ecx@5 |
7056 unsigned int v7; // edx@6 | 7035 unsigned int v7; // edx@6 |
7057 char *v8; // ecx@12 | 7036 char *v8; // ecx@12 |
7058 void *v9; // edi@16 | 7037 void *v9; // edi@16 |
7059 unsigned int v10; // eax@16 | 7038 unsigned int v10; // eax@16 |
7060 void *v11; // edi@21 | 7039 void *v11; // edi@21 |
7061 unsigned int v12; // eax@21 | 7040 unsigned int v12; // eax@21 |
7062 | 7041 |
7063 v2 = pRenderer->uNumBillboardsToDraw; | 7042 //v2 = uNumBillboardsToDraw; |
7064 if ( (signed int)pRenderer->uNumBillboardsToDraw >= 999 ) | 7043 if (uNumBillboardsToDraw >= 999 ) |
7065 return 0; | 7044 return 0; |
7066 if ( !pRenderer->uNumBillboardsToDraw ) | 7045 if (!uNumBillboardsToDraw) |
7067 { | 7046 { |
7068 pRenderer->uNumBillboardsToDraw = 1; | 7047 uNumBillboardsToDraw = 1; |
7069 return 0; | 7048 return 0; |
7070 } | 7049 } |
7071 v4 = *(float *)&a1; | 7050 |
7072 v5 = pRenderer->uNumBillboardsToDraw; | 7051 //v4 = *(float *)&a1; |
7073 v6 = 0; | 7052 //v5 = pRenderer->uNumBillboardsToDraw; |
7074 if ( (signed int)pRenderer->uNumBillboardsToDraw <= 0 ) | 7053 //v6 = 0; |
7075 { | 7054 for (int left = 0, right = uNumBillboardsToDraw; left < right; ) // binsearch |
7076 v7 = a1; | 7055 { |
7077 } | 7056 v7 = left + (right - left) / 2; |
7078 else | 7057 if (z <= pRenderer->pBillboardRenderListD3D[v7].z_order) |
7079 { | 7058 right = v7; |
7080 do | 7059 else |
7081 { | 7060 left = v7 + 1; |
7082 v7 = v6 + (signed int)(v5 - v6) / 2; | 7061 } |
7083 if ( v4 <= pRenderer->pBillboardRenderListD3D[v6 + (signed int)(v5 - v6) / 2].flt_88 ) | 7062 |
7084 v5 = v6 + (signed int)(v5 - v6) / 2; | 7063 v8 = (char *)&pRenderer->pBillboardRenderListD3D[v7].z_order; |
7085 else | 7064 if (z > *(float *)v8 ) |
7086 v6 = v7 + 1; | |
7087 } | |
7088 while ( v6 < (signed int)v5 ); | |
7089 } | |
7090 v8 = (char *)&pRenderer->pBillboardRenderListD3D[v7].flt_88; | |
7091 if ( v4 > *(float *)v8 ) | |
7092 { | 7065 { |
7093 if ( v7 == pRenderer->uNumBillboardsToDraw - 1 ) | 7066 if ( v7 == pRenderer->uNumBillboardsToDraw - 1 ) |
7094 { | 7067 { |
7095 v7 = pRenderer->uNumBillboardsToDraw; | 7068 v7 = pRenderer->uNumBillboardsToDraw; |
7096 } | 7069 } |
7109 while ( v10 ); | 7082 while ( v10 ); |
7110 } | 7083 } |
7111 ++v7; | 7084 ++v7; |
7112 } | 7085 } |
7113 LABEL_23: | 7086 LABEL_23: |
7114 pRenderer->uNumBillboardsToDraw = v2 + 1; | 7087 uNumBillboardsToDraw++; |
7115 return v7; | 7088 return v7; |
7116 } | 7089 } |
7117 if ( v4 <= *(float *)v8 ) | 7090 if (z <= *(float *)v8 ) |
7118 { | 7091 { |
7119 if ( (signed int)pRenderer->uNumBillboardsToDraw > (signed int)v7 ) | 7092 if ( (signed int)pRenderer->uNumBillboardsToDraw > (signed int)v7 ) |
7120 { | 7093 { |
7121 v11 = &pRenderer->pBillboardRenderListD3D[pRenderer->uNumBillboardsToDraw]; | 7094 v11 = &pRenderer->pBillboardRenderListD3D[pRenderer->uNumBillboardsToDraw]; |
7122 v12 = pRenderer->uNumBillboardsToDraw - v7; | 7095 v12 = pRenderer->uNumBillboardsToDraw - v7; |
7197 return; | 7170 return; |
7198 | 7171 |
7199 if (pRenderD3D) | 7172 if (pRenderD3D) |
7200 { | 7173 { |
7201 pGame->draw_debug_outlines(); | 7174 pGame->draw_debug_outlines(); |
7202 //DoRenderBillboards_D3D(); //Ritor1: it's temporarily | 7175 DoRenderBillboards_D3D(); //Ritor1: it's temporarily |
7203 pGame->pStru6Instance->RenderSpecialEffects(); | 7176 pGame->pStru6Instance->RenderSpecialEffects(); |
7204 pRenderD3D->pDevice->EndScene(); | 7177 pRenderD3D->pDevice->EndScene(); |
7205 } | 7178 } |
7206 else | 7179 else |
7207 pGame->pStru6Instance->RenderSpecialEffects(); | 7180 pGame->pStru6Instance->RenderSpecialEffects(); |
7995 | 7968 |
7996 v26 = this; | 7969 v26 = this; |
7997 if ( this->uNumD3DSceneBegins ) | 7970 if ( this->uNumD3DSceneBegins ) |
7998 { | 7971 { |
7999 v4 = pSoftBillboard; | 7972 v4 = pSoftBillboard; |
8000 v5 = (double)HIWORD(pSoftBillboard->sZValue); | 7973 v5 = (double)pSoftBillboard->zbuffer_depth; |
8001 pSoftBillboarda = v5; | 7974 pSoftBillboarda = v5; |
8002 v6 = v5; | 7975 v6 = v5; |
8003 v7 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v6)); | 7976 v7 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v6)); |
8004 v8 = uPaletteSubindex; | 7977 v8 = uPaletteSubindex; |
8005 v9 = v7; | 7978 v9 = v7; |
8012 pBillboardRenderListD3D[v9].field_90 = v4->field_44; | 7985 pBillboardRenderListD3D[v9].field_90 = v4->field_44; |
8013 pBillboardRenderListD3D[v9].sZValue = v4->sZValue; | 7986 pBillboardRenderListD3D[v9].sZValue = v4->sZValue; |
8014 pBillboardRenderListD3D[v9].uParentBillboardID = v4->uParentBillboardID; | 7987 pBillboardRenderListD3D[v9].uParentBillboardID = v4->uParentBillboardID; |
8015 v25 = v4->uScreenSpaceX; | 7988 v25 = v4->uScreenSpaceX; |
8016 v24 = v4->uScreenSpaceY; | 7989 v24 = v4->uScreenSpaceY; |
8017 a1 = (double)(v4->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v4->field_10); | 7990 a1 = (v4->_screenspace_x_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(v4->_screenspace_x_scaler_packedfloat); |
8018 v29 = (double)(v4->field_14 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v4->field_14); | 7991 v29 = (v4->_screenspace_y_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(v4->_screenspace_y_scaler_packedfloat); |
8019 v31 = (double)((v10->uBufferWidth >> 1) - v10->uAreaX); | 7992 v31 = (double)((v10->uBufferWidth >> 1) - v10->uAreaX); |
8020 v27 = (double)(v10->uBufferHeight - v10->uAreaY); | 7993 v27 = (double)(v10->uBufferHeight - v10->uAreaY); |
8021 if ( v4->uFlags & 4 ) | 7994 if ( v4->uFlags & 4 ) |
8022 v31 = v31 * -1.0; | 7995 v31 = v31 * -1.0; |
8023 if ( v4->uTintColor && v26->bTinting ) | 7996 if ( v4->uTintColor && v26->bTinting ) |
8080 pBillboardRenderListD3D[v9].pQuards[3].rhw = v16; | 8053 pBillboardRenderListD3D[v9].pQuards[3].rhw = v16; |
8081 pBillboardRenderListD3D[v9].pQuards[3].texcoord.x = 1.0; | 8054 pBillboardRenderListD3D[v9].pQuards[3].texcoord.x = 1.0; |
8082 pBillboardRenderListD3D[v9].pQuards[3].texcoord.y = 0.0; | 8055 pBillboardRenderListD3D[v9].pQuards[3].texcoord.y = 0.0; |
8083 v23 = v10->pTexture; | 8056 v23 = v10->pTexture; |
8084 pBillboardRenderListD3D[v9].uNumVertices = 4; | 8057 pBillboardRenderListD3D[v9].uNumVertices = 4; |
8085 pBillboardRenderListD3D[v9].flt_88 = pSoftBillboarda; | 8058 pBillboardRenderListD3D[v9].z_order = pSoftBillboarda; |
8086 pBillboardRenderListD3D[v9].pTexture = v23; | 8059 pBillboardRenderListD3D[v9].pTexture = v23; |
8087 } | 8060 } |
8088 } | 8061 } |
8089 | 8062 |
8090 | 8063 |
8135 double v45; // st6@3 | 8108 double v45; // st6@3 |
8136 float v46; // eax@3 | 8109 float v46; // eax@3 |
8137 | 8110 |
8138 if ( this->uNumD3DSceneBegins ) | 8111 if ( this->uNumD3DSceneBegins ) |
8139 { | 8112 { |
8140 if ( HIWORD(a2->sZValue) ) | 8113 if (a2->zbuffer_depth) |
8141 { | 8114 { |
8142 v5 = (double)HIWORD(a2->sZValue); | 8115 v5 = (double)a2->zbuffer_depth; |
8143 v6 = v5; | 8116 v6 = v5; |
8144 v7 = v5; | 8117 v7 = v5; |
8145 v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7)); | 8118 v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7)); |
8146 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1; | 8119 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1; |
8147 pBillboardRenderListD3D[v8].field_90 = a2->field_44; | 8120 pBillboardRenderListD3D[v8].field_90 = a2->field_44; |
8148 pBillboardRenderListD3D[v8].sZValue = a2->sZValue; | 8121 pBillboardRenderListD3D[v8].sZValue = a2->sZValue; |
8149 pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID; | 8122 pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID; |
8150 v9 = a2->uScreenSpaceX; | 8123 v9 = a2->uScreenSpaceX; |
8151 v10 = a2->uScreenSpaceY; | 8124 v10 = a2->uScreenSpaceY; |
8152 v11 = (double)(a2->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(a2->field_10); | 8125 v11 = (a2->_screenspace_x_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(a2->_screenspace_x_scaler_packedfloat); |
8153 v12 = (double)v9; | 8126 v12 = (double)v9; |
8154 v13 = v12; | 8127 v13 = v12; |
8155 v14 = (double)(v10 - 12); | 8128 v14 = (double)(v10 - 12); |
8156 v15 = v14; | 8129 v15 = v14; |
8157 v16 = (double)(v9 - 12) - v12; | 8130 v16 = (double)(v9 - 12) - v12; |
8253 pBillboardRenderListD3D[v8].pQuards[3].specular = 0; | 8226 pBillboardRenderListD3D[v8].pQuards[3].specular = 0; |
8254 pBillboardRenderListD3D[v8].pQuards[3].pos.z = v46; | 8227 pBillboardRenderListD3D[v8].pQuards[3].pos.z = v46; |
8255 pBillboardRenderListD3D[v8].pQuards[3].rhw = pBillboardRenderListD3D[v8].pQuards[0].rhw; | 8228 pBillboardRenderListD3D[v8].pQuards[3].rhw = pBillboardRenderListD3D[v8].pQuards[0].rhw; |
8256 pBillboardRenderListD3D[v8].pQuards[3].diffuse = uDiffuse; | 8229 pBillboardRenderListD3D[v8].pQuards[3].diffuse = uDiffuse; |
8257 pBillboardRenderListD3D[v8].pTexture = a3; | 8230 pBillboardRenderListD3D[v8].pTexture = a3; |
8258 pBillboardRenderListD3D[v8].flt_88 = v6; | 8231 pBillboardRenderListD3D[v8].z_order = v6; |
8259 pBillboardRenderListD3D[v8].uNumVertices = 4; | 8232 pBillboardRenderListD3D[v8].uNumVertices = 4; |
8260 pBillboardRenderListD3D[v8].pQuards[3].pos.y = v45; | 8233 pBillboardRenderListD3D[v8].pQuards[3].pos.y = v45; |
8261 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; | 8234 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; |
8262 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; | 8235 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; |
8263 } | 8236 } |
8311 signed int v45; // eax@2 | 8284 signed int v45; // eax@2 |
8312 double v46; // st6@2 | 8285 double v46; // st6@2 |
8313 | 8286 |
8314 if ( this->uNumD3DSceneBegins ) | 8287 if ( this->uNumD3DSceneBegins ) |
8315 { | 8288 { |
8316 v5 = (double)HIWORD(a2->sZValue); | 8289 v5 = (double)a2->zbuffer_depth; |
8317 v6 = v5; | 8290 v6 = v5; |
8318 v7 = v5; | 8291 v7 = v5; |
8319 v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7)); | 8292 v8 = Billboard_ProbablyAddToListAndSortByZOrder(LODWORD(v7)); |
8320 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1; | 8293 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_1; |
8321 pBillboardRenderListD3D[v8].field_90 = a2->field_44; | 8294 pBillboardRenderListD3D[v8].field_90 = a2->field_44; |
8322 pBillboardRenderListD3D[v8].sZValue = a2->sZValue; | 8295 pBillboardRenderListD3D[v8].sZValue = a2->sZValue; |
8323 pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID; | 8296 pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID; |
8324 v9 = a2->uScreenSpaceX; | 8297 v9 = a2->uScreenSpaceX; |
8325 v10 = a2->uScreenSpaceY; | 8298 v10 = a2->uScreenSpaceY; |
8326 v11 = (double)(a2->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(a2->field_10); | 8299 v11 = (a2->_screenspace_x_scaler_packedfloat & 0xFFFF) * 0.000015260186 + HIWORD(a2->_screenspace_x_scaler_packedfloat); |
8327 v12 = (double)v9; | 8300 v12 = (double)v9; |
8328 v13 = v12; | 8301 v13 = v12; |
8329 v14 = (double)(v10 - 12); | 8302 v14 = (double)(v10 - 12); |
8330 v15 = v14; | 8303 v15 = v14; |
8331 v16 = (double)(v9 - 12) - v12; | 8304 v16 = (double)(v9 - 12) - v12; |
8427 pBillboardRenderListD3D[v8].pQuards[3].specular = 0; | 8400 pBillboardRenderListD3D[v8].pQuards[3].specular = 0; |
8428 pBillboardRenderListD3D[v8].pQuards[3].pos.z = v24; | 8401 pBillboardRenderListD3D[v8].pQuards[3].pos.z = v24; |
8429 pBillboardRenderListD3D[v8].pQuards[3].rhw = v25; | 8402 pBillboardRenderListD3D[v8].pQuards[3].rhw = v25; |
8430 pBillboardRenderListD3D[v8].pQuards[3].diffuse = uDiffuse; | 8403 pBillboardRenderListD3D[v8].pQuards[3].diffuse = uDiffuse; |
8431 pBillboardRenderListD3D[v8].pTexture = a3; | 8404 pBillboardRenderListD3D[v8].pTexture = a3; |
8432 pBillboardRenderListD3D[v8].flt_88 = v6; | 8405 pBillboardRenderListD3D[v8].z_order = v6; |
8433 pBillboardRenderListD3D[v8].uNumVertices = 4; | 8406 pBillboardRenderListD3D[v8].uNumVertices = 4; |
8434 pBillboardRenderListD3D[v8].pQuards[3].pos.y = v46; | 8407 pBillboardRenderListD3D[v8].pQuards[3].pos.y = v46; |
8435 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; | 8408 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; |
8436 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; | 8409 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; |
8437 } | 8410 } |
8438 } | 8411 } |
8439 | 8412 |
8440 | 8413 |
8441 //----- (004A4023) -------------------------------------------------------- | 8414 //----- (004A4023) -------------------------------------------------------- |
8442 void Render::TransformBillboard(RenderBillboardTransform_local0 *a2, Sprite *pSprite, int a1a, RenderBillboard *pBillboard) | 8415 void Render::TransformBillboard(RenderBillboardTransform_local0 *a2, Sprite *pSprite, int paletteSubindex, RenderBillboard *pBillboard) |
8443 { | 8416 { |
8444 RenderBillboardTransform_local0 *v5; // ebx@2 | |
8445 double v6; // st7@2 | |
8446 float v7; // ST08_4@2 | |
8447 unsigned int v8; // esi@2 | 8417 unsigned int v8; // esi@2 |
8448 Sprite *v9; // edi@5 | |
8449 signed int v10; // eax@9 | |
8450 signed int v11; // eax@9 | |
8451 int v12; // eax@12 | |
8452 double v13; // st7@12 | |
8453 double v14; // st6@14 | 8418 double v14; // st6@14 |
8454 double v15; // st5@14 | 8419 double v15; // st5@14 |
8455 unsigned int v16; // ecx@16 | 8420 //unsigned int v16; // ecx@16 |
8456 double v17; // st7@16 | 8421 //double v17; // st7@16 |
8457 double v18; // st5@16 | 8422 //double v18; // st5@16 |
8458 double v19; // st4@16 | 8423 //double v19; // st4@16 |
8459 double v20; // st5@18 | 8424 //double v20; // st5@18 |
8460 double v21; // st4@18 | 8425 //double v21; // st4@18 |
8461 IDirect3DTexture2 *v22; // eax@20 | 8426 //signed int v23; // [sp+18h] [bp-18h]@5 |
8462 signed int v23; // [sp+18h] [bp-18h]@5 | 8427 //signed int v24; // [sp+1Ch] [bp-14h]@5 |
8463 signed int v24; // [sp+1Ch] [bp-14h]@5 | 8428 //float v26; // [sp+20h] [bp-10h]@5 |
8464 float v25; // [sp+1Ch] [bp-14h]@12 | 8429 //float v27; // [sp+20h] [bp-10h]@12 |
8465 float v26; // [sp+20h] [bp-10h]@5 | |
8466 float v27; // [sp+20h] [bp-10h]@12 | |
8467 Render *a3; // [sp+24h] [bp-Ch]@1 | |
8468 float v29; // [sp+28h] [bp-8h]@5 | 8430 float v29; // [sp+28h] [bp-8h]@5 |
8469 float v30; // [sp+2Ch] [bp-4h]@5 | 8431 float v30; // [sp+2Ch] [bp-4h]@5 |
8470 float v31; // [sp+38h] [bp+8h]@2 | 8432 //float pSpritea; // [sp+3Ch] [bp+Ch]@5 |
8471 float pSpritea; // [sp+3Ch] [bp+Ch]@5 | 8433 |
8472 float a1b; // [sp+40h] [bp+10h]@12 | 8434 if (!uNumD3DSceneBegins) |
8473 float pBillboarda; // [sp+44h] [bp+14h]@12 | 8435 return; |
8474 | 8436 |
8475 auto a1 = this; | 8437 v8 = Billboard_ProbablyAddToListAndSortByZOrder(a2->zbuffer_depth); |
8476 a3 = a1; | 8438 |
8477 if ( a1->uNumD3DSceneBegins ) | 8439 v30 = (a2->_screenspace_x_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_x_scaler_packedfloat); |
8478 { | 8440 v29 = (a2->_screenspace_y_scaler_packedfloat & 0xFFFF) / 65530.0 + HIWORD(a2->_screenspace_y_scaler_packedfloat); |
8479 v5 = a2; | 8441 |
8480 v6 = (double)a2->sZValue; | 8442 unsigned int diffuse = GetActorTintColor(paletteSubindex, 0, a2->zbuffer_depth, 0, pBillboard); |
8481 v31 = v6; | 8443 if (a2->uTintColor & 0x00FFFFFF && bTinting) |
8482 v7 = v6; | 8444 { |
8483 v8 = Billboard_ProbablyAddToListAndSortByZOrder(v7); | 8445 diffuse = sub_4A19D8(a2->uTintColor, diffuse); |
8484 if ( BYTE3(v5->uTintColor) ) | 8446 if (a2->uTintColor & 0xFF000000) |
8485 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_3; | 8447 diffuse = 0x007F7F7F & ((unsigned int)diffuse >> 1); |
8486 else | 8448 } |
8487 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Transparent; | 8449 |
8488 v9 = pSprite; | 8450 unsigned int specular = 0; |
8489 pBillboardRenderListD3D[v8].field_90 = v5->field_44; | 8451 if (bUsingSpecular) |
8490 pBillboardRenderListD3D[v8].sZValue = v5->sZValue; | 8452 specular = sub_47C3D7_get_fog_related_stuff(0, 0, a2->zbuffer_depth); |
8491 pBillboardRenderListD3D[v8].uParentBillboardID = v5->uParentBillboardID; | 8453 |
8492 v24 = v5->uScreenSpaceX; | 8454 v14 = (double)((int)pSprite->uBufferWidth / 2 - pSprite->uAreaX); |
8493 v23 = v5->uScreenSpaceY; | 8455 v15 = (double)((int)pSprite->uBufferHeight - pSprite->uAreaY); |
8494 v30 = (double)(v5->field_10 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v5->field_10); | 8456 if (a2->uFlags & 4) |
8495 v29 = (double)(v5->field_14 & 0xFFFF) * 0.000015260186 + (double)HIWORD(v5->field_14); | 8457 v14 *= -1.0; |
8496 pSpritea = (double)((v9->uBufferWidth >> 1) - v9->uAreaX); | 8458 pBillboardRenderListD3D[v8].pQuards[0].diffuse = diffuse; |
8497 v26 = (double)(v9->uBufferHeight - v9->uAreaY); | 8459 pBillboardRenderListD3D[v8].pQuards[0].pos.x = (double)a2->uScreenSpaceX - v14 * v30; |
8498 if ( v5->uFlags & 4 ) | 8460 pBillboardRenderListD3D[v8].pQuards[0].pos.y = (double)a2->uScreenSpaceY - v15 * v29; |
8499 pSpritea = pSpritea * -1.0; | 8461 pBillboardRenderListD3D[v8].pQuards[0].pos.z = 1.0 - 1.0 / (a2->zbuffer_depth * 1000.0 / (double)pOutdoorCamera->shading_dist_mist); |
8500 if ( v5->uTintColor & 0xFFFFFF && a3->bTinting ) | 8462 pBillboardRenderListD3D[v8].pQuards[0].rhw = 1.0 / a2->zbuffer_depth; |
8501 { | 8463 pBillboardRenderListD3D[v8].pQuards[0].specular = specular; |
8502 v10 = GetActorTintColor(a1a, 0, v31, 0, pBillboard); | 8464 pBillboardRenderListD3D[v8].pQuards[0].texcoord.x = 0.0; |
8503 v11 = sub_4A19D8(v5->uTintColor, v10); | 8465 pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0; |
8504 if ( BYTE3(v5->uTintColor) ) | 8466 |
8505 v11 = (unsigned int)((char *)&array_77EC08[1852].pEdgeList1[17] + 3) & ((unsigned int)v11 >> 1); | 8467 v14 = (double)((int)pSprite->uBufferWidth / 2 - pSprite->uAreaX); |
8506 } | 8468 v15 = (double)((int)pSprite->uBufferHeight - pSprite->uAreaHeight - pSprite->uAreaY); |
8507 else | 8469 if ( a2->uFlags & 4 ) |
8508 { | |
8509 v11 = GetActorTintColor(a1a, 0, v31, 0, pBillboard); | |
8510 } | |
8511 pBillboardRenderListD3D[v8].pQuards[0].diffuse = v11; | |
8512 v12 = 0; | |
8513 pBillboarda = (double)v24; | |
8514 pBillboardRenderListD3D[v8].pQuards[0].pos.x = pBillboarda - pSpritea * v30; | |
8515 a1b = (double)v23; | |
8516 pBillboardRenderListD3D[v8].pQuards[0].pos.y = a1b - v26 * v29; | |
8517 v27 = v31 * 1000.0; | |
8518 v13 = 1.0; | |
8519 pBillboardRenderListD3D[v8].pQuards[0].pos.z = 1.0 - 1.0 / (v27 / (double)pOutdoorCamera->shading_dist_mist); | |
8520 v25 = 1.0 / v31; | |
8521 pBillboardRenderListD3D[v8].pQuards[0].rhw = v25; | |
8522 if ( a3->bUsingSpecular ) | |
8523 { | |
8524 v12 = sub_47C3D7_get_fog_related_stuff(0, 0, v31); | |
8525 v13 = 1.0; | |
8526 } | |
8527 pBillboardRenderListD3D[v8].pQuards[0].specular = v12; | |
8528 pBillboardRenderListD3D[v8].pQuards[0].texcoord.x = 0.0; | |
8529 pBillboardRenderListD3D[v8].pQuards[0].texcoord.y = 0.0; | |
8530 v14 = (double)((v9->uBufferWidth >> 1) - v9->uAreaX); | |
8531 v15 = (double)(v9->uBufferHeight - v9->uAreaHeight - v9->uAreaY); | |
8532 if ( v5->uFlags & 4 ) | |
8533 v14 = v14 * -1.0; | 8470 v14 = v14 * -1.0; |
8534 v16 = pBillboardRenderListD3D[v8].pQuards[0].diffuse; | 8471 pBillboardRenderListD3D[v8].pQuards[1].specular = specular; |
8535 pBillboardRenderListD3D[v8].pQuards[1].specular = v12; | 8472 pBillboardRenderListD3D[v8].pQuards[1].diffuse = diffuse; |
8536 pBillboardRenderListD3D[v8].pQuards[1].diffuse = v16; | 8473 pBillboardRenderListD3D[v8].pQuards[1].pos.x = (double)a2->uScreenSpaceX - v14 * v30; |
8537 pBillboardRenderListD3D[v8].pQuards[1].pos.x = pBillboarda - v14 * v30; | 8474 pBillboardRenderListD3D[v8].pQuards[1].pos.y = (double)a2->uScreenSpaceY - v15 * v29; |
8538 pBillboardRenderListD3D[v8].pQuards[1].pos.y = a1b - v15 * v29; | 8475 pBillboardRenderListD3D[v8].pQuards[1].pos.z = 1.0 - 1.0 / (a2->zbuffer_depth * 1000.0 / (double)pOutdoorCamera->shading_dist_mist); |
8539 v17 = v13 - v13 / (v27 / (double)pOutdoorCamera->shading_dist_mist); | 8476 pBillboardRenderListD3D[v8].pQuards[1].rhw = 1.0 / a2->zbuffer_depth; |
8540 pBillboardRenderListD3D[v8].pQuards[1].pos.z = v17; | |
8541 pBillboardRenderListD3D[v8].pQuards[1].rhw = v25; | |
8542 pBillboardRenderListD3D[v8].pQuards[1].texcoord.x = 0.0; | 8477 pBillboardRenderListD3D[v8].pQuards[1].texcoord.x = 0.0; |
8543 pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0; | 8478 pBillboardRenderListD3D[v8].pQuards[1].texcoord.y = 1.0; |
8544 v18 = (double)(v9->uAreaWidth + v9->uAreaX + (v9->uBufferWidth >> 1) - v9->uBufferWidth); | 8479 |
8545 v19 = (double)(v9->uBufferHeight - v9->uAreaHeight - v9->uAreaY); | 8480 v14 = (double)((int)pSprite->uAreaWidth + pSprite->uAreaX + pSprite->uBufferWidth / 2 - pSprite->uBufferWidth); |
8546 if ( v5->uFlags & 4 ) | 8481 v15 = (double)((int)pSprite->uBufferHeight - pSprite->uAreaHeight - pSprite->uAreaY); |
8547 v18 = v18 * -1.0; | 8482 if ( a2->uFlags & 4 ) |
8548 pBillboardRenderListD3D[v8].pQuards[2].diffuse = v16; | 8483 v14 *= -1.0; |
8549 pBillboardRenderListD3D[v8].pQuards[2].specular = v12; | 8484 pBillboardRenderListD3D[v8].pQuards[2].diffuse = diffuse; |
8550 pBillboardRenderListD3D[v8].pQuards[2].pos.x = v18 * v30 + pBillboarda; | 8485 pBillboardRenderListD3D[v8].pQuards[2].specular = specular; |
8551 pBillboardRenderListD3D[v8].pQuards[2].pos.y = a1b - v19 * v29; | 8486 pBillboardRenderListD3D[v8].pQuards[2].pos.x = (double)a2->uScreenSpaceX + v14 * v30; |
8552 pBillboardRenderListD3D[v8].pQuards[2].pos.z = v17; | 8487 pBillboardRenderListD3D[v8].pQuards[2].pos.y = (double)a2->uScreenSpaceY - v15 * v29; |
8553 pBillboardRenderListD3D[v8].pQuards[2].rhw = v25; | 8488 pBillboardRenderListD3D[v8].pQuards[2].pos.z = 1.0 - 1.0 / (a2->zbuffer_depth * 1000.0 / (double)pOutdoorCamera->shading_dist_mist); |
8489 pBillboardRenderListD3D[v8].pQuards[2].rhw = 1.0 / a2->zbuffer_depth; | |
8554 pBillboardRenderListD3D[v8].pQuards[2].texcoord.x = 1.0; | 8490 pBillboardRenderListD3D[v8].pQuards[2].texcoord.x = 1.0; |
8555 pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0; | 8491 pBillboardRenderListD3D[v8].pQuards[2].texcoord.y = 1.0; |
8556 v20 = (double)(v9->uAreaWidth + v9->uAreaX + (v9->uBufferWidth >> 1) - v9->uBufferWidth); | 8492 |
8557 v21 = (double)(v9->uBufferHeight - v9->uAreaY); | 8493 v14 = (double)((int)pSprite->uAreaWidth + pSprite->uAreaX + pSprite->uBufferWidth / 2 - pSprite->uBufferWidth); |
8558 if ( v5->uFlags & 4 ) | 8494 v15 = (double)((int)pSprite->uBufferHeight - pSprite->uAreaY); |
8559 v20 = v20 * -1.0; | 8495 if ( a2->uFlags & 4 ) |
8560 pBillboardRenderListD3D[v8].pQuards[3].diffuse = v16; | 8496 v14 *= -1.0; |
8561 pBillboardRenderListD3D[v8].pQuards[3].specular = v12; | 8497 pBillboardRenderListD3D[v8].pQuards[3].diffuse = diffuse; |
8562 pBillboardRenderListD3D[v8].pQuards[3].pos.x = v20 * v30 + pBillboarda; | 8498 pBillboardRenderListD3D[v8].pQuards[3].specular = specular; |
8563 pBillboardRenderListD3D[v8].pQuards[3].pos.y = a1b - v21 * v29; | 8499 pBillboardRenderListD3D[v8].pQuards[3].pos.x = (double)a2->uScreenSpaceX + v14 * v30; |
8564 pBillboardRenderListD3D[v8].pQuards[3].pos.z = v17; | 8500 pBillboardRenderListD3D[v8].pQuards[3].pos.y = (double)a2->uScreenSpaceY - v15 * v29; |
8565 pBillboardRenderListD3D[v8].pQuards[3].rhw = v25; | 8501 pBillboardRenderListD3D[v8].pQuards[3].pos.z = 1.0 - 1.0 / (a2->zbuffer_depth * 1000.0 / (double)pOutdoorCamera->shading_dist_mist); |
8502 pBillboardRenderListD3D[v8].pQuards[3].rhw = 1.0 / a2->zbuffer_depth; | |
8566 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; | 8503 pBillboardRenderListD3D[v8].pQuards[3].texcoord.x = 1.0; |
8567 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; | 8504 pBillboardRenderListD3D[v8].pQuards[3].texcoord.y = 0.0; |
8568 v22 = v9->pTexture; | 8505 |
8569 pBillboardRenderListD3D[v8].uNumVertices = 4; | 8506 pBillboardRenderListD3D[v8].uNumVertices = 4; |
8570 pBillboardRenderListD3D[v8].pTexture = v22; | 8507 pBillboardRenderListD3D[v8].pTexture = pSprite->pTexture; |
8571 pBillboardRenderListD3D[v8].flt_88 = v31; | 8508 pBillboardRenderListD3D[v8].z_order = a2->zbuffer_depth; |
8572 } | 8509 pBillboardRenderListD3D[v8].field_90 = a2->field_44; |
8510 pBillboardRenderListD3D[v8].sZValue = a2->sZValue; | |
8511 pBillboardRenderListD3D[v8].uParentBillboardID = a2->uParentBillboardID; | |
8512 | |
8513 if (a2->uTintColor & 0xFF000000) | |
8514 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Opaque_3; | |
8515 else | |
8516 pBillboardRenderListD3D[v8].uOpacity = RenderBillboardD3D::Transparent; | |
8573 } | 8517 } |
8574 | 8518 |
8575 | 8519 |
8576 //----- (004A48E4) -------------------------------------------------------- | 8520 //----- (004A48E4) -------------------------------------------------------- |
8577 int Render::MakeParticleBillboardAndPush_BLV_Software(int screenSpaceX, int screenSpaceY, int z, int lightColor, int a6) | 8521 int Render::MakeParticleBillboardAndPush_BLV_Software(int screenSpaceX, int screenSpaceY, int z, int lightColor, int a6) |
8838 while ( v6 < a1->field_10 ); | 8782 while ( v6 < a1->field_10 ); |
8839 } | 8783 } |
8840 v13 = a1->field_10; | 8784 v13 = a1->field_10; |
8841 pBillboardRenderListD3D[v5].pTexture = 0; | 8785 pBillboardRenderListD3D[v5].pTexture = 0; |
8842 pBillboardRenderListD3D[v5].uNumVertices = v13; | 8786 pBillboardRenderListD3D[v5].uNumVertices = v13; |
8843 LODWORD(pBillboardRenderListD3D[v5].flt_88) = v14; | 8787 LODWORD(pBillboardRenderListD3D[v5].z_order) = v14; |
8844 } | 8788 } |
8845 } | 8789 } |
8846 | 8790 |
8847 | 8791 |
8848 //----- (004A4DE1) -------------------------------------------------------- | 8792 //----- (004A4DE1) -------------------------------------------------------- |
8962 { | 8906 { |
8963 Sprite *v2; // edi@1 | 8907 Sprite *v2; // edi@1 |
8964 Render *v3; // ebx@1 | 8908 Render *v3; // ebx@1 |
8965 HWLTexture *result; // eax@1 | 8909 HWLTexture *result; // eax@1 |
8966 HWLTexture *v5; // esi@1 | 8910 HWLTexture *v5; // esi@1 |
8967 unsigned int v6; // ST18_4@2 | 8911 //unsigned int v6; // ST18_4@2 |
8968 RenderD3D *v7; // ecx@2 | 8912 //RenderD3D *v7; // ecx@2 |
8969 Sprite *v8; // ebx@4 | 8913 Sprite *v8; // ebx@4 |
8970 unsigned __int16 *v9; // edx@5 | 8914 unsigned __int16 *v9; // edx@5 |
8971 LPVOID v10; // eax@5 | 8915 LPVOID v10; // eax@5 |
8972 signed int v11; // ebx@5 | 8916 signed int v11; // ebx@5 |
8973 signed int v12; // ecx@6 | 8917 signed int v12; // ecx@6 |
8986 v2->uAreaY = result->field_34; | 8930 v2->uAreaY = result->field_34; |
8987 v2->uBufferWidth = result->field_18; | 8931 v2->uBufferWidth = result->field_18; |
8988 v2->uBufferHeight = result->field_1C; | 8932 v2->uBufferHeight = result->field_1C; |
8989 v2->uAreaWidth = result->field_20; | 8933 v2->uAreaWidth = result->field_20; |
8990 v2->uAreaHeight = result->field_24; | 8934 v2->uAreaHeight = result->field_24; |
8991 v6 = v3->uMinDeviceTextureDim; | 8935 //v6 = v3->uMinDeviceTextureDim; |
8992 v7 = v3->pRenderD3D; | 8936 //v7 = v3->pRenderD3D; |
8993 if ( !v7->CreateTexture(result->uWidth, result->uHeight, &v2->pTextureSurface, &v2->pTexture, 1u, 0, v6) ) | 8937 if (!pRenderD3D->CreateTexture(result->uWidth, result->uHeight, &v2->pTextureSurface, &v2->pTexture, 1u, 0, uMinDeviceTextureDim)) |
8994 Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0); | 8938 Abortf("HiScreen16::LoadTexture - D3Drend->CreateTexture() failed: %x", 0); |
8995 //pSprite = v2->pTextureSurface; | 8939 //pSprite = v2->pTextureSurface; |
8996 //pSprite = (Sprite *)pSprite->pName; | 8940 //pSprite = (Sprite *)pSprite->pName; |
8997 //v8 = pSprite; | 8941 //v8 = pSprite; |
8998 memset(&Dst, 0, 0x7Cu); | 8942 memset(&Dst, 0, 0x7Cu); |
11333 void DoRenderBillboards_D3D() | 11277 void DoRenderBillboards_D3D() |
11334 { | 11278 { |
11335 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u)); | 11279 ErrD3D(pRenderer->pRenderD3D->pDevice->SetTextureStageState(0, D3DTSS_ADDRESS, 3u)); |
11336 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); | 11280 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ALPHABLENDENABLE, 1u)); |
11337 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); | 11281 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_ZWRITEENABLE, 0)); |
11338 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, 1u)); | 11282 ErrD3D(pRenderer->pRenderD3D->pDevice->SetRenderState(D3DRENDERSTATE_CULLMODE, D3DCULL_NONE)); |
11339 | 11283 |
11340 for (uint i = pRenderer->uNumBillboardsToDraw - 1; i != (uint)-1; --i) | 11284 /*if (pRenderer->uNumBillboardsToDraw) |
11341 { | 11285 { |
11342 auto p = &pRenderer->pBillboardRenderListD3D[i]; | 11286 auto p = &pRenderer->pBillboardRenderListD3D[0]; |
11343 | 11287 for (int i = 0; i < p->uNumVertices; ++i) |
11344 if (p->uOpacity != RenderBillboardD3D::InvalidOpacity) | 11288 { |
11289 p->pQuards[i].pos.z -= p->pQuards[i].pos.z * 0.6; | |
11290 //p->pQuards[i].rhw = + 0.8 * (1.0f - p->pQuards[i].rhw); | |
11291 } | |
11292 p->pQuards[0].pos.x = 10; | |
11293 p->pQuards[0].pos.y = 10; | |
11294 | |
11295 p->pQuards[1].pos.x = 10; | |
11296 p->pQuards[1].pos.y = 200; | |
11297 | |
11298 p->pQuards[2].pos.x = 100; | |
11299 p->pQuards[2].pos.y = 200; | |
11300 | |
11301 p->pQuards[3].pos.x = 100; | |
11302 p->pQuards[3].pos.y = 10; | |
11303 | |
11304 if (p->uOpacity != RenderBillboardD3D::NoBlend) | |
11345 SetBillboardBlendOptions(p->uOpacity); | 11305 SetBillboardBlendOptions(p->uOpacity); |
11346 | 11306 |
11347 pRenderer->pRenderD3D->pDevice->SetTexture(0, p->pTexture); | 11307 pRenderer->pRenderD3D->pDevice->SetTexture(0, p->pTexture); |
11348 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | 11308 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, |
11349 p->pQuards, p->uNumVertices, D3DDP_DONOTLIGHT | D3DDP_DONOTUPDATEEXTENTS)); | 11309 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, |
11310 p->pQuards, p->uNumVertices, | |
11311 D3DDP_DONOTLIGHT | D3DDP_DONOTUPDATEEXTENTS)); | |
11312 | |
11313 }*/ | |
11314 | |
11315 for (uint i = pRenderer->uNumBillboardsToDraw - 1; i != (uint)-1; --i) | |
11316 { | |
11317 auto p = &pRenderer->pBillboardRenderListD3D[i]; | |
11318 | |
11319 if (p->uOpacity != RenderBillboardD3D::NoBlend) | |
11320 SetBillboardBlendOptions(p->uOpacity); | |
11321 | |
11322 pRenderer->pRenderD3D->pDevice->SetTexture(0, p->pTexture); | |
11323 ErrD3D(pRenderer->pRenderD3D->pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, | |
11324 D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1, | |
11325 p->pQuards, p->uNumVertices, | |
11326 D3DDP_DONOTLIGHT | D3DDP_DONOTUPDATEEXTENTS)); | |
11350 } | 11327 } |
11351 | 11328 |
11352 if (pRenderer->bFogEnabled) | 11329 if (pRenderer->bFogEnabled) |
11353 { | 11330 { |
11354 pRenderer->bFogEnabled = false; | 11331 pRenderer->bFogEnabled = false; |
11408 } | 11385 } |
11409 break; | 11386 break; |
11410 | 11387 |
11411 default: | 11388 default: |
11412 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1); | 11389 Log::Warning(L"SetBillboardBlendOptions: invalid opacity type (%u)", a1); |
11390 assert(false); | |
11413 break; | 11391 break; |
11414 } | 11392 } |
11415 } | 11393 } |
11416 | 11394 |