TEST-STRCMP4CODES
From SimsWiki
EP0-TS2 0xCD7FE87A 0x1C0532FA 0x9149CD43 0xFF002DC8
- particles
- Various standard shaders for particle systems.
- StandardParticlesMaterial
- The standard shader for billboard-style particles.
- This is referenced from the effects manager.
setb stdPMDoAlphaMask true setb stdPMDoDepthWrite false setb stdPMDoDepthTest true setb stdPMAdditive false setb stdPMModulate false setb stdPMInvertDepth false setb stdPMDebugFill false
set stdParticleCompositeTexture ""
define StandardParticlesMaterial()
material # put ourselves two layers above the standard, plus # transparent, because we don't write Z, and anything # that renders after us will stomp on us. if (varExists(stdPMLayer)) shader -layer $stdPMLayer else shader -layer ($stdMatLayer * 8 + 7) # 7 for alpha blend endif vertexFormatPred position 0 true vertexFormatPred texcoord 0 true vertexFormatPred color 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false numLightsPred environmentCube (numLightsOfType(environmentCube))
pass -fixedFunction create LightingStatesNoStdLights() ffPerVertexColor -enable true -diff vertexDiffuse if $stdPMDebugFill alphaBlend srcFactor(one) add dstFactor(zero) elseif $stdPMAdditive alphaBlend srcFactor(srcAlpha) add dstFactor(one) elseif $stdPMModulate alphaBlend srcFactor(destColor) add dstFactor(zero) else alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) endif depthTest $stdPMDoDepthTest -enableDepthWrite $stdPMDoDepthWrite if ($stdPMInvertDepth) depthTestFunction acceptIfGreater endif if (not $stdPMDebugFill) alphaTest $stdPMDoAlphaMask 1 alphaTestFunction acceptIfGreaterOrEqual # is this the default? remove if so... endif
# the particle system takes care of whether lighting is applied, # by setting kGeomSkipIllumination appropriately. if (numLightsOfType(environmentCube) > 0) colorScalar (1, 1, 1, 1) -applyTextureLightColor 0 0 endif fillmode $stdMatFillMode # so we pick up on wireframe. cullmode none
create LightingStatesNoStdLights() stage texture $stdParticleTexture textureAddressing clamp clamp
textureBlend multiply(texture diffuse) multiply(texture diffuse) end if (strcmp("$stdParticleCompositeTexture", "()") != 0) # alpha composite over the top stage texture $stdParticleCompositeTexture textureAddressing clamp clamp ffTextureCoordsSource 0 textureBlend lerpTextureAlpha(texture outRegister) select(outRegister) end elseif (numLightsOfType(environmentCube) > 0) # multiply in environment tint. # We could do this more cheaply in the particle streaming code, where there # is already an overall colour multiplier for the per-vertex colour, but we # can't access the lights from there. # We don't (yet) support particle "lighting" with composite particles. stage textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister) end endif end end # since particles tend to be transparent, the fallback will be to not draw them. shader end #shader end
enddef
- StandardParticleModelMaterial
- The standard shader for model (shape)-based particles.
- Respects a subset (basically phong-shaded textured) of the
- standard material parameters.
- aliasshader StandardParticleModelMaterial StandardMaterial
define StandardParticleModelMaterial()
material # TODO: do ltScale properly; but we'll probably move this functionality into # standard material before we tackle that. set ltScale 2 attributes attribute color float3 attribute alpha float1 attribute scale float1 end
shader -layer ($stdMatLayer * 8 + 7) # 7 for alpha blend vertexFormatPred position 0 true vertexFormatPred texcoord 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false create DetermineHardwareSupport()
pass -fixedFunction ffMatCoef -amb ($stdMatDiffCoef * (1 / $ltScale).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (1 / $ltScale).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (1 / $ltScale).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower addSpecular true # normalize normals because of scale create LightingStatesParam(true false) # We should be able to call StandardShaderFBAlphaState here, but # because this wasn't done originally, there are a bunch of existing # materials that have blend set to "none" where they should be set to # "blend". if (strcmp("${stdMatAlphaBlendMode}", "additive") = 0) alphaBlend srcFactor(srcAlpha) add dstFactor(one) depthTest true -enableDepthWrite false else alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite true endif alphaTest $stdMatAlphaTestEnabled $stdMatAlphaRefValue alphaTestFunction acceptIfGreaterOrEqual
colorScalar @color @alpha ffScaleModelTransform @scale fillmode $stdMatFillMode
stage create StandardShaderTextureState(Base) # outRegister is previous stage. For first stage, diffuse. if $stdMatBaseTextureAlphaReplicate textureBlend multiplyScale${ltScale}(texture:alphaReplicate outRegister) multiply(texture outRegister) else textureBlend multiplyScale${ltScale}(texture outRegister) multiply(texture outRegister) endif end stage textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister) end end if (strcmp("${stdMatEnvCubeMode}", "reflection") = 0) pass -fixedFunction create LightingStatesParam(true false) alphaBlend srcFactor(one) add dstFactor(one) ffScaleModelTransform @scale colorScalar $stdMatEnvCubeCoef 1 fillmode $stdMatFillMode stage if ($cubeMapSupport) create StandardShaderEnvCubeMapState(fromReflectionVector) textureBlend multiply(texture colorScalar) select(texture) else textureBlend select(colorScalar) select(colorScalar) endif end end endif end # non textured opaque fallback. shader -layer ($stdMatLayer * 8) pass -fixedFunction create LightingStatesParam(true false) ffScaleModelTransform @scale colorScalar @color @alpha ffMatCoef -amb ($stdMatDiffCoef * (0.5).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (0.5).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (0.5).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower stage textureBlend multiplyScale2(diffuse colorScalar) select(colorScalar) end end end # do-nothing fallback shader end end
enddef
- Various standard shaders for particle systems.
- StandardParticlesMaterial
- The standard shader for billboard-style particles.
- This is referenced from the effects manager.
setb stdPMDoAlphaMask true setb stdPMDoDepthWrite false setb stdPMDoDepthTest true setb stdPMAdditive false setb stdPMModulate false setb stdPMInvertDepth false setb stdPMDebugFill false
set stdParticleCompositeTexture ""
define StandardParticlesMaterial()
material # put ourselves two layers above the standard, plus # transparent, because we don't write Z, and anything # that renders after us will stomp on us. if (varExists(stdPMLayer)) shader -layer $stdPMLayer else shader -layer ($stdMatLayer * 8 + 7) # 7 for alpha blend endif vertexFormatPred position 0 true vertexFormatPred texcoord 0 true vertexFormatPred color 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false numLightsPred environmentCube (numLightsOfType(environmentCube))
pass -fixedFunction create LightingStatesNoStdLights() ffPerVertexColor -enable true -diff vertexDiffuse if $stdPMDebugFill alphaBlend srcFactor(one) add dstFactor(zero) elseif $stdPMAdditive alphaBlend srcFactor(srcAlpha) add dstFactor(one) elseif $stdPMModulate alphaBlend srcFactor(destColor) add dstFactor(zero) else alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) endif depthTest $stdPMDoDepthTest -enableDepthWrite $stdPMDoDepthWrite if ($stdPMInvertDepth) depthTestFunction acceptIfGreater endif if (not $stdPMDebugFill) alphaTest $stdPMDoAlphaMask 1 alphaTestFunction acceptIfGreaterOrEqual # is this the default? remove if so... endif
# the particle system takes care of whether lighting is applied, # by setting kGeomSkipIllumination appropriately. if (numLightsOfType(environmentCube) > 0) colorScalar (1, 1, 1, 1) -applyTextureLightColor 0 0 endif fillmode $stdMatFillMode # so we pick up on wireframe. cullmode none
create LightingStatesNoStdLights() stage texture $stdParticleTexture textureAddressing clamp clamp
textureBlend multiply(texture diffuse) multiply(texture diffuse) end if (strcmp("$stdParticleCompositeTexture", "()") != 0) # alpha composite over the top stage texture $stdParticleCompositeTexture textureAddressing clamp clamp ffTextureCoordsSource 0 textureBlend lerpTextureAlpha(texture outRegister) select(outRegister) end elseif (numLightsOfType(environmentCube) > 0) # multiply in environment tint. # We could do this more cheaply in the particle streaming code, where there # is already an overall colour multiplier for the per-vertex colour, but we # can't access the lights from there. # We don't (yet) support particle "lighting" with composite particles. stage textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister) end endif end end # since particles tend to be transparent, the fallback will be to not draw them. shader end #shader end
enddef
- StandardParticleModelMaterial
- The standard shader for model (shape)-based particles.
- Respects a subset (basically phong-shaded textured) of the
- standard material parameters.
- aliasshader StandardParticleModelMaterial StandardMaterial
define StandardParticleModelMaterial()
material # TODO: do ltScale properly; but we'll probably move this functionality into # standard material before we tackle that. set ltScale 2 attributes attribute color float3 attribute alpha float1 attribute scale float1 end
shader -layer ($stdMatLayer * 8 + 7) # 7 for alpha blend vertexFormatPred position 0 true vertexFormatPred texcoord 0 true vertexFormatPred blendindices 0 false vertexFormatPred targetindices 0 false create DetermineHardwareSupport()
pass -fixedFunction ffMatCoef -amb ($stdMatDiffCoef * (1 / $ltScale).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (1 / $ltScale).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (1 / $ltScale).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower addSpecular true # normalize normals because of scale create LightingStatesParam(true false) # We should be able to call StandardShaderFBAlphaState here, but # because this wasn't done originally, there are a bunch of existing # materials that have blend set to "none" where they should be set to # "blend". if (strcmp("${stdMatAlphaBlendMode}", "additive") = 0) alphaBlend srcFactor(srcAlpha) add dstFactor(one) depthTest true -enableDepthWrite false else alphaBlend srcFactor(srcAlpha) add dstFactor(invSrcAlpha) depthTest true -enableDepthWrite true endif alphaTest $stdMatAlphaTestEnabled $stdMatAlphaRefValue alphaTestFunction acceptIfGreaterOrEqual
colorScalar @color @alpha ffScaleModelTransform @scale fillmode $stdMatFillMode
stage create StandardShaderTextureState(Base) # outRegister is previous stage. For first stage, diffuse. if $stdMatBaseTextureAlphaReplicate textureBlend multiplyScale${ltScale}(texture:alphaReplicate outRegister) multiply(texture outRegister) else textureBlend multiplyScale${ltScale}(texture outRegister) multiply(texture outRegister) endif end stage textureBlend multiply(colorScalar outRegister) multiply(colorScalar outRegister) end end if (strcmp("${stdMatEnvCubeMode}", "reflection") = 0) pass -fixedFunction create LightingStatesParam(true false) alphaBlend srcFactor(one) add dstFactor(one) ffScaleModelTransform @scale colorScalar $stdMatEnvCubeCoef 1 fillmode $stdMatFillMode stage if ($cubeMapSupport) create StandardShaderEnvCubeMapState(fromReflectionVector) textureBlend multiply(texture colorScalar) select(texture) else textureBlend select(colorScalar) select(colorScalar) endif end end endif end # non textured opaque fallback. shader -layer ($stdMatLayer * 8) pass -fixedFunction create LightingStatesParam(true false) ffScaleModelTransform @scale colorScalar @color @alpha ffMatCoef -amb ($stdMatDiffCoef * (0.5).xxx) -ambAlpha $stdMatAlphaMultiplier -diff ($stdMatDiffCoef * (0.5).xxx) -diffAlpha $stdMatAlphaMultiplier -emit ($stdMatEmissiveCoef * (0.5).xxx) -emitAlpha $stdMatAlphaMultiplier -spec $stdMatSpecCoef -specPow $stdMatSpecPower stage textureBlend multiplyScale2(diffuse colorScalar) select(colorScalar) end end end # do-nothing fallback shader end end
enddef