Controller vibration (rumble)

Open-source port of PoP that runs natively on Windows, Linux, etc.
Post Reply
Falcury
Calif
Calif
Posts: 565
Joined: June 25th, 2009, 10:01 pm

Controller vibration (rumble)

Post by Falcury »

We could add an option to make controllers vibrate a bit at appropriate moments (if the controller has a rumble motor). Mainly I was thinking to do this when the kid takes damage (you would feel the controller shake slightly as the screen flashes red).
What do you think of this idea?
User avatar
Norbert
The Prince of Persia
The Prince of Persia
Posts: 5743
Joined: April 9th, 2009, 10:58 pm

Re: Controller vibration (rumble)

Post by Norbert »

Falcury wrote:make controllers vibrate [...] when the kid takes damage
Yes, good idea!

Unrelated, but related to SDLPoP, can gamepads be used to toggle fullscreen?
If not, in levels, B and the guide (Xbox) button are still free.
Alternatively toggling fullscreen could just work when not in levels, then more buttons should be free.

Also, in Readme.txt it says:

Code: Select all

* Start: quit
* Back: restart level (Ctrl+A)
Maybe reverse those? As in, start will (re)start, and back will go back to the desktop?
Falcury
Calif
Calif
Posts: 565
Joined: June 25th, 2009, 10:01 pm

Re: Controller vibration (rumble)

Post by Falcury »

Norbert wrote:Yes, good idea!
OK then, I'll see if I can implement it!
Norbert wrote:Unrelated, but related to SDLPoP, can gamepads be used to toggle fullscreen?
If not, in levels, B and the guide (Xbox) button are still free.
Alternatively toggling fullscreen could just work when not in levels, then more buttons should be free.
Maybe the Xbox button then? (interesting by the way, I didn't know it was called the "guide" button)
Norbert wrote:Maybe reverse those? As in, start will (re)start, and back will go back to the desktop?
The text should probably be updated... If I remember correctly, I changed it a while ago so start will now restart the game (similar to Ctrl+R).
I thought, "back" as in "back to the beginning of the level"? Or is the back button usually expected to end the game in other games?
User avatar
Norbert
The Prince of Persia
The Prince of Persia
Posts: 5743
Joined: April 9th, 2009, 10:58 pm

Re: Controller vibration (rumble)

Post by Norbert »

Falcury wrote:OK then, I'll see if I can implement it!
Should be easy.
You can look at apoplexy's code too, it rumbles when you launch with a gamepad attached.
Simply search its code for: "Just for fun, use haptic."
Falcury
Calif
Calif
Posts: 565
Joined: June 25th, 2009, 10:01 pm

Re: Controller vibration (rumble)

Post by Falcury »

And, in which section should the SDLPoP.ini option go?
It it an "Enhancement", "AdditionalFeature", or should it be part of the "General" options, next to the "joystick_only_horizontal" option maybe?

Edit:
Norbert wrote:can gamepads be used to toggle fullscreen?
Maybe fullscreen should just be set as the default? Then there might be less need to toggle it using a controller.
Windowed mode is very handy for development work and multitasking... However, when people actually sit down to play the game, I suppose they would mostly want to play without distractions.

Edit:
Pull request for the controller rumble:
https://github.com/NagyD/SDLPoP/pull/117
User avatar
Norbert
The Prince of Persia
The Prince of Persia
Posts: 5743
Joined: April 9th, 2009, 10:58 pm

Re: Controller vibration (rumble)

Post by Norbert »

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.)
Spoiler: show

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:
Spoiler: show

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.
Falcury
Calif
Calif
Posts: 565
Joined: June 25th, 2009, 10:01 pm

Re: Controller vibration (rumble)

Post by Falcury »

You bring up good points... I'll have to think about it a bit.

The sections "General" and "AdditionalFeatures" are not really functionally different... It may indeed make good sense to mix/split those up into more distinct sections.
Then the "Enhancements" section contains the optional set of features and fixes that (strictly speaking) break compatibility with the original gameplay (i.e. glitches are fixed, which is 'different behaviour' compared to the original PoP). The definition may be a bit vague... I would say that in my mind, an improvement would belong in this category if it sacrifices some "faithful replication" in order to get closer to the perceived idea of "how Jordan Mechner would logically have intended to fix it, if he had known about the issue/limitation at the time".
Hm, I can't really think of good ways right now to split up this section without causing further confusion... especially as we have a 'master switch' for this whole block (enable_fixes_and_enhancements).
Finally, the "CustomGameplay" section is of course derived from CusPop. As such, I would say that this section roughly deals with 'tinkering' / twiddling the knobs and dials that were hard-coded in the original game. Although one could argue that the distinction between a 'customization' and a 'new feature' is sometimes not clear at all. Then, maybe this part of the INI file should instead be summarized as "features intended to be used by modders". The organization roughly follows that of CusPop, and the order of the options is mostly supposed to mirror the order in which the options are handled in the code (and in the replay format as well). That also means (unfortunately) that any 'new' options are appended at the end, without regard for organization... Perhaps splitting up this section makes sense.
User avatar
oitofelix
Wise Scribe
Wise Scribe
Posts: 227
Joined: February 17th, 2016, 1:59 pm
Location: Brazil
Contact:

Re: Controller vibration (rumble)

Post by oitofelix »

Falcury wrote:We could add an option to make controllers vibrate a bit at appropriate moments (if the controller has a rumble motor). Mainly I was thinking to do this when the kid takes damage (you would feel the controller shake slightly as the screen flashes red).
What do you think of this idea?
Good idea!

PS: I've implemented this in the latest MININIM release as well.
Bruno Félix Rezende Ribeiro (oitofelix)
MININIM author
Post Reply