RpAtomic* CFileLoader::SetRelatedModelInfoCB(RpAtomic* atomic, void* data) { RpClump* clump = (RpClump*)data; CAtomicModelInfo* atomicModelInfo = (CAtomicModelInfo *)CModelInfo::GetModelInfo(relatedModelIndex)->AsAtomicModelInfoPtr(); const char* frameNodeName = GetFrameNodeName(RwFrameGetParent(atomic)); bool damaged; GetNameAndDamage(frameNodeName, (char *)&v10, (int)&damaged); CVisibilityPlugins::SetAtomicRenderCallback(atomic, 0); if (damaged) { CDamageAtomicModelInfo* damageModel = atomicModelInfo->AsDamageAtomicModelInfoPtr(); damageModel->SetDamagedAtomic(atomic); } else { ((void (__thiscall *)(CAtomicModelInfo *, RpAtomic *))v5->__parent.__vmt[1].__destructor)(v5, v4); } RpClumpRemoveAtomic(clump, atomic); RwFrame* frame = RwFrameCreate(); RpAtomicSetFrame(atomic, frame); CVisibilityPlugins::SetModelInfoIndex(atomic, relatedModelIndex); return atomic; }
void MakeEnvmapCam(void) { reflectionCam = RwCameraCreate(); RwCameraSetFrame(reflectionCam, RwFrameCreate()); RwCameraSetNearClipPlane(reflectionCam, 0.1f); RwCameraSetFarClipPlane(reflectionCam, 250.0f); RwV2d vw; vw.x = vw.y = 0.4f; RwCameraSetViewWindow(reflectionCam, &vw); RpWorldAddCamera(Scene.world, reflectionCam); }
bool CRealTimeShadow::Create(bool isBlurred, int gradientSteps, bool resampleRaster) { m_light = RpLightCreate(1); if (!m_light) { return false; } RwRGBAReal color; color.red = 0.8f; color.green = 0.8f; color.blue = 0.8f; color.alpha = 0.0f; RpLightSetColor(m_light, &color); RwFrame* frame = RwFrameCreate(); _rwObjectHasFrameSetFrame(m_light, frame); m_isBlurred = isBlurred; m_gradientSteps = gradientSteps; m_resampleRaster = resampleRaster; if (!isBlurred) { if (!m_cameraNonBlurred.Create(7)) { Destroy(); return false; } } else { if (!m_cameraBlurred.Create(6)) { Destroy(); return false; } } m_cameraNonBlurred.SetLight(m_light); return true; }
bool CFileLoader::LoadClumpFile(RwStream *stream, size_t model_id) { char v2; // bl@1 int v3; // ebp@1 CVehicleModelInfo *v4; // esi@1 RpClump *v5; // ebx@2 RwFrame *v6; // ebp@2 RpClump *v7; // eax@3 RpClump *v8; // esi@3 RwFrame *v9; // eax@4 RpClump *v11; // edi@10 CVehicleModelInfo *v12; // [sp+10h] [bp+10h]@1 v3 = model_id; CVehicleModelInfo* v12 = static_cast<CVehicleModelInfo*>(CModelInfo::GetModelInfo(model_id)); v4 = v12; v2 = (unsigned __int8)v12->__parent.__parent.__vmt->getType(v12) == 6; if ( HIBYTE(v12->__parent.__parent.flags) & 2 ) { v5 = (RpClump *)RpClumpCreate(); v6 = RwFrameCreate(); v5->object.parent = v6; if ( !v7ed2d0(stream, 16, 0, 0) ) { LABEL_6: ((void (__thiscall *)(CVehicleModelInfo *, RpClump *))v4->__parent.__parent.__vmt[1]._m04)(v4, v5); return 1; } while ( 1 ) { v7 = RpClumpStreamRead(stream); v8 = v7; if ( !v7 ) return 0; v9 = _rwFrameCloneAndLinkClones(v7->object.parent); v7f0b00(v6, v9); RpClumpForAllAtomics(v8, (int (__cdecl *)(_DWORD, _DWORD))dummy_537290, v5); RpClumpDestroy(v8); if ( !v7ed2d0(stream, 16, 0, 0) ) { v4 = v12; goto LABEL_6; } } } if ( !v7ed2d0(stream, 16, 0, 0) ) return 0; if ( v2 ) { CCollisionPlugin__SetModelInfo(&v12->__parent.__parent); CVehicleModelInfo__UseCommonVehicleTexDicationary(); } v11 = RpClumpStreamRead(stream); if ( v2 ) { CCollisionPlugin__SetModelInfo(0); restoreTextureFindCallback(); } if ( !v11 ) return 0; ((void (__thiscall *)(CVehicleModelInfo *, RpClump *))v12->__parent.__parent.__vmt[1]._m04)(v12, v11); if ( v3 == 508 ) v12->ucDoorCount = 2; return 1; }