The Simpsons Game (PlayStation 3, Xbox 360)
The Simpsons Game |
---|
Also known as:
![]() ![]() |
This article is a work in progress. ...Well, all the articles here are, in a way. But this one moreso, and the article may contain incomplete information and editor's notes. |
The Simpsons Game is what you get when you make a Simpsons game with every game genre.
Contents
Sub-Pages
Prototype Info |
Prerelease Info |
Making-of Movie Three parts of a Making-of movie were planned, none of which made the final cut. |
Early Names
Level Names
At some point in development, the episode names were changed to what they are now. The old names still remain in the code and file/folder names.
Early Name | Final Name |
---|---|
The Treehugger | Lisa The Tree Hugger |
Cheater Cheater | Enter the Cheatrix |
Day of the Dolphins | Day of the Dolphin |
The Day Springfield Stood Still | Invasion of the Yokel-Snatchers |
Gamehub | Game Engine |
Rhymes with Complaining | Five Characters in Search of an Author |
Meet Thy Player | Game Over |
SPR_HUB | Springfield |
Movie Names
simpsons_gameflow.lua has several NewMovie() function calls and the first argument it requires is movieName, which has early/placeholder movie names passed to it.
Early Name | Final Name |
---|---|
Homer's Dream | Chocolate, Half Price |
Homer Explodes | Damn You, Reality! |
gam_igc01 | The Game Manual |
Principal Skinner confesses | Skinner Confesses |
80 Bites Intro | The Eating Contest |
Homer wins | You Blew It Up! |
Lisa decides to do something | I Have Super Powers? |
Factory is blown up | Out of a Job |
Mayor Quimby declares GTS day | Gimme Your Ride, Jerk! |
gam_igc02 | Alien Invasion |
Lisa and Bart find themselves in the Game Engine | Professor Frink? |
Frink helps Bart and Lisa exit back to Springfield | Frink's Bride |
Free McAllister | Snouts and Blowholes |
Snorky is defeated | Eggrolls! Revenge! |
Set up objective | Lard Lad |
Lard Lad is defeated | Eat Fist, Lard Crotch! |
Aliens attack citizens | A Yokel Is Abducted |
Sideshow Bob | Sideshow Bob?! |
Homer and Bart go back into the game engine | Cheating |
gam_igc05 | Find the Key Cards |
Intro to Hobbit town | My Ears Are Pointy |
Homer grabs the shards | My Precious! |
Marge and Lisa enter GTS Game | Cats and Mice |
Hot Coffee, Hillary Clinton | Video Game Violence |
Retrieval of shard key, Normandy Invasion | Victory |
Mr. Dirt Intro | The Realm of Mr. Dirt |
Giant washing machine cleans everything | Mr. Sparkle Has Risen |
Opening mansion gate | The Mansion Gates |
Confronting Groening | So Long, Suckers! |
Praying | A Stairway To Heaven |
gam_igc07 | Confronting God |
Debug Replay
To do:
|
There is a hidden menu internally called DebugReplay. It can be accessed in both the Old Generation release as well as here.
All Regions | |
---|---|
PS3 | 00AF65B3 E8 |
360 | 8239F71F A4 |
One slight difference, however, is that currently there is no way to add the Debug Replay button on the main menu in this release. Instead, these codes will replace the regular Episodes & Challenges menu with Debug Replay.
Unused Text
Cutscene Names
These appear in the videos menu in the Old-gen release because they're pre-rendered, but not in this version.
String ID | String Label | String |
---|---|---|
4E9A8E14 | FE_FMV_04 | The Bullies Scheme |
4E9B8E50 | FE_FMV_11 | Quimby Unbribed |
4E9C8E93 | FE_FMV_25 | Take Zat, Frenchies! |
4E9D8ECF | FE_FMV_32 | The Creator |
Downloadable Content
String ID | String Label | String |
---|---|---|
77F646EC | FE_dlc_unavailable | The downloaded content is not available. |
7FE0B00D | TCR_DLC_CORRUPT | The downloadable content %1 is corrupt and cannot be used. Re-download the downloadable content to re-enable %1. |
A11CE082 | TCR_DLC_INUSE | An in-use Xbox 360 Memory Unit with The Simpsons¬ Game downloadable content was removed, the game is unable to continue. |
44C8031C | TCR_DLC_WARNING | Removing an in-use Xbox 360 Memory Unit with The Simpsons¬ Game downloadable content can result in the loss of unsaved progress. |
85EABA10 | TCR_DLC_RESCAN | A Xbox 360 Memory Unit has been inserted. Do you wish to scan for The Simpsons¬ Game downloadable content? This will result in the loss of unsaved progress. |
9BAFF0EE | TCR_LOAD_UNUSABLE | %1 is missing dependent content package(s) and cannot be used.\nRe-download the content package(s) to re-enable %1 |
Demo Leftovers
Some of the strings have some changes between platforms.
String ID | String Label | String (PlayStation 3) | String (Xbox 360) |
---|---|---|---|
D7F16CED | Demo_burp | As Homer, press [RDRight] to burp and stun enemies. Press and hold [RDRight] to perform a Power Burp. | As Homer, press [RDRight] to burp and stun enemies. Hold [RDRight] to perform a Power Burp. |
A32AFB60 | DEMO_EXIT_GAME_QUERY | Are you sure you want to quit the game? You will lose all game progress if you continue. | |
F1EB4116 | Demo_homerball | As Homer Ball, break objects with a Burst ([RDLeft]) or a Slam ([RDDown], [RDLeft]). | |
8B5F6856 | demo_intohomerball | As Homer, press [RSBottom] to become Homer Ball. | As Homer, pull [RSBottom] to become Homer Ball. |
33866729 | Demo_power | Some abilities cost power. Collect small items to fill the Simpsons' power meters. | |
EA65B9E1 | demo_slam | Jump ([RDDown]) and press [RDLeft] to do a Homer Ball Slam. | |
B8F63C07 | Demo_slingshot | As Bart, press [RDRight] to fire Bart's slingshot. Press and hold [RDRight] to perfom a Power Shot. | As Bart, press [RDRight] to fire Bart's slingshot. Hold [RDRight] to perfom a Power Shot. |
F318F9B0 | Demo_switch | Press [LDLeft] to switch characters (in single-player games). | |
2C4B0B0A | Demo_updraft | As Bart, press [RDDown] to jump and press and hold [RSBottom] to ride updrafts. | As Bart, press [RDDown] to jump and pull and hold [RSBottom] to ride updrafts. |
68318075 | FE_Demo_1 | Hey, Hey\n Kids! | |
68318076 | FE_Demo_2 | Is your body still all a-tingle from the demo? Think what the whole game will do for you! It's packed with all of these exciting features:\n\n | |
68318077 | FE_Demo_3 | 16 parody-packed episodes that deliver the all-time greatest games and game moments ever.\n\n | |
68318078 | FE_Demo_4 | An original story crafted by the writers of the show and movie-trust me, these guys know funny!\n\n | |
68318079 | FE_Demo_5 | Explore Springfield to find hundreds of collectibles and interact with more than 170 characters - even the losers!\n\n | |
6831807A | FE_Demo_6 | Play as Homer, Bart, Lisa, Marge, and even Maggie, each with unique powers. Wait, no Krusty? Who do I have to bribe in this town to get some respect?!\n\n | |
6831807B | FE_Demo_7 | Ehhggh. Anyway, it still gets the Krusty Brand Seal of Approval. So go hit up your parents for some dough and buy a couple. Tell 'em Krusty said it's OK. | |
AEA3EF08 | FE_DEMO_controller_01 | Target Lock | |
AEA3EF09 | FE_DEMO_controller_02 | Attack | |
AEA3EF0A | FE_DEMO_controller_03 | Use | |
AEA3EF0B | FE_DEMO_controller_04 | Homer Ball | |
AEA3EF0C | FE_DEMO_controller_05 | Bart Cape | |
AEA3EF0D | FE_DEMO_controller_06 | Slingshot | |
AEA3EF0E | FE_DEMO_controller_07 | Burp | |
AEA3EF0F | FE_DEMO_controller_08 | Hold | |
AEA3EF10 | FE_DEMO_controller_09 | To Charge Up a Power Attack | |
AEA4EF46 | FE_DEMO_controller_10 | Jump / Double Jump | |
AEA4EF47 | FE_DEMO_controller_11 | Objectives | |
AEA4EF48 | FE_DEMO_controller_12 | Switch Character | |
AEA4EF49 | FE_DEMO_controller_13 | Press | Tap |
AEA4EF4A | FE_DEMO_controller_14 | Move | |
AEA4EF4B | FE_DEMO_controller_15 | Camera | |
D24F800E | FE_Demo_legal_PS3 | This demo is intended for promotional purposes only, and may not be sold or rented. | |
70C31874 | FE_MenuText_ExitDemo | Exit Demo | |
D0848649 | FE_Title_DemoMenu | Demo Menu |
Unused Graphics
Downloadable Content
This game was planned to have DLC expansions. There is a button in the menu that would be used for DLC, but it never ended up being used. Frontend.str contains textures that were meant to be used for said DLC.
To get a better idea of where exactly these expansions were meant to take place in Springfield, this mockup image with all the textures combined to form a single image will help you out.
Movie Placeholders
The colloquially called Old Generation version has a few more movies available in the menu, those being In-Game Cutscenes that are pre-rendered there, but are played in real-time in the New Generation as they happen. Frontend.str still has placeholder textures for those unavailable movies.
And then there is one more blank movie placeholder icon with no text in it.
The level Big Super Happy Fun Fun Game has an IGC placeholder of its own too.
Frontend
Some Textures here appear to be present from The Godfather game released in 2006, also by EA Redwood Shores and also on the same game engine.
There are aso 10 language flags, even though there is no language selection menu even in multi-language releases. This game also doesn't have any released localization in Dutch, Polish, Portuguese, Swedish whose flags appear here; and the flags for Finnish and Norwegian, which did have a released localization don't appear here.
Oddities
In the cutscene where Kang and Kodos start attacking the whole town, you can see the Springfield General Hospital in the background which never shows up in game, but does show up in one of the unused minigames in the Wii prototype.
Unused Level Areas
To do: Get populated/textured renders. Right now these photos are just the plain level meshes with no props, enemies or lighting. |
Springfield Hub
- Retirement Home Interior
Underneath the retirement home, there is an unused interior. This seems to be very basic, with little furniture.
- Unused house
Located underneath the Sleep Eazy Motel there is an interior for an unused house. The house contains detailed models for furniture. Strangely, there is more furniture located underneath the floor and outside the walls.
Enter the Cheatrix
- Zone 3
Labeled as Zone 3 of Enter the Cheatrix. Only uses the simpsons_palette texture, and generally looks very unfinished. There is no ceiling mesh, so either there would have been a fixed camera angle or the mesh was never finished. From the fact that it uses no textures, we can assume that it was cut very early into Cheatrix's life, or was never intended for the final game at all.
- Zone 4
Labeled as Zone 4 of Enter the Cheatrix. Only uses the simpsons_palette texture, bar from 3 pipes. At the top section, next to the green pipe, the wall covers a small corridor leading out, so this was presumably the exit to this zone. There is a movable bridge in the middle, leading to sign saying "POWER BOOST" and "OFF".
Five Characters in Search of an Author
- Zone 2
Labelled as Zone 2 of Five Characters. This would have come right after the outside lawyer fight.
- Zone 3
Labelled as Zone 3 of Five Characters. This would have come right after Zone 2. The design of this zone is very reminiscent of Old-Gen Five Characters. The player starts in the bottom left, somehow crosses a gap, makes their way across a bowling lane at the back (maybe there would have been bowling balls to dodge?), then back towards the camera. Then, there is a platforming section across floating notepads. The Homer and Bart statues are seemingly textureless, so either they were meant to look like that or the materials were cut.
Developer Credits/Text
In simpsons_gameflow.lua, simpsons_gameflow_helpers.lua and simpsons_scores.lua there are copyright, author and usage messages.
simpsons_gameflow.lua
--/////////////////////////////////////////////////////////////////////////////// --/// \file simpsons_gameflow_helpers.h --/// \brief Simpsons Gameflow --/// --/// Builds the Gameflow Structure for the Simpsons --/// --/// \par Copyright: --/// (c) 2006 - Electronic Arts Inc. --/// \author --/// Kaye Mason --/// \date --/// 12/12/06 --/////////////////////////////////////////////////////////////////////////////// --Syntax notes: --Create a Game First. --Create Episodes. --Create Movies for episodes. --Create Maps for episodes. --Create Game modes for Episodes. --Attach Maps to Modes. --Attach Movies to Modes. --NB: Requires simpsons_gamelfow_helpers.lua to be loaded first.
simpsons_gameflow_helpers.lua
--/////////////////////////////////////////////////////////////////////////////// --/// \file simpsons_gameflow_helpers.h --/// \brief Simpsons Gameflow Helpers --/// --/// Contains Wrapper functions to assist in building the gameflow model --/// --/// \par Copyright: --/// (c) 2006 - Electronic Arts Inc. --/// \author --/// Kaye Mason --/// \date --/// 12/12/06 --///////////////////////////////////////////////////////////////////////////////
simpsons_scores.lua
--About the ScoreKeeper: The Score Keeper system is a flexible and data driven way to store scores. --It supports basic scores, which store values, as well as Score Events (collections of operations that --may be issued as one) and Score Watchers (which trigger actions based on the values of scores). --The syntax of this document is described in the function SetupTestScores. --When using this document, please add your scores to the appropriate epsiode function. If you are unsure --where to attach scores, please see Tom Wilson (tmwilson@ea.com) or Brad McKee (bmckee@ea.com). This will --help keep the document readable and maintainable as the number of scores grows.
Lower down in "simpsons_scores.lua", there is a warning from a developer to the other developers :
-- DO NOT CHANGE BELOW HERE! (unless you know what you're doing and are willing to bear the consequences :-) )
Uncompiled Source
vsh_ff_all.hlsl
The Xbox 360 version's .XEX has an uncompiled source file, likely coming from an SDK.
///////////////////////////////////////////////////////////////////// /// /// vsh_ff_all.hlsl /// /// Implements fixed function vertex processing for the Xenon /// ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /// /// D3D9 types for effect files /// ///////////////////////////////////////////////////////////////////// typedef float4 D3DCOLORVALUE; typedef float3 D3DVECTOR; typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; D3DCOLORVALUE Ambient; D3DCOLORVALUE Specular; D3DCOLORVALUE Emissive; float Power; } D3DMATERIAL9; typedef int D3DLIGHTTYPE; #define D3DLIGHT_POINT 1 #define D3DLIGHT_SPOT 2 #define D3DLIGHT_DIRECTIONAL 3 typedef struct _D3DLIGHT9 { D3DLIGHTTYPE Type; D3DCOLORVALUE Diffuse; D3DCOLORVALUE Specular; D3DCOLORVALUE Ambient; D3DVECTOR Position; D3DVECTOR Direction; float Range; float Falloff; float Attenuation0; float Attenuation1; float Attenuation2; float Theta; float Phi; } D3DLIGHT9; typedef int D3DFOGMODE; #define D3DFOG_NONE 0 #define D3DFOG_EXP 1 #define D3DFOG_EXP2 2 #define D3DFOG_LINEAR 3 typedef int D3DTRANSFORMSTATETYPE; #define D3DTS_WORLD 0 #define D3DTS_VIEW 1 #define D3DTS_PROJECTION 2 #define D3DTS_TEXTURE0 3 #define D3DTS_TEXTURE1 4 #define D3DTS_TEXTURE2 5 #define D3DTS_TEXTURE3 6 #define D3DTS_TEXTURE4 7 #define D3DTS_TEXTURE5 8 #define D3DTS_TEXTURE6 9 #define D3DTS_TEXTURE7 10 #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 #define D3DTSS_TCI_SPHEREMAP 0x00040000 typedef int D3DTEXTURETRANSFORMFLAGS; #define D3DTTFF_DISABLE 0 #define D3DTTFF_COUNT1 1 #define D3DTTFF_COUNT2 2 #define D3DTTFF_COUNT3 3 #define D3DTTFF_COUNT4 4 #define D3DTTFF_PROJECTED 256 typedef int D3DMATERIALCOLORSOURCE; #define D3DMCS_MATERIAL 0 #define D3DMCS_COLOR1 1 #define D3DMCS_COLOR2 2 ///////////////////////////////////////////////////////////////////// /// /// Defines /// ///////////////////////////////////////////////////////////////////// #ifndef K_NORMALIZENORMALS #define K_NORMALIZENORMALS true #endif #ifndef K_TWEENENABLE #define K_TWEENENABLE false #endif #ifndef K_TEXTURETRANSFORMFLAGS0 #define K_TEXTURETRANSFORMFLAGS0 D3DTTFF_DISABLE #endif #ifndef K_TEXTURETRANSFORMFLAGS1 #define K_TEXTURETRANSFORMFLAGS1 D3DTTFF_DISABLE #endif #ifndef K_FOGENABLE #define K_FOGENABLE true #endif #ifndef K_RANGEFOGENABLE #define K_RANGEFOGENABLE false #endif #ifndef K_FOGVERTEXMODE #define K_FOGVERTEXMODE D3DFOG_LINEAR #endif #ifndef K_SPECULARENABLE #define K_SPECULARENABLE false #endif #ifndef K_LIGHTING #define K_LIGHTING true #endif #ifndef K_SCREENSPACEPOSITIONS #define K_SCREENSPACEPOSITIONS false #endif #ifndef K_DIFFUSEMATERIALSOURCE #define K_DIFFUSEMATERIALSOURCE D3DMCS_COLOR1 #endif #ifndef K_SPECULARMATERIALSOURCE #define K_SPECULARMATERIALSOURCE D3DMCS_COLOR2 #endif #ifndef K_AMBIENTMATERIALSOURCE #define K_AMBIENTMATERIALSOURCE D3DMCS_MATERIAL #endif #ifndef K_EMISSIVEMATERIALSOURCE #define K_EMISSIVEMATERIALSOURCE D3DMCS_MATERIAL #endif #ifndef K_TEXCOORDINDEX0 #define K_TEXCOORDINDEX0 D3DTSS_TCI_PASSTHRU #endif #ifndef K_TEXCOORDINDEX0ENABLE #define K_TEXCOORDINDEX0ENABLE false #endif #ifndef K_TEXCOORDINDEX1 #define K_TEXCOORDINDEX1 D3DTSS_TCI_PASSTHRU #endif #ifndef K_TEXCOORDINDEX1ENABLE #define K_TEXCOORDINDEX1ENABLE false #endif #ifndef K_COLOR0ENABLE #define K_COLOR0ENABLE false #endif #ifndef K_COLOR1ENABLE #define K_COLOR1ENABLE false #endif ///////////////////////////////////////////////////////////////////// /// /// Lighting state /// ///////////////////////////////////////////////////////////////////// D3DMATERIAL9 g_Material; D3DLIGHT9 g_Lights[8]; bool g_LightEnable[8]; float g_SpotLightCosHalfTheta[8]; float g_SpotLightCosHalfPhi[8]; ///////////////////////////////////////////////////////////////////// /// /// Renderstates /// ///////////////////////////////////////////////////////////////////// D3DCOLORVALUE g_Ambient; float g_TweenFactor; D3DCOLORVALUE g_FogColor; float g_FogStart; float g_FogEnd; float g_FogDensity; ///////////////////////////////////////////////////////////////////// /// /// Transform state /// ///////////////////////////////////////////////////////////////////// float4x4 g_Proj : PROJ; float4x4 g_WorldViewProj : WORLDVIEWPROJ; float4x4 g_WorldView : WORLDVIEW; float4x4 g_World : WORLD; float4x4 g_WorldViewIT; float4x4 g_ViewIT; float4x4 g_TexTrans0; float4x4 g_TexTrans1; float g_PosScaleX; float g_PosScaleY; ///////////////////////////////////////////////////////////////////// /// /// Vertex shader output /// ///////////////////////////////////////////////////////////////////// struct VS_OUTPUT { float4 Pos : POSITION; float4 Color0 : COLOR0; float4 Color1 : COLOR1; float4 Tex0 : TEXCOORD0; float4 Tex1 : TEXCOORD1; float Fog : FOG; }; ///////////////////////////////////////////////////////////////////// /// /// Color pair for lighting computations // ///////////////////////////////////////////////////////////////////// struct COLOR_PAIR { float4 Color0 : COLOR0; float4 Color1 : COLOR1; }; ///////////////////////////////////////////////////////////////////// /// /// Compute the contribution from a directional light /// ///////////////////////////////////////////////////////////////////// COLOR_PAIR ///< Returns diffuse/ambient and specular components DoDirLight ( float3 viewSpaceNorm, ///< Normal in view space float3 viewSpaceViewVec, ///< View vector in view space int i, ///< Light index uniform bool k_SpecularEnable ///< Specular enabled? ) { COLOR_PAIR ret; // // Ambient // ret.Color0 = g_Lights[i].Ambient; ret.Color1 = 0; float3 L = mul((float3x3)g_ViewIT, -normalize(g_Lights[i].Direction)); float NdotL = dot(viewSpaceNorm, L); if(NdotL > 0.f) { //compute diffuse color ret.Color0 += NdotL * g_Lights[i].Diffuse; //add specular component if(k_SpecularEnable) { float3 H = normalize(L + viewSpaceViewVec); ret.Color1 = pow(max(0, dot(H, viewSpaceNorm)), g_Material.Power) * g_Lights[i].Specular; } } return ret; } ///////////////////////////////////////////////////////////////////// /// /// Compute the contribution from a directional light /// ///////////////////////////////////////////////////////////////////// COLOR_PAIR ///< Returns diffuse/ambient and specular components DoPointLight ( float4 vPosition, ///< Position in model space float3 viewSpaceNorm, ///< Normal in view space float3 viewSpaceViewVec, ///< View vector in view space int i, ///< Light index uniform bool k_SpecularEnable ///< Specular enabled? ) { COLOR_PAIR ret; ret.Color0 = g_Lights[i].Ambient; ret.Color1 = 0; float3 L = mul((float3x3)g_ViewIT, normalize((g_Lights[i].Position-(float3)mul(g_World,vPosition)))); float NdotL = dot(viewSpaceNorm, L); float fAtten = 1.f; if(NdotL >= 0.f) { //compute diffuse color ret.Color0 += NdotL * g_Lights[i].Diffuse; //add specular component if(k_SpecularEnable) { float3 H = normalize(L + viewSpaceViewVec); //half vector ret.Color1 = pow(max(0, dot(H, viewSpaceNorm)), g_Material.Power) * g_Lights[i].Specular; } float LD = length(g_Lights[i].Position-(float3)mul(g_World,vPosition)); if(LD > g_Lights[i].Range) { fAtten = 0.f; } else { fAtten *= 1.f/(g_Lights[i].Attenuation0 + g_Lights[i].Attenuation1*LD + g_Lights[i].Attenuation2*LD*LD); } ret.Color0 *= fAtten; ret.Color1 *= fAtten; } return ret; } ///////////////////////////////////////////////////////////////////// /// /// Compute the contribution from a spot light /// ///////////////////////////////////////////////////////////////////// COLOR_PAIR ///< Returns diffuse/ambient and specular components DoSpotLight ( float4 vPosition, ///< Position in model space float3 viewSpaceNorm, ///< Normal in view space float3 viewSpaceViewVec, ///< View vector in view space int i, ///< Light index uniform bool k_SpecularEnable ///< Specular enabled? ) { COLOR_PAIR ret; ret.Color0 = g_Lights[i].Ambient; ret.Color1 = 0; float3 L = mul((float3x3)g_ViewIT, normalize((g_Lights[i].Position-(float3)mul(g_World,vPosition)))); float NdotL = dot(viewSpaceNorm, L); float fAttenSpot = 1.f; if(NdotL >= 0.f) { //compute diffuse color ret.Color0 += NdotL * g_Lights[i].Diffuse; //add specular component if(k_SpecularEnable) { float3 H = normalize(L + viewSpaceViewVec); ret.Color1 = pow(max(0, dot(H, viewSpaceNorm)), g_Material.Power) * g_Lights[i].Specular; } float LD = length(g_Lights[i].Position-(float3)mul(g_World,vPosition)); if(LD > g_Lights[i].Range) { fAttenSpot = 0.f; } else { fAttenSpot *= 1.f/(g_Lights[i].Attenuation0 + g_Lights[i].Attenuation1*LD + g_Lights[i].Attenuation2*LD*LD); } //spot cone computation float3 L2 = mul((float3x3)g_ViewIT, -normalize(g_Lights[i].Direction)); float rho = dot(L, L2); fAttenSpot *= pow(saturate((rho - g_SpotLightCosHalfPhi[i])/(g_SpotLightCosHalfTheta[i] - g_SpotLightCosHalfPhi[i])), g_Lights[i].Falloff); ret.Color0 *= fAttenSpot; ret.Color1 *= fAttenSpot; } return ret; } ///////////////////////////////////////////////////////////////////// /// /// Compute lighting contributions /// ///////////////////////////////////////////////////////////////////// COLOR_PAIR ///< Returns diffuse/ambient and specular components DoLighting ( float4 vPosition, ///< Position in model space float4 ambientColor, ///< Ambient color to modulate lighting float4 diffuseColor, ///< Diffuse color to modulate lighting float4 specularColor, ///< Specular color to modulate lighting float3 viewSpaceNorm, ///< Normal in view space float3 viewSpaceViewVec, ///< View vector in view space uniform bool k_SpecularEnable ///< Specular enabled? ) { // // Initialize return value // COLOR_PAIR ret; ret.Color0 = 0.f; ret.Color1 = 0.f; // // Ambient contribution // ret.Color0 = g_Ambient * ambientColor; for (int i = 0; i < 8; i++) { if (g_LightEnable[i]) { COLOR_PAIR thisLightContrib; D3DLIGHTTYPE type = g_Lights[i].Type; if (type == D3DLIGHT_DIRECTIONAL) { thisLightContrib = DoDirLight(viewSpaceNorm, viewSpaceViewVec, i, k_SpecularEnable); } else if (type == D3DLIGHT_POINT) { thisLightContrib = DoPointLight(vPosition, viewSpaceNorm, viewSpaceViewVec, i, k_SpecularEnable); } else if (type == D3DLIGHT_SPOT) { thisLightContrib = DoSpotLight(vPosition, viewSpaceNorm, viewSpaceViewVec, i, k_SpecularEnable); } else { thisLightContrib.Color0 = 0.f; thisLightContrib.Color1 = 0.f; } thisLightContrib.Color0 *= diffuseColor; thisLightContrib.Color1 *= specularColor; ret.Color0 += thisLightContrib.Color0; ret.Color1 += thisLightContrib.Color1; } } return ret; } ///////////////////////////////////////////////////////////////////// /// /// Compute the fog value /// ///////////////////////////////////////////////////////////////////// float4 DoFog(float3 viewSpacePos, uniform bool k_FogEnabled, uniform bool k_RangeFogEnable, uniform int k_FogVertexMode) { float4 ret = 1.f; if (k_FogEnabled) { float d; if (k_RangeFogEnable) d = length(viewSpacePos); else d = viewSpacePos.z; float4 ret = 1.f; if (k_FogVertexMode == D3DFOG_EXP) { ret = 1.f / exp(d * g_FogDensity); } else if (k_FogVertexMode == D3DFOG_EXP2) { ret = 1.f / exp(pow(d * g_FogDensity, 2)); } else if (k_FogVertexMode == D3DFOG_LINEAR) { ret = saturate((g_FogEnd - d)/(g_FogEnd - g_FogStart)); } } return ret; } ///////////////////////////////////////////////////////////////////// /// /// vertex shader /// ///////////////////////////////////////////////////////////////////// VS_OUTPUT vs_main ( float4 vPosition : POSITION0, float4 vPosition2 : POSITION1, float3 vNormal : NORMAL0, float3 vNormal2 : NORMAL1, float2 vTexCoord0 : TEXCOORD0, float2 vTexCoord1 : TEXCOORD1, float4 vColor0 : COLOR0, float4 vColor1 : COLOR1, uniform bool k_NormalizeNormals, uniform bool k_TweenEnable, uniform int k_TextureTransformFlags0, uniform int k_TextureTransformFlags1, uniform int k_TexCoordIndex0, uniform bool k_TexCoordIndex0Enable, uniform int k_TexCoordIndex1, uniform bool k_TexCoordIndex1Enable, uniform bool k_Color0Enable, uniform bool k_Color1Enable, uniform bool k_FogEnabled, uniform bool k_RangeFogEnable, uniform int k_FogVertexMode, uniform bool k_SpecularEnable, uniform bool k_Lighting, uniform bool k_ScreenSpacePositions, uniform D3DMATERIALCOLORSOURCE k_DiffuseMaterialSource, uniform D3DMATERIALCOLORSOURCE k_SpecularMaterialSource, uniform D3DMATERIALCOLORSOURCE k_AmbientMaterialSource, uniform D3DMATERIALCOLORSOURCE k_EmissiveMaterialSource ) { VS_OUTPUT ret = (VS_OUTPUT) 0; // // Normalize input normals // if (k_NormalizeNormals) { vNormal = normalize(vNormal); if (k_TweenEnable) { vNormal2 = normalize(vNormal2); } } // // If tweening is enabled, blend the position and normal // if(k_TweenEnable) { vPosition = (1.f-g_TweenFactor) * vPosition + g_TweenFactor * vPosition2; vNormal = (1.f-g_TweenFactor) * vNormal + g_TweenFactor * vNormal2; } if (!k_ScreenSpacePositions) { // // Transform the position into homogeneous space // ret.Pos = mul(g_WorldViewProj, vPosition); } else { // // Screen space transform // ret.Pos.x = ( (vPosition.x-0.5)*g_PosScaleX - 1.0 ); ret.Pos.y =-( (vPosition.y-0.5)*g_PosScaleY - 1.0 ); ret.Pos.z = vPosition.z; ret.Pos.w = 1.f; } // // Calculate some vectors used in lighting and texture coordinate generation // float3 viewSpacePos = mul(g_WorldView, vPosition); //position in view space float3 viewSpaceNorm = mul((float3x3)g_WorldViewIT, vNormal); //normal in view space float3 viewSpaceViewVec = -normalize(viewSpacePos); //viewer // // Texture coordinates // if (k_TexCoordIndex0Enable) { if (k_TexCoordIndex0 == D3DTSS_TCI_PASSTHRU) { ret.Tex0.xy = vTexCoord0; } else if (k_TexCoordIndex0 == D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR) { ret.Tex0 = float4((2.f * dot(viewSpaceViewVec, viewSpaceNorm) * viewSpaceNorm - viewSpaceViewVec), 0); } else if (k_TexCoordIndex0 == D3DTSS_TCI_CAMERASPACENORMAL) { ret.Tex0 = float4(viewSpaceNorm, 0); } else if (k_TexCoordIndex0 == D3DTSS_TCI_CAMERASPACEPOSITION) { ret.Tex0 = float4(viewSpacePos, 0); } } if (k_TexCoordIndex1Enable) { if (k_TexCoordIndex1 == D3DTSS_TCI_PASSTHRU) { ret.Tex1.xy = vTexCoord1; } else if (k_TexCoordIndex1 == D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR) { ret.Tex1 = float4((2.f * dot(viewSpaceViewVec, viewSpaceNorm) * viewSpaceNorm - viewSpaceViewVec), 1); } else if (k_TexCoordIndex1 == D3DTSS_TCI_CAMERASPACENORMAL) { ret.Tex1 = float4(viewSpaceNorm, 1); } else if (k_TexCoordIndex1 == D3DTSS_TCI_CAMERASPACEPOSITION) { ret.Tex1 = float4(viewSpacePos, 1); } } // // Apply texture transform if called for // if (k_TextureTransformFlags0 != D3DTTFF_DISABLE) { ret.Tex0 = mul(g_TexTrans0, ret.Tex0); } if (k_TextureTransformFlags1 != D3DTTFF_DISABLE) { ret.Tex1 = mul(g_TexTrans1, ret.Tex1); } if (k_Lighting) { // // Do lighting // float4 ambientColor; float4 diffuseColor; float4 specularColor; if (k_DiffuseMaterialSource == D3DMCS_MATERIAL) { diffuseColor = g_Material.Diffuse; } else if (k_DiffuseMaterialSource == D3DMCS_COLOR1) { diffuseColor = vColor0; } else { diffuseColor = vColor1; } if (k_SpecularMaterialSource == D3DMCS_MATERIAL) { specularColor = g_Material.Specular; } else if (k_SpecularMaterialSource == D3DMCS_COLOR1) { specularColor = vColor0; } else { specularColor = vColor1; } if (k_AmbientMaterialSource == D3DMCS_MATERIAL) { ambientColor = g_Material.Ambient; } else if (k_AmbientMaterialSource == D3DMCS_COLOR1) { ambientColor = vColor0; } else { ambientColor = vColor1; } COLOR_PAIR lighting = DoLighting(vPosition, ambientColor, diffuseColor, specularColor, viewSpaceNorm, viewSpaceViewVec, k_SpecularEnable); if (k_Color0Enable) { ret.Color0 = lighting.Color0; } if (k_Color1Enable) { ret.Color1 = lighting.Color1; } } else { // // Use vertex colors // if (k_Color0Enable) { ret.Color0 = vColor0; } if (k_Color1Enable) { ret.Color1 = vColor1; } } //saturate if (k_Color0Enable) { ret.Color0 = min(1.f, ret.Color0); } if (k_Color1Enable) { ret.Color1 = min(1.f, ret.Color1); } //apply fog float4 fogColor = DoFog(viewSpacePos, k_FogEnabled, k_RangeFogEnable, k_FogVertexMode); ret.Fog = fogColor.x; return ret; } VS_OUTPUT main ( float4 vPosition : POSITION0, float4 vPosition2 : POSITION1, float3 vNormal : NORMAL0, float3 vNormal2 : NORMAL1, float2 vTexCoord0 : TEXCOORD0, float2 vTexCoord1 : TEXCOORD1, float4 vColor0 : COLOR0, float4 vColor1 : COLOR1 ) { return vs_main(vPosition, vPosition2, vNormal, vNormal2, vTexCoord0, vTexCoord1, vColor0, vColor1, K_NORMALIZENORMALS, K_TWEENENABLE, K_TEXTURETRANSFORMFLAGS0, K_TEXTURETRANSFORMFLAGS1, K_TEXCOORDINDEX0, K_TEXCOORDINDEX0ENABLE, K_TEXCOORDINDEX1, K_TEXCOORDINDEX1ENABLE, K_COLOR0ENABLE, K_COLOR1ENABLE, K_FOGENABLE, K_RANGEFOGENABLE, K_FOGVERTEXMODE, K_SPECULARENABLE, K_LIGHTING, K_SCREENSPACEPOSITIONS, K_DIFFUSEMATERIALSOURCE, K_SPECULARMATERIALSOURCE, K_AMBIENTMATERIALSOURCE, K_EMISSIVEMATERIALSOURCE ); }
Version Differences
Enter the Cheatrix Time Challenge
The bridge in the blood room is damaged in the Xbox 360 version, but remains fully intact in the PlayStation 3 release.
PlayStation 3 | Xbox 360 |
---|---|
![]() |
![]() |
Bonus Movies
The European PlayStation 3 releases have an additional Bonus Movies sub-menu, which has two somewhat generic videos available. This was originally meant to contain the cut Making-of movie for this game.
PlayStation 3 (Europe) | PlayStation 3 (Rest of the World), Xbox 360 |
---|---|
![]() |
![]() |
Texture Resolution
To do: Some "generic" textures shared across many archives also have differing resolutions. Not to mention some others look quite different due to using other alpha masking types. |
A couple textures have more visible compression artifacts in one version than the other, which isn't that noteworthy, however there are also several textures that are higher resolution, most of the higher resolution ones occurring in the PS3 release.
Bartman Begins
Mob Rules
This texture exists in Bartman Begins, here, and in Springfield. Only in Bartman Begins the texture is identical on both platforms (both using the higher quality variant seen in the PS3 column.) Springfield's texture is the same as this one's.
PlayStation 3 | Xbox 360 |
---|---|
mob_rules\zone03.str\spr_museum02 | |
![]() |
![]() |
Shadow of the Colossal Donut
PlayStation 3 | Xbox 360 |
---|---|
colossadonut\zone02.str\spr_museum05 | |
![]() |
![]() |
Game Engine
The Five Characters in Search of an Author equivalent of this texture (rhymes\zone01.str\rwc_goldcoinramp2) is high resolution on both platforms.
PlayStation 3 | Xbox 360 |
---|---|
gamehub\zone01.str\gam_goldcoinramp2 | |
![]() |
![]() |
Springfield
The cliff texture has two different (yet almost identical) variants, the first one is lower resolution on PS3, but the 2nd one is identical on both patforms
PlayStation 3 | Xbox 360 |
---|---|
spr_hub\zone*.str\cliff | |
![]() |
![]() |
spr_hub\zone21.str\pol_floor1 | |
![]() |
![]() |
References
- Games developed by EA Redwood Shores
- Games published by Electronic Arts
- PlayStation 3 games
- Xbox 360 games
- Games released in 2007
- Games with unused areas
- Games with uncompiled source code
- Games with hidden developer credits
- Games with hidden development-related text
- Games with unused graphics
- Games with unused text
- Games with debugging functions
- Games with hidden level selects
- Games with revisional differences
- Works In Progress
- To do
- Simpsons series
Cleanup > To do
Cleanup > Works In Progress
Games > Games by content > Games with debugging functions
Games > Games by content > Games with hidden developer credits
Games > Games by content > Games with hidden development-related text
Games > Games by content > Games with hidden level selects
Games > Games by content > Games with revisional differences
Games > Games by content > Games with uncompiled source code
Games > Games by content > Games with unused areas
Games > Games by content > Games with unused graphics
Games > Games by content > Games with unused text
Games > Games by developer > Games developed by Electronic Arts > Games developed by EA Redwood Shores
Games > Games by platform > PlayStation 3 games
Games > Games by platform > Xbox 360 games
Games > Games by publisher > Games published by Electronic Arts
Games > Games by release date > Games released in 2007
Games > Games by series > Simpsons series