In my opinion, the section names "[AdditionalFeatures]", "[Enhancements]" and "[CustomGameplay]" are too similar and nondescript. It's unclear (even) for me where I should look for what. A user might wonder, are there additional features that are not enhancements? Also, what is an "enhancement" may be subjective. The INI file feels messy in general, especially with comments and commented-out options looking so similar; these only differ by a single space.
Maybe use ";;;" for actual comments?
Personally, I would change something like
[AdditionalFeatures]
to
Code: Select all
;;; ===========================================================================
[Quick Saving and Replays]
;;; ===========================================================================
More descriptive and more clearly marked.
Don't shy away from adding more sections either, for instance if different additional features ever get added.
Maybe near the bottom add...
Code: Select all
;;; ===========================================================================
;;; Per Level Settings
;;; ===========================================================================
...to clearly show we're moving from "[CustomGameplay]" to something else?
Maybe the file looks better if all empty lines are removed, except for those preceding new sections:
(Note that this looks better in a terminal with more rows.)
Code: Select all
;;; ====================
;;; SDLPoP configuration
;;; ====================
;;; This is the configuration file for SDLPoP.
;;; Lines starting with a semicolon (";") are comment lines and are ignored by SDLPoP.
;;; They are used to document the available customization options.
;;; "default" is a valid setting for any option.
;;; ===========================================================================
[General]
;;; ===========================================================================
;;; Enable or disable the potions (copy protection) level.
enable_copyprot = false
;;; Use mixer and enable music.
enable_mixer = true
;;; Enable or disable fading.
enable_fade = true
;;; Enable or disable flashing.
enable_flash = true
;;; Enable or disable texts.
enable_text = true
;;; Display the SDLPoP information screen when the game starts.
enable_info_screen = true;
;;; Start the game in fullscreen mode. (In-game fullscreen toggle: Alt+Enter)
start_fullscreen = false
;;; Width and height of the game window.
;;; By default, the window is 640 pixels wide and 400 pixels tall.
;;; When using the "correct aspect ratio" option, the default height is 480 instead of 400.
pop_window_width = default
pop_window_height = default
;;; Render the game in the originally intended 4:3 aspect ratio.
;;; NB. Works best using a high resolution.
use_correct_aspect_ratio = false
;;; When using a controller, only use the joysticks for horizontal movement (instead of all-directional movement).
;;; This could make the game easier to control, depending on your preference and depending on which controller you have.
joystick_only_horizontal = true
;;; You can choose which levels to play using the 'levelset' option:
;;; 'original' --> play the original levels (Default)
;;; 'Your Mod Name' --> play a custom levelset (the custom files must be in a directory "mods/Your Mod Name/")
levelset = original
;;; ===========================================================================
[Quick Saving and Replays]
;;; ===========================================================================
;;; Enable quicksave/load feature. (In-game: press F6 to quicksave, F9 to quickload)
enable_quicksave = true
;;; Try to let time keep running out when quickloading. (similar to Ctrl+A)
;;; Technically, the 'remaining time' is still restored, but with a penalty for elapsed time (up to 1 minute).
;;; The one minute penalty will also be applied when quickloading from e.g. the title screen.
enable_quicksave_penalty = true
;;; Enable recording/replay feature.
enable_replay = true
;;; The folder where replays will be kept.
replays_folder = replays
;;; ===========================================================================
[Enhancements]
;;; ===========================================================================
use_fixes_and_enhancements = false
;;; 'prompt' --> the game will ask each time the game is launched
;;; 'true' --> fixes and enhancements are used
;;; 'false' --> fixes and enhancements are not used (Default)
;;;
;;; Below, you can pick which fixes/enhancements will be active.
;;; NB. If use_fixes_and_enhancements is set to 'false', all of the below options are disabled.
;;; Adds a way to crouch immediately after climbing up: press down and forward simultaneously.
;;; In the original game, this could not be done (pressing down always causes the kid to climb down).
enable_crouch_after_climbing = true
;;; Time runs out while the level ending music plays;;; however, the music can be skipped by disabling sound.
;;; This option stops time while the ending music is playing (so there is no need to disable sound).
enable_freeze_time_during_end_music = true
;;; Enable guard hitpoints not resetting to their default (maximum) value when re-entering the room.
enable_remember_guard_hp = true
;;; If a room is linked to itself on the left, the closing sounds of the gates in that room can't be heard.
fix_gate_sounds = true
;;; An open gate or chomper may enable the Kid to go through walls. (Trick 7, 37, 62)
fix_two_coll_bug = true
;;; If a room is linked to itself at the bottom, and the Kid's column has no floors, the game hangs.
fix_infinite_down_bug = true
;;; When a gate is under another gate, the top of the bottom gate is not visible.
fix_gate_drawing_bug = true
;;; When climbing up to a floor with a big pillar top behind, turned right, Kid sees through floor.
fix_bigpillar_climb = true
;;; When climbing up two floors, turning around and jumping upward, the kid falls down.
;;; This fix makes the workaround of Trick 25 unnecessary.
fix_jump_distance_at_edge = true
;;; When climbing to a higher floor, the game unnecessarily checks how far away the edge below is;
;;; This contributes to sometimes "teleporting" considerable distances when climbing from firm ground.
fix_edge_distance_check_when_climbing = true
;;; Falling from a great height directly on top of guards does not hurt.
fix_painless_fall_on_guard = true
;;; Bumping against a wall may cause a loose floor below to drop, even though it has not been touched. (Trick 18, 34)
fix_wall_bump_triggers_tile_below = true
;;; When pressing a loose tile, you can temporarily stand on thin air by standing up from crouching.
fix_stand_on_thin_air = true
;;; Buttons directly to the right of gates can be pressed even though the gate is closed (Trick 1)
fix_press_through_closed_gates = true
;;; By jumping and bumping into a wall, you can sometimes grab a ledge two stories down (which should not be possible).
fix_grab_falling_speed = true
;;; When chomped, skeletons cause the chomper to become bloody even though skeletons do not have blood.
fix_skeleton_chomper_blood = true
;;; Controls do not get released properly when drinking a potion, sometimes causing unintended movements.
fix_move_after_drink = true
;;; A drawing bug occurs when a loose tile is placed to the left of a potion (or sword).
fix_loose_left_of_potion = true
;;; Guards may "follow" the kid to the room on the left or right, even though there is a closed gate in between.
fix_guard_following_through_closed_gates = true
;;; When landing on the edge of a spikes tile, it is considered safe. (Trick 65)
fix_safe_landing_on_spikes = true
;;; The kid may glide through walls after turning around while running (especially when weightless).
fix_glide_through_wall = true
;;; The kid can drop down through a closed gate, when there is a tapestry (doortop) above the gate.
fix_drop_through_tapestry = true
;;; When dropping down and landing right in front of a wall, the entire landing animation should normally play.
;;; However, when falling against a closed gate or a tapestry(+floor) tile, the animation aborts.
;;; (The game considers these tiles floor tiles;;; so it mistakenly assumes that no x-position adjustment is needed)
fix_land_against_gate_or_tapestry = true
;;; Sometimes, the kid may automatically strike immediately after drawing the sword.
;;; This especially happens when dropping down from a higher floor and then turning towards the opponent.
fix_unintended_sword_strike = true
;;; By repeatedly pressing 'back' in a swordfight, you can retreat out of a room without the room changing. (Trick 35)
fix_retreat_without_leaving_room = true
;;; The kid can jump through a tapestry with a running jump to the left, if there is a floor above it.
fix_running_jump_through_tapestry = true
;;; Guards can be pushed into walls, because the game does not correctly check for walls located behind a guard.
fix_push_guard_into_wall = true
;;; By doing a running jump into a wall, you can fall behind a closed gate two floors down. (e.g. skip in Level 7)
fix_jump_through_wall_above_gate = true
;;; If you grab a ledge that is one or more floors down, the chompers on that row will not start.
fix_chompers_not_starting = true
;;; As soon as a level door has completely opened, the feather fall effect is interrupted because the sound stops.
fix_feather_interrupted_by_leveldoor = true
;;; Guards will often not reappear in another room if they have been pushed (partly or entirely) offscreen.
fix_offscreen_guards_disappearing = true
;;; ===========================================================================
[Custom Gameplay]
;;; ===========================================================================
;;; Starting minutes left. (default = 60)
;;; To disable the time limit completely, set this to -1.
;start_minutes_left = 60
;;; Starting number of ticks left in the first minute. (default = 719)
;;; 1 tick = 1/12 second, so by default there are 59.92 seconds left in the first minute.
;start_ticks_left = 719
;;; Starting hitpoints. (default = 3)
;start_hitp = 3
;;; Maximum number of hitpoints you can get. (default = 10)
;max_hitp_allowed = 10
;;; First level where you can save the game. (default = 3)
;saving_allowed_first_level = 3
;;; Last level where you can save the game. (default = 13)
;saving_allowed_last_level = 13
;;; Start the game with the screen flipped upside down, similar to Shift+I (default = false)
;start_upside_down = false
;;; Start in blind mode, similar to Shift+B (default = false)
;start_in_blind_mode = false
;;; The potions level will appear before this level. Set to -1 to disable. (default = 2)
;copyprot_level = 2
;;; Set up edges of the level.
;;; Tile drawn at the top of the room if there is no room that way. (default = floor)
;;; E.g. 0: empty, 1: floor, 20: wall (etc.)
;drawn_tile_top_level_edge = floor
;;; Tile drawn at the left of the room if there is no room that way. (default = wall)
;drawn_tile_left_level_edge = wall
;;; Tile behavior at the top or left of the room if there is no room that way (default = wall)
;level_edge_hit_tile = wall
;;; Enable triggering any tile. (default = false)
;;; For example, a button could make loose floors fall, or start a stuck chomper.
;allow_triggering_any_tile = false
;;; Enable the dungeon Wall Drawing Algorithm (WDA) in the palace environment.
;;; N.B. Use with a modified VPALACE.DAT that provides dungeon-like wall graphics!
;enable_wda_in_palace = false
;;; Colors of the hard-coded color palette (RGB values 0..255, will be rounded down to nearest multiple of 4).
;vga_color_0 = 0, 0, 0
;vga_color_1 = 0, 0, 170
;vga_color_2 = 0, 170, 0
;vga_color_3 = 0, 170, 170
;vga_color_4 = 170, 0, 0
;vga_color_5 = 170, 0, 170
;vga_color_6 = 170, 85, 0
;vga_color_7 = 170, 170, 170
;vga_color_8 = 85, 85, 85
;vga_color_9 = 85, 85, 255
;vga_color_10 = 85, 255, 85
;vga_color_11 = 85, 255, 255
;vga_color_12 = 255, 85, 85
;vga_color_13 = 255, 85, 255
;vga_color_14 = 255, 255, 85
;vga_color_15 = 255, 255, 255
;;; Level that will be loaded when starting a new game. (default = 1)
;first_level = 1
;;; Always skip the title sequence: the first level will be loaded immediately. (default = false)
;skip_title = false
;;; First level where level skipping with Shift+L is denied in non-cheat mode. (default = 4)
;shift_L_allowed_until_level = 4
;;; Number of minutes left after Shift+L is used in non-cheat mode. (default = 15)
;shift_L_reduced_minutes = 15
;;; Number of ticks left after Shift+L is used in non-cheat mode. (default = 719)
;;; (1 tick = 1/12 second, 719 ticks is 59.92 seconds)
;shift_L_reduced_ticks = 719
;;; ===========================================================================
;;; Per Level Settings
;;; ===========================================================================
;;; The following customization options can be used in all level sections:
;;; level_type = 0: dungeon, 1: palace
;;; level_color = 0: colors from VDUNGEON.DAT/VPALACE.DAT, >0: colors from PRINCE.DAT (You need a PRINCE.DAT from 1.3 or 1.4 for this.)
;;; guard_type = 0: guard, 1: fat, 2: skel, 3: vizier, 4: shadow
;;; guard_hp = Base hitpoints for guards on this level.
;;; cutscene = 0: none, 2 or 6: standing, 4: lying down, 8: mouse leaves, 9: mouse returns, 12: standing or turn around
[Level 0] ; demo
[Level 1]
[Level 2]
[Level 3]
[Level 4]
[Level 5]
[Level 6]
[Level 7]
[Level 8]
[Level 9]
[Level 10]
[Level 11]
[Level 12]
[Level 13] ; Jaffar
[Level 14] ; princess
[Level 15] ; potions
In fact, how about... within sections, keeping the comments together. This also means we can go back to using ";" instead of ";;;". I didn't do the whole thing (yet), because I don't know if this is a good idea:
Code: Select all
; ====================
; SDLPoP configuration
; ====================
; This is the configuration file for SDLPoP.
; Lines starting with a semicolon (";") are comment lines and are ignored by SDLPoP.
; They are used to document the available customization options.
; "default" is a valid setting for any option.
; ===========================================================================
[General]
; ===========================================================================
; enable_copyprot Enable or disable the potions (copy protection) level.
; enable_mixer Use mixer and enable music.
; enable_fade Enable or disable fading.
; enable_flash Enable or disable flashing.
; enable_text Enable or disable texts.
; enable_info_screen Display the SDLPoP information screen when the game starts.
; start_fullscreen Start the game in fullscreen mode. (In-game fullscreen toggle: Alt+Enter)
; pop_window_width/pop_window_height Width and height of the game window.
; By default, the window is 640 pixels wide and 400 pixels tall.
; When using the "correct aspect ratio" option, the default height is 480 instead of 400.
; use_correct_aspect_ratio Render the game in the originally intended 4:3 aspect ratio.
; NB. Works best using a high resolution.
; joystick_only_horizontal When using a controller, only use the joysticks for horizontal movement (instead of all-directional movement).
; This could make the game easier to control, depending on your preference and depending on which controller you have.
; levelset You can choose which levels to play using the 'levelset' option:
; 'original' --> play the original levels (Default)
; 'Your Mod Name' --> play a custom levelset (the custom files must be in a directory "mods/Your Mod Name/")
enable_copyprot = false
enable_mixer = true
enable_fade = true
enable_flash = true
enable_text = true
enable_info_screen = true
start_fullscreen = false
pop_window_width = default
pop_window_height = default
use_correct_aspect_ratio = false
joystick_only_horizontal = true
levelset = original
; ===========================================================================
[Quick Saving and Replays]
; ===========================================================================
; enable_quicksave Enable quicksave/load feature. (In-game: press F6 to quicksave, F9 to quickload)
; enable_quicksave_penalty Try to let time keep running out when quickloading. (similar to Ctrl+A)
; Technically, the 'remaining time' is still restored, but with a penalty for elapsed time (up to 1 minute).
; The one minute penalty will also be applied when quickloading from e.g. the title screen.
; enable_replay Enable recording/replay feature.
; replays_folder The folder where replays will be kept.
enable_quicksave = true
enable_quicksave_penalty = true
enable_replay = true
replays_folder = replays
;;; ===========================================================================
[Enhancements]
;;; ===========================================================================
use_fixes_and_enhancements = false
;;; 'prompt' --> the game will ask each time the game is launched
;;; 'true' --> fixes and enhancements are used
;;; 'false' --> fixes and enhancements are not used (Default)
;;;
;;; Below, you can pick which fixes/enhancements will be active.
;;; NB. If use_fixes_and_enhancements is set to 'false', all of the below options are disabled.
;;; Adds a way to crouch immediately after climbing up: press down and forward simultaneously.
;;; In the original game, this could not be done (pressing down always causes the kid to climb down).
enable_crouch_after_climbing = true
;;; Time runs out while the level ending music plays;;; however, the music can be skipped by disabling sound.
;;; This option stops time while the ending music is playing (so there is no need to disable sound).
enable_freeze_time_during_end_music = true
;;; Enable guard hitpoints not resetting to their default (maximum) value when re-entering the room.
enable_remember_guard_hp = true
;;; If a room is linked to itself on the left, the closing sounds of the gates in that room can't be heard.
fix_gate_sounds = true
;;; An open gate or chomper may enable the Kid to go through walls. (Trick 7, 37, 62)
fix_two_coll_bug = true
;;; If a room is linked to itself at the bottom, and the Kid's column has no floors, the game hangs.
fix_infinite_down_bug = true
;;; When a gate is under another gate, the top of the bottom gate is not visible.
fix_gate_drawing_bug = true
;;; When climbing up to a floor with a big pillar top behind, turned right, Kid sees through floor.
fix_bigpillar_climb = true
;;; When climbing up two floors, turning around and jumping upward, the kid falls down.
;;; This fix makes the workaround of Trick 25 unnecessary.
fix_jump_distance_at_edge = true
;;; When climbing to a higher floor, the game unnecessarily checks how far away the edge below is;
;;; This contributes to sometimes "teleporting" considerable distances when climbing from firm ground.
fix_edge_distance_check_when_climbing = true
;;; Falling from a great height directly on top of guards does not hurt.
fix_painless_fall_on_guard = true
;;; Bumping against a wall may cause a loose floor below to drop, even though it has not been touched. (Trick 18, 34)
fix_wall_bump_triggers_tile_below = true
;;; When pressing a loose tile, you can temporarily stand on thin air by standing up from crouching.
fix_stand_on_thin_air = true
;;; Buttons directly to the right of gates can be pressed even though the gate is closed (Trick 1)
fix_press_through_closed_gates = true
;;; By jumping and bumping into a wall, you can sometimes grab a ledge two stories down (which should not be possible).
fix_grab_falling_speed = true
;;; When chomped, skeletons cause the chomper to become bloody even though skeletons do not have blood.
fix_skeleton_chomper_blood = true
;;; Controls do not get released properly when drinking a potion, sometimes causing unintended movements.
fix_move_after_drink = true
;;; A drawing bug occurs when a loose tile is placed to the left of a potion (or sword).
fix_loose_left_of_potion = true
;;; Guards may "follow" the kid to the room on the left or right, even though there is a closed gate in between.
fix_guard_following_through_closed_gates = true
;;; When landing on the edge of a spikes tile, it is considered safe. (Trick 65)
fix_safe_landing_on_spikes = true
;;; The kid may glide through walls after turning around while running (especially when weightless).
fix_glide_through_wall = true
;;; The kid can drop down through a closed gate, when there is a tapestry (doortop) above the gate.
fix_drop_through_tapestry = true
;;; When dropping down and landing right in front of a wall, the entire landing animation should normally play.
;;; However, when falling against a closed gate or a tapestry(+floor) tile, the animation aborts.
;;; (The game considers these tiles floor tiles;;; so it mistakenly assumes that no x-position adjustment is needed)
fix_land_against_gate_or_tapestry = true
;;; Sometimes, the kid may automatically strike immediately after drawing the sword.
;;; This especially happens when dropping down from a higher floor and then turning towards the opponent.
fix_unintended_sword_strike = true
;;; By repeatedly pressing 'back' in a swordfight, you can retreat out of a room without the room changing. (Trick 35)
fix_retreat_without_leaving_room = true
;;; The kid can jump through a tapestry with a running jump to the left, if there is a floor above it.
fix_running_jump_through_tapestry = true
;;; Guards can be pushed into walls, because the game does not correctly check for walls located behind a guard.
fix_push_guard_into_wall = true
;;; By doing a running jump into a wall, you can fall behind a closed gate two floors down. (e.g. skip in Level 7)
fix_jump_through_wall_above_gate = true
;;; If you grab a ledge that is one or more floors down, the chompers on that row will not start.
fix_chompers_not_starting = true
;;; As soon as a level door has completely opened, the feather fall effect is interrupted because the sound stops.
fix_feather_interrupted_by_leveldoor = true
;;; Guards will often not reappear in another room if they have been pushed (partly or entirely) offscreen.
fix_offscreen_guards_disappearing = true
;;; ===========================================================================
[Custom Gameplay]
;;; ===========================================================================
;;; Starting minutes left. (default = 60)
;;; To disable the time limit completely, set this to -1.
;start_minutes_left = 60
;;; Starting number of ticks left in the first minute. (default = 719)
;;; 1 tick = 1/12 second, so by default there are 59.92 seconds left in the first minute.
;start_ticks_left = 719
;;; Starting hitpoints. (default = 3)
;start_hitp = 3
;;; Maximum number of hitpoints you can get. (default = 10)
;max_hitp_allowed = 10
;;; First level where you can save the game. (default = 3)
;saving_allowed_first_level = 3
;;; Last level where you can save the game. (default = 13)
;saving_allowed_last_level = 13
;;; Start the game with the screen flipped upside down, similar to Shift+I (default = false)
;start_upside_down = false
;;; Start in blind mode, similar to Shift+B (default = false)
;start_in_blind_mode = false
;;; The potions level will appear before this level. Set to -1 to disable. (default = 2)
;copyprot_level = 2
;;; Set up edges of the level.
;;; Tile drawn at the top of the room if there is no room that way. (default = floor)
;;; E.g. 0: empty, 1: floor, 20: wall (etc.)
;drawn_tile_top_level_edge = floor
;;; Tile drawn at the left of the room if there is no room that way. (default = wall)
;drawn_tile_left_level_edge = wall
;;; Tile behavior at the top or left of the room if there is no room that way (default = wall)
;level_edge_hit_tile = wall
;;; Enable triggering any tile. (default = false)
;;; For example, a button could make loose floors fall, or start a stuck chomper.
;allow_triggering_any_tile = false
;;; Enable the dungeon Wall Drawing Algorithm (WDA) in the palace environment.
;;; N.B. Use with a modified VPALACE.DAT that provides dungeon-like wall graphics!
;enable_wda_in_palace = false
;;; Colors of the hard-coded color palette (RGB values 0..255, will be rounded down to nearest multiple of 4).
;vga_color_0 = 0, 0, 0
;vga_color_1 = 0, 0, 170
;vga_color_2 = 0, 170, 0
;vga_color_3 = 0, 170, 170
;vga_color_4 = 170, 0, 0
;vga_color_5 = 170, 0, 170
;vga_color_6 = 170, 85, 0
;vga_color_7 = 170, 170, 170
;vga_color_8 = 85, 85, 85
;vga_color_9 = 85, 85, 255
;vga_color_10 = 85, 255, 85
;vga_color_11 = 85, 255, 255
;vga_color_12 = 255, 85, 85
;vga_color_13 = 255, 85, 255
;vga_color_14 = 255, 255, 85
;vga_color_15 = 255, 255, 255
;;; Level that will be loaded when starting a new game. (default = 1)
;first_level = 1
;;; Always skip the title sequence: the first level will be loaded immediately. (default = false)
;skip_title = false
;;; First level where level skipping with Shift+L is denied in non-cheat mode. (default = 4)
;shift_L_allowed_until_level = 4
;;; Number of minutes left after Shift+L is used in non-cheat mode. (default = 15)
;shift_L_reduced_minutes = 15
;;; Number of ticks left after Shift+L is used in non-cheat mode. (default = 719)
;;; (1 tick = 1/12 second, 719 ticks is 59.92 seconds)
;shift_L_reduced_ticks = 719
;;; ===========================================================================
;;; Per Level Settings
;;; ===========================================================================
;;; The following customization options can be used in all level sections:
;;; level_type = 0: dungeon, 1: palace
;;; level_color = 0: colors from VDUNGEON.DAT/VPALACE.DAT, >0: colors from PRINCE.DAT (You need a PRINCE.DAT from 1.3 or 1.4 for this.)
;;; guard_type = 0: guard, 1: fat, 2: skel, 3: vizier, 4: shadow
;;; guard_hp = Base hitpoints for guards on this level.
;;; cutscene = 0: none, 2 or 6: standing, 4: lying down, 8: mouse leaves, 9: mouse returns, 12: standing or turn around
[Level 0] ; demo
[Level 1]
[Level 2]
[Level 3]
[Level 4]
[Level 5]
[Level 6]
[Level 7]
[Level 8]
[Level 9]
[Level 10]
[Level 11]
[Level 12]
[Level 13] ; Jaffar
[Level 14] ; princess
[Level 15] ; potions
Makes it easier to find the actual options.
A lot more aesthetically pleasing, too.
By the way, I removed the ";" after "enable_info_screen = true".
Probably added by you or another programmer.
Falcury wrote:And, in which section should the SDLPoP.ini option go?
My opinion is that you should not worry about creating more sections.
There's already a "joystick_only_horizontal", so why not add:
Code: Select all
; ===========================================================================
; Gamepad
; ===========================================================================
This makes it easy to quickly find settings by scrolling through the INI file and looking at just the headers.
Falcury wrote:Maybe fullscreen should just be set as the default?
Personally, I'm usually using SDLPoP with other programs, in particular apoplexy, and prefer windowed.
Even if I run SDLPoP or DOSBox (with scaler) alone, I use windowed.
To keep an eye on IRC and other things.
Having written that, I think immediately going to fullscreen is fairly standard for games.
I certainly don't object to making it the default.
Either way, an option to toggle with a gamepad would be most welcome.