Skip to content

Commit

Permalink
Merge branch '5.4' into newartwork
Browse files Browse the repository at this point in the history
  • Loading branch information
Ada18980 committed Oct 26, 2024
2 parents 5659f61 + bf58dad commit 63e8a6a
Show file tree
Hide file tree
Showing 57 changed files with 5,223 additions and 4,569 deletions.
53 changes: 53 additions & 0 deletions Data/ModelList_Gags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,15 @@ AddModel({
Invariant: true,
MorphPoses: {MouthNeutral: "_TeethDeep", MouthSurprised: "_Teeth", MouthPout: "_TeethDeep", MouthDistracted: "_Teeth"},
},
{ Name: "BallTeeth", Layer: "Gag", Pri: 1.1,
Sprite: "Ball",
OffsetX: 942,
OffsetY: 200,
Invariant: true,
TieToLayer: "Ball",
Poses: {MouthNeutral: true, MouthSurprised: true, MouthPout: true, MouthDistracted: true},
MorphPoses: {MouthNeutral: "_TeethDeep", MouthSurprised: "_Teeth", MouthPout: "_TeethDeep", MouthDistracted: "_Teeth"},
},
{ Name: "Strap", Layer: "GagStraps", Pri: 15,
Sprite: "BallStrap",
OffsetX: 942,
Expand Down Expand Up @@ -1008,6 +1017,41 @@ AddModel({
AddModel(GetModelFashionVersion("GagMetalRiveted", true));


AddModel({
Name: "GagMetalRivetedStrap",
Folder: "GagMetal",
Parent: "GagMetal",
TopLevel: false,
Group: "Mouth",
Restraint: true,
Categories: ["Restraints","Gags","Metal"],
AddPose: ["FaceCoverGag"],
Layers: ToLayerMap([
...GetModelLayers("GagMetalRiveted"),
{ Name: "OTNStrap", Layer: "GagFlat", Pri: 30.1,
OffsetX: 942,
OffsetY: 200,
Invariant: true,
HideWhenOverridden: true,
InheritColor: "Strap",
TieToLayer: "OTN",
NoOverride: true,
},
{ Name: "OTNStrapRivets", Layer: "GagFlat", Pri: 30.2,
OffsetX: 942,
OffsetY: 200,
Invariant: true,
HideWhenOverridden: true,
InheritColor: "StrapRivets",
TieToLayer: "OTN",
NoOverride: true,
},
])
});

AddModel(GetModelFashionVersion("GagMetalRivetedStrap", true));


AddModel({
Name: "SmoothBallGag",
Folder: "GagMetal",
Expand All @@ -1024,6 +1068,15 @@ AddModel({
Invariant: true,
MorphPoses: {MouthNeutral: "_TeethDeep", MouthSurprised: "_Teeth", MouthPout: "_TeethDeep", MouthDistracted: "_Teeth"},
},
{ Name: "BallTeeth", Layer: "Gag", Pri: 1.1,
Sprite: "Ball",
OffsetX: 942,
OffsetY: 200,
Invariant: true,
TieToLayer: "Ball",
Poses: {MouthNeutral: true, MouthSurprised: true, MouthPout: true, MouthDistracted: true},
MorphPoses: {MouthNeutral: "_TeethDeep", MouthSurprised: "_Teeth", MouthPout: "_TeethDeep", MouthDistracted: "_Teeth"},
},
{ Name: "Strap", Layer: "GagStraps", Pri: 15,
Sprite: "BallStrap",
OffsetX: 942,
Expand Down
4 changes: 3 additions & 1 deletion Data/Models.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ let RenderCharacterLock = new Map();

let KDFilterCacheToDestroy: PIXIFilter[] = [];
let KDRenderTexToDestroy: PIXITexture[] = [];
let KDMeshToDestroy: PIXIMesh[] = [];
let KDSpritesToCull: PIXISprite[] = [];

let KDCulling = true;
Expand Down Expand Up @@ -400,7 +401,8 @@ function DrawCharacter(C: Character, X: number, Y: number, Zoom: number, IsHeigh
// Refresh the container!
DrawCanvas.removeChild(MC.Containers.get(containerID).Mesh);
MC.Containers.get(containerID).Container.destroy();
MC.Containers.get(containerID).Mesh.destroy();
//MC.Containers.get(containerID).Mesh.destroy();
KDMeshToDestroy.push(MC.Containers.get(containerID).Mesh);
KDRenderTexToDestroy.push(MC.Containers.get(containerID).RenderTexture);
MC.Containers.delete(containerID);
MC.ContainersDrawn.delete(containerID);
Expand Down
Binary file added Game/Audio/Chain1.ogg
Binary file not shown.
Binary file added Game/Audio/Chain2.ogg
Binary file not shown.
Binary file added Game/Audio/Chain3.ogg
Binary file not shown.
Binary file added Game/Audio/Chain4.ogg
Binary file not shown.
Binary file added Game/Audio/Leather1.ogg
Binary file not shown.
Binary file added Game/Audio/Leather2.ogg
Binary file not shown.
Binary file added Game/Audio/Leather3.ogg
Binary file not shown.
Binary file added Game/Audio/Leather4.ogg
Binary file not shown.
Binary file added Game/Audio/Rope1.ogg
Binary file not shown.
Binary file added Game/Audio/Rope2.ogg
Binary file not shown.
Binary file added Game/Audio/Rope3.ogg
Binary file not shown.
Binary file added Game/Audio/Rope4.ogg
Binary file not shown.
Binary file added Game/Audio/Rubber1.ogg
Binary file not shown.
Binary file added Game/Audio/Rubber2.ogg
Binary file not shown.
Binary file added Game/Audio/Rubber3.ogg
Binary file not shown.
Binary file added Game/Audio/Rubber4.ogg
Binary file not shown.
Binary file added Game/Audio/ZipUp.ogg
Binary file not shown.
Binary file added Game/Bullets/ColdFeet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Game/Bullets/ColdFeetHit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Game/Bullets/ZoneOfFrost.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Game/Bullets/ZoneOfFrostHit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions Game/Changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ TODO:
TODO remove hogtie when released
TODO Add Cuddle play type

5.3.50
- More sound effects
- Giving Good Girl Gifts to NPCs will now temporarily increase their submissiveness
- Field of Frost has been split into progressively bigger upcasts.

5.3.49
- Cursed item offer from enemies now includes a real curse
- Added more enemy journal entries
- Fixed the names of many spells not being defined

5.3.48
- MODDERS: Added "OverCorset", "UpperArmStrapsBack", TightSleeveLeft/Right, and "Apron" layer
- Added heavy maid knight uniform
Expand Down
Binary file added Game/Spells/ColdFeet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified Game/Spells/Sleet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Game/Spells/ZoneOfFrost.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions Game/src/base/KinkyDungeonDraw.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4734,6 +4734,13 @@ function KDDoGraphicsSanitize(): void {
t.destroy(true);
}
KDRenderTexToDestroy = [];
for (let t of KDMeshToDestroy) {
t.destroy({
children: true,
baseTexture: true,
});
}
KDMeshToDestroy = [];
for (let f of KDFilterCacheToDestroy) {
f.destroy();
}
Expand Down
45 changes: 23 additions & 22 deletions Game/src/collection/KDRecyclerList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,23 +185,23 @@ let KDRecyclerCategories: Record<string, KDBlueprintCategory> = {
items: [


KDAutoGenRestraintBlueprint("TrapCuffs", "Leather", "", 1.2),
KDAutoGenRestraintBlueprint("ThumbCuffsNew", "Leather", "", 0.8),
KDAutoGenRestraintBlueprint("HighsecShackles", "Leather", "", 1.5),
KDAutoGenRestraintBlueprint("Irish8Cuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("TrapLegirons", "Leather", ""),
KDAutoGenRestraintBlueprint("LegShackles", "Leather", ""),
KDAutoGenRestraintBlueprint("FeetShackles", "Leather", ""),
KDAutoGenRestraintBlueprint("AnkleIrish8Cuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("ExpBoots", "Leather", ""),
KDAutoGenRestraintBlueprint("SteelArmCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("TrapCuffs", "Metal", "", 1.2),
KDAutoGenRestraintBlueprint("ThumbCuffsNew", "Metal", "", 0.8),
KDAutoGenRestraintBlueprint("HighsecShackles", "Metal", "", 1.5),
KDAutoGenRestraintBlueprint("Irish8Cuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("TrapLegirons", "Metal", ""),
KDAutoGenRestraintBlueprint("LegShackles", "Metal", ""),
KDAutoGenRestraintBlueprint("FeetShackles", "Metal", ""),
KDAutoGenRestraintBlueprint("AnkleIrish8Cuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("ExpBoots", "Metal", ""),
KDAutoGenRestraintBlueprint("SteelArmCuffs", "Metal", ""),

KDAutoGenRestraintBlueprint("MithrilCollar", "Leather", "", 1, {
KDAutoGenRestraintBlueprint("MithrilCollar", "Metal", "", 1, {
Metal: 10,
}),
KDAutoGenRestraintBlueprint("MithrilArmCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("MithrilLegCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("MithrilAnkleCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("MithrilArmCuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("MithrilLegCuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("MithrilAnkleCuffs", "Metal", ""),

]
},
Expand All @@ -210,23 +210,24 @@ let KDRecyclerCategories: Record<string, KDBlueprintCategory> = {
prereq: () => {return true;},
items: [

KDAutoGenRestraintBlueprint("BlacksteelArmCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("BlacksteelLegCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("BlacksteelAnkleCuffs", "Leather", ""),
KDAutoGenRestraintBlueprint("BlacksteelArmCuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("BlacksteelLegCuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("BlacksteelAnkleCuffs", "Metal", ""),
KDAutoGenRestraintBlueprint("BlacksteelMuzzleGag", "Metal", ""),


KDAutoGenRestraintBlueprint("ObsidianCollar", "Leather", "", 1, undefined,
KDAutoGenRestraintBlueprint("ObsidianCollar", "Metal", "", 1, undefined,
{Rune: 1}, 10
),
KDAutoGenRestraintBlueprint("ObsidianArmCuffs", "Leather", "", 1, undefined,
KDAutoGenRestraintBlueprint("ObsidianArmCuffs", "Metal", "", 1, undefined,
{Rune: 1}, 10),
KDAutoGenRestraintBlueprint("ObsidianLegCuffs", "Leather", "", 1, undefined,
KDAutoGenRestraintBlueprint("ObsidianLegCuffs", "Metal", "", 1, undefined,
{Rune: 1}, 10),
KDAutoGenRestraintBlueprint("ObsidianAnkleCuffs", "Leather", "", 1, undefined,
KDAutoGenRestraintBlueprint("ObsidianAnkleCuffs", "Metal", "", 1, undefined,
{Rune: 1}, 10),


KDAutoGenRestraintBlueprint("SteelMuzzleGag", "Leather", ""),
KDAutoGenRestraintBlueprint("SteelMuzzleGag", "Metal", ""),
]
},
Chastity: {
Expand Down
139 changes: 129 additions & 10 deletions Game/src/dialogue/KinkyDungeonDialogue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2009,8 +2009,19 @@ function KDYesNoBasic (
Ally: boolean = false,
Flags: { name: string, duration: number, floors?: number }[] = [],
CurseList: string = "", // Overrides Lock
HexList: string = "",
EnchantList: string = "",
hexlevelmin: number = 0,
hexlevelmax: number = 10,
enchantlevelmin: number = 0,
enchantlevelmax: number = 10,



): KinkyDialogue
{


return KDYesNoTemplate(
(refused) => { // Setup function. This is run when you click Yes or No in the start of the dialogue
for (let f of Flags) {
Expand Down Expand Up @@ -2099,7 +2110,16 @@ function KDYesNoBasic (
1000));

}
KinkyDungeonAddRestraintIfWeaker(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r), ((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true, curse ? undefined : Lock, true, false, undefined, KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined,
if (HexList || EnchantList) {
DialogueAddCursedEnchantedHexed(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r),
enemy,
curse, HexList, EnchantList,
hexlevelmin, hexlevelmax,
enchantlevelmin, enchantlevelmax);
} else
KinkyDungeonAddRestraintIfWeaker(
KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r),
((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true, curse ? undefined : Lock, true, false, undefined, KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined,
curse);
KDAddOffer(1);
let num = count;
Expand All @@ -2122,9 +2142,18 @@ function KDYesNoBasic (
{
allowLowPower: true
});
if (r)
KinkyDungeonAddRestraintIfWeaker(r, ((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true,
curse ? undefined : Lock, true, false, undefined, KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined, curse);
if (r) {
if (HexList || EnchantList) {
DialogueAddCursedEnchantedHexed(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r),
enemy,
curse, HexList, EnchantList,
hexlevelmin, hexlevelmax,
enchantlevelmin, enchantlevelmax);
} else
KinkyDungeonAddRestraintIfWeaker(r, ((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true,
curse ? undefined : Lock, true, false, undefined, KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined, curse);

}
}
return false;
},(refused) => { // No function. This happens when the user refuses.
Expand Down Expand Up @@ -2163,6 +2192,13 @@ function KDYesNoBasic (
1000));

}
if (HexList || EnchantList) {
DialogueAddCursedEnchantedHexed(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r),
enemy,
curse, HexList, EnchantList,
hexlevelmin, hexlevelmax,
enchantlevelmin, enchantlevelmax);
} else
KinkyDungeonAddRestraintIfWeaker(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r), ((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true,
curse ? undefined : Lock, true, false, undefined, KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined, curse);
KDAddOffer(1);
Expand All @@ -2184,11 +2220,19 @@ function KDYesNoBasic (
{
allowLowPower: true
});
if (r)
if (r) {
if (HexList || EnchantList) {
DialogueAddCursedEnchantedHexed(KinkyDungeonGetRestraintByName(KDGameData.CurrentDialogMsgData.Data_r),
enemy,
curse, HexList, EnchantList,
hexlevelmin, hexlevelmax,
enchantlevelmin, enchantlevelmax);
} else
KinkyDungeonAddRestraintIfWeaker(r, ((enemy ? Math.min(10, enemy.Enemy.power) + KDEnemyRank(enemy) : 0) || 0), true,
curse ? undefined : Lock, true, false, undefined,
KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined,
curse);
curse ? undefined : Lock, true, false, undefined,
KDGetSpeakerFaction(), KinkyDungeonStatsChoice.has("MagicHands") ? true : undefined,
curse);
}
}
} else {
KDIncreaseOfferFatigue(10);
Expand Down Expand Up @@ -2403,8 +2447,8 @@ function DialogueBringSpecific(x: number, y: number, enemy: entity): entity {
* Returns if you are submissive enough to be played with by this enemy
* @param enemy
*/
function KDIsSubmissiveEnough(_enemy: entity): boolean {
let diff = KDPersonalitySpread(20, -20, -51);
function KDIsSubmissiveEnough(_enemy?: entity): boolean {
let diff = KDPersonalitySpread(20, -20, -51, _enemy);
if (KinkyDungeonGoddessRep.Ghost >= diff) return true;
return false;
}
Expand Down Expand Up @@ -2498,3 +2542,78 @@ function KDAggroMapFaction() {
if (KDMapData.JailFaction && KDMapData.JailFaction[0])
KinkyDungeonAggroFaction(KDMapData.JailFaction[0]);
}


function DialogueAddCursedEnchantedHexed(
restraint: restraint,
enemy?: entity,
Curse?: string,
HexList?: string,
EnchantList?: string,
hexlevelmin: number = 0,
hexlevelmax: number = 10,
enchantlevelmin: number = 0,
enchantlevelmax: number = 10,
) {

let unlockcurse = null;
let hexVariant = "";
let enchantVariant = "";
let enchant_extra = [];
let hex_extra = [];
let enchants = 1;
let curses = 1;
if (HexList) {
while (curses > 0) {
let curs = KDGetByWeight(KinkyDungeonGetHexByListWeighted(HexList, restraint.name,
false, hexlevelmin, hexlevelmax, [hexVariant, ...hex_extra]));
if (!hexVariant) {
hexVariant = curs;
} else {
hex_extra.push(curs);
}
curses -= 1;
}
}
if (EnchantList) {
while (enchants > 0) {
let ench = KDGetByWeight(
KinkyDungeonGetEnchantmentsByListWeighted(EnchantList, ModifierEnum.restraint,
restraint.name, false, enchantlevelmin, enchantlevelmax,
[enchantVariant, ...enchant_extra])
);
if (!enchantVariant) {
enchantVariant = ench;
} else {
enchant_extra.push(ench);
}
enchants -= 1;
}
}
if (Curse) {
unlockcurse = Curse;
}
if (hexVariant || enchantVariant) {
let events: KinkyDungeonEvent[] = JSON.parse(JSON.stringify(KDRestraint({name: restraint.name}).events || []));
let variant: KDRestraintVariant = {
template: restraint.name,
events: events,
};
if (hexVariant) {
events.push(...KDEventHexModular[hexVariant].events({variant: variant}));
}
for (let c of hex_extra) {
events.push(...KDEventHexModular[c].events({variant: variant}));
}
if (enchantVariant) {
events.push(...KDEventEnchantmentModular[enchantVariant].types[KDModifierEnum.restraint].events(restraint.name, undefined, hexVariant, enchantVariant, enchant_extra, {variant: variant}));
}
for (let e of enchant_extra) {
events.push(...KDEventEnchantmentModular[e].types[KDModifierEnum.restraint].events(restraint.name, undefined, hexVariant, enchantVariant, enchant_extra, {variant: variant}));
}

KDEquipInventoryVariant(variant, KDEventEnchantmentModular[enchantVariant]?.prefix, 0, true, undefined, true, false,
(enemy ? KDGetFaction(enemy) : undefined) || (unlockcurse ? "Curse" : undefined), true, unlockcurse, enemy, false, undefined, undefined, KDEventEnchantmentModular[enchantVariant]?.suffix);

}
}
2 changes: 1 addition & 1 deletion Game/src/dialogue/KinkyDungeonDialogueList.ts
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ let KDDialogue: Record<string, KinkyDialogue> = {
"OfferLeather": KDYesNoBasic("OfferLeather", ["Leather"], ["Ghost"], ["armbinderSpell", "straitjacketSpell", "legbinderSpell", "harnessSpell", "gagSpell", "blindfoldSpell", "leathercuffsSpell"], [55, 0, 75, 0], [-25, 0, 40, 15], 1, 3),
"OfferRopes": KDYesNoBasic("OfferRopes", ["Rope"], ["Ghost"], ["ropeRestraints", "ropeRestraints2", "ropeRestraintsHogtie", "ropeRestraintsWrist", "ropeAuxiliary"], [55, 0, 75, 0], [-25, 0, 40, 15], 3, 5, "Red"),
"OfferChastity": KDYesNoBasic("OfferChastity", ["Metal"], ["Ghost"], ["genericChastity"], [55, 0, 75, 0], [-25, 0, 40, 15], 1, 1, "Gold", false, [{name: "ChastityOffer", duration: 3000}]),
"OfferCursed": KDYesNoBasic("OfferCursed", ["Metal"], ["Ghost"], ["leatherRestraints", "noBelt", "leatherHeels"], [55, 0, 75, 0], [-25, 0, 40, 15], 1, 1, "Gold", true, [{name: "CursedOffer", duration: 250}], "Common"),
"OfferCursed": KDYesNoBasic("OfferCursed", ["Metal"], ["Ghost"], ["leatherRestraints", "noBelt", "leatherHeels"], [55, 0, 75, 0], [-25, 0, 40, 15], 1, 1, "Gold", true, [{name: "CursedOffer", duration: 250}], "Common", "Common"),



Expand Down
Loading

0 comments on commit 63e8a6a

Please sign in to comment.