Newer
Older
// @ts-check
/* globals CombatRenderer, XrayCombatMapper, XrayOptions, CanvasModelLayers */
/**
* @type {CanvasModelOptions<XrayOptions>}
*/
const combatXrayArse = {
name: "combatXrayArse",
scale: true,
frames: 8,
generatedOptions() {
return [];
},
defaultOptions() {
return { ...XrayCombatMapper.generateOptions(), ...this.metadata };
},
preprocess(options) {
XrayCombatMapper.mapXrayOptions(options);
if (V.debug) {
// Save options for easy lookup
CombatRenderer.options[this.name] = options;
}
},
layers: {
arse: {
srcfn(options) {
const baseSize = options.anus.size ? "_size" + options.anus.size : "";
const baseSizeDP = options.anus.doublePen ? "_dp" + options.anus.size2 : "";
return `${options.src}anal/${options.anus.base}${baseSize}${baseSizeDP}.png`;
},
showfn(options) {
return !!options.showPcArse;
},
animationfn(options) {
return options.animKeyArse;
},
filters: [],
z: CombatRenderer.indices.xrayBase,
},
penetrator: xrayArsePenetrator("npc"),
penetrator2: xrayArsePenetrator("npc2"),
condom: xrayArseCondom("npc"),
condom2: xrayArseCondom("npc2"),
cum: {
srcfn(options) {
const baseSize = options.anus.size ? "_size" + options.anus.size : "";
const cumAmt = options.anus.penetratorSprite.includes("horse") ? "_cum_horse" : "_cum";
return `${options.src}anal/cum/${options.anus.base}${baseSize}${cumAmt}.png`;
},
showfn(options) {
return !!options.anus.showCum && !!options.anus.show && options.anus.base !== "knotting";
},
animationfn(options) {
return options.animKeyArse;
},
filters: [],
z: CombatRenderer.indices.xrayCum,
},
ejaculating: {
srcfn(options) {
const cumSize = options.anus.size ? "_size" + options.anus.size + "_cumming" : "";
return `${options.src}anal/cum/${options.anus.base}${cumSize}.png`;
},
showfn(options) {
},
animationfn(options) {
return options.animKeyArse;
},
filters: [],
z: CombatRenderer.indices.xrayEjac,
},
},
};
/**
* @param {string} npc
* @param {CanvasModelLayers<XrayOptions>} overrideOptions
* @returns {CanvasModelLayers<XrayOptions>}
*/
function xrayArsePenetrator(npc, overrideOptions = {}) {
/**
* @type {CanvasModelLayers<XrayOptions>}
*/
const defaults = {
srcfn(options) {
const penSize = "_size" + options.anus.size;
const dp = options.anus.doublePen && npc === "npc2" ? "_dp" : "";
return `${options.src}anal/${options.anus.penetratorSprite}${penSize}${dp}.png`;
},
showfn(options) {
return !!options.showNpcPenis && !!options.anus.show && options.anus[npc] !== undefined;
},
animationfn(options) {
return options.animKeyArse;
},
filters: npc === "npc2" ? ["anusPenetrator2"] : ["anusPenetrator"],
desaturatefn(options) {
},
z: npc === "npc2" ? CombatRenderer.indices.xrayPenetrator2 : CombatRenderer.indices.xrayPenetrator,
};
return Object.assign(defaults, overrideOptions);
}
/**
* @param {string} npc
* @param {CanvasModelLayers<XrayOptions>} overrideOptions
* @returns {CanvasModelLayers<XrayOptions>}
*/
function xrayArseCondom(npc, overrideOptions = {}) {
/**
* @type {CanvasModelLayers<XrayOptions>}
*/
const defaults = {
srcfn(options) {
const conSize = "_size" + options.anus.size;
const dp = options.anus.doublePen && npc === "npc2" ? "_dp" : "";
return `${options.src}anal/tentacle${conSize}${dp}.png`;
},
showfn(options) {
const target = npc === "npc2" ? V.anusdoubletarget : V.anustarget;
return !!options.showNpcPenis && !!options.anus.show && options.anus[npc] !== undefined && !!V.NPCList[target].condom.worn;
},
animationfn(options) {
return options.animKeyArse;
},
alpha: 0.4,
filters: npc === "npc2" ? ["anusCondom2"] : ["anusCondom"],
z: npc === "npc2" ? CombatRenderer.indices.xrayCondom2 : CombatRenderer.indices.xrayCondom,
};
return Object.assign(defaults, overrideOptions);
}
Renderer.CanvasModels.combatXrayArse = combatXrayArse;