|
|
To do:
|
Spirits & Spells is a charming, if not that great, Crash Bandicoot-style 3D platformer set on Halloween night with Tim Burton-inspired aesthetics and designs, though it's probably mostly known for the insane prices non-European copies go for online.
This was the last game by Kalisto Entertainment, who declared bankruptcy before it was finished, with Wanadoo stepping in and hiring most of the dev team in order to complete it and as such aren't credited in the final product. (The Game Boy Advance counterpart was developed by a different studio entirely, and incidentally is generally considered to be superior.)
Unused Music#
290Musiq is a shorter variation of 300Musiq and 310Musiq (the latter is a duplicate), the background score for the cutscene where the Mad Scientist is defeated.
Curiously, it ends right before the Mad Scientist's skeleton is picked up and is revealed to still be alive, suggesting that it may have been used for an early or alternate ending where this last part isn't shown.
Music Oddity#
In-Game (48000Hz) |
Ripped (44100Hz) |
|---|---|
The game plays back its music at a 48000Hz sample rate, but the tracks were stored at 44100Hz, which results in a 8.845% speed and pitch increase. This affects every song in the game, from the level music to cutscene score.
The Japanese version partially fixed this, as the cutscene audio is stored with a 48000Hz sample rate. However, everything is still pitched up aside from the added Japanese voice acting.
Unused Text#
Inside the SENTENCE folder (or SentenceGC, in the GameCube version), all the game's text can be found in all languages, labeled from 0 to 5. The only exception are the Japanese level titles, which are left blank outside of the "Level XX" part, which is in English. The Japanese PS2 version only contains the Japanese text file and the European release has all translations except for Japanese, but all GameCube versions contain all localizations, even when they aren't being used.
Here is each sentence file name and their respective language:
File Name |
Language |
|---|---|
0.txt |
Japanese |
1.txt |
English |
2.txt |
French |
3.txt |
Spanish |
4.txt |
German |
5.txt |
Italian |
The Mad Programmer#
Present at the end of the level title list is the following:
|
Most Languages |
Spanish |
|---|---|
|
|
This appears to be a test level, with a goofy name likely put in as an internal joke. Every other language leaves the English title intact except, curiously, Spanish.
BIGFILE GENERATE#
The following text can be found below the level titles. Of course, it's not meant to be displayed in-game, so it was left untranslated in all other languages... except, curiously, Japanese.
|
Most Languages |
Japanese |
|---|---|
|
|
Skip and Replay#
These strings can be found below the Game Over text. It's unknown what their purpose was. The GameCube version has the same text, complete with PS2 button prompts.
They were replaced with dummy text in the Japanese version.
Language |
Skip String |
Replay String |
|---|---|---|
English |
Press #X to skip |
Press #O to replay |
French |
Appuyer sur #X pour écourter |
Appuyer sur #O pour rejouer |
Spanish |
Presionar #X para salir |
Presionar #O para repetir |
German |
Zum Überspringen #X drücken |
Zum Wiederholen #O drücken |
Italian |
Premere #X per avanzare |
Premere #O per ricominciare |
Ending Goblin Dialogue#
At the very end of the localization files, the Goblin's dialogue is stored, and the last few sentences go completely unused. Presumably, they would have been used in the ending after defeating the Mad Scientist, where the Goblin is completely absent. This dialogue was replaced with dummy text in the Japanese translation.
(Note that the odd spacing issues are part of the original text.)
Language |
Sentence 1 |
Sentence 2 |
Sentence 3 |
|---|---|---|---|
English |
I beat him! I beat him ! |
Well, you weren't bad either... |
OK, now it's time for you to go home... |
French |
Je l'ai eu ! Je l'ai eu ! |
Enfin, vous n'étiez pas mal non plus... |
Bon, maintenant il est temps de rentrer chez vous... |
Spanish |
¡ Le vencí ! ¡ Le vencí ! |
Bueno, tu tampoco eras tan malo... |
Bien, ha llegado la hora de que te marches a casa... |
German |
Ich habe ihn geschlagen! Ich habe ihn geschlagen ! |
Nun, Sie waren auch nicht schlecht ... |
Gut, jetzt ist es an der Zeit, dass Sie nach Hause gehen ... |
Italian |
Vittoria! Vittoria ! |
Beh, nemmeno l'avversario era niente male... |
OK, è ora di tornare a casa... |
YROMEM DRAC#
The text "YROMEM DRAC" (MEMORY CARD with the letters of each word backwards) can be found in the Japanese localization files only, used in place of text that was previously unused, such as the cut Goblin dialogue and the "Skip" and "Replay" text. Presumably it was used to prevent the localizers from translating unused text.
0.txt.bak#
Exclusively in the Japanese GameCube version is a backup of the Japanese localization file named 0.txt.bak. It is identical to the used one aside from only having one empty line at the end (like the PS2 version) instead of four.
TSC Scripts#
SCRIPT.TSC/Script_001#
Many gameplay related pre-calculated values are stored in a file in the root of the disk named SCRIPT.TSC on PS2 and Script_001 on GCN. The contents of both files are identical. These files also include several developer comments, most in French but with a handful in English, curiously enough.
Some things of note here include:
- All mentions of Alicia refer to her as "Anne", which appears to have been her original name. The Japanese version does call her Anne, however.
- Values for vehicle physics, such as acceleration and jump height. The final game does not feature any vehicles, whether they be in the regular levels or dedicated ones.
- Values for swimming movement. In the final game, deep bodies of water kill Alicia and Greg, and there are no dedicated swimming levels.
- Values for a "cooperative jump". Judging from the comment attached to these values, they seem to be related to the yellow slug-like monster that serves as a trampoline in the final game, but the names might imply that at some point there were cooperative moves where Alicia and Greg interact with each other. In the final game, the two kids never interact with each other outside of the opening and ending storybook scenes, as the game's lore states that only one human can be present in the World of the Dead at once.
// Ne pas toucher
#define JoystickAccelerationFactor() 1.f
#define VibrationSpeedFactor() 1.f
#define VibrationPowerFactor() 1.f
#define DefaultGRavity() 10.f
// Nombre minimal d'étincelles de magie nécessaire
#define MinMagieSwitch() 30.f
#define FreeSwitchTime() 60.f
// durée d'activation du coup spécial en seconde
#define ActivateSpecialTime() 2.f
#define SplineCamSmooth() 1.1f
#define SplineCamDist() 5.f
// Rolling Demo
#define RollingDemoNb() 1
#define RollingDemoTime() 30.f
////MOVES
// Vitesse de rotation : Influence à tester
#define TurnsPerSecondGround() 4.f
#define TurnsPerSecondAir() 4.f
// Vehicules -> non (encore ?) utilisés
#define TurnsPerSecondVehiculeGround() 0.65f
#define TurnsPerSecondVehiculeAir() 0.65f
// Vitesses maximales de marche, course et chute
#define MaxWalkingSpeed() 1.75f
#define MaxRunningSpeed() 3.5f
#define MaxFallingSpeed() 10.f
#define MaxSpecialFallingSpeed() 30.f
// small jump heights, length, speed.
// Note on gravity and jump : the gravity apply during the jump is
// g= (8*speed*speed*height)/(length*length)
// To get a "normal" speed take speed= square_root(length*length*g/(8*height))
#define SmallJumpHeight() 2.2f
#define SmallJumpLength() 4.5f
// horizontal speed
#define SmallJumpSpeed() 4.24f
// long jump heights, length, speed
#define LongJumpHeight() 2.2f
#define LongJumpLength() 4.5f
#define LongJumpSpeed() 4.24f
#define SpeCialJumpHeight() 3.f
#define SpeCialJumpLength() 6.f
#define SpeCialJumpSpeed() 3.9f
// Marche dans la boue
#define HardWalkSpeed() 1.1f
// Deplacement en Shrink
#define ShrinkWalkSpeed() 1.2f
// Glissade (toboggan)
#define MaxSLidingSpeed() 10.f
// accélération sur le toboggan (m/s/s) (fonction de l'angle de la pente, bien entendu)
#define SLidingGRavity() 15.f
// facteur de ralentissement (m/s/s)
#define SLidingFrictionFactor() 0.1f
// Lorsqu'on est plus sur une zone de glissade, on ne glisse plus dans deux cas :
// la vitesse est infèrieure à StoppingSpeed (m/s)
#define SLidingStoppingSpeed() 3.f
// on est plus sur une zone de glissade depuis SLidingDelay secondes
#define SLidingDelay() 0.2f
// Définie la force du control (m/s/s)
#define SLidingJoystickAccelerationFactor() 40.f
// Définie l'angle max du "spin" que le joystick applique au joueur en 1 seconde lorsque le joueur
// est à la vitesse MaxSLidingSpeed
#define SLidingJoystickAngularForceFactor() 90.f
// Pour les pentes trop importantes (à voir)
#define SLOPEGravity() 20.f
#define MaxSLOPESpeed() 8.f
// Skiding (patinage)
#define MaxSKidingSpeed() 6.f
#define SKidingFrictionFactor() 0.5f
// force du control au joystick (accélération en m/s/s)
#define SKidingJoystickAccelerationFactor() 3.f
// Swimming
#define MaxSWimmingSpeed() 2.25f
#define SWimmingVerticalSpeed() 1.f
#define SWimJumpHeight() 1.6f
#define SWimJumpLength() 1.f
#define SWimJumpSpeed() 1.f
// Ejector
#define EjectorSpeed() 14.f
// Protection
#define ProtectionEndDelay() 3.f
// Bumper
#define CooperativeJumpHeight() 4.18f
#define CooperativeJumpLength() 7.75f
#define CooperativeJumpSpeed() 4.24f
// The angle around the vertical, bumping for the bump animal
#define AnimoBumperConeAngle() 120.f
// Anticycle time
#define AnticycleTiming() 30.f
// Camera offset (décalage en mètres du point visé par rapport au perso. Z est devant)
#define CameraTargetOffsetX() 0.f
#define CameraTargetOffsetY() 1.f
#define CameraTargetOffsetZ() 0.f
// Forces d'anims
#define ForceFactor() 6.f
#define AnimationForceFactor() 1.f
#define ForceDecelerationFactor() 6.f
#define ExtForceDecelerationFactor() 6.f
// Vehicle
//#define VehiculeJoystickTrajectoryAccelerationFactor() 1.f
//#define VehiculeForwardAccelerationFactor() 1.f
//#define VehiculeMaxTransversalSpeed() 4.f
//#define VehiculeStickySpeed() 4.f
//#define VehiculeSlowRunningSpeed() 5.5f
#define VehiculeRunningSpeed() 7.f
//#define VehiculeChargingSpeed() 8.5f
//#define VehiculeJumpHeight() 3.1f
//#define VehiculeJumpLength() 9.1f
//#define VehiculeJumpSpeed() 7.f
//#define VehiculeSlowJumpHeight() 1.6f
//#define VehiculeSlowJumpLength() 4.5f
//#define VehiculeSlowJumpSpeed() 4.f
// Ennemy
// ces valeurs sont des valeurs par défaut.
// Elles seront utilisées s'il n'y a pas de valeurs redéfinies pour un monstre
#define HeadHitMonsterConeAngle() 45.f
#define NotLodHeadHitMonsterConeAngle() 45.f
// Déambulation
#define ENemyWanderLength() 3.0f
//#define ENemyWanderDelay() 3.0f
// Distance de frappe
#define ENemyDefaultCriticalDistance() 2.0f
// Délais
#define ENemyDefaultHighAggressivity() 1.0f
#define ENemyDefaultLowAggressivity() 5.0f
// Vitesse de déplacement en poursuite
#define ENemyDefaultNormalSpeed() 1.0f
// Vitesse de déplacement en charge
#define ENemyDefaultAttackSpeed() 1.0f
// Vitesse des missiles
#define ENemyDefaultMissileSpeed() 1.0f
// longueur de la charge
#define ENemyDefaultChargeLength() 1.0f
// durée de l'attente après une frappe réussie
#define ENemyDefaultSuccessDelay() 1.0f
// A voir...
#define ENemyDefaultHeight() 2.0f
// SOrciere
// On arrete de tirer à partir de
#define SOrciereCriticalDistance() 25.0f
// Durée entre les frappes
#define SOrciereAggressivity() 1.0f
// Vitesse du projectile
#define SOrciereMissileSpeed() 5.0f
// Fantome
#define FantomeNormalSpeed() 3.0f
#define FantomeWanderLength() 0.0f
#define FantomePursuitDuration() 4.0f
#define FantomeStopDuration() 4.0f
// arbre a griffe
#define ArbreAGriffeAttackDelay() 2.5f
// Diablotin
// Délai de réveil quand c'est Greg qui l'active
#define DiablotinWakeUpDelay() 3.0f
// Creature
#define CreaTureNormalSpeed() 1.5f
#define CreaTureWanderLength() 0.0f
#define CreaTurePursuitDuration() 5.0f
#define CreaTureStopDuration() 0.5f
#define CreaTureNbLife() 3.0f
// Creature Marais
#define CreaTureMaraisNormalSpeed() 3.0f
#define CreaTureMaraisWanderLength() 0.0f
#define CreaTureMaraisPursuitDuration() 4.0f
#define CreaTureMaraisStopDuration() 4.0f
#define CreaTureMaraisNbLife() 4.0f
// Robot
// Distance au dela de laquelle le robot tir au lieu d'essayer de poursuivre
#define RobotFireDistance() 6.f
// vitesses de déplacement en m/s
#define RobotMissileSpeed() 8.f
// temps d'attente entre les tirs en secondes
#define RobotDurationBetweenFire() 3.f
// vitesse en m/s
#define RobotPursuitSpeed() 3.f
// vitesse lors du saut d'ataque en m/s
#define RobotAttackSpeed() 4.f
// distance pour que le robot saut sur le joueur
#define RobotAttackDistance() 2.f
// Diable
#define DiableWalkSpeed() 5.f
#define DiableAttackDistance() 1.f
#define DiableDummyPause() 1.5f
#define DiableMissileVelocity() 7.f
// Squelette 3
#define Squelette3WalkSpeed() 3.0f
// Camera Hallo
#define DistanceCameraPerso() 5.0f
#define DistanceCameraLookAtY() 2.0f
#define DistanceCameraLookAtZ() 5.0f
// BOSS
// Vampire
// First Stage
#define VampireWalkVelocity() 12.f
// Temps d'arrets entre les aller et retour
#define VampireDummyPause() 0.1f
#define VampireMissileSpeed() 12.f
#define VampireNbFirstStepHit() 3
#define VampireFirstStageFirePause() 3.f
#define VampireFirstStageHitPause() 1.f
// Second stage
#define VampireNbSecondStepHit() 3
#define VampireFlyVelocity() 6.f
// Lift off velocity depend of the final dummy pos
#define VampireFirePause() 2.f
// Croquemitaine
#define CqmLife1() 3
#define CqmLife2() 4
#define CqmLife3() 6
#define CqmHeadAttackWait() 2.f
#define CqmSuperAttackWait() 2.f
#define CqmMoveSpeed() 3.5f
#define CqmNormalAttackDistance() 2.0f
#define CqmNormalAttackSpeed() 0.3f
#define CqmNormalAttackWait() 2.f
#define CqmNormalAttackHitWait() 0.1f
#define CqmNormalAttackUnvulnerability() 4.f
// attacks params
#define GregAttack1PiemaXHeight() 1.2f
#define GregAttack1PiemiNHeight() 0.f
#define GregAttack1PieAngle() 210.f
#define GregAttack1Radius() 1.58f
#define GregAttack2PiemaXHeight() 1.2f
#define GregAttack2PiemiNHeight() 0.f
#define GregAttack2PieAngle() 225.f
#define GregAttack2Radius() 1.72f
#define GregAttack3PiemaXHeight() 1.2f
#define GregAttack3PiemiNHeight() 0.f
#define GregAttack3PieAngle() 40.f
#define GregAttack3Radius() 2.42f
#define AnneAutoLockPiemaXHeight() 1.5f
#define AnneAutoLockPiemiNHeight() 0.1f
#define AnneAutoLockPieAngle() 120.f
#define AnneAutoLockRadius() 3.5f
#define AnneAttackSPiemaXHeight() 1.30f
#define AnneAttackSPiemiNHeight() 0.4f
#define AnneAttackSPieAngle() 360.f
#define AnneAttackSRadius() 2.5f
#define MauvaiseFeeAfterAttackDelay() 2.f
#define MauvaiseFeeAttackDelay() 1.f
#define MauvaiseFeeWakeUpDelay() 2.f
#define MauvaiseFeeNbLife() 5.f
#define DragonMechaNbLife() 3.f
"Vibration" used in the first elements defined means "Rumble" in English. The comments in French could be translated like this:
// Do not touch
#define JoystickAccelerationFactor() 1.f
#define VibrationSpeedFactor() 1.f
#define VibrationPowerFactor() 1.f
#define DefaultGRavity() 10.f
// Minimal amount of magic sparkles needed
#define MinMagieSwitch() 30.f
#define FreeSwitchTime() 60.f
// Activation time of the special hit in second
#define ActivateSpecialTime() 2.f
#define SplineCamSmooth() 1.1f
#define SplineCamDist() 5.f
// Rolling Demo
#define RollingDemoNb() 1
#define RollingDemoTime() 30.f
////MOVES
// Rotation speed: Influence to test
#define TurnsPerSecondGround() 4.f
#define TurnsPerSecondAir() 4.f
// Vehicles -> not (yet?) used
#define TurnsPerSecondVehiculeGround() 0.65f
#define TurnsPerSecondVehiculeAir() 0.65f
// Max walking, running and falling speed
#define MaxWalkingSpeed() 1.75f
#define MaxRunningSpeed() 3.5f
#define MaxFallingSpeed() 10.f
#define MaxSpecialFallingSpeed() 30.f
// small jump heights, length, speed.
// Note on gravity and jump : the gravity apply during the jump is
// g= (8*speed*speed*height)/(length*length)
// To get a "normal" speed take speed= square_root(length*length*g/(8*height))
#define SmallJumpHeight() 2.2f
#define SmallJumpLength() 4.5f
// horizontal speed
#define SmallJumpSpeed() 4.24f
// long jump heights, length, speed
#define LongJumpHeight() 2.2f
#define LongJumpLength() 4.5f
#define LongJumpSpeed() 4.24f
#define SpeCialJumpHeight() 3.f
#define SpeCialJumpLength() 6.f
#define SpeCialJumpSpeed() 3.9f
// Walk in mud
#define HardWalkSpeed() 1.1f
// Move while Shrink
#define ShrinkWalkSpeed() 1.2f
// Sliding (slide)
#define MaxSLidingSpeed() 10.f
// acceleration on the slide (m/s/s) (depends on the slope angle, naturally)
#define SLidingGRavity() 15.f
// slowdown factor (m/s/s)
#define SLidingFrictionFactor() 0.1f
// When we are no longer on a slippery area, we no longer slide in two cases :
// the speed is lower than StoppingSpeed (m/s)
#define SLidingStoppingSpeed() 3.f
// we are no longer in a slippery area since SLidingDelay secondes
#define SLidingDelay() 0.2f
// Defines the control strength (m/s/s)
#define SLidingJoystickAccelerationFactor() 40.f
// Defines the max angle of "spin" that the joystick applies to the player in 1 seconde while the player
// is at MaxSLidingSpeed speed
#define SLidingJoystickAngularForceFactor() 90.f
// For slopes too significant (to see next)
#define SLOPEGravity() 20.f
#define MaxSLOPESpeed() 8.f
// Skidding (ice-skating)
#define MaxSKidingSpeed() 6.f
#define SKidingFrictionFactor() 0.5f
// control strength on joystick (acceleration in m/s/s)
#define SKidingJoystickAccelerationFactor() 3.f
// Swimming
#define MaxSWimmingSpeed() 2.25f
#define SWimmingVerticalSpeed() 1.f
#define SWimJumpHeight() 1.6f
#define SWimJumpLength() 1.f
#define SWimJumpSpeed() 1.f
// Ejector
#define EjectorSpeed() 14.f
// Protection
#define ProtectionEndDelay() 3.f
// Bumper
#define CooperativeJumpHeight() 4.18f
#define CooperativeJumpLength() 7.75f
#define CooperativeJumpSpeed() 4.24f
// The angle around the vertical, bumping for the bump animal
#define AnimoBumperConeAngle() 120.f
// Anticycle time
#define AnticycleTiming() 30.f
// Camera offset (difference in meters from the aimed point compared to the chara. Z is front)
#define CameraTargetOffsetX() 0.f
#define CameraTargetOffsetY() 1.f
#define CameraTargetOffsetZ() 0.f
// Anims strength
#define ForceFactor() 6.f
#define AnimationForceFactor() 1.f
#define ForceDecelerationFactor() 6.f
#define ExtForceDecelerationFactor() 6.f
// Vehicle
//#define VehiculeJoystickTrajectoryAccelerationFactor() 1.f
//#define VehiculeForwardAccelerationFactor() 1.f
//#define VehiculeMaxTransversalSpeed() 4.f
//#define VehiculeStickySpeed() 4.f
//#define VehiculeSlowRunningSpeed() 5.5f
#define VehiculeRunningSpeed() 7.f
//#define VehiculeChargingSpeed() 8.5f
//#define VehiculeJumpHeight() 3.1f
//#define VehiculeJumpLength() 9.1f
//#define VehiculeJumpSpeed() 7.f
//#define VehiculeSlowJumpHeight() 1.6f
//#define VehiculeSlowJumpLength() 4.5f
//#define VehiculeSlowJumpSpeed() 4.f
// Ennemy
// those values are default values.
// They will be used if there no redefined values for a monster
#define HeadHitMonsterConeAngle() 45.f
#define NotLodHeadHitMonsterConeAngle() 45.f
// Wander
#define ENemyWanderLength() 3.0f
//#define ENemyWanderDelay() 3.0f
// Hit distance
#define ENemyDefaultCriticalDistance() 2.0f
// Period
#define ENemyDefaultHighAggressivity() 1.0f
#define ENemyDefaultLowAggressivity() 5.0f
// Chase move speed
#define ENemyDefaultNormalSpeed() 1.0f
// Charge move speed
#define ENemyDefaultAttackSpeed() 1.0f
// Missiles speed
#define ENemyDefaultMissileSpeed() 1.0f
// Charge length
#define ENemyDefaultChargeLength() 1.0f
// Wait period after a succesful hit
#define ENemyDefaultSuccessDelay() 1.0f
// To see next...
#define ENemyDefaultHeight() 2.0f
// WItch
// We stop drawing from
#define SOrciereCriticalDistance() 25.0f
// Period between hits
#define SOrciereAggressivity() 1.0f
// Projectile speed
#define SOrciereMissileSpeed() 5.0f
// Ghost
#define FantomeNormalSpeed() 3.0f
#define FantomeWanderLength() 0.0f
#define FantomePursuitDuration() 4.0f
#define FantomeStopDuration() 4.0f
// claw tree
#define ArbreAGriffeAttackDelay() 2.5f
// Imp
// Wake up wait period when Greg enables it
#define DiablotinWakeUpDelay() 3.0f
// Creature
#define CreaTureNormalSpeed() 1.5f
#define CreaTureWanderLength() 0.0f
#define CreaTurePursuitDuration() 5.0f
#define CreaTureStopDuration() 0.5f
#define CreaTureNbLife() 3.0f
// Creature Swamp
#define CreaTureMaraisNormalSpeed() 3.0f
#define CreaTureMaraisWanderLength() 0.0f
#define CreaTureMaraisPursuitDuration() 4.0f
#define CreaTureMaraisStopDuration() 4.0f
#define CreaTureMaraisNbLife() 4.0f
// Robot
// Distance from where the robot shoots instead of trying to chase
#define RobotFireDistance() 6.f
// move speeds in m/s
#define RobotMissileSpeed() 8.f
// waiting time between shoots in secondes
#define RobotDurationBetweenFire() 3.f
// speed in m/s
#define RobotPursuitSpeed() 3.f
// speed during attack jump in m/s
#define RobotAttackSpeed() 4.f
// distance for the robot to jump on the player
#define RobotAttackDistance() 2.f
// Devil
#define DiableWalkSpeed() 5.f
#define DiableAttackDistance() 1.f
#define DiableDummyPause() 1.5f
#define DiableMissileVelocity() 7.f
// Skeleton 3
#define Squelette3WalkSpeed() 3.0f
// Camera Hallo
#define DistanceCameraPerso() 5.0f
#define DistanceCameraLookAtY() 2.0f
#define DistanceCameraLookAtZ() 5.0f
// BOSS
// Vampire
// First Stage
#define VampireWalkVelocity() 12.f
// Wait time between round trips
#define VampireDummyPause() 0.1f
#define VampireMissileSpeed() 12.f
#define VampireNbFirstStepHit() 3
#define VampireFirstStageFirePause() 3.f
#define VampireFirstStageHitPause() 1.f
// Second stage
#define VampireNbSecondStepHit() 3
#define VampireFlyVelocity() 6.f
// Lift off velocity depend of the final dummy pos
#define VampireFirePause() 2.f
// Bogeyman
#define CqmLife1() 3
#define CqmLife2() 4
#define CqmLife3() 6
#define CqmHeadAttackWait() 2.f
#define CqmSuperAttackWait() 2.f
#define CqmMoveSpeed() 3.5f
#define CqmNormalAttackDistance() 2.0f
#define CqmNormalAttackSpeed() 0.3f
#define CqmNormalAttackWait() 2.f
#define CqmNormalAttackHitWait() 0.1f
#define CqmNormalAttackUnvulnerability() 4.f
// attacks params
#define GregAttack1PiemaXHeight() 1.2f
#define GregAttack1PiemiNHeight() 0.f
#define GregAttack1PieAngle() 210.f
#define GregAttack1Radius() 1.58f
#define GregAttack2PiemaXHeight() 1.2f
#define GregAttack2PiemiNHeight() 0.f
#define GregAttack2PieAngle() 225.f
#define GregAttack2Radius() 1.72f
#define GregAttack3PiemaXHeight() 1.2f
#define GregAttack3PiemiNHeight() 0.f
#define GregAttack3PieAngle() 40.f
#define GregAttack3Radius() 2.42f
#define AnneAutoLockPiemaXHeight() 1.5f
#define AnneAutoLockPiemiNHeight() 0.1f
#define AnneAutoLockPieAngle() 120.f
#define AnneAutoLockRadius() 3.5f
#define AnneAttackSPiemaXHeight() 1.30f
#define AnneAttackSPiemiNHeight() 0.4f
#define AnneAttackSPieAngle() 360.f
#define AnneAttackSRadius() 2.5f
#define MauvaiseFeeAfterAttackDelay() 2.f
#define MauvaiseFeeAttackDelay() 1.f
#define MauvaiseFeeWakeUpDelay() 2.f
#define MauvaiseFeeNbLife() 5.f
#define DragonMechaNbLife() 3.f
VIBHALLO.TSC#
This file is located in the root of the PlayStation 2 version's disc and contains values that appear to be related to the controller rumble feature.
// Test paddle
SetHalloVibration TEST 0:L1 800:L0 0:H0 199:H0 200:H240 499:H240 600:H0
// Misc
SetHalloVibration STOP P:128 0:L0 0:H0
SetHalloVibration MORT P:64 0:L1 800:L0 0:H150 800:H150
SetHalloVibration FOCUS P:64 0:L0 0:H100 300:H100 1000:H180 2000:H180 4000:H0
SetHalloVibration FEE P:64 0:L0 0:H200 800:H200 3000:H0
SetHalloVibration CAMERA_SHAKE P:64 0:L1 0:H200 300:L0 650:H200 700:H0
// RTC/AnimPawap
SetHalloVibration S1 0:L0 0:H180 500:H180
SetHalloVibration S2 0:L0 0:H180 800:H180
SetHalloVibration S3 0:L0 0:H180 1000:H180
SetHalloVibration S4 0:L0 0:H180 1500:H180
SetHalloVibration M1 0:L1 500:L0 0:H150 500:H150
SetHalloVibration M2 0:L1 800:L0 0:H150 800:H150
SetHalloVibration M3 0:L1 1000:L0 0:H150 1000:H150
SetHalloVibration M4 0:L1 1500:L0 0:H150 1500:H150
SetHalloVibration L1 0:L1 500:L0 0:H255 500:H255
SetHalloVibration L2 0:L1 800:L0 0:H255 800:H255
SetHalloVibration L3 0:L1 1000:L0 0:H255 1000:H255
SetHalloVibration L4 0:L1 1500:L0 0:H255 1500:H255
// Volumes (loop)
SetHalloVibration VOL0 P:4 L:1 0:L0 0:H100 1000:H100
SetHalloVibration VOL1 P:4 L:1 0:L0 0:H150 1000:H150
SetHalloVibration VOL2 P:6 L:1 0:L0 0:H200 1000:H200
SetHalloVibration VOL3 P:6 L:1 0:L0 0:H255 1000:H255
SetHalloVibration VOL4 P:8 L:1 0:L1 0:H150 1000:H150
SetHalloVibration VOL5 P:8 L:1 0:L1 0:H255 1000:H255
SetHalloVibration VOL6 P:4 L:1 0:L0 0:H180 249:H180 250:H0 349:H0 350:H150 499:H150 500:H0 1000:H0
Engine Signature#
Copyright text for TotemTech Data, the game's engine, can be found at the beginning of every DPS file. It can also be found at 0x20BE60 in SLES_512.49.
TotemTech Data v1.75 (c) 1999-2002 Kalisto Entertainment - All right reserved
Platform Differences#
Despite being (almost) exactly released six months later, the GameCube port received very few alterations from the PlayStation 2 original aside from the expected graphical downgrades seen in many PS2 to GCN ports.
Title Screen#
Europe (GCN) |
US (GCN) |
Japan (GCN) |
|---|---|---|
![]() |
![]() |
![]() |
Europe (PS2) |
Japan (PS2) |
|---|---|
![]() |
![]() |
- The GameCube title screens have slightly brighter colors than PlayStation 2.
- The copyright text is positioned slightly lower in the European PS2 release compared to all other versions.
- The bottom of the image is slightly less cropped in the GameCube port.
Graphics#
PlayStation 2 |
GameCube |
|---|---|
![]() |
![]() |
![]() |
![]() |
- The GameCube port has much weaker lighting than the PlayStation 2 original, with less contrast between dark and bright areas. Some lighting effects, such as the lanterns at the entrance of the first level, were completely removed. Others, like the fireflies, kept their effects, but are much less noticeable. The different lighting causes certain areas to be brighter on GameCube, and others darker.
- The camera is slightly closer to the player in the GameCube version.
PlayStation 2 |
GameCube |
|---|---|
- The PS2 version has a post-processing blur effect when respawning after dying that was removed from the GCN port, where the screen simply cuts in a very abrupt way.
Regional Differences#
Banner#
Europe |
North America |
Japan |
|---|---|---|
Opening Logos#
Europe |
US |
Japan |
|---|---|---|
- The American and Japanese versions add their respective publishers' logo before the Wanadoo logo. Europe didn't get one, but a language select comes after, not before.
Title Screen#
Europe |
US |
Japan |
|---|---|---|
![]() |
![]() |
![]() |
- The title screen in the American and European GameCube versions adds a "Licensed by Nintendo" text. The Japanese version lacks this text, making the title screen identical between both platforms.
Loading Screens#
All the loading screen images were changed for the Japanese version and were taken from a later build of the game, unlike the American and European loading screens, which show an early build with scrapped content, such as the sparks in place of the crystals. Generally they are similar, showing the same areas but with different angles, camera positions and/or lighting, plus often lacking the motion blur most of the European loading screens have, but there are some that are completely different.
Europe/US |
Japan |
Comments |
|---|---|---|
![]() |
![]() |
Lacks the motion blur effect and the camera is at a slightly lower position. |
![]() |
![]() |
Has less contrast, removes the motion blur and is at a different angle. |
![]() |
![]() |
Shows a shot of the opening doorway, rather than a top-down shot of the cliff area later into the level. |
![]() |
![]() |
Uses a wide shot of the final room, instead of a close up shot of the soul container in that same room. |
![]() |
![]() |
Uses a front facing still of the church, rather than the isometric one in the western versions. The lighting is also different, being closer to in-game in the Japanese version. |
![]() |
![]() |
Uses an image of the final room with the soul container, rather than the entrance to the dark ruins area. |
![]() |
![]() |
Shows a wide shot of one of the bridge towers, instead of close shot of the bridge itself. |
![]() |
![]() |
Has a picture of the fat crows section of the level, replacing the sky shot of the western version. |
![]() |
![]() |
Shows the skeleton coffins section of the level, rather than the broken bridge, located slightly early into the level. |
![]() |
![]() |
Uses a picture of the bridge area, while in the westerns version it show the starting toxic pools area. |
![]() |
![]() |
Shows the interior of entrance to the mansion, while the western versions show the exterior. |
![]() |
![]() |
Has a shot of the final bridge area before the mini-boss in Japan, and a picture of the balcony section in the West. |
![]() |
![]() |
Shows an image of the frozen lake, while the western version shows the hill right before the end of the level. |
![]() |
![]() |
Shows the same location in both versions, but at different angles, with the Japanese version being farther away and to the right. |
![]() |
![]() |
Uses the same location, only with a much, much farther away camera in the Japanese version. |
![]() |
![]() |
Shows a close front-facing shot of the arena where you fight a vampire, while the western versions use an isometric shot of the fat crows section. |
![]() |
![]() |
Has a front shot of the cellar, while the western versions use a farther away isometric shot. |
![]() |
![]() |
Uses a picture of the library area, instead of the spider web section. |
![]() |
![]() |
Uses an image from the actual level, instead of the next one, like in the western versions. |
![]() |
![]() |
Shows the same starting room from the previous loading screen in the western versions (albeit at a different angle and position), instead of the titular elevator. |
![]() |
![]() |
Has the starting area of the next level rather than the actual level, unlike the western versions. |
![]() |
![]() |
Shows the same room as the previous loading screen and the western version, but at a more front-facing angle rather than isometric. |
![]() |
![]() |
Uses the same room, but with the camera positioned to the left and being slightly higher. |
![]() |
![]() |
Shows the same area, but with the camera at a lower, front-facing angle. |
![]() |
![]() |
Has the same room, but in a lower angle and closer to the titular robot, who is also in a different frame of its animation. |
![]() |
![]() |
Shows the giant robot extending its neck to attack, and the camera is at a lower angle. |
Cutscenes and Voices#
- Alicia was renamed to Anne in the Japanese version, which, as shown above, appears to have been her original name during development.
- The storybook cutscenes lack subtitles in the Japanese version.
US/Europe |
Japan |
|---|---|
- The Japanese release replaces the Goblin's gibberish voice acting with actual Japanese voice acting. The voice lines and sound effects for the Goblin cutscenes are also stored differently than the other versions, being baked into the music. As mentioned above, the new cutscene audio is stored at 48000hz, meaning it plays correctly in-game, although the music itself is still higher pitched, like the original. The cutscene music was also made louder in the Japanese version.
- Some of Alicia and Greg's voice clips, like their attack yells, were changed to new, higher pitched and rather unfitting ones for the Japanese version.
|
|
To do: |
Gameplay#
Europe |
Japan |
|---|---|
![]() |
![]() |
- The European PS2 version runs at a resolution of 681×511. The Japanese version lowered it slightly to the more standard 640×480.
- In the European version, you start the first level as Greg, but in the Japanese and American versions you start as Alicia instead. As a result, the first cutscene plays out differently, with the kids' positions being switched. This change also introduces some problems:
- During the second cutscene, where the Goblin explains how the magic crystals work, he still transforms into Alicia, while the player is already Alicia. Additionally, this change was maintained in the American release but without updating the script, so the Goblin still says "You can make your witch friend appear instead of you.", despite talking to the witch friend in question.
- You can no longer collect both extra lives at the beginning of Level 1 without backtracking due to the lack of swap points, as the first one requires Greg to pass through fire and the second Alicia to freeze water.
Europe |
US/Japan |
|---|---|
![]() |
![]() |
![]() |
![]() |
- The first two and last falling rocks in Level 1 were moved to be closer to the center in the Japanese and American versions.

































































