Subversion Repositories Games.Prince of Persia

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
Name of program: SDLPoP
2
(Earlier name: David's open-source port of PoP)
3
 
4
Author: David from forum.princed.org (NagyD on GitHub)
5
Contributors:
6
	(Usernames refer to forum.princed.org or GitHub.)
7
* Andrew (bug reports)
8
* htamas (dungeon wall drawing algorithm, bug reports)
9
* Norbert (EndeavourAccuracy on GitHub) (bug reports, suggestions, improved gamepad support)
10
* musa (bug reports)
11
* Eugene (bug reports)
12
* StaticReturn (Mac OS X: Makefile (for older SDL1 version), bug reports)
13
* Poirot (ecalot on GitHub) (Mac OS X: Now compatible with Falcury SDL2 port)
14
* kees (bugfixes)
15
* Falcury
16
	* porting to SDL2
17
	* quicksave improvements
18
	* replay files
19
	* SDLPoP.ini: added basic support and constantly adding new options
20
	* mod folders
21
	* fake tiles
22
	* readable sequence table
23
	* CMake support
24
	* and various other bugfixes, improvements, additions
25
* segra (segrax on GitHub) (Joystick support, resizable window)
26
* DarkPrince (bug reports)
27
* Andrey Vasilkin / digi@os2.snc.ru (eComStation (OS/2) support)
28
* mfn (fixed a small bug when USE_MIXER is undefined)
29
* diddledan (Visual C++ (NMake) support)
30
* zaps166 (small Makefile fixes)
31
* usineur (faster music loading)
32
* yaqxsw (icon)
33
 
34
Forum board: http://forum.princed.org/viewforum.php?f=126
35
GitHub: https://github.com/NagyD/SDLPoP
36
 
37
GENERAL
38
=======
39
 
40
Q: What is this?
41
A: This is an open-source port/conversion of the DOS game Prince of Persia.
42
It is based on the disassembly of the original PoP1 for DOS.
43
 
44
Q: Where can I download that disassembly?
45
A: Here: http://forum.princed.org/viewtopic.php?f=68&t=3423
46
Scroll down to the newest zip files.
47
The exact version is PoP 1.0, i.e. pop1_ida.zip .
48
(But I also added some features from later versions.)
49
 
50
Sources that helped in making the disassembly:
51
* Modifications to prince.exe (hex editing) topic in the PoPUW forum.
52
	- That forum is down, you can find some saved posts here: http://forum.princed.org/viewtopic.php?f=73&t=661
53
	- HTamas posted the dungeon wall drawing algorithm in C-style pseudocode here, along with many hex-edit hacks.
54
	- It was his work that prompted me to start the disassembly and later SDLPoP. Thank you!
55
* PoP1 Technical Information by Mechner: https://www.popot.org/documentation.php?doc=OldDocuments
56
* PoP1 Apple II source code by Mechner: https://github.com/jmechner/Prince-of-Persia-Apple-II
57
 
58
LICENSE
59
=======
60
 
61
This program is open source under the GNU General Public License terms, see gpl-3.0.txt and src/GPLv3.h.
62
 
63
USAGE
64
=====
65
 
66
Q: How do I run it?
67
A:
68
Windows:
69
	Double-click on the prince.exe file.
70
	If you want to pass command line parameters, you need to open a command line.
71
 
72
GNU/Linux:
73
	First you have to compile the game. (See the DEVELOPING section.)
74
	Then you can start the game with the
75
		./prince
76
	command.
77
	(Or just double-click it in a file-manager.)
78
 
79
Mac OS X:
80
	See the DEVELOPING section.
81
	Thanks to StaticReturn and Poirot for this!
82
 
83
eComStation (OS/2):
84
	Unofficial binaries were posted here: http://forum.princed.org/viewtopic.php?p=18431#p18431
85
		Alternate link: http://hobbes.nmsu.edu/h-search.php?key=sdlpop
86
	Or you can compile for yourself using gcc, according to that post.
87
	Thanks to digi@os2.snc.ru for the bugfixes!
88
 
89
Q: What command-line options are there?
90
A:
91
* megahit -- Enable cheats.
92
* a number from 0 to 15 -- Start the given level. (if cheats are enabled)
93
* draw -- Draw directly to the screen, skipping the offscreen buffer.
94
* full -- Run in full screen mode.
95
* demo -- Run in demo mode: only the first two levels will be playable, and quotes from magazine reviews will be displayed.
96
* record -- Start recording immediately. (See the Replays section.)
97
* replay or a *.P1R filename -- Start replaying immediately. (See the Replays section.)
98
* validate "replays/replay.p1r" -- Print out information about a replay file and quit. (See the Replays section.)
99
* mod "Mod Name" -- Run with custom data files from the folder "mods/Mod Name/"
100
* debug -- Enable debug cheats.
101
* --version, -v -- Display SDLPoP version and quit.
102
* --help, -h, -? -- Display help and quit. (Currently it only points to this Readme...)
103
* seed=number -- Set initial random seed, for testing.
104
* --screenshot -- Must be used with megahit and a level number. When the level starts, a screenshot is saved to screenshot.png and the game quits.
105
* --screenshot-level -- Similar to the above, except the whole level is screenshotted, thus creating a level map.
106
* --screenshot-level-extras -- Similar to the above, except lots of additional info is displayed on the picture.
107
	You can find the meaning of each symbol in Map_Symbols.txt.
108
 
109
Q: What keys can I use?
110
A:
111
Controlling the kid:
112
* left: turn or run left
113
* right: turn or run right
114
* up: jump or climb up
115
* down: crouch or climb down
116
* shift: pick up things
117
* shift+left/right: careful step
118
* home or up+left: jump left
119
* page up or up+right: jump right
120
You can also use the numeric keypad.
121
 
122
Gamepad equivalents:
123
* D-Pad: arrows
124
* Joystick: left/right (for all-directional joystick movement, set joystick_only_horizontal to false in SDLPoP.ini)
125
* A: down
126
* Y: up
127
* X or triggers: shift
128
* Start: quit
129
* Back: restart level (Ctrl+A)
130
 
131
Controlling the game:
132
* Esc: pause game
133
* Space: show time left
134
* Ctrl-A: restart level
135
* Ctrl-G: save game (on levels 3..13)
136
* Ctrl-J: joystick/gamepad mode
137
* Ctrl-K: keyboard mode
138
	The initial mode is joystick/gamepad if such a device is detected, otherwise keyboard mode.
139
	The game will automatically change input mode when there is input from either device.
140
* Ctrl-R: return to intro
141
* Ctrl-S: sound on/off
142
* Ctrl-V: show version
143
* Ctrl-Q: quit game
144
* Ctrl-L: load game (when in the intro)
145
* Alt-Enter: toggle fullscreen
146
* F6: quicksave
147
* F9: quickload
148
* F12: Save a screenshot to screenshot.png.
149
 
150
Viewing or recording replays:
151
* Ctrl+Tab (in game, or on title screen): start or stop recording
152
* Tab (on title screen): view/cycle through the saved replays in the SDLPoP directory
153
* F (while viewing a replay): skip forward to the next room
154
* Shift-F (while viewing a replay): skip forward to the next level
155
 
156
Cheats:
157
* Shift-L: go to next level
158
* c: show numbers of current and adjacent rooms
159
* Shift-C: show numbers of diagonally adjacent rooms
160
* -: less remaining time
161
* +: more remaining time
162
* r: resurrect kid
163
* k: kill guard
164
* Shift-I: flip screen upside-down
165
* Shift-W: slow falling
166
* h: look at room to the left
167
* j: look at room to the right
168
* u: look at room above
169
* n: look at room below
170
* Shift-B: toggle hiding of non-animated objects
171
* Shift-S: Restore lost hit-point. (Like a small red potion.)
172
* Shift-T: Give more hit-points. (Like a big red potion.)
173
* Shift+F12: Save a screenshot of the whole level to screenshot.png, thus creating a level map.
174
* Ctrl+Shift+F12: Save a screenshot of the whole level with extras to screenshot.png.
175
	You can find the meaning of each symbol in Map_Symbols.txt.
176
 
177
Debug cheats:
178
* [: shift kid 1 pixel to the left
179
* ]: shift kid 1 pixel to the right
180
* t: toggle timer
181
 
182
Q: Where is the music?
183
A:
184
Since version 1.13, the game supports loading music from the data/music folder.
185
Until 1.15, music was not included in releases because it is very big, and it does not change between SDLPoP versions.
186
You need to get the music from here: (38 MB)
187
	https://www.popot.org/get_the_games/various/PoP1_DOS_music.zip
188
It's the last link here: https://www.popot.org/get_the_games.php?game=1
189
Copy the OGG files to the data/music folder.
190
 
191
Since version 1.15, music is included.
192
 
193
MODS
194
====
195
 
196
Q: Can I play mods?
197
A:
198
Since version 1.02, the game supports LEVELS.DAT, and since version 1.03, the game can use all .DAT files.
199
You can either copy the modified .DAT files to the folder of the game, or the game to the mod's folder.
200
 
201
Since version 1.17, the game can also load from mod folders that have been placed in the "mods/" directory.
202
If you use this method, only the files different from the original V1.0 data are required in the mod's folder.
203
To choose which mod from the "mods/" folder to play, do one of the following:
204
* Open SDLPoP.ini and change the 'levelset' option to the name of the mod's folder.
205
* Use the command line option "mod", like so: prince.exe mod "Mod Name"
206
Hall-of-Fame and saved game files will also be placed in the mod's folder.
207
 
208
Another way to play a mod is to start the game while the current directory is the mod's directory.
209
You can do this from the command line, or with batch files / shell scripts.
210
This is useful if you want to compare the behavior of this port and the original DOS version (to find bugs).
211
	Especially if you're editing the level and don't want to copy LEVELS.DAT from one place to the other.
212
/!\ Note that as of 1.03, the data/font folder and its contents must exist in the current directory!
213
	Since 1.11, the data/font folder is no longer required.
214
 
215
Note that this port does not recognize if the PRINCE.EXE of the mod was changed.
216
Since version 1.16, you can configure some options in SDLPoP.ini: starting time, level types, etc.
217
In addition, since version 1.17, mods in the "mods/" folder can use a custom configuration file "mod.ini".
218
Options in this file can override (most of) the gameplay-related options in SDLPoP.ini.
219
 
220
Beware, some mods (especially the harder ones) might rely on bugs that are fixed in SDLPoP.
221
Since version 1.16, SDLPoP can ask you whether gameplay quirks should be fixed or not.
222
You can set your choice permanently in the file 'SDLPoP.ini':
223
- Set the option 'use_fixes_and_enhancements' to 'false' to get the exact behavior of the original game.
224
- Alternatively, set the option 'use_fixes_and_enhancements' to 'true'. You can then also enable or disable
225
  individual fixes and enhancements, depending on your preference.
226
 
227
Furthermore, SDLPoP opens up new possibilities for mod making.
228
For example:
229
Falcury released a mod, called "Secrets of the Citadel" that "has been designed to be played using a modified version of SDLPoP".
230
Description and download: http://forum.princed.org/viewtopic.php?f=73&t=3664
231
	Alternate link: https://www.popot.org/custom_levels.php?mod=0000153
232
 
233
Since version 1.16, there is support for fake tiles, for example walls that the prince can go through.
234
The Apoplexy level editor supports these additional tiles since v3.0: https://www.popot.org/level_editors.php?editor=apoplexy
235
(Just don't overuse them, please!)
236
 
237
REPLAYS
238
=======
239
 
240
Q: How do replays work?
241
A:
242
Starting from version 1.16, you can capture or view replays in SDLPoP.
243
To start recording, press Ctrl+Tab on the title screen or while in game. To stop recording, press Ctrl+Tab again.
244
Your replays get saved in the "replays/" directory as files with a .P1R extension.
245
You can change the location where replays are kept using the setting 'replays_folder' in SDLPoP.ini.
246
 
247
If you want to start recording on a specific level, you can use the command "prince.exe record <lvl_number>",
248
where <lvl_number> is the level on which you want to start.
249
 
250
To view a replay, you can press Tab while on the title screen.
251
To cycle to the next replay (in reverse creation order), press Tab again.
252
You can also double-click on a replay file (and tell the OS that the file needs to be opened with the SDLPoP executable).
253
SDLPoP will then immediately play that replay. Dragging and dropping onto the executable also works.
254
While viewing a replay, you can press F to skip forward to the next room, or Shift+F to skip to the next level.
255
 
256
Your settings specified in SDLPoP.ini (including whether you are playing with bugfixes on or off) are remembered in the replay.
257
It shouldn't matter how SDLPoP.ini is set up when you are viewing the replay later.
258
Note that any cheats you use do not get saved as part of the replay.
259
 
260
To print out information about the replay from the command-line, you can use the 'validate' command-line parameter.
261
Example usage: prince validate "replays/replay.p1r"
262
 
263
DEVELOPING
264
==========
265
 
266
Q: How do I (re)compile it?
267
A:
268
Prerequisites for all platforms:
269
	Make sure that you have the development versions of the "SDL2", "SDL2_image" and "SDL2_mixer" (since SDLPoP 1.13) libraries installed.
270
 
271
Windows:
272
	If you are using Dev-C++:
273
		I originally used Dev-C++ version 4.9.9.2 from here: https://sourceforge.net/projects/dev-cpp/files/Binaries/
274
			More recently, I'm using this version: https://sourceforge.net/projects/orwelldevcpp/
275
		For Dev-C++ you need the MinGW Development Libraries of SDL2:
276
			https://libsdl.org/download-2.0.php
277
			https://libsdl.org/projects/SDL_image/
278
			https://libsdl.org/projects/SDL_mixer/
279
		To install these, just extract the contents of the i686-w64-mingw32 folder from each archive to the Dev-Cpp folder.
280
		To compile, open one of the .dev files and click the compile icon.
281
 
282
    Building with Visual Studio:
283
        Run build.bat in the src/ directory.
284
        For this to work, you first need to do two other things:
285
            a) Run vsvarsall.bat from the command line, with either 'x86' or 'x64' as a parameter.
286
               This batch file is included with all installations of MS Visual Studio, but its exact location may vary.
287
               For VS2017, the command you should run might look like this:
288
               call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
289
               This step sets up various environment variables, to enable running the compiler from the command line.
290
            b) Set up the environment variable 'SDL2' to point to the SDL2 development library files.
291
               To do this, you can use a command like so:
292
               set "SDL2=C:\libraries\SDL2-2.0.5"
293
               You can get the SDL2 library files from here: (download the Visual C++ 32/64-bit development package)
294
               https://www.libsdl.org/download-2.0.php
295
            (You could create a small batch file to automate the above steps on your system.)
296
        Alternatively, you can also build SDLPoP using MSVC with NMake (use the makefile src/NMakefile).
297
 
298
	You can also use CMake, in conjunction with the MinGW-w64 toolchain.
299
	    You could either invoke CMake from the command line yourself, or use an IDE that uses CMake internally.
300
	    As an example, CLion uses CMake as its project model.
301
	    If you are using CLion as your IDE, you can simply load the src/ directory as a project.
302
 
303
GNU/Linux:
304
	You can install the libraries with apt-get or a package manager.
305
		sudo apt-get install libsdl2-image-dev libsdl2-mixer-dev
306
 
307
	Alternatively, you can compile SDL2 and the other libraries from source.
308
		https://libsdl.org/download-2.0.php
309
		https://libsdl.org/projects/SDL_image/
310
		https://libsdl.org/projects/SDL_mixer/
311
	I recommend this if your distro does not have the newest SDL version, because older SDL versions have some known bugs.
312
		Namely, sound becomes garbled in SDL versions older than 2.0.4 if the sound output is not 8-bit.
313
 
314
	When you have the libraries, just type the command:
315
		make all
316
	and the game should compile.
317
 
318
	You can create a desktop/menu icon with:
319
		sudo make install
320
	and remove it with:
321
		sudo make uninstall
322
 
323
macOS:
324
	Get SDL2 and dependencies
325
		a) Install "port" from https://www.macports.org/
326
		b) sudo port install libsdl2 libsdl2_image libsdl2_mixer
327
	or
328
		a) Install "homebrew"
329
		b) brew install sdl2 sdl2_image
330
		c) brew install sdl2_mixer --with-libvorbis
331
 
332
	Get development tools:
333
		a) Install Xcode.
334
		b) Install the "command line developer tools" by typing 'xcode-select --install' at the prompt.
335
		c) Using terminal, in the '/src' directory of SDLPoP, type: make
336
 
337
	PLAY!
338
		a) Type './prince' or './prince full'.
339
		b) Hit Control-Q to quit.
340
 
341
	Tested on OSX 10.9.5, OSX 10.11.2 and macOS 10.13.