Commit graph

181 commits

Author SHA1 Message Date
toaster
7f6de407f1 Copyright update: Add Kart Krew (2024) in general for high-traffic inherited sourcefiles 2024-04-02 17:42:38 +01:00
James R
d7e0a4d01a Add S_LoadSongCredit/S_UnloadSongCredit, refactor cursongcredit
- cursongcredit behaves the same as before
- Always compose song credit string
- g_realsongcredit always stores the song credit for the
  current music, even if no song credit is displayed on
  the HUD
2024-02-09 18:13:35 -08:00
Eidolon
448b54c41c Make master volume an independent gain control
Master volume should control after-mixing gain; the idea is the mixed
output of sfx and music's amplitude should never exceed
`cv_mastervolume`. Setting each submixer's gain independently will
still allow the master mixer to exceed that preferred volume, which was
the main issue with the SDL_Mixer backend. So, instead we use a separate
gain control that is applied after everything is mixed.
2024-01-12 19:06:19 -06:00
James R
64aaf02b8a soundtest: refactor to track tune with integer instead of string 2023-12-29 04:30:54 -08:00
James R
79012d00e8 Sound options: merge playmusicifunfocused/playsoundifunfocused into one cvar 2023-12-23 13:17:04 -08:00
James R
764a692a5e P_IsLocalPlayer, P_IsMachineLocalPlayer, P_IsDisplayPlayer: let player pointer be const 2023-11-25 04:51:13 -08:00
James R
063d7946a3 mobj.hpp: add srb2::Mobj class, abstraction around mobj_t
API is still a work in progress and is not yet
comprehensive.
2023-11-22 19:04:30 -08:00
toaster
52706b4f6f S_SoundTestDefLocked: Actually restrict tracks that should be restricted
- POSITION!! music and the standard course track is always visible.
- Alt Music is hidden behind the relevant SECRET_ALTMUSIC.
- Associated music requires you to beat the level to listen.
2023-10-09 12:20:00 +01:00
toaster
55bdd60519 Merge branch 'radio-shuffle' into 'master'
Stereo Mode: Add "Shf" (Shuffle) option

See merge request KartKrew/Kart!1517
2023-09-26 22:07:59 +00:00
toaster
36f8a64d65 Stereo Mode: Add "shf" (Shuffle) option
This basically came to me in a dream, who am I to look the horse in its mouth

- Press to start a shuffled sequence, losing your current position in the autosequence.
    - Press again to disable, but keep your current track.
- Adjust horizontal offset of Stereo buttons slightly.
- More judiciously comment Sound Test functionality, to assist future maintainers.
2023-09-24 10:46:32 +01:00
James R.
acbe0b270c s_sound.c: consolidate music volume related functions, always use cvars internally 2023-09-22 02:00:50 -07:00
James R.
472f7d060c Kill HW3SOUND related code (in files that are actually used) 2023-09-22 02:00:42 -07:00
James R
6c0b042eed Refactor cvar definitions completely, move everything to cvars.cpp
- No need to call CV_RegisterVar
- Cvar definitions live in only one file, easier to locate
- Organized into sections -- netvars, cheats, etc.
- Use builder pattern to initialize cvars
- Still need to extern if you want to read the cvar value
2023-08-25 17:22:40 -07:00
James R
f4ca6001d8 s_sound: remove unused OpenMPT stuff 2023-08-24 04:56:02 -07:00
James R
c5e341769b Remove unused cvars
- growmusicfade
- invincmusicfade
- music_resync_powerups_only
- music_resync_threshold
- renderstats (wasn't even registered in the console!)
- resetspecialmusic
- resume
- samplerate
- stretch
- tailspickup
2023-08-24 04:52:41 -07:00
James R
feada89364 Port Sound Test (Stereo) code to new music system
Much of struct soundtest was removed, since the music
system handles its functionality now.
2023-08-06 17:31:45 -07:00
James R
39f46a0f20 Replace music handling
(This commit does not compile. Sound test and tunes
command code needs to be ported after this.)

This is a big one. Here's the rundown:

The old music system was very direct, much of the time
just a proxy to the real sound API in i_sound.h.

You could change the music on command, but there wasn't
a consistent way to prevent some music from playing over
others. P_RestoreMusic is one example of needing to
address this problem. The jingles system was intended as
another solution. Furthermore, sound test (Stereo) has its
own needs.

I am removing all of that. Music handling in general is
now a very deliberate system, kind of similar to jingles.

In the new system, "tunes" are registered. The tune stores
info such as whether it should loop or fade out. Most of
the configuration is intended to be initialized only ONCE.
Tunes can be mapped to an actual music lump. They can be
remapped at any time too.

Tunes are also configured with a priority number. This
determines which tune is heard, if multiple are supposed
to be playing at a time. You can even tell a tune how long
it should play, so it's unnecessary to track this with
bespoke timers.
2023-08-06 17:31:45 -07:00
James R
646701c55c Remove Lua Music API
In preparation for replacing music handling entirely.
Eventually, we can make a new Lua API.
2023-08-05 16:26:53 -07:00
toaster
2dbb11af89 Use S_AttemptToRestoreMusic to handle music after server connection
Resolves #473
2023-07-22 19:24:25 +01:00
toaster
dc8a97475f musicdef_t: Add an important parameter
If set to true/yes/1, add at the head of the sequence in S_PopulateSoundTestSequence.
Otherwise, append to the tail.
2023-04-08 12:32:47 +01:00
toaster
5dd4e36b72 S_StopMusicCredit: Make killing a music credit a request, not a guarantee
Fixes some menu events causing Stereo-caused music credits to disappear
2023-04-08 12:32:47 +01:00
toaster
9540cd7c88 SOUNDTEST_FADEOUTSECONDS: Make 5 seconds instead of 3. 2023-04-08 12:32:46 +01:00
toaster
1bdbfdf22b S_TickSoundTest: Clean up significantly.
- Introduce comments to make flow understandable.
- Abstract the number of seconds in the fade out (previously handled across multiple places) into SOUNDTEST_FADEOUTSECONDS.
- Make all next/conclude song cases for autosequence and non-looping track handled in one place.
    - Fixes the case where a non-looping track could stop the Sound Test even in autosequence mode.
2023-04-08 12:32:46 +01:00
Oni
dec66ee9b1 Merge branch 'jam-project' into 'master'
Stereo Mode

See merge request KartKrew/Kart!1097
2023-03-31 01:07:38 +00:00
toaster
027fd2be04 Time elapsed functionality
- Shown on the menu
- soundtest.autosequence
    - Plays all songs in sequence, skipping over the soundtest entry.
        - Plays each looping song twice (and fades out if it's the last one in the musicdef's tracks)
        - Plays non-looping songs once with no fade ever
   - Disabled when S_SoundTestStop called
- Songs that end outside of autosequence will now stop the visible Playing.
2023-03-31 00:27:20 +01:00
toaster
fe8db18066 Store non-looping information in musicdef
Preface with a `\` (ie `Lump VOTEEA,\VOTEEB`) to indicate the preference is not to loop.
This is for special jingles that have definitive conclusions.
2023-03-30 23:28:51 +01:00
toaster
2c0645cba2 Improve Stereo text header drawing
- Use LSTitleHighString at the top of the menu for the music's title/Sound Test
- Only show Track for relevant entries
- Show cv_soundtest.value in hex for that Classic Sonic soundtest flavour
2023-03-30 18:36:09 +01:00
toaster
2446e53ff9 Start on Stereo Mode visuals
- Buttons have been implemented.
    - They push down when you press an input.
        - FUTURE WORK: Back doesn't get the opportunity to do so. Delay the exit of this menu?
    - Certain ones have special properties.
        - PLAY locks down when playing and not paused
        - PAUSE locks down when playing and paused
        - TRACK is a wheel/slidery thing
        - BACK should get pressed when you're exiting (see previous FUTURE WORK)
        - FUTURE WORK: The detection of these currently uses magic numbers.
- The Stereo itself is now drawn.
    - FUTURE WORK: The screen's contents are still the testing visuals.
2023-03-29 16:14:38 +01:00
toaster
bc07cfa94b S_SoundTestTogglePause
Instead of a fake S_StopMusic-based Pause, make it use the S_PauseAudio/S_ResumeAudio system.
2023-03-29 13:39:40 +01:00
James R
8bd6c9cffb Add musicdef->debug_volume, add musicdef console command
musicdef -volume <volume> changes the volume of the
currently playing song. The change persists through song
changes and is visible with devmode music.

musicdef -show prints all changed musicdef volumes.

The intention of this command is to allow editing music
volumes quickly in game, without having to quit, edit
music.pk3, and reopen the game.
2023-03-29 01:22:40 -07:00
toaster
8bd3786895 S_UpdateSoundTest: Add a "dotracks" parameter
- Integrates the maps with multiple tracks into the Next/Prev sequence, if true.
- For testing, currently active - but I may add features later that would be more fitting.
2023-03-28 13:06:39 +01:00
toaster
90d5cb3752 S_PopulateSoundTestSequence: Sound Test sequence system
- Called on game start and file add
- Creates a seperate linked list sequence for map-related order
    - All tracks without associated map in level order
    - All tracks with maps in a cup in cup order
    - All tracks with maps in Lost and Found
2023-03-28 01:41:53 +01:00
toaster
8f592c196f Stereo mode
- Minimum viable implementation
- New horizontal menu
    - FUTURE WORK: visuals are extremely basic
- Accessible from both Extras and in-game Pause if SECRET_SOUNDTEST is unlocked
- Rather than the Shadow-the-Hedgehog style free select of SRB2's Sound Test, it's a Best Of The Hacks And Fan Music Sega CD player.
    - Back
        - Exit menu
    - Stop
       - Stops Stereo music entirely
    - Pause
      - Pauses Stereo music without losing place in sequence
          - FUTURE WORK: This should probably just pause the actual player ala minimised viewport
    - Play
      - Begins Stereo music on non-NULL musicdef entry
    - Track
      - For NULL soundtest entry:
          - Switches between sfx
      - For musicdefs with multiple tracks:
          - Switches between them
    - Prev and Next
        - Changes musicdef entry
            - FUTURE WORK: This is extremely naive and doesn't respect the following
                - Cup order
                - Unlocks
- Overrides all game-requested music changes when in Play or Pause mode
    - This makes it an actual fun in-game feature as a menuification of the `tunes` command, not just a pure novelty.
2023-03-25 23:37:07 +00:00
toaster
a0fa45bcec S_PlaysimMusicDisabled
Simplifies/unifies conditions that except regular music play other sections of the game can modify
2023-03-25 22:16:58 +00:00
toaster
62a573090b musicdef_t: Permit multiple tracks (music lumps) associated with the same entry
- Now supports "Lump MENU2,MENU3".
- Automagically appends (A) and (B) instead of having to user-specify them as part of the track name.
2023-03-23 20:08:44 +00:00
toaster
cb4d9b527e musicdef_t: Add hash field
Slight optimisation for S_FindMusicDef, but will net us some big wins with our next feature.
2023-03-22 23:34:01 +00:00
James R
253489b75c Merge branch 'vol-cvar-defaults' into 'master'
Normalize all volume scales to 0-100

See merge request KartKrew/Kart!1030
2023-03-12 03:50:57 +00:00
Eidolon
901ebdb5b0 Implement musicdef volume in new mixer 2023-03-09 15:12:24 -06:00
Eidolon
610351b872 Normalize all volume scales to 0-100 2023-03-08 15:22:29 -06:00
wolfy852
2c162b50a3 mapmusrng variable, proper sync, cleanup 2023-02-11 08:16:37 -06:00
James R
4e51ad6c78 Add devmode music
Song: <NOTHING>

        Song:    DEMOZ
      Format:      OGG
      Volume:   50/100
      Loop A: 00:00.65
      Loop B: 01:06.00
     Elapsed: 01:09.00
2023-01-12 03:29:43 -08:00
James R
49c5c785bf Remove musictype_t, S_MusicType and I_SongType return implementation string
Lua API change: S_MusicType now returns string instead of number
2023-01-12 02:50:02 -08:00
Eidolon
be021baa02 Add extern "C" in C++ to all headers 2022-12-30 19:26:16 -06:00
toaster
ac423b3461 Further changes to musicdef based on discussion with Gunla
- Add "author" and "originalcomposers" fields
    - "author" is for remixes and original compositions, can be ommitted
    - "originalcomposers" will not be visible mid-game, but will be visible in music test. Stores original sound team info
- Store all strings as Zone memory instead of static arrays, since not every field will be relevant for every track
2022-12-17 17:36:44 +00:00
toaster
81fec17bb4 First Musicdef changes in preparation for music test
- Add `title` field, to permit seperation from `source`
- Store current displayed string as zone memory, to prevent repeated recalculation
2022-12-17 16:39:10 +00:00
James R
479f9e4d57 S_ReducedVFXSoundAtVolume: use player_t* 2022-11-27 17:27:22 -08:00
James R
051b4f8935 Always use typedef name instead of struct name
mobj_t instead of struct mobj_s
2022-11-27 17:21:40 -08:00
James R
b5310a1f68 Add typedef.h
All typedefs for structs that were present in other header
files have been moved to here. (Except node_t because the
renderer and netcode both define node_t LOL.)
2022-11-27 17:21:40 -08:00
Sally Coolatta
e331910fe3 Reduce VFX toggle
Can be used to disable VFX, so it can only appear if its owner is a display player. If no owner is provided, then it will be removed entirely.

Applied to most things that Ivo asked for
2022-11-26 20:12:00 -05:00
James R
ceeda5c826 Lua hooklib refactor squash
commit 8d382e49fb3411cad1a3ef5ee1e546030c3a9d93
Author: James R <justsomejames2@gmail.com>
Date:   Tue Nov 17 04:14:45 2020 -0800

    Big Large Lua Hooklib Refactor

    * Hooks are no longer a mess of lua boiler plate. Helper functions reduce hooks
      to, at the most basic level, only two calls.
    * Lua tables (the array part) are used to index hooks. Such tables contain only
      hooks of the same type.
    * Hook types are defined in one place so you no longer need to sync up the enum
      and name array.

commit 3f7c2ae0b0c450cb8993ffe7664ead05fd9f5000
Author: James R <justsomejames2@gmail.com>
Date:   Thu Dec 10 05:39:53 2020 -0800

    Avoid using multiple tables to fetch hook

    String hooks still use a table to fetch the id, but the id indexes a C array.

    Also I fixed a missing call in the MusicChange hook.

commit dbd8903a538e7b87061795ce27ec5c72c26743af
Author: James R <justsomejames2@gmail.com>
Date:   Thu Dec 10 08:50:23 2020 -0800

    Use ref for pushing error handler

commit 9ddeb5f5896de0407b2b6fce8c949295a9e6d5e4
Author: James R <justsomejames2@gmail.com>
Date:   Sat Dec 12 02:05:21 2020 -0800

    Resolve GameQuit hook conflicts

commit 93e4f43e4b3a24fc2d8032e8730cbf427e75b297
Author: James R <justsomejames2@gmail.com>
Date:   Sat Dec 12 03:06:57 2020 -0800

    Hooklib macros names -> uppercase + documentation

commit 80fe39bbd1433c91131d2cdb36ba709f37d3b5f3
Author: Steel Titanium <steeltitanium1@gmail.com>
Date:   Mon May 3 01:40:02 2021 -0400

    Fix MusicChange hook not returning some values correctly

commit 46ca9613c68422a26910cbb034a9f3e004a967c3
Author: James R <justsomejames2@gmail.com>
Date:   Thu Jun 10 18:09:39 2021 -0700

    Pop hook id fetched from table

commit a75d4a1c360874a3c301a494e38ea49cd89b6616
Author: James R <justsomejames2@gmail.com>
Date:   Tue Jul 6 18:42:08 2021 -0700

    Automatically count hook values

commit 331329306cad257d52f84e47a92d9214d9eaa8d3
Author: James R <justsomejames2@gmail.com>
Date:   Tue Jul 6 19:12:47 2021 -0700

    Refactor hook ref allocation

commit ae57b6ca8664e00ff4d9544339dbf29a41138040
Author: James R <justsomejames2@gmail.com>
Date:   Tue Jul 6 20:23:38 2021 -0700

    MORE MACROS

    I just can't stop myself!

commit b4fa98d2fbab180f487ce3efedb8ab715e5f3390
Author: James R <justsomejames2@gmail.com>
Date:   Wed Jul 7 00:23:51 2021 -0700

    Refactor hudlib hooks to hooklib

    HUD hooks now meet the standard of hooklib. HUD registry
    magic numbers are gone.

    HUD hooks may also be added using addHook.

        addHook('HUD', fn[, type])

    hud.add still exists, but the intention is to remove it
    eventually.

commit cb619fad5d762ba8d8dd20e9a979a04ced7c943f
Author: SMS Alfredo <65426124+SMS-Alfredo@users.noreply.github.com>
Date:   Wed Jul 7 19:57:28 2021 -0500

    Rebase on !1307

commit f271f88c7f3084523a03ca7f47060d6527724796
Author: LJ Sonic <lamr@free.fr>
Date:   Sun Dec 5 17:59:33 2021 +0100

    Fix MusicChange hook crashing when called

    BRUH MOMENT BRUH MOMENT
    PREPARE THE HALL OF SHAME

commit 0a0c17da7c793ec29e80c5bdaa66b02da0884078
Author: James R <justsomejames2@gmail.com>
Date:   Tue Feb 1 02:27:27 2022 -0800

    PARANOIA: I_Error if mobj hook is called with MT_NULL

commit 86336d6bed80bee6f8168078aa8856109091e50f
Author: katsy <katmint@live.com>
Date:   Mon Mar 7 18:33:15 2022 -0600

    remove MODID check from hooklib to fix compile issue
2022-09-05 11:56:04 -07:00