mirror of
https://github.com/ninjamuffin99/Funkin.git
synced 2024-12-23 21:56:46 +00:00
Added alt vocal offsets feature, disabled alt instrumentals on Pico mix (for now?)
This commit is contained in:
parent
1515719a0f
commit
a071e90746
2
assets
2
assets
|
@ -1 +1 @@
|
||||||
Subproject commit 8af9bd2cf7122a5ad4dd2ca3939db75b11a5b239
|
Subproject commit d6e024e373ee78c53852a8e37de1956041856ad5
|
|
@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [2.2.4]
|
||||||
|
### Added
|
||||||
|
- Added `offsets.altVocals` field to apply vocal offsets when alternate instrumentals are used.
|
||||||
|
|
||||||
## [2.2.3]
|
## [2.2.3]
|
||||||
### Added
|
### Added
|
||||||
- Added `charter` field to denote authorship of a chart.
|
- Added `charter` field to denote authorship of a chart.
|
||||||
|
|
|
@ -257,13 +257,21 @@ class SongOffsets implements ICloneable<SongOffsets>
|
||||||
public var altInstrumentals:Map<String, Float>;
|
public var altInstrumentals:Map<String, Float>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The offset, in milliseconds, to apply to the song's vocals, relative to the chart.
|
* The offset, in milliseconds, to apply to the song's vocals, relative to the song's base instrumental.
|
||||||
* These are applied ON TOP OF the instrumental offset.
|
* These are applied ON TOP OF the instrumental offset.
|
||||||
*/
|
*/
|
||||||
@:optional
|
@:optional
|
||||||
@:default([])
|
@:default([])
|
||||||
public var vocals:Map<String, Float>;
|
public var vocals:Map<String, Float>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The offset, in milliseconds, to apply to the songs vocals, relative to each alternate instrumental.
|
||||||
|
* This is useful for the circumstance where, for example, an alt instrumental has a few seconds of lead in before the song starts.
|
||||||
|
*/
|
||||||
|
@:optional
|
||||||
|
@:default([])
|
||||||
|
public var altVocals:Map<String, Map<String, Float>>;
|
||||||
|
|
||||||
public function new(instrumental:Float = 0.0, ?altInstrumentals:Map<String, Float>, ?vocals:Map<String, Float>)
|
public function new(instrumental:Float = 0.0, ?altInstrumentals:Map<String, Float>, ?vocals:Map<String, Float>)
|
||||||
{
|
{
|
||||||
this.instrumental = instrumental;
|
this.instrumental = instrumental;
|
||||||
|
@ -293,11 +301,19 @@ class SongOffsets implements ICloneable<SongOffsets>
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getVocalOffset(charId:String):Float
|
public function getVocalOffset(charId:String, ?instrumental:String):Float
|
||||||
{
|
{
|
||||||
if (!this.vocals.exists(charId)) return 0.0;
|
if (instrumental == null)
|
||||||
|
{
|
||||||
return this.vocals.get(charId);
|
if (!this.vocals.exists(charId)) return 0.0;
|
||||||
|
return this.vocals.get(charId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!this.altVocals.exists(instrumental)) return 0.0;
|
||||||
|
if (!this.altVocals.get(instrumental).exists(charId)) return 0.0;
|
||||||
|
return this.altVocals.get(instrumental).get(charId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setVocalOffset(charId:String, value:Float):Float
|
public function setVocalOffset(charId:String, value:Float):Float
|
||||||
|
@ -320,7 +336,7 @@ class SongOffsets implements ICloneable<SongOffsets>
|
||||||
*/
|
*/
|
||||||
public function toString():String
|
public function toString():String
|
||||||
{
|
{
|
||||||
return 'SongOffsets(${this.instrumental}ms, ${this.altInstrumentals}, ${this.vocals})';
|
return 'SongOffsets(${this.instrumental}ms, ${this.altInstrumentals}, ${this.vocals}, ${this.altVocals})';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ class SongRegistry extends BaseRegistry<Song, SongMetadata>
|
||||||
* Handle breaking changes by incrementing this value
|
* Handle breaking changes by incrementing this value
|
||||||
* and adding migration to the `migrateStageData()` function.
|
* and adding migration to the `migrateStageData()` function.
|
||||||
*/
|
*/
|
||||||
public static final SONG_METADATA_VERSION:thx.semver.Version = "2.2.3";
|
public static final SONG_METADATA_VERSION:thx.semver.Version = "2.2.4";
|
||||||
|
|
||||||
public static final SONG_METADATA_VERSION_RULE:thx.semver.VersionRule = "2.2.x";
|
public static final SONG_METADATA_VERSION_RULE:thx.semver.VersionRule = "2.2.x";
|
||||||
|
|
||||||
|
|
|
@ -666,7 +666,7 @@ class PlayState extends MusicBeatSubState
|
||||||
// Prepare the current song's instrumental and vocals to be played.
|
// Prepare the current song's instrumental and vocals to be played.
|
||||||
if (!overrideMusic && currentChart != null)
|
if (!overrideMusic && currentChart != null)
|
||||||
{
|
{
|
||||||
currentChart.cacheInst();
|
currentChart.cacheInst(currentInstrumental);
|
||||||
currentChart.cacheVocals();
|
currentChart.cacheVocals();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -675,7 +675,7 @@ class PlayState extends MusicBeatSubState
|
||||||
|
|
||||||
if (currentChart.offsets != null)
|
if (currentChart.offsets != null)
|
||||||
{
|
{
|
||||||
Conductor.instance.instrumentalOffset = currentChart.offsets.getInstrumentalOffset();
|
Conductor.instance.instrumentalOffset = currentChart.offsets.getInstrumentalOffset(currentInstrumental);
|
||||||
}
|
}
|
||||||
|
|
||||||
Conductor.instance.mapTimeChanges(currentChart.timeChanges);
|
Conductor.instance.mapTimeChanges(currentChart.timeChanges);
|
||||||
|
@ -863,7 +863,7 @@ class PlayState extends MusicBeatSubState
|
||||||
{
|
{
|
||||||
// Stop the vocals if they already exist.
|
// Stop the vocals if they already exist.
|
||||||
if (vocals != null) vocals.stop();
|
if (vocals != null) vocals.stop();
|
||||||
vocals = currentChart.buildVocals();
|
vocals = currentChart.buildVocals(currentInstrumental);
|
||||||
|
|
||||||
if (vocals.members.length == 0)
|
if (vocals.members.length == 0)
|
||||||
{
|
{
|
||||||
|
@ -1852,7 +1852,7 @@ class PlayState extends MusicBeatSubState
|
||||||
{
|
{
|
||||||
// Stop the vocals if they already exist.
|
// Stop the vocals if they already exist.
|
||||||
if (vocals != null) vocals.stop();
|
if (vocals != null) vocals.stop();
|
||||||
vocals = currentChart.buildVocals();
|
vocals = currentChart.buildVocals(currentInstrumental);
|
||||||
|
|
||||||
if (vocals.members.length == 0)
|
if (vocals.members.length == 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -813,7 +813,7 @@ class SongDifficulty
|
||||||
* @param charId The player ID.
|
* @param charId The player ID.
|
||||||
* @return The generated vocal group.
|
* @return The generated vocal group.
|
||||||
*/
|
*/
|
||||||
public function buildVocals():VoicesGroup
|
public function buildVocals(?instId:String = ''):VoicesGroup
|
||||||
{
|
{
|
||||||
var result:VoicesGroup = new VoicesGroup();
|
var result:VoicesGroup = new VoicesGroup();
|
||||||
|
|
||||||
|
@ -839,8 +839,8 @@ class SongDifficulty
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result.playerVoicesOffset = offsets.getVocalOffset(characters.player);
|
result.playerVoicesOffset = offsets.getVocalOffset(characters.player, instId);
|
||||||
result.opponentVoicesOffset = offsets.getVocalOffset(characters.opponent);
|
result.opponentVoicesOffset = offsets.getVocalOffset(characters.opponent, instId);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue