mirror of
				https://github.com/hedge-dev/UnleashedRecomp.git
				synced 2025-10-30 07:11:05 +00:00 
			
		
		
		
	Handle gameplay UI scaling not getting affected by explicit scene translation. (#183)
This commit is contained in:
		
							parent
							
								
									5d437f8de6
								
							
						
					
					
						commit
						e13b0ea009
					
				
					 1 changed files with 39 additions and 2 deletions
				
			
		| 
						 | 
					@ -671,6 +671,35 @@ static bool g_cornerExtract;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//#define CORNER_DEBUG
 | 
					//#define CORNER_DEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Explicit translations don't get affected by gameplay UI downscaling.
 | 
				
			||||||
 | 
					// This is required for the medal info in pause menu.
 | 
				
			||||||
 | 
					static float g_scenePositionX;
 | 
				
			||||||
 | 
					static float g_scenePositionY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Chao::CSD::CScene::Render
 | 
				
			||||||
 | 
					PPC_FUNC_IMPL(__imp__sub_830BC640);
 | 
				
			||||||
 | 
					PPC_FUNC(sub_830BC640)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    g_scenePositionX = 0.0f;
 | 
				
			||||||
 | 
					    g_scenePositionY = 0.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    uint32_t motionPattern = PPC_LOAD_U32(ctx.r3.u32 + 0x98);
 | 
				
			||||||
 | 
					    if (motionPattern != NULL)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        uint32_t member = PPC_LOAD_U32(motionPattern + 0xC);
 | 
				
			||||||
 | 
					        if (member != NULL)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            uint32_t x = PPC_LOAD_U32(member + 0x2C);
 | 
				
			||||||
 | 
					            uint32_t y = PPC_LOAD_U32(member + 0x30);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            g_scenePositionX = 1280.0f * reinterpret_cast<float&>(x);
 | 
				
			||||||
 | 
					            g_scenePositionY = 720.0f * reinterpret_cast<float&>(y);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    __imp__sub_830BC640(ctx, base);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Chao::CSD::Scene::Render
 | 
					// Chao::CSD::Scene::Render
 | 
				
			||||||
PPC_FUNC_IMPL(__imp__sub_830C6A00);
 | 
					PPC_FUNC_IMPL(__imp__sub_830C6A00);
 | 
				
			||||||
PPC_FUNC(sub_830C6A00)
 | 
					PPC_FUNC(sub_830C6A00)
 | 
				
			||||||
| 
						 | 
					@ -770,6 +799,8 @@ static void Draw(PPCContext& ctx, uint8_t* base, PPCFunc* original, uint32_t str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    float offsetX = 0.0f;
 | 
					    float offsetX = 0.0f;
 | 
				
			||||||
    float offsetY = 0.0f;
 | 
					    float offsetY = 0.0f;
 | 
				
			||||||
 | 
					    float pivotX = 0.0f;
 | 
				
			||||||
 | 
					    float pivotY = 0.0f;
 | 
				
			||||||
    float scaleX = 1.0f;
 | 
					    float scaleX = 1.0f;
 | 
				
			||||||
    float scaleY = 1.0f;
 | 
					    float scaleY = 1.0f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -789,11 +820,14 @@ static void Draw(PPCContext& ctx, uint8_t* base, PPCFunc* original, uint32_t str
 | 
				
			||||||
        if ((modifier.flags & SCALE) != 0)
 | 
					        if ((modifier.flags & SCALE) != 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            scaleX *= g_aspectRatioGameplayScale;
 | 
					            scaleX *= g_aspectRatioGameplayScale;
 | 
				
			||||||
 | 
					            pivotX = g_scenePositionX;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ((modifier.flags & ALIGN_RIGHT) != 0)
 | 
					            if ((modifier.flags & ALIGN_RIGHT) != 0)
 | 
				
			||||||
                offsetX += 1280.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
					                offsetX += 1280.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
				
			||||||
            else if ((modifier.flags & ALIGN_LEFT) == 0)
 | 
					            else if ((modifier.flags & ALIGN_LEFT) == 0)
 | 
				
			||||||
                offsetX += 640.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
					                offsetX += 640.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            offsetX += pivotX * g_aspectRatioScale;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((modifier.flags & WORLD_MAP) != 0)
 | 
					        if ((modifier.flags & WORLD_MAP) != 0)
 | 
				
			||||||
| 
						 | 
					@ -819,11 +853,14 @@ static void Draw(PPCContext& ctx, uint8_t* base, PPCFunc* original, uint32_t str
 | 
				
			||||||
        if ((modifier.flags & SCALE) != 0)
 | 
					        if ((modifier.flags & SCALE) != 0)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            scaleY *= g_aspectRatioGameplayScale;
 | 
					            scaleY *= g_aspectRatioGameplayScale;
 | 
				
			||||||
 | 
					            pivotY = g_scenePositionY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ((modifier.flags & ALIGN_BOTTOM) != 0)
 | 
					            if ((modifier.flags & ALIGN_BOTTOM) != 0)
 | 
				
			||||||
                offsetY += 720.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
					                offsetY += 720.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
				
			||||||
            else if ((modifier.flags & ALIGN_TOP) == 0)
 | 
					            else if ((modifier.flags & ALIGN_TOP) == 0)
 | 
				
			||||||
                offsetY += 360.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
					                offsetY += 360.0f * (1.0f - g_aspectRatioGameplayScale) * g_aspectRatioScale;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            offsetY += pivotY * g_aspectRatioScale;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -867,8 +904,8 @@ static void Draw(PPCContext& ctx, uint8_t* base, PPCFunc* original, uint32_t str
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        auto position = reinterpret_cast<be<float>*>(stack + i * stride);
 | 
					        auto position = reinterpret_cast<be<float>*>(stack + i * stride);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        float x = offsetX + position[0] * scaleX;
 | 
					        float x = offsetX + (position[0] - pivotX) * scaleX;
 | 
				
			||||||
        float y = offsetY + position[1] * scaleY;
 | 
					        float y = offsetY + (position[1] - pivotY) * scaleY;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ((modifier.flags & EXTEND_LEFT) != 0 && (i == 0 || i == 1))
 | 
					        if ((modifier.flags & EXTEND_LEFT) != 0 && (i == 0 || i == 1))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue