<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>Music</div>
<div id=side-speed>-</div>
<div id=side-quick>>></div>
<div id=side-exit>Exit</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();}
catch(e){console.log(e);Engine.play("Main Menu")}
});<</script>><<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>><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'>Updates</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/")){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.className='main-logo';
img.id='main-itch';
m.appendChild(img);
img.addEventListener('click',function(e){
window.open('https://erisatori.itch.io/eromancer','_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.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>\
Next version 0.1.1 (ETA Mar 2024):<br>\
- Active targeted skills.<br>\
- Character card modding.<br>\
Create your own cards.<br>\
Customize them.<br>\
Overwrite core cards.<br>\
Card rebalance.<br>\
<hr>\
Old versions:<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>\
';
});<</script>>
<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){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; I'll add a changelog right below this so you can easily tell if there's anything new to learn.@@
@@.ttable;[[Deck Builder|Tutorial Deck 1]]@@
@@.ttable;[[Free Play|Tutorial Training 1]]@@
@@.ttable;[[Card Types|Tutorial Cards 1]]@@
@@.ttable;[[Skills & Abilities|Tutorial Skills 1]]@@
@@.ttable;[[Keywords|Tutorial Keywords 1]]@@
@@.ttable;[[Back|Main Menu]]@@
</div>
@@.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 in future versions the available cards will 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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck1.png';
});<</script>>@@.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;.
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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training1.png';
});<</script>>@@.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 that can be deployed.
@@@@.thl;Combat@@@@.tnormal; - Fighting another character or the enemy commander.
@@@@.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; - Moved from the hand or council zones to a different area.
@@@@.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 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]]@@@@.ttitle;Skills@@<div class='txt-only'>
<div class='text-tutorial'>@@.tnormal;@@ @@.thl;Aphrodisiac@@@@.tnormal; - Inflict the Aphrodisiac status, causing the target to take damage every turn.
@@@@.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;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;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;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;Masochism@@@@.tnormal; - Increase damage when being hurt.
@@@@.thl;Masturbation@@@@.tnormal; - Gain depravity at the start of the turn upon meeting the requirements.
@@@@.thl;Multiorgasm@@@@.tnormal; - Upon defeat, restore your hp to its initial value.
@@@@.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;Raise@@@@.tnormal; - Bring a character back from the graveyard.
@@@@.thl;Scavenge@@@@.tnormal; - Draw cards when ending the turn at the target area.
@@@@.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;[[Tutorial Index|Tutorial Start]]@@@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card1.png';
});<</script>>@@.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.- In future versions, the amount of council members of each faction will determine the cards that your deck will have access to.
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: Cards|Tutorial Deck 3]]@@
@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck2.png';
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck3.png';
});<</script>>@@.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.
@@</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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'deck4.png';
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card2.png';
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card3.png';
});<</script>>@@.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/")){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("/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){Engine.play("Main Menu")}
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training2.gif';
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'card5.gif';
});<</script>>@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training4.gif';
});<</script>>@@.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.
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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training5.gif';
});<</script>>@@.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 play 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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training7.gif';
});<</script>>@@.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
@@</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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training6.gif';
});<</script>>@@.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 here will have a cooldown. 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; - The first defender will fight any attackers.
@@@@.thl;Support@@@@.tnormal; - A mostly safe zone for cards that are better on the background than at the frontlines.
@@@@.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/")){path=State.variables.folder+'img/tutorial/';}else{path="img/tutorial/";}
document.getElementById('pic').src=path+'training7.png';
});<</script>>@@.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;Speed (">>")@@@@.tnormal; - Keyboard 1-4 or mousewheel.
@@@@.thl;Slow mode ("0" or "X")@@@@.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/")){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, abilities, and even the story) 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 may start working on a secondary project (one with the goal of learning Twine) before this game is complete, but if that's the case, I'll just work on both projects at once.
This game will always be free. No paywalls, no preview versions, no extra content for supporters (besides some random art or the ability to participate in polls). Only support it if you feel inclined to do so; there won't be any premium content.
The base game uses post-edited AI art. If you don't like it, there's a million other games out there.
The current build (v0.1) is basically a foundation. Most of the currently existing cards will be moved to different decks and have restrictions placed in future versions. I know some are overpowered and unbalanced. That will be addressed, but it's not the priority.
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;[[Nice!|Main Menu]]@@
@@.ttable;[[Right, whatever|Main Menu]]@@<<set $firstTime to false>></div>