Skip to content
Snippets Groups Projects
22-canvasmodel-combat-xray-arse.js 4.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • Purity's avatar
    Purity committed
    // @ts-check
    /* globals CombatRenderer, XrayCombatMapper, XrayOptions, CanvasModelLayers */
    
    /**
     * @type {CanvasModelOptions<XrayOptions>}
     */
    const combatXrayArse = {
    	name: "combatXrayArse",
    
    Jimmys's avatar
    Jimmys committed
    	width: 256,
    	height: 120,
    
    Purity's avatar
    Purity committed
    	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;
    		}
    
    Purity's avatar
    Purity committed
    	},
    	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 : "";
    
    Jimmys's avatar
    Jimmys committed
    				const cumAmt = options.anus.penetratorSprite.includes("horse") ? "_cum_horse" : "_cum";
    
    Purity's avatar
    Purity committed
    				return `${options.src}anal/cum/${options.anus.base}${baseSize}${cumAmt}.png`;
    			},
    			showfn(options) {
    
    Purity's avatar
    Purity committed
    				return !!options.anus.showCum && !!options.anus.show && options.anus.base !== "knotting";
    
    Purity's avatar
    Purity committed
    			},
    			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) {
    
    Purity's avatar
    Purity committed
    				return !!options.anus.showCum && !!options.anus.isCumActive;
    
    Purity's avatar
    Purity committed
    			},
    			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) {
    
    Jimmys's avatar
    Jimmys committed
    			return !!options.showNpcPenis && !!options.anus.show && options.anus[npc] !== undefined;
    
    Purity's avatar
    Purity committed
    		},
    		animationfn(options) {
    			return options.animKeyArse;
    		},
    		filters: npc === "npc2" ? ["anusPenetrator2"] : ["anusPenetrator"],
    		desaturatefn(options) {
    
    Purity's avatar
    Purity committed
    			return !!options.anus[npc + "Strapon"];
    
    Purity's avatar
    Purity committed
    		},
    		brightnessfn(options) {
    
    Purity's avatar
    Purity committed
    			return options.anus[npc + "Strapon"] ? -0.25 : 0;
    
    Purity's avatar
    Purity committed
    		},
    		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;
    
    Jimmys's avatar
    Jimmys committed
    			return !!options.showNpcPenis && !!options.anus.show && options.anus[npc] !== undefined && !!V.NPCList[target].condom.worn;
    
    Purity's avatar
    Purity committed
    		},
    		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;