<div id='main'>
<div id='bg'></div>
<div id='bg-grid'></div>
<div id='area-commander-player'>
<div class='commander-name'>Player</div>
<div id='commander-hp'>Player</div></div>
<div id='area-council-player'>Council Player
<div id ='slot-council-player1' class='slot-council-player'></div>
<div id ='slot-council-player2' class='slot-council-player'></div>
<div id ='slot-council-player3' class='slot-council-player'></div>
<div id ='slot-council-player4' class='slot-council-player'></div>
</div>
<div id='area-defend-player'>Defenders Player
<div id ='slot-defend-player1' class='slot-defend-player'></div>
<div id ='slot-defend-player2' class='slot-defend-player'></div>
<div id ='slot-defend-player3' class='slot-defend-player'></div>
<div id ='slot-defend-player4' class='slot-defend-player'></div>
<div id ='slot-defend-player5' class='slot-defend-player'></div>
<div id ='slot-defend-player6' class='slot-defend-player'></div>
</div>
<div id='area-attack-ai'>Attackers Enemy
<div id ='slot-attack-ai1' class='slot-attack-ai'></div>
<div id ='slot-attack-ai2' class='slot-attack-ai'></div>
<div id ='slot-attack-ai3' class='slot-attack-ai'></div>
<div id ='slot-attack-ai4' class='slot-attack-ai'></div>
<div id ='slot-attack-ai5' class='slot-attack-ai'></div>
<div id ='slot-attack-ai6' class='slot-attack-ai'></div>
</div>
<div id='area-council-ai'>Council Enemy
<div id ='slot-council-ai1' class='slot-council-ai'></div>
<div id ='slot-council-ai2' class='slot-council-ai'></div>
<div id ='slot-council-ai3' class='slot-council-ai'></div>
<div id ='slot-council-ai4' class='slot-council-ai'></div>
</div>
<div id='area-deploy-ai'>Deploy Enemy
<div id ='slot-deploy-ai1' class='slot-deploy-ai deploy-ai-left'></div>
<div id ='slot-deploy-ai2' class='slot-deploy-ai deploy-ai-right'></div>
<div id ='slot-deploy-ai3' class='slot-deploy-ai deploy-ai-left'></div>
<div id ='slot-deploy-ai4' class='slot-deploy-ai deploy-ai-right'></div>
<div id ='slot-deploy-ai5' class='slot-deploy-ai deploy-ai-left'></div>
</div>
<div id='area-support-ai'>Support Enemy
<div id ='slot-support-ai1' class='slot-support-ai'></div>
<div id ='slot-support-ai2' class='slot-support-ai'></div>
<div id ='slot-support-ai3' class='slot-support-ai'></div>
<div id ='slot-support-ai4' class='slot-support-ai'></div>
</div>
<div id='area-support-player'>Support Player
<div id ='slot-support-player1' class='slot-support-player'></div>
<div id ='slot-support-player2' class='slot-support-player'></div>
<div id ='slot-support-player3' class='slot-support-player'></div>
<div id ='slot-support-player4' class='slot-support-player'></div>
</div>
<div id='area-deploy-player'>Deploy Player
<div id ='slot-deploy-player1' class='slot-deploy-player deploy-left'></div>
<div id ='slot-deploy-player2' class='slot-deploy-player deploy-right'></div>
<div id ='slot-deploy-player3' class='slot-deploy-player deploy-left'></div>
<div id ='slot-deploy-player4' class='slot-deploy-player deploy-right'></div>
<div id ='slot-deploy-player5' class='slot-deploy-player deploy-left'></div>
</div>
<div id='area-attack-player'>Attackers Player
<div id ='slot-attack-player1' class='slot-attack-player'></div>
<div id ='slot-attack-player2' class='slot-attack-player'></div>
<div id ='slot-attack-player3' class='slot-attack-player'></div>
<div id ='slot-attack-player4' class='slot-attack-player'></div>
<div id ='slot-attack-player5' class='slot-attack-player'></div>
<div id ='slot-attack-player6' class='slot-attack-player'></div>
</div>
<div id='area-defend-ai'>Defenders Enemy
<div id ='slot-defend-ai1' class='slot-defend-ai'></div>
<div id ='slot-defend-ai2' class='slot-defend-ai'></div>
<div id ='slot-defend-ai3' class='slot-defend-ai'></div>
<div id ='slot-defend-ai4' class='slot-defend-ai'></div>
<div id ='slot-defend-ai5' class='slot-defend-ai'></div>
<div id ='slot-defend-ai6' class='slot-defend-ai'></div>
</div>
<div id='area-commander-ai'>
<div class='commander-name'>Enemy</div>
<div id='commander-ai-hp'>Player</div>
</div>
<div id='hand'>
<div id ='slot-hand1' class='slot-hand'></div>
<div id ='slot-hand2' class='slot-hand'></div>
<div id ='slot-hand3' class='slot-hand'></div>
<div id ='slot-hand4' class='slot-hand'></div>
<div id ='slot-hand5' class='slot-hand'></div>
<div id ='slot-hand6' class='slot-hand'></div>
</div>
<div id='end'>
<div id='log'></div>
<div id='depravity-player'><span id='depravity-player-count'>0</span></div>
<div id='deck-player'><span id='deck-player-count'>0/0</span></div>
<div id='grave-player'><span id='grave-player-count'>0</span></div>
<div id='end-button'>
<button type='button' id='end-butt'>End Turn</button>
</div>
<div id='buy-button'>
<button type='button' id='buy-butt'>Buy Card</button>
</div>
</div>
<div id='side'>
<div id=side-discord></div>
<div id=side-forum></div>
<div id=side-patreon></div>
<div id=side-news></div>
<div id=side-road></div>
<div id=side-debug></div>
<div id=side-music><button></button></div>
<div id=side-speed><button></button></div>
<div id=side-quick><button></button></div>
<div id=side-exit><button></button></div>
</div>
<div id='cover-right'></div>
<div id='cover-left'></div>
<div id='preview-right'></div>
<div id='preview-left'></div>
<div id='active-menu'>
<div id='active-button'>
<button type='button' id='active-butt'>Activate</button>
</div>
</div>
</div>
<<script>>
$(document).one(':passagedisplay',function (e){
try{
window.beginFirstRound();
let doc,path,img,m;
m=document.getElementById('end');
doc=document.location.href.toLowerCase();
if(doc.includes("/scratch/")||doc.includes("/temp/")){path=State.variables.folder+'img/';}else{path="img/";}
img=document.createElement('img');
img.title='Depravity';
img.src=path+'ui/depravity.png';
img.className='logo-dep';
m.appendChild(img);
img=document.createElement('img');
img.title='Deck';
img.src=path+'ui/deck.png';
img.className='logo-deck';
m.appendChild(img);
img=document.createElement('img');
img.title='Graveyard';
img.src=path+'ui/graveyard.png';
img.className='logo-grave';
m.appendChild(img);
m=document.getElementById('side-exit').firstChild;
img=document.createElement('img');
img.title='Exit';
img.src=path+'ui/exit.png';
img.className='logo-exit';
m.appendChild(img);
m=document.getElementById('side-music').firstChild;
img=document.createElement('img');
img.title='Music';
img.src=path+(State.variables.music?'ui/music.png':'ui/nomusic.png');
img.className='logo-music';
m.appendChild(img);
m=document.getElementById('side-quick').firstChild;
img=document.createElement('img');
img.title='Mode';
img.src=path+(State.variables.quickMode?'ui/game.png':'ui/lewd.png');
img.className='logo-mode';
m.appendChild(img);
m=document.getElementById('side-speed').firstChild;
img=document.createElement('img');
let pic='ui/';
img.title='Speed';
if(State.variables.delaySec==2){
pic+='slower.png';
}
else if(State.variables.delaySec==1){
pic+='slow.png';
}
else if(State.variables.delaySec==0.3){
pic+='fast.png';
}
else{
pic+='faster.png';
};
img.src=path+pic;
img.className='logo-speed';
m.appendChild(img);
}
catch(e){console.log(e);
Engine.play("Main Menu");
}
});<</script>>
<<if $music>><<ChangeMusic default>><</if>><<set $initialHandAI to 3>>
<<set $initialDepravityAI to 0>>
<<set $AIName to 'test'>>
<<set $folder to ''>>
<<set $savedDecks to []>>
<<set $savedDecksName to []>>
<<set $firstTime to true>>
<<script>>
let folder=(document.location.href.toLowerCase().includes("/temp/")||document.location.href.toLowerCase().includes("scratch"))?'F:/Twine/Cards/':'';
State.variables.folder=folder;
folder+="music/";
State.temporary.mfolder=folder;
<</script>>
<<script>>State.temporary.music=State.temporary.mfolder+"default.mp3";<</script>>
<<cacheaudio "default" _music>><div id='mainbg'></div>
<div id='mainupdates'></div>
<span id='patreon-desc' class='logo-desc'>Patreon</span>
<span id='discord-desc' class='logo-desc'>Discord</span>
<span id='f95-desc' class='logo-desc'>Feedback</span>
<span id='trello-desc' class='logo-desc'>Roadmap</span>
<span id='save-desc' class='logo-desc'>Saves</span>
<span id='tutorial-desc' class='logo-desc'>Tutorial</span>
<div id='updatestext'></div>
<<script>>$(document).one(':passagedisplay',function (e){
if(State.variables.firstTime){
Engine.play('Welcome');
return;
}
State.variables.turn=0;
let doc,path,img,bt,m;
m=document.getElementById('mainbg');
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/';}else{path="img/";}
img=document.createElement('img');
img.src=path+'backgrounds/main.png';
img.className='main-bg';
m.appendChild(img);
bt=document.createElement('button');
bt.className='maindeckoption mainoption';
bt.addEventListener('click',function(e){
engine.play('Deck Builder');
});
m.appendChild(bt);
bt.innerHTML='Deck Builder';
bt=document.createElement('button');
bt.className='maintrainoption mainoption';
m.appendChild(bt);
bt.innerHTML='Free Play';
bt.addEventListener('click',function(e){
engine.play('Training Setup');
});
img=document.createElement('img');
img.src=path+'other/patreon.png';
img.className='main-logo';
img.id='main-patreon';
m.appendChild(img);
img.addEventListener('click',function(e){
window.open('http://patreon.com/ErisSatori','_blank');
});
img=document.createElement('img');
img.src=path+'other/discord.png';
img.className='main-logo';
img.id='main-discord';
m.appendChild(img);
img.addEventListener('click',function(e){
window.open('https://discord.gg/9XNqQFYE','_blank');
});
/*img=document.createElement('img');
img.src=path+'other/f95.png';
img.className='main-logo';
img.id='main-f95';
m.appendChild(img);
img.addEventListener('click',function(e){
window.open('https://f95zone.to/threads/187428/','_blank');
});*/
img=document.createElement('img');
//img.src=path+'other/itch.png';
img.src=path+'other/f95.png';
img.className='main-logo';
img.id='main-itch';
m.appendChild(img);
img.addEventListener('click',function(e){
//window.open('https://erisatori.itch.io/eromancer','_blank');
window.open('https://f95zone.to/threads/187428/','_blank');
});
img=document.createElement('img');
img.src=path+'other/trello.png';
img.className='main-logo';
img.id='main-trello';
m.appendChild(img);
img.addEventListener('click',function(e){
window.open('https://trello.com/b/QOFELV1G/roadmap','_blank');
});
img=document.createElement('img');
img.src=path+'other/save.png';
img.className='main-logo';
img.id='main-save';
m.appendChild(img);
img.addEventListener('click',function(e){
UI.saves();
});
img=document.createElement('img');
img.src=path+'other/tutorial.png';
img.className='main-logo';
img.id='main-tutorial';
m.appendChild(img);
img.addEventListener('click',function(e){
Engine.play('Tutorial Start');
});
img=document.createElement('img');
img.src=path+'other/logo.png';
img.id='main-logo';
m.appendChild(img);
img=document.createElement('img');
img.src=path+'backgrounds/woman.png';
img.id='maingirl';
m.appendChild(img);
img=document.createElement('img');
img.src=path+'backgrounds/bubble1.png';
img.id='main-sad';
m.appendChild(img);
document.getElementById('updatestext').innerHTML='Version 0.2.35 (Sep 2024):<br>\
- 3 new abilities.<br>\
- 3 new characters.<br>\
- UI improvements.<br>\
- Improvements to AI.<br>\
- Quality of life updates.<br>\
- Bug Fixes.<br>\
<hr>\
Old versions:<br>\
Version 0.2.3 (Jun 2024):<br>\
- Defeat modding.<br>\
- 3 new abilities.<br>\
- 17 new characters.<br>\
- 1 new faction.<br>\
- 16 new skills and abilities.<br>\
- 9(x4) new defeat graphics.<br>\
- UI improvements.<br>\
- Council restrictions removed for unique cards.<br>\
- Improvements to AI.<br>\
- Quality of life updates.<br>\
- Bug Fixes.<br>\
<br>\
Version 0.2 (Apr 2024):<br>\
- Character card modding.<br>\
- 5 new abilities.<br>\
- 3 new characters.<br>\
- 7 characters replaced.<br>\
- 5 new skills.<br>\
- 1(x4) new defeat graphics.<br>\
- UI improvements.<br>\
- Loyalty mechanics.<br>\
- Rebalanced vanilla cards.<br>\
- Active targeted skills.<br>\
- Instant ability subtype.<br>\
- Skills with cooldowns.<br>\
- Improvements to AI.<br>\
- Bug Fixes.<br>\
0.1 (Feb 2024):<br>\
- 5(x4) new defeat graphics.<br>\
- Deck Builder.<br>\
- Main Menu.<br>\
- Tutorial.<br>\
- Council area.<br>\
- Swap hand cards.<br><br>\
Prototype (Jan 2024):<br>\
- Complete match system.<br>\
Five different areas.<br>\
Combat system.<br>\
Character cards.<br>\
Ability cards.<br>\
Unique cards.<br>\
Commanders.<br>\
Passive skills.<br>\
Active skills.<br>\
General abilities.<br>\
Targetted abilities.<br>\
Drag & drop mechanics.<br>\
Keyboard & mouse controls.<br>\
- 38 new cards.<br>\
- 5(x4) new defeat graphics.<br>\
';
});<</script>>
<<StopMusic>>
<div id='deckmain'>
<div id='deckside'>
<div id='council1' class='deckcouncil'></div>
<div id='council2' class='deckcouncil'></div>
<div id='council3' class='deckcouncil'></div>
<div id='council4' class='deckcouncil'></div>
<div id='cardsondeck'></div>
<div id='cardsdeckcount'>
</div>
<div id='newdeck' class='deckoption'>
New Deck
</div>
<div id='savedeck' class='deckoption'>
Save Deck
</div>
<div id='loaddeck' class='deckoption'>
Load Deck
</div>
<div id='exportdeck' class='deckoption'>
Share Deck
</div>
<div id='importdeck' class='deckoption'>
Import Deck
</div>
</div>
<div id='deckcards'>
</div>
<div id='saveprompt'>
<input id='savenameinput' placeholder='Deck Name' oninput='checkSaveDeckButton()'/>
<div id='savedeckbutton'>Save</div>
<div id='canceldeckbutton'>Cancel</div>
</div>
<div id='loadprompt'>
<select id='loaddrop' value='Select a deck' onchange='loadDeckCards()'></select>
<div id='cancelloadbutton'>X</div>
</div>
<div id='deckpreview'>
</div>
<div id='return' class='deckoption'>
Main Menu
</div>
</div>
<<script>>
$(document).one(':passagedisplay',function (e){
try{window.setupDeckBuilder();}
catch(e){console.log(e);Engine.play("Main Menu")}
});<</script>><div id='tut'>@@.ttitle;Tutorial (last updated v0.1)@@
@@.tnormal;This tutorial will cover the basic elements of the game.
Since so far the only fully implemented mechanics are the Deck Builder and the Free Play mode, that's what we'll focus on.
More sections will be added as new mechanics are included in the game.
Make sure to check the tutorial after an update; items with a red dot were added or updated on this version.@@
@@.ttable;[[Deck Builder|Tutorial Deck 1]]@@
@@.ttable;[[Free Play|Tutorial Training 1]]@@
@@.ttable;[[Card Types|Tutorial Cards 1]]@@
@@.ttablen;[[Skills & Abilities|Tutorial Skills 1]]@@
@@.ttable;[[Keywords|Tutorial Keywords 1]]@@
@@.ttablen;[[Modding|Tutorial Modding]]@@
@@.ttable;[[Back|Main Menu]]@@
</div>
<div id='tut'>@@.ttitle;Deck Builder@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;The Deck Builder is rather self-explanatory, so this will mostly be a quick overview:
On the left side you'll be able to see your cards, with the four topmost slots being your@@ @@.thl;Council@@@@.tnormal;, and the rest being the deck from which you'll draw cards during a match.
A deck can have between 30 and 100 cards.
You can @@ @@.thl;add cards to your deck by clicking on their pictures@@@@.tnormal;, and remove them by licking on their names.
Since the available cards for your deck depend on the Council, council cards cannot be removed (you'd need to start a new deck), so pick those carefully.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: The Council|Tutorial Deck 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck1.png';
});<</script>><div id='tut'>@@.ttitle;Free Play@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Free Play mode allows you to test your decks against the AI, while also selecting thei deck.
Future versions will allow you to select other variables: AI script, commanders, battlefield, handicaps, and others.
Once the Story Mode is implemented, the main difference between it and Free Play (in terms of match mechanics) will be that in Free Play Mode @@ @@.thl;you can use decks with all cards, even if you haven't unlocked them in Story Mode@@@@.tnormal;. Free Play also allows the use of modded cards.
This will help you test cards and decks before commiting to unlocking them in Story Mode.
Right now all you need to do is to @@ @@.thl;select a saved deck or use a random one and click "Begin"@@@@.tnormal;.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Deployment (Characters)|Tutorial Training 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training1.png';
});<</script>><div id='tut'>@@.ttitle;Skills@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;@@@@.thl;Attack@@@@.tnormal; - Entering combat while at the attack zone.
@@@@.thl;Battlefield@@@@.tnormal; - The attack and defense zones.
@@@@.thl;Character@@@@.tnormal; - Any character card.
@@@@.thl;Combat@@@@.tnormal; - Fighting another character.
@@@@.thl;Defeat/Orgasm@@@@.tnormal; - When a character's health reaches 0.
@@@@.thl;Defend@@@@.tnormal; - Entering combat while at the defense zone.
@@</div>
<div class='text-tutorial'>@@.tnormal;@@@@.thl;Deployed@@@@.tnormal; - When a character is at the Attack, Defense, Deployment, or Support zones.
@@@@.thl;Depravity@@@@.tnormal; - Currency used to buy cards and activate skills.
@@@@.thl;Draw@@@@.tnormal; - Moving a card from your deck to your hand.
@@@@.thl;Graveyard@@@@.tnormal; - A secondary deck where your defeated character cards go to.
@@@@.thl;Initiative@@@@.tnormal; - Displayed by a blue rectangle around the commander's health. It determines whether the player or the AI's attacks and skills are processed first.
@@</div>
</div>
@@.ttable;[[Tutorial Index|Tutorial Start]]@@<div id='tut'>@@.ttitle;Skills@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;@@ @@.thl;Ahegao@@@@.tnormal; - The character is removed from the game at the end of the turn.
@@@@.thl;Aphrodisiac@@@@.tnormal; - Inflict the Aphrodisiac status, causing the target to take damage every turn.
@@@@.thl;Backdoor Siege@@@@.tnormal; - Upon being deployed, create copies of a card on the attack zone.
@@@@.thl;Banish@@@@.tnormal; - Inflict the Banish status. Banished characters are removed from the game upon defeat instead of going to the graveyard.
@@@@.thl;Broadcast@@@@.tnormal; - Damage enemy characters at the deployment area upon meeting the conditions.
@@@@.thl;Challenge@@@@.tnormal; - When this character begins a turn at the attack zone, enemy attackers will be moved to their defense zone.
@@@@.thl;Cheer@@@@.tnormal; - Increase the stats of the selected card.
@@@@.thl;Copycat@@@@.tnormal; - Set your target to that of the enemy after combat.
@@@@.thl;Depression@@@@.tnormal; - Upon being defeated, all allies at play lose hp.
@@@@.thl;Duel (council)@@@@.tnormal; - When fighting the enemy commander, instead drag the first character at the council to the defense area and fight them.
@@@@.thl;Duel (support)@@@@.tnormal; - When fighting the enemy commander, instead drag the first character at the support zone to the defense area and fight them.
@@@@.thl;Experiment@@@@.tnormal; - Transform a character into a different (random) one of up to N cost.
@@@@.thl;Flash@@@@.tnormal; - When attacking, damage all defenders..
@@@@.thl;Growth@@@@.tnormal; - Increase your stats when ending the turn at the required zone.
@@@@.thl;Healslut@@@@.tnormal; - Heal your commander if ending the turn at the required zone.
@@@@.thl;Hurry!@@@@.tnormal; - Grant charge to the next character without charge that is deployed from the hand.
@@@@.thl;Influencer@@@@.tnormal; - Gain or lose stats based on which area (yours or the opposing side on the enemy field) have more characters at the end of the turn.
@@@@.thl;Instant Orgasm@@@@.tnormal; - Defeat any character that enters combat with you.
@@</div>
<div class='text-tutorial'>@@.tnormal;@@@@.thl;Leech@@@@.tnormal; - Gain health upon defeating an enemy character while at the required zone.
@@@@.thl;Legion@@@@.tnormal; - Upon deployment, increase stats based on the amount of cards at play with he same ID.
@@@@.thl;Masochism@@@@.tnormal; - Increase damage when being hurt.
@@@@.thl;Masturbation@@@@.tnormal; - Gain depravity at the start of the turn upon meeting the requirements.
@@@@.thl;Mighty Presence (character)@@@@.tnormal; - Damage the target character upon deployment.
@@@@.thl;Mighty Presence (commander)@@@@.tnormal; - Damage the enemy commander upon deployment.
@@@@.thl;Multiorgasm@@@@.tnormal; - Upon defeat, restore your hp to its initial value.
@@@@.thl;Multistrike@@@@.tnormal; - Character attacks multiple times.
@@@@.thl;NecRomance@@@@.tnormal; - Increase stats based on the amount of characters at your graveyard.
@@@@.thl;Premature Orgasm@@@@.tnormal; - Deploy directly to the attack
zone.
@@@@.thl;Queenslayer@@@@.tnormal; - Kill the first councilor when attacking the enemy commander.
@@@@.thl;Raise@@@@.tnormal; - Bring a character back from the graveyard.
@@@@.thl;Rough Fuck@@@@.tnormal; - Apply a damage multiplier when attacking the enemy commander.
@@@@.thl;Sadism@@@@.tnormal; - Gain extra damage when attacking.
@@@@.thl;Sadism@@@@.tnormal; - Gain extra damage when attacking.
@@@@.thl;Sap@@@@.tnormal; - Send an enemy back to their deployment area.
@@@@.thl;Scavenge (on commander attack)@@@@.tnormal; - Draw cards when attacking the enemy commander.
@@@@.thl;Scavenge (on survive)@@@@.tnormal; - Draw cards when ending the turn at the target area.
@@@@.thl;Shield Wall@@@@.tnormal; - Upon being deployed, create copies of a card on the defense zone.
@@@@.thl;Tease@@@@.tnormal; - Deal damage to the target card on the battlefield.
@@@@.thl;Unbreakable@@@@.tnormal; - Restore your health at the end of the turn when ending the turn at the required zone.
@@@@.thl;Zombie@@@@.tnormal; - Return from the graveyard after being dead for a set amount of turns.
@@</div>
</div>
@@.ttable;[[Next: Abilities|Tutorial Skills 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@<div id='tut'>@@.ttitle;Character Cards@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;Character cards are cards that can be placed on any area of the battlefield and who will fight against enemy characters and attack their commander.
You can mouse over a character card (or any card for that matter) to see their stats:
@@@@.thl;Damage@@@@.tnormal; - What they will deal when in combat.
@@@@.thl;Health@@@@.tnormal; - How much they can take before defeat.
@@@@.thl;Passive/Active@@@@.tnormal; - Their skills, which are also described on the top half of the card.
Pack - "core" = vanilla, other values will tell you which mod that card came from.
Faction - For now all are vanilla. This will change when the story mode is added.
@@@@.thl;Rarity@@@@.tnormal; - Determines how many copies of a card can be in a deck.
A player can only have a single copy of a unique card at play at any given time.
Loyalty - No use at the moment. This will change with future council mechanics.
@@</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Next: Character Cards (continued)|Tutorial Cards 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card1.png';
});<</script>><div id='tut'>@@.ttitle;The Council@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;The Council are the most important cards in your deck and have 3 main functions:
1.- Your council can work as a preset extra "hand", meaning that all characters in the council will be @@@@.thl;available to you from the start@@@@.tnormal; of a match, removing the luck factor and allowing you to build decks around their mechanics.
2.- The amount of council members of each faction will determine the cards that your deck will have access to. More on this on the next page.
3.- Council members @@@@.thl;can use active skills without being deployed@@@@.tnormal;.
Unique characters or cards that you'd like to deploy early are good candidates.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Factions & Loyalty|Tutorial Deck 2a]]@@
@@.ttable;[[Previous: Deck Builder|Tutorial Deck 1]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck2.png';
});<</script>><div id='tut'>@@.ttitle;Cards@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Once you're done selecting your council, the card selection area will display all of the available cards based on your council (right now all of them).
You can then @@@@.thl;add between 30 and 100 cards@@@@.tnormal; (minus 4 from the council) to build your deck. Fewer cards will increase the chance of getting the cards that you want, while more cards will result in having a deck with cards for all possible scenarios, with the downside of the luck of your draws playing a larger role.
The Cards tutorial goes in depth about the stats of the cards, but what matters when building a deck is to @@@@.thl;pay attention to their rarity@@@@.tnormal;: you can add 4 copies of a common card, 3 copies of an uncommon, 2 of a rare, or 1 of an epic or unique one.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Save & Share|Tutorial Deck 4]]@@
@@.ttable;[[Previous: The Council|Tutorial Deck 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck3.png';
});<</script>><div id='tut'>@@.ttitle;Save & Share@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Remember to @@@@.thl;always save a deck that you want to keep@@@@.tnormal;.
When selecting a name for the save, the button will display@@ @@.thl;"Save"@@@@.tnormal; if it's a unique name, or@@ @@.thl;"Overwrite"@@@@.tnormal; if that name is already used for another saved deck. Mind that.
If the Save button is not there, that's because your deck is illegal (likely has fewer than 30 cards).
Sharing and importing is a matter of copying and pasting.
Make sure to enable any mods necessary when loading a deck with modded content.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Previous: Cards|Tutorial Deck 3]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck4.png';
});<</script>><div id='tut'>@@.ttitle;Character Cards (continued)@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;Character cards can have different amounts and types of skills:
@@@@.thl;Characters with no skills@@@@.tnormal; - They can be moved between areas and swapped around by dragging them.
They will fight if on the attack or defense zones and won't be of any use elsewhere.
@@@@.thl;Characters with general passives@@@@.tnormal; - These will trigger some effect upon meeting particular conditions. eg; gaining health when defending.
@@@@.thl;Characters with targeted passives@@@@.tnormal; - Their passive will usually only trigger once and you'll have to select a target. eg; buffing a character upon deployment.
@@@@.thl;Characters with actives@@@@.tnormal; - After paying the skill's cost, a skill will be used. Some skills will have preset targets, or one that you can pick yourself. eg; evolving into a stronger form.
It's important to @@@@.thl;read the description@@@@.tnormal; of a card and get familiarized with what they can and can't do to make the best use of them.
If the cursor seems unresponsive after deploying or moving a card, chances are it had a targetted skill and @@@@.thl;you need to select a target@@@@.tnormal; (or cancel it).
@@</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Next: General Ability Cards|Tutorial Cards 3]]@@
@@.ttable;[[Previous: Character Cards|Tutorial Cards 1]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card2.png';
});<</script>><div id='tut'>@@.ttitle;General Ability Cards@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;As their name implies, these are cards with general effects, meaning that they will act on a particular value or pick targets at random, but their @@@@.thl;target(s) cannot be selected manually@@@@.tnormal;.
@@@@.thl;They are used by dropping them over the deployment area@@@@.tnormal;.
These cards can be easily recognized because their description will mention random targets, or it won't mention targets at all.
@@</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Next: Targeted Ability Cards|Tutorial Cards 4]]@@
@@.ttable;[[Previous:Character Cards (continued)|Tutorial Cards 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card3.png';
});<</script>><div id='tut'>@@.ttitle;Targeted Ability Cards@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;These are abilities with targets that can be selected by the player.
Note that some abilities and skills @@@@.thl;may only work under specific circumstances@@@@.tnormal;. For example, an ability may only be able to affect characters on the defense zone.
Furthermore, their targets are usually unrestricted, so you may, for example, use the example card on the right (Pacify) on a character in the council area.
Once abilities are processed, if that character is deployed (ie; at the deployment, defense, or attack areas), the effect will trigger because the conditions are met at this time, even if those requirements weren't satisfied when initially used.
@@@@.thl;They are used by dropping them over their target@@@@.tnormal;.
They can be recognized because they will mention a non-random target in their description.
@@</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Previous:General Ability Cards|Tutorial Cards 3]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card4.png';
});<</script>><div class='bg-container' id='start-screen'>
<img id='setup-bg' class='intro-bg'>
</div>
<img id='bg-p' class='bg-player'>
<img id='bg-e' class='bg-enemy'>
<div id='vs' class='vs'>VS</div>
<div id='start' class='start-button'>
<<button "Begin!">>
<<script>>Engine.play('Training');<</script>>
<</button>>
</div>
<select id='loaddrop-setup' value=0 onchange='loadTrainingCards()'></select>
<select id='loaddrop-setup-ai' value=0 onchange='loadTrainingCardsAI()'></select>
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/scratch/")||doc.includes("/temp/")){path=State.variables.folder+'img/';}else{path='img/';}
document.getElementById('setup-bg').src=path+'backgrounds/vs.png';
document.getElementById('bg-p').src=path+'commanders/1.png';
document.getElementById('bg-e').src=path+'commanders/2.png';
try{window.trainingSetup();}
catch(e){console.log(e);Engine.play("Main Menu")}
});<</script>><div id='tut'>@@.ttitle;Deployment (Characters)@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Deployment is the first phase of a battle.
It takes place before the start of the turn.
During this phase, players can spend their depravity@@ @@.thl;(displayed next to the ♥ symbol)@@@@.tnormal; to deploy cards, use abilities and skills.
Characters can be @@ @@.thl;deployed from the Council area (next to the commander), or the Hand (at the bottom)@@@@.tnormal;.
@@ @@.thl;Characters are deployed through drag and drop@@@@.tnormal;.
Most character cards from the Hand can@@ @@.thl;only be deployed to the Deployment Zone@@@@.tnormal;. Exceptions are cards with passives such as "Charge".
Council members can be deployed to any zone.
Unless stated otherwise, @@ @@.thl;characters deployed from the Hand enter a cooldown@@@@.tnormal;, during which they cannot be moved.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Using Targeted Abilities & Skills|Tutorial Training 3]]@@
@@.ttable;[[Previous: Free Play|Tutorial Training 1]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training2.gif';
});<</script>><div id='tut'>@@.ttitle;Using Targeted Abilities & Skills@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;Targeted actions are performed in two ways, depending on the source of the action:@@
@@.thl;Targeted Abilities@@@@.tnormal; are used by simply dragging them on top of their target. Targeted abilities are processed at the @@@@.thl;start of the combat phase@@.
@@.tnormal;Note that while targets may be unrestricted, some abilities will have limitations (eg; only having an effect if the target is on the battlefield), and they will fail if the target moves to an illegal zone.@@
@@.thl;Targeted Skills@@@@.tnormal; will be enabled upon meeting the conditions to trigger them (eg; upon deployment in the example animation). Once enabled, you can select their target by clicking on it.
Targeted skills are processed @@@@.thl;immediately@@@@.tnormal;, leaving no room for the enemy to prevent their effects.
Targeted skills can be canceled with right click.@@
</div><img class='tutorial-card-img' id='pic'></div>
@@.ttable;[[Next: Using Active Skills|Tutorial Training 3a]]@@
@@.ttable;[[Previous:Deployment (Characters)|Tutorial Training 2]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card5.gif';
});<</script>><div id='tut'>@@.ttitle;Moving Characters@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;You can move cards between zones, or change their position within the same area.
This is done by @@ @@.thl;dragging the character and dropping her on top of a different zone or on top of the character which position you want to swap@@@@.tnormal;.
Moving a character to the deployment area will make her enter a cooldown, so don't do this unless it's an emergency. eg; trying your best to keep some character alive, or when desperately trying to get a character at the support zone to fight as a defender.
Cards under a cooldown (including those with "Premature Orgasm" or similar) cannot be moved, but you can still use a different character on the same area to swap positions with them.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Combat Phase|Tutorial Training 5]]@@
@@.ttable;[[Previous: Using Targeted Abilities & Skills|Tutorial Training 3a]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training4.gif';
});<</script>><div id='tut'>@@.ttitle;Combat Phase@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Clicking the "End Turn" button will start the next turn.
This is the order of operations:
1.- @@@@.thl;Active abilities are processed@@@@.tnormal;. These will be processed based on the initiative (blue rectangle around a commander's hp), and in the order that they were used by the player.
2.- @@@@.thl;General abilities@@@@.tnormal;. Same rules as above. Exceptions are instant abilities, which will trigger as soon as they are activated.
3.- @@@@.thl;Combat@@@@.tnormal;. Based on initiative, each side will attack. Attackers will fight the defenders or attack the commander if there are no defenders left. Combat passives will be processed here.
4.- @@@@.thl;End of turn passives@@@@.tnormal;. Some characters will heal or trigger other skills at the end of the turn.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Areas - Council|Tutorial Training 6]]@@
@@.ttable;[[Previous: Moving Characters|Tutorial Training 4]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training5.gif';
});<</script>><div id='tut'>@@.ttitle;Areas - Council@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Besides determining the cards that you'll have acces to in future versions, your council has two special mechanics:
Council members can @@@@.thl;deploy to any other area@@@@.tnormal; (excluding the hand, that's not an area).
They can also @@@@.thl;use active skills without being deployed@@@@.tnormal;. This means that you can benefit from the skills of some cards without having to pay their deployment cost first.
However, there will be cards that will specifically target the council, so it's important to move them to a safe zone when possible, else you'd risk losing them.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Areas - The Rest|Tutorial Training 7]]@@
@@.ttable;[[Previous: Combat Phase|Tutorial Training 5]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training7.gif';
});<</script>><div id='tut'>@@.ttitle;Using Active Skills@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;When you have enough depravity, a button will show upon clicking a character card with an active skill.
Using the skill is as easy as clicking the button.
Some active skills may allow you to pick a target. Just as with targeted abilities, all you need to do is clicking on the target for it to trigger.
Active skills may make the caster enter a cooldown.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Moving Characters|Tutorial Training 4]]@@
@@.ttable;[[Previous:Using Targeted Abilities & Skills|Tutorial Training 3]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training6.gif';
});<</script>><div id='tut'>@@.ttitle;Areas - The Rest@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;@@@@.thl;Commander@@@@.tnormal; - Not a card. Can't move. If she's defeated, you lose.
@@@@.thl;Deploy@@@@.tnormal; - Characters entering this area will enter a cooldown. They can move to Support, Defense, and Attack from here.
@@@@.thl;Attack@@@@.tnormal; - Cards here will attack in the order shown. They'll fight defenders or attack the commander if there are none left.
@@@@.thl;Defense@@@@.tnormal; - Unless affected by some skill, the first defender will always fight until defeated.
@@@@.thl;Support@@@@.tnormal; - A mostly safe zone for cards that are better on the background than at the frontline.
@@@@.thl;Initiative@@@@.tnormal; - That's the blue rectangle. The number inside it is the commander's health.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Next: Controls & Values|Tutorial Training 8]]@@
@@.ttable;[[Previous: Areas - Council|Tutorial Training 6]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training7.png';
});<</script>><div id='tut'>@@.ttitle;Controls & Values@@<div class='txt-img'><div class='text-img-tutorial'>@@.tnormal;Besides clicking on the buttons, the game features some keyboard and mouse controls:
@@@@.thl;Music (♫)@@@@.tnormal; - Keyboard M.
@@@@.thl;Speed (animals)@@@@.tnormal; - Keyboard 1-4 or mousewheel.
@@@@.thl;Slow mode (controller/TV)@@@@.tnormal;(pauses the game before clearing the battlefield) - Keyboard Q.
@@@@.thl;End Turn@@@@.tnormal; - Keyboard enter, space, or ctrl. Right click.
Information:
@@@@.thl;Depravity (♥)@@@@.tnormal; - The currency to buy cards and use active skills.
@@@@.thl;Card counter (under depravity)@@@@.tnormal; - Displays the remaining cards in your deck.
@@@@.thl;Graveyard (to the right of the counter)@@@@.tnormal; - Amount of dead character cards.
@@</div><img class='tutorial-img' id='pic'>
</div>
@@.ttable;[[Previous: Areas - The Rest|Tutorial Training 7]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training8.png';
});<</script>><div id='tut'>@@.ttitle;Welcome to Eromancer: Lust Unleashed!@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;This is a game I'm making to learn HTML/CSS/JS in order to be better prepared when I start working on my main project.
My goal with this game is to build a solid foundation that players can mod to their desire; the plan is for everything (pictures, cards, commanders, battlefields...) to be fully moddable in the strict sense of the word (as opposed to "forkable").
I plan on continuing updating this game until that goal is achieved. I will start working on a secondary project (one with the goal of learning Twine) before this game is complete, but I'll simply work on both projects at once.
You are free to use any code from here as long as it's used on a fully free product and that attribution is given. You may not use any part of its code for any product that includes paywalls, premium content, or supporter-only content, nor for any paid products.
All characters depicted on this game are of legal age.
If this is your first time playing, it's recommended that you read the tutorials first.
Thank you for playing!
@@</div>
</div>
@@.ttable;[[I'm of legal age.|Main Menu]]@@<<set $firstTime to false>></div><div id='tut'>@@.ttitle;Modding@@
@@.tnormal;The goal of the game is for most of its componetnts to be moddable.
Modding tutorials will be added below as more modding options become available.@@
@@.ttable;[[Installing Mods|Installing Mods]]@@
@@.ttable;[[Creating Mods|Creating Mods]]@@
@@.ttable;[[Sharing Mods|Sharing Mods]]@@
@@.ttable;[[Adding New Characters|Char Modding 1]]@@
@@.ttable;[[Modding Existing Characters|Char Overwriting 1]]@@
@@.ttable;[[Adding New Defeats|Defeat Modding 1]]@@
@@.ttable;[[Back|Tutorial Start]]@@
</div>
<div id='tut'>@@.ttitle;Adding New Characters@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;Begin by editing the @@@@.thl;file extension@@@@.tnormal; for your pictures (use the same type for all of your pics) @@@@.thl;and the color@@@@.tnormal;. You can search for the hex value of colors online.
Then copy the following @@@@.thl;code@@@@.tnormal; (also available in the "templates" folder):@@
<html><pre><code> {
"UniqueName":{
"pack":"MyModName",
"id":"UniqueName",
"name": "",
"short": "",
"description": "<span class='desctxt'></span>\
<span class='descquote'></span>",
"cost": 0,
"faction": "",
"loyalty": 0,
"rarity" : "",
"type": "character",
"gender": "female",
"color": "",
"damage": 0,
"health": 0,
"ai": "",
"aitier": 0,
"aiother": {},
"passives": [],
"actives": [],
"defeat":"",
"tags": ['mod',""]
}
},</code></pre></html>
@@.tnormal;Replace the relevant part so that it looks like the example on the right:
@@</div><html><pre><code>MyModName_data=[
'png', /* PICTURE EXTENSION */
'#000000', /* CARD BORDER COLOR */
/* NEW CHARACTER CARDS*/
{
"UniqueName":{
"pack":"MyModName",
"id":"UniqueName",
"name": "",
"short": "",
"description": "<span class='desctxt'></span>\
<span class='descquote'></span>",
"cost": 0,
"faction": "",
"loyalty": 0,
"rarity" : "",
"type": "character",
"gender": "female",
"color": "",
"damage": 0,
"health": 0,
"ai": "",
"aitier": 0,
"aiother": {},
"passives": [],
"actives": [],
"defeat":"",
"tags": ['mod',""]
}
},
{} /* CHARACTER CARD OVERRIDES */
/* Other stuff.*/
]
</code></pre></html>
</div>
@@.ttable;[[Next: Adding New Characters: Part 2|Char Modding 2]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Installing mods@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;Installing mods is as simple as extracting the mod into the mods folder within the game folder.
The resulting structure should be as follows:
Game folder/mods/ModName/mod.js
If your folder structure doesn't look like that, chances are your extracting software created an extra folder. Simply cut and paste the files one level above until they have the right structure.
Then @@@@.thl;open the mods.js file@@@@.tnormal; located in the game folder (you can use any text editor such as Notepad).
Enter the name of the mods exactly as in their folder name, separated by commas.
The mods array indicates which mods you want to add new cards from, while the overrides one determines which mods you'll allow to override vanilla cards.
You can add as many as you want, or none at all. You can also enable new cards from one mod without applying their overrides, or viceversa.
@@</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div>
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'modinstall.png';
});<</script>><div id='tut'>@@.ttitle;Creating Mods@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;First start by making a new folder within the "mods" folder with the name of your mod. @@@@.thl;Don't include spaces or non alphanumeric characters@@@@.tnormal;.
Inside of the new folder, @@@@.thl;create a file named mod.js@@@@.tnormal;, then copy the contents of template.txt (located in the "templates" folder), or simply copy the code to the right >>>
Replace all instances of "MyModName" with the name that you used for your folder.
For example, if your mod is called "BigButtSquad", you'd change the first word to "BigButtSquad_data", along with any other mentions of "MyModName".
To enable it, follow the relevant instructions from the [[Installing Mods|Installing Mods]] tutorial.
You only need to follow the part about @@@@.thl;editing the mods.js file@@@@.tnormal;.
Other tutorials will go into detail about modding different parts of the game.
@@</div><html><pre><code>MyModName_data=[
'png', /* PICTURE EXTENSION */
'#000000', /* CARD BORDER COLOR */
{}, /* NEW CHARACTER CARDS */
{} /* CHARACTER CARD OVERRIDES */
]
function MyModName(){
return MyModName_data;
}</code></pre></html>
</div>
@@.ttable;[[Next: Adding New Characters|Char Modding 1]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 2@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;We'll be editing all values, but let's start with the most important ones:
@@@@.thl;ID@@@@.tnormal;: Replace all instances of UniqueName for a @@@@.thl;unique identifier@@@@.tnormal;. This is how the game will tell your card apart from the rest. In order to do so, each card must have an unique ID different than any other card (vanilla or modded), so make sure to use something that nobody else will think of.
This value won't be displayed in the game, so it doesn't need to be good, just unique. This isn't the name of your charatcer.
A good format can be Author name+Mod name+#ID.
Example: CoolmodderBigBooties1
@@@@.thl;Pack@@@@.tnormal;: This needs to be @@@@.thl;the same name of your mod@@@@.tnormal;, exactly as it was written in the main file.
If the pack is wrong, your pictures won't load.
@@</div></div>
@@.ttable;[[Next: Adding New Characters: Part 3|Char Modding 3]]@@
@@.ttable;[[Previous: Adding New Characters|Char Modding 1]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 3@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;I forgot to mention - if you're unfamiliar with coding, it's important to leave all of the quotation marks ("") from the original template. Make sure not to delete them.
@@@@.thl;Short@@@@.tnormal;: is what will be shown in the cards on the deck builder and the hand. I think it fits about 12 characters before they overflow.
@@@@.thl;Name@@@@.tnormal;: is the full name of the character. It's shown in the preview/description when you click on a card, and it can fit around 20 characters.
@@@@.thl;Description@@@@.tnormal;: is only for flavor, as skill descriptions are automatically added. The first part is a description, and the second line is a quote. Both are optional.
Their length depends on whether your card has skills, and how many, as the skill description takes precedence. Cards with no skills can fit longer descriptions and/or quotes.
The following code would have the result on the right:@@
<html><pre><code>"description": "<span class='desctxt'>It wasn't that hard!</span>\
<span class='descquote'>That's what she said.;</span>",
</code></pre></html>
</div><img class='tutorial-card-img' id='pic'>
</div>
@@.ttable;[[Next: Adding New Characters: Part 4|Char Modding 4]]@@
@@.ttable;[[Previous: Adding New Characters: Part 2|Char Modding 2]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div>
<<script>>$(document).one(':passagedisplay',function (e){
let doc,path;
doc=document.location.href.toLowerCase();
if(doc.includes("/temp/")||doc.includes("/scratch/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'modding1.png';
});<</script>><div id='tut'>@@.ttitle;Adding New Characters: Part 4@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;Now let's work on the card stats. Most are pretty straightforward: if you see a 0 or a couple of empty quotation marks (""), it needs to be filled (in the case of text) or replaced (numbers).@@
@@.thl;Cost@@@@.tnormal; The depravity cost of the card.
@@@@.thl;Faction@@@@.tnormal; You can use an existing game faction if you want your cards to be part of it, or use a custom one.
@@@@.thl;Loyalty@@@@.tnormal; Must be 0 if using the vanilla faction. Else it must be 1-4.
@@@@.thl;Rarity@@@@.tnormal; Accepted values: "common", "uncommon", "rare", "epic", "unique"
@@@@.thl;Type@@@@.tnormal; Leave it as it is, as you're adding a character card.
@@@@.thl;Gender@@@@.tnormal; That value is only there in the odd chance that I decide to add gender modding in the future. Leave it as it is.
@@@@.thl;Color@@@@.tnormal; This is used for the defeat pictures. The base game includes "white", "black", "brown", and "blonde" as legal values.
@@@@.thl;Damage@@@@.tnormal; How hard your character hits.
@@@@.thl;Health@@@@.tnormal; How much she can take.@@
</div>
</div>
@@.ttable;[[Next: Adding New Characters: Part 5|Char Modding 5]]@@
@@.ttable;[[Previous: Adding New Characters: Part 3|Char Modding 3]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 5@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;Now we'll get into the more complex properties:
@@@@.thl;AI@@@@.tnormal; This will help the AI decide the best use for a card.
"combat" or "battle" will tell it that the card is good at both defense and attack.
"attack" and "defense" will let it know that the character performs better as one or the other.
"support" will inform the AI that the card should be sent to the support zone if possible.
@@@@.thl;AItier@@@@.tnormal; This value is also used by the AI. It helps it determine how good a card is, in a scale of 1 to 5.
1 means low importance; a card that doesn't matter much.
5 means high priority/value. When dealing with support characters, the AI will aim to have higher tier ones hiding at the support zone.
0 may be used in very specific circumstances, like if making a purposefully useless card. The AI won't play these if they're in their hand, and it will aim to get rid of them if they somehow end up in the arena.
@@@@.thl;AIother@@@@.tnormal; Leave it as is. It's there to futureproof modding.
@@@@.thl;Passives and Actives@@@@.tnormal; Each one of these may require multiple values separated by commas. Some will be strings (between quotation marks), and some will be numbers, or even arrays (between square brackets).
All of them will start with the skill ID. Actives will always have it followed by its cost.
The list of skill IDs will be included in the next page.@@
</div></div>
@@.ttable;[[Next: Adding New Characters: Part 6|Char Modding 6]]@@
@@.ttable;[[Previous: Adding New Characters: Part 4|Char Modding 4]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 6@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;This guide will use the following format:
Ability: ID, parameter 1(type), ...parameterN(type)
All IDs go between qutoation marks.
Numbers go without quotation marks.
If values are shown between [ ], those square brackes must be kept. See the zombie example below.
This page will list passive skills.
Actives will be on the next page.@@
Example skill format for Graverobber:
<html><pre><code>"passives": ['zombie',5,[6,8,0]],
"actives": ['graverob',2],</code></pre></html>
@@.tnormal;Note that skills are not mandatory; you can leave those fields with an empty array [ ] and move on if you don't want your cards to have skills.
Otherwise, all values entered must be done inside of those square brackets. Even if multiple skills are added.@@
Example skill format for a card with multiple passives:
<html><pre><code>"passives": ['deploy-poison',3,'depression',1],</code></pre></html>
@@.ttable;[[Next: Adding New Characters: Part 7|Char Modding 7]]@@
@@.ttable;[[Previous: Adding New Characters: Part 5|Char Modding 5]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@</div><div class='text-tutorial'>
@@.thl;Ahegao@@@@.tnormal;@@ <html><pre><code>'ahegao'</code></pre></html>
@@.thl;Aphrodisiac (on deployment)@@@@.tnormal;@@ <html><pre><code>'deploy-poison', damage per turn(number)</code></pre></html>
@@.thl;Aphrodisiac (on combat)@@@@.tnormal;@@ <html><pre><code>'combat-burn', damage per turn(number)</code></pre></html>
@@.thl;Backdoor Siege@@@@.tnormal;@@ <html><pre><code>'deploy-rallytroops', card id(string), copies(number)</code></pre></html>
@@.thl;Banish@@@@.tnormal;@@ <html><pre><code>'banish'</code></pre></html>
@@.thl;Broadcast@@@@.tnormal;@@ <html><pre><code>'command-attack-deploy-damage', damage(number)</code></pre></html>
@@.thl;Challenge@@@@.tnormal;@@ <html><pre><code>'challenge-all-defenders'</code></pre></html>
@@.thl;Cheer@@@@.tnormal;@@ <html><pre><code>'deploy-cheer', boost(number)</code></pre></html>
@@.thl;Copycat@@@@.tnormal;@@ <html><pre><code>'copycat', multiplier(number)</code></pre></html>
@@.thl;Depression@@@@.tnormal;@@ <html><pre><code>'depression', damage(number)</code></pre></html>
@@.thl;Duel (council)@@@@.tnormal;@@ <html><pre><code>'fight-council'</code></pre></html>
@@.thl;Duel (support)@@@@.tnormal;@@ <html><pre><code>'fight-support'</code></pre></html>
@@.thl;Flash@@@@.tnormal;@@ <html><pre><code>'attack-all', damage(number)</code></pre></html>
@@.thl;Growth@@@@.tnormal;@@ <html><pre><code>'survive-improve', boost(number)</code></pre></html>
@@.thl;Healslut@@@@.tnormal;@@ <html><pre><code>'defense-command-heal', amount(number)</code></pre></html>
@@.thl;Hurry!@@@@.tnormal;@@ <html><pre><code>'deploy-gaincharge'</code></pre></html>
@@.thl;Influencer@@@@.tnormal;@@ <html><pre><code>'camwhore', bonus on success(number), loss on failure(number)</code></pre></html>
@@.thl;Instant Orgasm@@@@.tnormal;@@ <html><pre><code>'deadly'</code></pre></html>
@@.thl;Leech@@@@.tnormal;@@ <html><pre><code>'leech-attack-kill', amount(number)</code></pre></html>
@@.thl;Legion@@@@.tnormal;@@ <html><pre><code>'teamplay', bonus(number), false</code></pre></html>
@@.thl;Limitless@@@@.tnormal;@@ <html><pre><code>'unlimit'</code></pre></html>
@@.thl;Masochism@@@@.tnormal;@@ <html><pre><code>'masochism', multiplier(number)</code></pre></html>
@@.thl;Masturbation@@@@.tnormal;@@ <html><pre><code>'alive-depravity-gain', amount(number)</code></pre></html>
@@.thl;Mighty Presence (character)@@@@.tnormal;@@ <html><pre><code>'deploy-damage', damage(number)</code></pre></html>
@@.thl;Mighty Presence (commander)@@@@.tnormal;@@ <html><pre><code>'deploy-damage-commander', damage(number)</code></pre></html>
@@.thl;Multiorgasm@@@@.tnormal;@@ <html><pre><code>'multiorgasm', extra lives(number), health recovered(number)</code></pre></html>
@@.thl;Multistrike@@@@.tnormal;@@ <html><pre><code>'multistrike', extra attacks(number)</code></pre></html>
@@.thl;NecRomance@@@@.tnormal;@@ <html><pre><code>'graveyard-count', multiplier(number)</code></pre></html>
@@.thl;Premature Orgasm@@@@.tnormal;@@ <html><pre><code>'charge'</code></pre></html>
@@.thl;Queenslayer@@@@.tnormal;@@ <html><pre><code>'attack-command-kill-council'</code></pre></html>
@@.thl;Rough Fuck@@@@.tnormal;@@ <html><pre><code>'attack-command-multi',multiplier(number)</code></pre></html>
@@.thl;Sadism@@@@.tnormal;@@ <html><pre><code>'attack-improve',bonus(number)</code></pre></html>
@@.thl;Sap@@@@.tnormal;@@ <html><pre><code>'deploy-retreatenemy'</code></pre></html>
@@.thl;Scavenge (attack commander)@@@@.tnormal;@@ <html><pre><code>'attack-commander-draw-card',amount(number)</code></pre></html>
@@.thl;Scavenge (survive)@@@@.tnormal;@@ <html><pre><code>'survive-card-draw',amount(number)</code></pre></html>
@@.thl;Shield Wall@@@@.tnormal;@@ <html><pre><code>'deploy-rallyguards', card id(string), copies(number)</code></pre></html>
@@.thl;Unbreakable@@@@.tnormal;@@ <html><pre><code>'survive-restore-hp', amount(number)</code></pre></html>
@@.thl;Zombie@@@@.tnormal;@@ <html><pre><code>'zombie', turns(number), stats[damage(number), health(number), cost(number)]</code></pre></html></div>
</div>
@@.ttable;[[Next: Adding New Characters: Part 7|Char Modding 7]]@@
@@.ttable;[[Previous: Adding New Characters: Part 5|Char Modding 5]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 7@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;The same rules of the previous page apply.
The only changes for active skills are the following:
The second parameter (cost) is always a number.
Cards can only have one active skill.
"String" means the value must be between quotation marks. Either double " " or single ' '.@@</div><div class='text-tutorial'>
@@.thl;Evolve@@@@.tnormal;@@ <html><pre><code>'evolve', cost, character ID(string)</code></pre></html>
@@.thl;Experiment@@@@.tnormal;@@ <html><pre><code>'target-experiment', cost, target cost bonus(number)</code></pre></html>
@@.thl;Raise@@@@.tnormal;@@ <html><pre><code>'graverob',cost</code></pre></html>
@@.thl;Tease@@@@.tnormal;@@ <html><pre><code>'target-snipe-battlefield', cost, damage(number), cooldown</code></pre></html>
/*@@.thl;NAME@@@@.tnormal;@@ <html><pre><code>ID</code></pre></html>*/
</div>
</div>
@@.ttable;[[Next: Adding New Characters: Part 8|Char Modding 8]]@@
@@.ttable;[[Previous: Adding New Characters: Part 6|Char Modding 6]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 8@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;We're almost done. Only a couple of things left to add:@@
@@.thl;Defeat@@@@.tnormal; This value determines the defeat picture that will be displayed when this character defeats an enemy. They must be separated by commas, and each value must go between quotation marks.
Character cards must have at least 1 defeat type, and they can have as many as you want.
Currently accepted values:
"ass", "anal", "analingus", "asslicking", "blowjob", "bukkake", "butt", "buttfuck", "cum", "cumshot", "facesitting", "facial", "gangbang", "group", "oral", "pussy", "vanilla", "vaginal".@@
@@.thl;Tags@@@@.tnormal; These will be used once the search function on the deck builder is implemented. You can add tags that describe relevant aspects of the character: clothes, outstanding body parts, etc.
All tags must be entered inside of the same pair of square brackets [ ], be separated by commas, and have quotation marks around each tag.
There are a few special tags that have other uses:
All cards from mods (ie; the ones you're making right now) must have the "mod" tag.
Cards that are evolved versions of a card with the Evolve active must have the "evolution" tag.
You can add "exclude" as a tag and it won't be available on the deck builder.
That's it for the typing part.
Now it's just a matter of adding the pictures and your character will be ready to join the Eromancer: Lust Unleashed universe.
@@</div>
</div>
@@.ttable;[[Next: Adding New Characters: Part 9|Char Modding 9]]@@
@@.ttable;[[Previous: Adding New Characters: Part 7|Char Modding 7]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Adding New Characters: Part 8@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;Images are pretty simple:
First go to your mod's folder and create a subfolder named "img".
Inside of the newly created img folder, make another subfolder named "factions".
@@@@.thl;Add the faction logo/picture@@@@.tnormal; for each faction added by your mod.
If you're overwriting cards, just copy and paste the pictures for the affected factions.
These pictures need to have the same name as what your cards have on the "faction" property.
You can add as many as needed into the same folder.
Square pictures are recommended for factions.
@@@@.thl;Make sure @@@@.tnormal;that the file extension matches what you selected in your mod file.
Lastly, you'll make another subfolder within the img folder. Name it "cards".
You'll add all of the @@@@.thl;pictures for your cards@@@@.tnormal;, both new and overrides.
Card pics should have a 3:4 ratio (or close) to avoid major deformations, and they must have the same name that you gave them in the ID property.
That's it. Go test your mod and enjoy your new character cards.
If you have any issues while modding, you can leave a message on the forums, the discord, or itch.io
@@</div>
</div>
@@.ttable;[[Previous: Adding New Characters: Part 8|Char Modding 8]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Sharing mods@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;Sharing a mod is very simple:
- Use 7zip or a similar software to compress the main folder of your mod.
- Instruct the players to place the compressed file inside of the mods folder and to use the "Extract Here" option.
- Ask your players to edit the mods.js file (located in the main game's folder) and to follow the instructions from the [[Installing Mods|Installing Mods]] tutorial to enable it.
@@</div></div>
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Modding Existing Characters@@<div class='txt-img'><div class='text-card-img-tutorial'>@@.tnormal;You'll do the same as when [[Adding New Characters|Char Modding 1]], but you'll enter the information inside of the CHARACTER CARD OVERWRITES section.
The key things to remember are:
- Use the @@@@.thl;same ID @@@@.tnormal;of the card you're editing.
- Make sure to @@@@.thl;change the pack name@@@@.tnormal; to your mod's name.
- Add 'mod' as a @@@@.thl;tag@@@@.tnormal;.
- You can edit as many properties as you like. If you only want to change the picture, simply leave the rest of the properties as they are on the original file.
- If leaving them as part of a core faction, remember to include a copy of the faction logo in the correct folder.
The mods folder includes a sample pack where you can see a working example.
@@</div><html><pre><code>MyModName_data=[
'png', /* PICTURE EXTENSION */
'#000000', /* CARD BORDER COLOR */
{}, /* NEW CHARACTER CARDS*/
/* CHARACTER CARD OVERWRITES */
{
"1": {
"pack":"Sample",
"id":"1",
"name": "Character Override",
"short": "Override",
"description": "<span class='desctxt'>It wasn't that hard!</span><br><br>\
<span class='descquote'>That's what she said.</span>",
"cost": 1,
"faction": "vanilla",
"loyalty": 0,
"rarity" : "common",
"type": "character",
"gender": "female",
"color": "white",
"damage": 6,
"health": 2,
"ai": 'battle',
"aitier": 1,
"aiother": {},
"passives": [],
"actives": [],
"defeat":"ass, facesittting",
"tags": ['mod','naked','big ass','butt']
}
// Other stuff
]
</code></pre></html>
</div>
@@.ttable;[[Modding Index|Tutorial Modding]]@@
</div><div id='tut'>@@.ttitle;Factions & Loyalty@@<div class='txt-only'>
<div class='text-tutorial-big'>@@.tnormal;Cards belonging to the same faction share things in common: it may be their origin, a kink, or something else included in the story. Their loyalty represents the strenght of their ties to their faction.
These elements are of utmost importance when deciding on a @@@@.thl;Council@@@@.tnormal;, as the loyalty of a card will determine the minimum amount of council members that need to be from that faction for you to be able to include the card in a deck.
For example, a card with @@@@.thl;loyalty@@@@.tnormal; 3 will only become available if your deck has at least 3 council members from their @@@@.thl;faction@@@@.tnormal;.
- Vanilla cards have loyalty 0 and can be included in any deck.
- Restrictions only apply during the creation of the deck. Cards that add cards during a match may not follow these rules.
@@</div></div>
@@.ttable;[[Next: Cards|Tutorial Deck 3]]@@
@@.ttable;[[Previous: Deck Builder|Tutorial Deck 1]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@
</div><div id='tut'>@@.ttitle;Abilities@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;@@ @@.thl;Abase@@@@.tnormal; - Remove all active and passive skills from a character.
@@@@.thl;Ass to Ass@@@@.tnormal; - Characters at the enemy defense zone without ass or anal kinks are moved to the deployment area.
@@@@.thl;Buttplug@@@@.tnormal; - Target character gains a permanent damage bonus. The bonus increases if the target character has the anal kink.
@@@@.thl;Challenge@@@@.tnormal; - Move the target enemy attacker to their defense zone.
@@@@.thl;Hurry!@@@@.tnormal; - Move the target deployed character to the attack zone, even if they're in cooldown.
@@@@.thl;Love Barrage@@@@.tnormal; - Deal damage to multiple random targets.
@@@@.thl;Blackmail@@@@.tnormal; - Damage the target character based on the amount of characters sharing that zone.
@@@@.thl;Mystery Box@@@@.tnormal; - Add random cards to your deck.
@@@@.thl;Nurse@@@@.tnormal; - Heal target character.
@@@@.thl;Pacify@@@@.tnormal; - Set a character's damage to a preset value. Deal them damage equal to the difference..
@@@@.thl;Release@@@@.tnormal; - Gain extra depravity for the next turn.
@@@@.thl;Spank@@@@.tnormal; - Damage the target character.
@@@@.thl;Trash@@@@.tnormal; - Add useless cards to the enemy deck.
@@@@.thl;Vanquish@@@@.tnormal; - Remove a character frm the game. Lower your maximum depravity.
@@</div>
<div class='text-tutorial'>@@.tnormal;@@@@.thl;@@@@.tnormal;
@@</div>
</div>
@@.ttable;[[Previous: Skills|Tutorial Skills 1]]@@
@@.ttable;[[Tutorial Index|Tutorial Start]]@@<<widget "ChangeMusic">>
<<if !isPlaying($args[0])>>
<<masteraudio stop>>
<<audio $args[0] play loop>>
<</if>>
<</widget>>
<<widget "StopMusic">>
<<masteraudio stop>>
<</widget>><div id='tut'>@@.ttitle;Adding New Defeats: Part 1@@<div class='txt-img'>@@.tnormal;Adding new defeats is much faster than adding new characters.
As the first step, if you haven't done it yet, you'll make a folder called 'img' inside of your mod's folder. Then you'll create a 'defeat' folder inside of 'img'.
Inside of this new 'defeat' folder, you'll make subfolders for the tags that you want to add defeats to. eg; you can make a folder called 'blowjob'.
Inside of each category subfolder, you'll make 4 subforlders: 'white', 'brown,' 'black', and 'blonde' where you'll dump the new image files for the defeats.
When editing the mod, it will only ask for three values: the folder, the file name (including its extension), and a description to display along with the defeat.
Each of these subfolders must contain files with the same name. eg; if you're adding 'gangbang_1.png' to your mod, there must be a 'gangbang_1.png' file on each of the 4 subfolders.@@
</div>
@@.ttable;[[Next: Adding New Defeats: Part 2|Defeat Modding 2]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@
<div id='tut'>@@.ttitle;Adding New Defeats: Part 2@@<div class='txt-img'>@@.tnormal;The relevant part of your mod's code will end up looking like the following. You can find an example in the templates folder.
<html><pre><code> MyMod_data=[
/* Extension and other data... */
/* CHARACTER CARD OVERWRITES*/ {},
/* NEW DEFEATS*/
[
{
folder: 'blowjob',
file: 'blowjob_gif.webp',
desc: 'Ghhagg ghgagh ggahh ggha'
},
{
folder: 'anal',
file: 'mod2.png',
desc: 'Some description.'
}
]
]</code></pre></html>
Defeat mods are enabled just like the character ones: by including their name in the relevant section of the mods.js file.@@
</div>
@@.ttable;[[Previous: Adding New Defeats: Part 1|Defeat Modding 1]]@@
@@.ttable;[[Modding Index|Tutorial Modding]]@@