Skip to content
Snippets Groups Projects
20-canvasmodel-combat-close-arse.js 3.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jimmys's avatar
    Jimmys committed
    // @ts-check
    
    Kirsty's avatar
    Kirsty committed
    /* globals CombatRenderer, CloseCombatMapper, CloseOptions, CanvasModelLayers */
    
    Jimmys's avatar
    Jimmys committed
    
    /**
     * @type {CanvasModelOptions<CloseOptions>}
     */
    const combatCloseArse = {
    	name: "combatCloseArse",
    	width: 64,
    	height: 64,
    
    xao's avatar
    xao committed
    	scale: true,
    
    Jimmys's avatar
    Jimmys committed
    	frames: 6,
    	generatedOptions() {
    		return [];
    	},
    	defaultOptions() {
    
    Kirsty's avatar
    Kirsty committed
    		return { ...CloseCombatMapper.generateOptions(), ...this.metadata };
    
    Jimmys's avatar
    Jimmys committed
    	},
    	preprocess(options) {
    
    Kirsty's avatar
    Kirsty committed
    		CloseCombatMapper.mapCloseOptions(options);
    
    		if (V.debug) {
    			// Save options for easy lookup
    			CombatRenderer.options[this.name] = options;
    		}
    
    Jimmys's avatar
    Jimmys committed
    	},
    	layers: {
    		arse: {
    			srcfn(options) {
    				return `${options.src}arse/${options.anus.state}-base.png`;
    			},
    			showfn(options) {
    				return !!options.showArse;
    			},
    			animationfn(options) {
    				return options.animKeyArse;
    			},
    			filters: ["body"],
    
    Kirsty's avatar
    Kirsty committed
    			z: CombatRenderer.indices.closeBase,
    
    Jimmys's avatar
    Jimmys committed
    		},
    		npcSilhouette: {
    			srcfn(options) {
    				return `${options.src}arse/npc/shadow-${options.anus.silhouette}.png`;
    			},
    			showfn(options) {
    				return !!options.showArse && !!options.anus.silhouette;
    			},
    			animationfn(options) {
    				return options.animKeyArse;
    			},
    
    Kirsty's avatar
    Kirsty committed
    			z: CombatRenderer.indices.closeNpc + 3,
    
    Jimmys's avatar
    Jimmys committed
    		},
    		panties: {
    			srcfn(options) {
    				return `${options.src}arse/${options.anus.state}-panties.png`;
    			},
    			showfn(options) {
    				return !!options.showArse && V.worn.under_lower.state === "totheside";
    			},
    			animationfn(options) {
    				return options.animKeyArse;
    			},
    			filters: ["worn_under_lower_main"],
    
    Kirsty's avatar
    Kirsty committed
    			z: CombatRenderer.indices.closeWorn,
    
    Jimmys's avatar
    Jimmys committed
    		},
    		npcPenetrator: arsePenetrator("npc", "strapon"),
    		npcPenetrator2: arsePenetrator("npc2", "dpStrapon"),
    		npcCondom: arsePenetratorCondom("npc"),
    		npcCondom2: arsePenetratorCondom("npc2"),
    	},
    };
    
    /**
     *
     * @param {string} npc
     * @param {string} strapon
     * @param {CanvasModelLayers<CloseOptions>} overrideOptions
     * @returns {CanvasModelLayers<CloseOptions>}
     */
    function arsePenetrator(npc, strapon, overrideOptions = {}) {
    	/**
    	 * @type {CanvasModelLayers<CloseOptions>}
    	 */
    	const defaults = {
    		srcfn(options) {
    			return `${options.src}arse/npc/${options.anus[npc]}-${options.anus.state}.png`;
    		},
    		showfn(options) {
    			return !!options.showArse && !!options.anus[npc];
    		},
    		animationfn(options) {
    			return options.animKeyArse;
    		},
    		filtersfn(options) {
    			const filter = npc === "npc2" ? ["anusNpc2"] : ["anusNpc"];
    			return options.anus[npc] === "tentacle" ? ["anusTentacle"] : filter;
    		},
    		desaturatefn(options) {
    			return !!options.anus[strapon];
    		},
    		brightnessfn(options) {
    			return options.anus[strapon] ? -0.25 : 0;
    		},
    		alphafn(options) {
    			const isWraith = options.anus[npc] === "tentacle" && ["tentacles-wraith", "tentacles-wraith-penetrated"].includes(V.tentacleColour);
    			return isWraith ? (V.tentacleColour === "tentacles-wraith" ? 0.4 : 0.8) : 1;
    		},
    
    Kirsty's avatar
    Kirsty committed
    		z: CombatRenderer.indices.closeNpc,
    
    Jimmys's avatar
    Jimmys committed
    	};
    	return Object.assign(defaults, overrideOptions);
    }
    
    /**
     *
     * @param {string} npc
     * @param {CanvasModelLayers<CloseOptions>} overrideOptions
     * @returns {CanvasModelLayers<CloseOptions>}
     */
    function arsePenetratorCondom(npc, overrideOptions = {}) {
    	/**
    	 * @type {CanvasModelLayers<CloseOptions>}
    	 */
    	const defaults = {
    		srcfn(options) {
    			return `${options.src}arse/npc/${options.anus[npc]}-condom-${options.anus.state}.png`;
    		},
    		showfn(options) {
    			const target = npc === "npc2" ? V.anusdoubletarget : V.anustarget;
    			return !!options.showArse && !!options.anus[npc] && !!V.NPCList[target].condom.worn;
    		},
    		animationfn(options) {
    			return options.animKeyArse;
    		},
    		alpha: 0.4,
    		filters: npc === "npc2" ? ["anusCondom2"] : ["anusCondom"],
    
    Kirsty's avatar
    Kirsty committed
    		z: CombatRenderer.indices.closeNpc + 1,
    
    Jimmys's avatar
    Jimmys committed
    	};
    	return Object.assign(defaults, overrideOptions);
    }
    Renderer.CanvasModels.combatCloseArse = combatCloseArse;