Clean repo for open source release
Remove build artifacts, dev tool configs, unused dependencies, and third-party source dumps. Add proper README, update .gitignore, clean up Makefile.
This commit is contained in:
296
src/main/java/com/tiedup/remake/util/GagMaterial.java
Normal file
296
src/main/java/com/tiedup/remake/util/GagMaterial.java
Normal file
@@ -0,0 +1,296 @@
|
||||
package com.tiedup.remake.util;
|
||||
|
||||
import com.tiedup.remake.core.ModConfig;
|
||||
|
||||
/**
|
||||
* GagMaterial DNA - Defines the "sound" and behavior of different gag materials.
|
||||
*
|
||||
* Phase 15: Added PANEL, LATEX, RING, BITE, SPONGE, BAGUETTE
|
||||
* Phase 16: Enhanced with phonetic properties for realistic speech transformation
|
||||
*/
|
||||
public enum GagMaterial {
|
||||
// Original materials
|
||||
CLOTH(
|
||||
new String[] { "m", "h", "f", "p" },
|
||||
new String[] { "ph", "ff", "mm" },
|
||||
0.4f,
|
||||
15.0,
|
||||
"mm",
|
||||
"ah", // dominant consonant, vowel
|
||||
0.3f,
|
||||
0.5f,
|
||||
0.9f,
|
||||
0.3f,
|
||||
0.6f // plosive, fricative, nasal, liquid, vowel bleed
|
||||
),
|
||||
BALL(
|
||||
new String[] { "b", "h", "m", "p" },
|
||||
new String[] { "oo", "uu", "mm", "ou" },
|
||||
0.2f,
|
||||
10.0,
|
||||
"mm",
|
||||
"uu",
|
||||
0.1f,
|
||||
0.2f,
|
||||
0.9f,
|
||||
0.1f,
|
||||
0.4f
|
||||
),
|
||||
TAPE(
|
||||
new String[] { "m", "n" },
|
||||
new String[] { "mm", "nn", "mnm" },
|
||||
0.05f,
|
||||
5.0,
|
||||
"mm",
|
||||
"mm",
|
||||
0.0f,
|
||||
0.1f,
|
||||
0.8f,
|
||||
0.0f,
|
||||
0.1f
|
||||
),
|
||||
STUFFED(
|
||||
new String[] { "m" },
|
||||
new String[] { "mm" },
|
||||
0.0f,
|
||||
3.0,
|
||||
"mm",
|
||||
"mm",
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.5f,
|
||||
0.0f,
|
||||
0.0f
|
||||
),
|
||||
|
||||
// Phase 15: New materials
|
||||
PANEL(
|
||||
new String[] { "m", "n" },
|
||||
new String[] { "mm", "nn" },
|
||||
0.05f,
|
||||
4.0,
|
||||
"mm",
|
||||
"mm",
|
||||
0.0f,
|
||||
0.1f,
|
||||
0.7f,
|
||||
0.0f,
|
||||
0.1f
|
||||
),
|
||||
LATEX(
|
||||
new String[] { "m", "h" },
|
||||
new String[] { "mm", "uu" },
|
||||
0.1f,
|
||||
6.0,
|
||||
"mm",
|
||||
"uu",
|
||||
0.05f,
|
||||
0.15f,
|
||||
0.8f,
|
||||
0.05f,
|
||||
0.2f
|
||||
),
|
||||
RING(
|
||||
new String[] { "a", "h", "l" },
|
||||
new String[] { "aa", "ah", "la" },
|
||||
0.5f,
|
||||
12.0,
|
||||
"h",
|
||||
"ah",
|
||||
0.7f,
|
||||
0.8f,
|
||||
0.95f,
|
||||
0.8f,
|
||||
0.9f // Very open, most sounds pass
|
||||
),
|
||||
BITE(
|
||||
new String[] { "h", "g", "n" },
|
||||
new String[] { "eh", "ah", "ng" },
|
||||
0.3f,
|
||||
10.0,
|
||||
"gh",
|
||||
"eh",
|
||||
0.4f,
|
||||
0.6f,
|
||||
0.9f,
|
||||
0.5f,
|
||||
0.7f
|
||||
),
|
||||
SPONGE(
|
||||
new String[] { "m" },
|
||||
new String[] { "mm" },
|
||||
0.0f,
|
||||
2.0,
|
||||
"mm",
|
||||
"mm",
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.3f,
|
||||
0.0f,
|
||||
0.0f // Absorbs almost everything
|
||||
),
|
||||
BAGUETTE(
|
||||
new String[] { "b", "m", "f" },
|
||||
new String[] { "om", "am", "um" },
|
||||
0.25f,
|
||||
8.0,
|
||||
"mm",
|
||||
"om",
|
||||
0.2f,
|
||||
0.3f,
|
||||
0.8f,
|
||||
0.2f,
|
||||
0.5f
|
||||
);
|
||||
|
||||
public final String[] consonants;
|
||||
public final String[] vowels;
|
||||
private final float defaultComprehension;
|
||||
private final double defaultTalkRange;
|
||||
|
||||
// Phase 16: Phonetic properties
|
||||
private final String dominantConsonant;
|
||||
private final String dominantVowel;
|
||||
private final float plosiveBleed; // b,d,g,k,p,t - require lip/tongue
|
||||
private final float fricativeBleed; // f,h,s,v,z - air-based
|
||||
private final float nasalBleed; // m,n - through nose
|
||||
private final float liquidBleed; // l,r - tongue-dependent
|
||||
private final float vowelBleed; // a,e,i,o,u,y - mouth shape
|
||||
|
||||
GagMaterial(
|
||||
String[] c,
|
||||
String[] v,
|
||||
float comp,
|
||||
double range,
|
||||
String domCons,
|
||||
String domVowel,
|
||||
float plosive,
|
||||
float fricative,
|
||||
float nasal,
|
||||
float liquid,
|
||||
float vowel
|
||||
) {
|
||||
this.consonants = c;
|
||||
this.vowels = v;
|
||||
this.defaultComprehension = comp;
|
||||
this.defaultTalkRange = range;
|
||||
this.dominantConsonant = domCons;
|
||||
this.dominantVowel = domVowel;
|
||||
this.plosiveBleed = plosive;
|
||||
this.fricativeBleed = fricative;
|
||||
this.nasalBleed = nasal;
|
||||
this.liquidBleed = liquid;
|
||||
this.vowelBleed = vowel;
|
||||
}
|
||||
|
||||
public float getComprehension() {
|
||||
String key = this.name().toLowerCase();
|
||||
if (
|
||||
ModConfig.SERVER != null &&
|
||||
ModConfig.SERVER.gagComprehension.containsKey(key)
|
||||
) {
|
||||
return ModConfig.SERVER.gagComprehension
|
||||
.get(key)
|
||||
.get()
|
||||
.floatValue();
|
||||
}
|
||||
return defaultComprehension;
|
||||
}
|
||||
|
||||
public double getTalkRange() {
|
||||
String key = this.name().toLowerCase();
|
||||
if (
|
||||
ModConfig.SERVER != null &&
|
||||
ModConfig.SERVER.gagRange.containsKey(key)
|
||||
) {
|
||||
return ModConfig.SERVER.gagRange.get(key).get();
|
||||
}
|
||||
return defaultTalkRange;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the dominant consonant sound for this material.
|
||||
* Used when a consonant is completely blocked.
|
||||
*/
|
||||
public String getDominantConsonant() {
|
||||
return dominantConsonant;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the dominant vowel sound for this material.
|
||||
* Used when a vowel is completely blocked.
|
||||
*/
|
||||
public String getDominantVowel() {
|
||||
return dominantVowel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bleed-through rate for plosive consonants (b,d,g,k,p,t).
|
||||
*/
|
||||
public float getPlosiveBleed() {
|
||||
return plosiveBleed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bleed-through rate for fricative consonants (f,h,s,v,z).
|
||||
*/
|
||||
public float getFricativeBleed() {
|
||||
return fricativeBleed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bleed-through rate for nasal consonants (m,n).
|
||||
*/
|
||||
public float getNasalBleed() {
|
||||
return nasalBleed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bleed-through rate for liquid consonants (l,r).
|
||||
*/
|
||||
public float getLiquidBleed() {
|
||||
return liquidBleed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bleed-through rate for vowels.
|
||||
*/
|
||||
public float getVowelBleed() {
|
||||
return vowelBleed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the effective bleed rate for a specific character.
|
||||
*/
|
||||
public float getBleedRateFor(char c) {
|
||||
char lower = Character.toLowerCase(c);
|
||||
|
||||
// Vowels
|
||||
if ("aeiouy".indexOf(lower) >= 0) {
|
||||
return vowelBleed;
|
||||
}
|
||||
|
||||
// Nasals - almost always pass
|
||||
if (lower == 'm' || lower == 'n') {
|
||||
return nasalBleed;
|
||||
}
|
||||
|
||||
// Plosives - blocked by most gags
|
||||
if ("bdgkpt".indexOf(lower) >= 0) {
|
||||
return plosiveBleed;
|
||||
}
|
||||
|
||||
// Fricatives - air-based
|
||||
if ("fhsvz".indexOf(lower) >= 0) {
|
||||
return fricativeBleed;
|
||||
}
|
||||
|
||||
// Liquids - tongue-dependent
|
||||
if (lower == 'l' || lower == 'r') {
|
||||
return liquidBleed;
|
||||
}
|
||||
|
||||
// Default to average of consonant bleeds
|
||||
return (plosiveBleed + fricativeBleed + nasalBleed + liquidBleed) / 4f;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user