Subversion Repositories Games.Prince of Persia

Rev

Rev 1 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2. SDLPoP, a port/conversion of the DOS game Prince of Persia.
  3. Copyright (C) 2013-2018  Dávid Nagy
  4.  
  5. This program is free software: you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation, either version 3 of the License, or
  8. (at your option) any later version.
  9.  
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17.  
  18. The authors of this program may be contacted at http://forum.princed.org
  19. */
  20.  
  21. #ifndef CONFIG_H
  22. #define CONFIG_H
  23.  
  24. // WINDOWS overrides
  25. #ifdef _MSC_VER
  26. #define strncasecmp _strnicmp
  27. #define strcasecmp _stricmp
  28. #endif
  29.  
  30. #define POP_MAX_PATH 256
  31. #define POP_MAX_OPTIONS_SIZE 256
  32.  
  33. #define SDLPOP_VERSION "1.17"
  34. #define WINDOW_TITLE "Prince of Persia"
  35.  
  36. // Enable or disable fading.
  37. // Fading used to be very buggy, but now it works correctly.
  38. #define USE_FADE
  39.  
  40. // Enable or disable the potions level. (copy protection)
  41. #define USE_COPYPROT
  42.  
  43. // Enable or disable flashing.
  44. #define USE_FLASH
  45.  
  46. //#define USE_ALPHA
  47.  
  48. // Enable or disable texts.
  49. #define USE_TEXT
  50.  
  51. // Use timers in a way that is more similar to the original game.
  52. // Was needed for the correct fading of cutscenes.
  53. // Disabled, because it introduces some timing bugs.
  54. //#define USE_COMPAT_TIMER
  55.  
  56. // Use mixer and enable music.
  57. #define USE_MIXER
  58. #define MIX_VOLUME 1//MIX_MAX_VOLUME //1
  59.  
  60. // Enable quicksave/load feature.
  61. #define USE_QUICKSAVE
  62.  
  63. // Try to let time keep running out when quickloading. (similar to Ctrl+A)
  64. // Technically, the 'remaining time' is still restored, but with a penalty for elapsed time (up to 1 minute).
  65. // The one minute penalty will also be applied when quickloading from e.g. the title screen.
  66. #define USE_QUICKLOAD_PENALTY
  67.  
  68. // Enable recording/replay feature.
  69. #define USE_REPLAY
  70.  
  71. // Adds a way to crouch immediately after climbing up: press down and forward simultaneously.
  72. // In the original game, this could not be done (pressing down always causes the kid to climb down).
  73. #define ALLOW_CROUCH_AFTER_CLIMBING
  74.  
  75. // Time runs out while the level ending music plays; however, the music can be skipped by disabling sound.
  76. // This option stops time while the ending music is playing (so there is no need to disable sound).
  77. #define FREEZE_TIME_DURING_END_MUSIC
  78.  
  79. // Enable fake/invisible tiles feature. Tiles may look like one tiletype but behave like another.
  80. // Currently works for empty tiles, walls, floors.
  81. // Use tile modifier 4 to display a fake floor, 5 to display a fake wall, 6 to display an empty tile
  82. // For now, for fake dungeon walls, the wall neighbors must be specified for now using tile modifiers:
  83. //      5 or 50 = no neighbors; 51 = wall to the right; 52 = wall to the left; 53 = walls on both sides
  84. // For fake palace walls:
  85. //      5 = wall including blue line; 50 = no blue
  86. #define USE_FAKE_TILES
  87.  
  88. // Allow guard hitpoints not resetting to their default (maximum) value when re-entering the room
  89. #define REMEMBER_GUARD_HP
  90.  
  91. // Enable completely disabling the time limit. To use this feature, set the starting time to -1.
  92. // This also disables the in-game messages that report how much time is left every minute.
  93. // The elasped time is still kept track of, so that the shortest times will appear in the Hall of Fame.
  94. #define ALLOW_INFINITE_TIME
  95.  
  96.  
  97. // Bugfixes:
  98.  
  99. // The mentioned tricks can be found here: http://www.popot.org/documentation.php?doc=Tricks
  100.  
  101. // If a room is linked to itself on the left, the closing sounds of the gates in that room can't be heard.
  102. #define FIX_GATE_SOUNDS
  103.  
  104. // An open gate or chomper may enable the Kid to go through walls. (Trick 7, 37, 62)
  105. #define FIX_TWO_COLL_BUG
  106.  
  107. // If a room is linked to itself at the bottom, and the Kid's column has no floors, the game hangs.
  108. #define FIX_INFINITE_DOWN_BUG
  109.  
  110. // When a gate is under another gate, the top of the bottom gate is not visible.
  111. // But this fix causes a drawing bug when a gate opens.
  112. #define FIX_GATE_DRAWING_BUG
  113.  
  114. // When climbing up to a floor with a big pillar top behind, turned right, Kid sees through floor.
  115. #define FIX_BIGPILLAR_CLIMB
  116.  
  117. // When climbing up two floors, turning around and jumping upward, the kid falls down.
  118. // This fix makes the workaround of Trick 25 unnecessary.
  119. #define FIX_JUMP_DISTANCE_AT_EDGE
  120.  
  121. // When climbing to a higher floor, the game unnecessarily checks how far away the edge below is;
  122. // This contributes to sometimes "teleporting" considerable distances when climbing from firm ground
  123. #define FIX_EDGE_DISTANCE_CHECK_WHEN_CLIMBING
  124.  
  125. // Falling from a great height directly on top of guards does not hurt.
  126. #define FIX_PAINLESS_FALL_ON_GUARD
  127.  
  128. // Bumping against a wall may cause a loose floor below to drop, even though it has not been touched. (Trick 18, 34)
  129. #define FIX_WALL_BUMP_TRIGGERS_TILE_BELOW
  130.  
  131. // When pressing a loose tile, you can temporarily stand on thin air by standing up from crouching.
  132. #define FIX_STAND_ON_THIN_AIR
  133.  
  134. // Buttons directly to the right of gates can be pressed even though the gate is closed (Trick 1)
  135. #define FIX_PRESS_THROUGH_CLOSED_GATES
  136.  
  137. // By jumping and bumping into a wall, you can sometimes grab a ledge two stories down (which should not be possible).
  138. #define FIX_GRAB_FALLING_SPEED
  139.  
  140. // When chomped, skeletons cause the chomper to become bloody even though skeletons do not have blood.
  141. #define FIX_SKELETON_CHOMPER_BLOOD
  142.  
  143. // Controls do not get released properly when drinking a potion, sometimes causing unintended movements.
  144. #define FIX_MOVE_AFTER_DRINK
  145.  
  146. // A drawing bug occurs when a loose tile is placed to the left of a potion (or sword).
  147. #define FIX_LOOSE_LEFT_OF_POTION
  148.  
  149. // Guards may "follow" the kid to the room on the left or right, even though there is a closed gate in between.
  150. #define FIX_GUARD_FOLLOWING_THROUGH_CLOSED_GATES
  151.  
  152. // When landing on the edge of a spikes tile, it is considered safe. (Trick 65)
  153. #define FIX_SAFE_LANDING_ON_SPIKES
  154.  
  155. // The kid may glide through walls after turning around while running (especially when weightless).
  156. #define FIX_GLIDE_THROUGH_WALL
  157.  
  158. // The kid can drop down through a closed gate, when there is a tapestry (doortop) above the gate.
  159. #define FIX_DROP_THROUGH_TAPESTRY
  160.  
  161. // When dropping down and landing right in front of a wall, the entire landing animation should normally play.
  162. // However, when falling against a closed gate or a tapestry(+floor) tile, the animation aborts.
  163. // (The game considers these tiles floor tiles; so it mistakenly assumes that no x-position adjustment is needed)
  164. #define FIX_LAND_AGAINST_GATE_OR_TAPESTRY
  165.  
  166. // Sometimes, the kid may automatically strike immediately after drawing the sword.
  167. // This especially happens when dropping down from a higher floor and then turning towards the opponent.
  168. #define FIX_UNINTENDED_SWORD_STRIKE
  169.  
  170. // By repeatedly pressing 'back' in a swordfight, you can retreat out of a room without the room changing. (Trick 35)
  171. #define FIX_RETREAT_WITHOUT_LEAVING_ROOM
  172.  
  173. // The kid can jump through a tapestry with a running jump to the left, if there is a floor above it.
  174. #define FIX_RUNNING_JUMP_THROUGH_TAPESTRY
  175.  
  176. // Guards can be pushed into walls, because the game does not correctly check for walls located behind a guard.
  177. #define FIX_PUSH_GUARD_INTO_WALL
  178.  
  179. // By doing a running jump into a wall, you can fall behind a closed gate two floors down. (e.g. skip in Level 7)
  180. #define FIX_JUMP_THROUGH_WALL_ABOVE_GATE
  181.  
  182. // If you grab a ledge that is one or more floors down, the chompers on that row will not start.
  183. #define FIX_CHOMPERS_NOT_STARTING
  184.  
  185. // As soon as a level door has completely opened, the feather fall effect is interrupted because the sound stops.
  186. #define FIX_FEATHER_INTERRUPTED_BY_LEVELDOOR
  187.  
  188. // Guards will often not reappear in another room if they have been pushed (partly or entirely) offscreen.
  189. #define FIX_OFFSCREEN_GUARDS_DISAPPEARING
  190.  
  191. // Controls do not get released properly when putting the sword away, leading to unintended movement.
  192. #define FIX_MOVE_AFTER_SHEATHE
  193.  
  194.  
  195. // Debug features:
  196.  
  197. // When the program starts, check whether the deobfuscated sequence table (seqtbl.c) is correct.
  198. //#define CHECK_SEQTABLE_MATCHES_ORIGINAL
  199.  
  200. // Enable debug cheats (with command-line argument "debug")
  201. // "[" and "]" : nudge x position by one pixel
  202. // "T" : display remaining time in minutes, seconds and ticks
  203. #define USE_DEBUG_CHEATS
  204.  
  205.  
  206.  
  207. // Darken those parts of the screen that are not near a torch.
  208. #define USE_LIGHTING
  209.  
  210. // Enable screenshot features.
  211. #define USE_SCREENSHOT
  212.  
  213. // Automatically switch to keyboard or joystick/gamepad mode if there is input from that device.
  214. // Useful if SDL detected a gamepad but there is none.
  215. #define USE_AUTO_INPUT_MODE
  216.  
  217. // Default SDL_Joystick button values
  218. #define SDL_JOYSTICK_BUTTON_Y 2
  219. #define SDL_JOYSTICK_BUTTON_X 3
  220. #define SDL_JOYSTICK_X_AXIS 0
  221. #define SDL_JOYSTICK_Y_AXIS 1
  222.  
  223. #endif
  224.