Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
,Main Menu!!
This is nsfw 18+ only
[[Begin->Name Setup]]What's your name?
<<textbox "$InfoSheet_Player.name" "Joseph">>
[[Continue->Intro01]]
[[Skip Intro->Village]]You walk along the empty streets of your small village. In a mix of tiredness and melancholy, you gaze at the sky. It was a bright night filled with stars. You feel tiny upon feeling the magnitude of the universe, your current crossroad feels meaningless in perspective...
Strangely enough, one of these stars shines brighter the more you look at it. Before you can even react, the sky suddely burns in an orange fury and you are struck with an all shattering blast.
[[Continue->Intro02]]Day $Day
$InfoSheet_Player.name
<<if $CharacterSheet_Player.fight.variables.currentHP != undefined>>Health: $CharacterSheet_Player.fight.variables.currentHP / $CharacterSheet_Player.fight.hp
<progress @value="$CharacterSheet_Player.fight.variables.currentHP" @max="$CharacterSheet_Player.fight.hp"></progress>
Stamina: $CharacterSheet_Player.fight.variables.currentStamina / $CharacterSheet_Player.fight.stamina
<progress @value="$CharacterSheet_Player.fight.variables.currentStamina" @max="$CharacterSheet_Player.fight.stamina"></progress>
\<<else>>
Health:$CharacterSheet_Player.fight.hp
Stamina: $CharacterSheet_Player.fight.stamina
\<</if>>
Strength: $CharacterSheet_Player.fight.strength
Accuracy: $CharacterSheet_Player.fight.accuracy
Corruption: $Player_Corruption
Muscles: $Player_Muscles
Height: <<print ~~($Player_Height / 12)>>ft<<print $Player_Height % 12>>in
Cock Size: <<print $Player_Cock>>in
Instead of the burning impact you expected, you feel like you just dove in a pool of honey. The thick liquid gathers around you and enters your body from every orifice. You try to scream but the air in your lungs clashes with the goo entering your throat. It thrusts inside you without warning. Your brain bathes in the stuff as in enters your ears and nose. As quickly as it appeared, you feel it fully enter your body.
[[Continue->Intro03]]You suddenly gasp and get up. The ground burns as you sit surrounded by burnt grass. You quickly rush back in panic while panting in confusion. What even happened just now? The surrounding wilderness burned while you stood there without a scratch. You run back to your small house, frantic with worry.
[[Continue->Intro04]]You enter your home.
It feels like something is moving inside of you...
It's like your blood has a mind of its own. You feel it move along your muscles. You try to relax on your bed and eventually fall asleep out of exhaustion.
<<set $Symbiote_Descriptor to "strange feeling inside you">>
[[Sleep->Intro05]]
<<if $Minotaur_Alive>>
Minotaur is here!
[[Sex->Minotaur Encounter Sex]]
[[Absorb->Minotaur Encounter Absorb]]
[[Return Home->Village]]
<<else>>
The minotaur's lair is empty.
[[Return Home->Village]]
<</if>>You are about to leave your village for your next adventure.
<<set $Explore_Destinations = Story.lookup("tags", "Explore")>>
<<set $Explore_Destination = $Explore_Destinations.random()>>
<<set $Day +=1>>
<<link "Explore" $Explore_Destination.title>><</link>>
You have sex with the minotaur, his cum gets absorbed into your skin.
Your body gets a bit bigger.
Relationship increased with minotaur.
<<set $Player_Height += 3>>
<<set $Player_Muscles += 4>>
[[Return Home->Village]]You attempt to absorb the minotaur into your body.
Your body gets much bigger.
You grow horns.
Your gain more corruption.
Gain a passive that increases cum production.
<<set $Minotaur_Alive = false>>
<<set $Player_Height += 16>>
<<set $Player_Muscles += 18>>
<<set $Player_Corruption += 20>>
[[Return Home->Village]]/*Stats -BEGIN*/
<<set $Day = 0>>
<<set $Player_Corruption = 0>>
<<set $Player_Muscles = 0>>
<<set $Player_Height = 68>>
<<set $Player_Cock = 6>>
/*Stats -END*/
/*NPCs -BEGIN*/
<<set $Minotaur_Alive = true>>
/*NPCs -END*/
/*AdditionalEffects -BEGIN*/
<<script>>
window.stun_Target = function(attackerSheet, victimSheet)
{
victimSheet.fight.variables.stunnedDuration = 3;
}
<</script>>
/*AdditionalEffects -END*/
<<set $Entity_Helper =
{
killEntity: function(characterSheet)
{
characterSheet.info.alive = false;
var i;
for (i = 0; i < $RandomEncounters.length; i++)
{
if($RandomEncounters[i].info.name === characterSheet.info.name)
{
$RandomEncounters.splice(i, 1);
}
}
}
}>>
<<set $Fight_Helper =
{
initializeFightVariables: function(encounterTarget)
{
encounterTarget.fight.variables.currentHP = encounterTarget.fight.hp;
State.variables.CharacterSheet_Player.fight.variables.currentHP = State.variables.CharacterSheet_Player.fight.hp;
encounterTarget.fight.variables.currentStamina = encounterTarget.fight.stamina;
State.variables.CharacterSheet_Player.fight.variables.currentStamina = $CharacterSheet_Player.fight.stamina;
encounterTarget.fight.variables.stunnedDuration = 0;
State.variables.CharacterSheet_Player.fight.variables.stunnedDuration =0;
},
getSkillDisplayString: function(character, fightMove)
{
var staminaCost;
var damage;
var accuracy;
var skillDescription;
var displayString = "";
displayString += "\" <p id='FightSkillHeader'>" + _fightMove.name +
"</p> <p id='FightSkillBody'>";
if(fightMove.dmg != 0)
{
displayString += "Damage: " + fightMove.dmg;
}
displayString += "\\n";
if(fightMove.accuracyMod != 100)
{
var chanceToHit = character.fight.accuracy + fightMove.accuracyMod;
displayString += "Chande to hit: " + chanceToHit +
"%";
}
displayString += "\\n";
if(fightMove.staminaCost != 0)
{
displayString += "Stamina cost: " + fightMove.staminaCost
}
displayString += "\\n";
displayString += "\\n" + _fightMove.skillDescription;
displayString += "</p>\"";
return displayString;
},
isDisabled: function(character)
{
return character.fight.variables.stunnedDuration > 0;
}
}>>
<<script>>
window.doAttack = function(attackerSheet, victimSheet)
{
var attackerFightSheet = attackerSheet.fight;
var attackerFightVariables = attackerFightSheet.variables;
attackerFightVariables.hitcheck = random(0,100);
var thresholdToHit = attackerFightSheet.accuracy + attackerFightVariables.currentFightMove.accuracyMod;
if(attackerFightVariables.currentFightMove.name == State.variables.Fight_Move_Do_Nothing.name)
{
//do nothing
}
else if(attackerFightVariables.stunnedDuration > 0)
{
attackerFightVariables.stunnedDuration -= 1;
attackerFightVariables.currentFightMoveOutcome = attackerSheet.info.name + " is Stunned!";
}
else if(attackerFightVariables.hitcheck <= thresholdToHit)
{
attackerFightVariables.currentFightMoveOutcome = "It hits for " + attackerFightVariables.currentFightMove.dmg + " damage!";
victimSheet.fight.variables.currentHP -= attackerFightVariables.currentFightMove.dmg;
for(let i = 0; i < attackerFightVariables.currentFightMove.additionalEffects.length; i++)
{
attackerFightVariables.currentFightMove.additionalEffects[i](attackerSheet, victimSheet);
}
}
else
{
attackerFightVariables.currentFightMoveOutcome = "It missed!";
}
if(attackerFightVariables.currentFightMove.staminaCost != 0)
{
attackerFightVariables.currentStamina -= attackerFightVariables.currentFightMove.staminaCost;
}
else
{
attackerFightVariables.currentStamina += attackerFightSheet.staminaRecovery;
if(attackerFightVariables.currentStamina > attackerFightSheet.stamina)
{
attackerFightVariables.currentStamina = attackerFightSheet.stamina;
}
}
}
window.learnRandomMoveFromTarget = function(attackerSheet, victimSheet)
{
var victimSheetMoves = [...victimSheet.fight.fightMoves];
var attackerSheetMoves = [...attackerSheet.fight.fightMoves];
victimSheetMoves = victimSheetMoves.filter(function(val) {
var i;
for(i = 0; i < attackerSheetMoves.length; i++)
{
console.log(val.name + " vs " + attackerSheetMoves[i].name);
if(val.name == attackerSheetMoves[i].name)
{
console.log("false");
return false;
}
}
console.log("true");
return true;
});
return victimSheetMoves.random();
}
<</script>>
<<set $FightVariables =
{
currentHP: undefined,
currentStamina: undefined,
currentFightMove: undefined,
hitCheck: undefined,
stunnedDuration: undefined,
currentFightMoveOutcome: undefined,
}>>
/*Fight Moves -BEGIN*/
<<set $Fight_Move_Lunge =
{
name: "Lunge",
preparation: function(character)
{
return character.info.name + " is crouching with his weapon held firmly."
},
attackDesc: function(character)
{
return character.info.name + " jumps at his target. " + character.info.pronoun + " lands in front of him and go for a downward slash"
},
activationCondition: function(character)
{
return true;
},
dmg: 6,
staminaCost: 0,
accuracyMod: 0,
skillDescription: "A basic attack.",
additionalEffects: []
}>>
<<set $Fight_Move_Stun_Punch =
{
name: "Stun Punch",
preparation: function(character)
{
return name + " is charging towards you while readying a punch"
},
attackDesc: function(character)
{
return character.info.name + " lands a strong punch to the stomach. The impact is strong enough to cut their breath short."
},
activationCondition: function(character)
{
return character.fight.variables.currentStamina >= this.staminaCost;
},
dmg: 4,
staminaCost: 6,
accuracyMod: -15,
skillDescription: "Stuns your target upon hitting.",
additionalEffects: [window.stun_Target]
}>>
<<set $Fight_Move_Do_Nothing =
{
name: "Do Nothing",
preparation: function(character)
{
return name + " does not look like they care about the fight."
},
attackDesc: function(character)
{
return character.info.name + " waits eagerly for what will come next."
},
activationCondition: function(character)
{
return true;
},
dmg: 0,
staminaCost: 0,
accuracyMod: 100,
skillDescription: "Lets your opponent attack freely.",
additionalEffects: []
}>>
/*Fight Moves -END*/
/*Character Sheets*/
<<set $FighterSheet_Player =
{
hp: 20,
stamina: 10,
strength: 10,
accuracy: 55,
staminaRecovery: 2,
variables: $FightVariables,
fightMoves: [$Fight_Move_Lunge, $Fight_Move_Stun_Punch,
$Fight_Move_Do_Nothing],
outcomePlayerWins: "",
outcomePlayerLoses: ""
}>>
<<set $InfoSheet_Player =
{
name: "Player",
pronoun: "he",
alive: true
}>>
<<set $CharacterSheet_Player =
{
info: $InfoSheet_Player,
fight: $FighterSheet_Player
}>>
<<set $InfoSheet_Imp =
{
name: "Imp",
pronoun: "he",
alive: true
}>>
<<set $FighterSheet_Imp =
{
hp: 12,
stamina: 0,
strength: 6,
accuracy: 45,
staminaRecovery: 2,
variables: $FightVariables,
fightMoves: [$Fight_Move_Lunge],
outcomePlayerWins:
"The Imp falls down and tries to get back up. He promises to give you power if you spare him. \n \n [[Kill the Demon->Imp Fight Won - Kill]] \n [[Accept the Imp's proposal->Imp Fight Won - Deal]] \n [[Go back to the village->Village]]",
outcomePlayerLoses:
"The Imp brings you down to your knees. \n \n[[Escape->Village]] \n[[Submit->Imp Fight Lost]]"
}>>
<<set $CharacterSheet_Imp =
{
info: $InfoSheet_Imp,
fight: $FighterSheet_Imp
}>>
<<script>>
window.getRandomEncounter = function()
{
State.variables.RandomEncounters =
[
State.variables.CharacterSheet_Imp
];
return State.variables.RandomEncounters.random();
}
<</script>>
/*Descriptors*/
<<set $Fight_HealthDescriptor = function(maxHP, curHP)
{
if(curHP / maxHP > 0.7)
{
return "healthy";
}
else if(curHP / maxHP > 0.5)
{
return "out of breath";
}
else if(curHP / maxHP > 0.3)
{
return "exhausted";
}
else
{
return "nearly dead";
}
};
>>
You wake up feeling beyond invigorated. Contrary to what most people suggest, you have an urge to leave the city.
[[Sleep->Village]]
<<nobr>>
<<set $Encounter_Target = window.getRandomEncounter()>>
<</nobr>>
<<if !$Encounter_Target>>
You find nothing exciting in your journey. All those that could have crossed your path are no more.
[[Go Home->Village]]
<<else>>
You stumble upon a hostile <<print $Encounter_Target.info.name>>!
[[Fight->Fight Logic]]
[[Run Away->Village]]
<</if>><<nobr>>
/*Initialization*/
<<if !$Encounter_Target.fight.variables.currentHP>>
<<run $Fight_Helper.initializeFightVariables($Encounter_Target)>>
<</if>>
/*Attack Handling*/
<<if $Encounter_Target.fight.variables.currentFightMove && $CharacterSheet_Player.fight.variables.currentFightMove>>
<<run window.doAttack($CharacterSheet_Player, $Encounter_Target) >>
<<run window.doAttack($Encounter_Target, $CharacterSheet_Player) >>
<</if>>
<</nobr>>
/*Display*/
\<<if $Encounter_Target.fight.variables.currentFightMove && $CharacterSheet_Player.fight.variables.currentFightMove>>
<<print $CharacterSheet_Player.fight.variables.currentFightMove.attackDesc($CharacterSheet_Player)>>
<<print $CharacterSheet_Player.fight.variables.currentFightMoveOutcome>>
<<print $Encounter_Target.fight.variables.currentFightMove.attackDesc($Encounter_Target)>>
<<print $Encounter_Target.fight.variables.currentFightMoveOutcome>>
\<</if>>
\<<if $Encounter_Target.fight.variables.currentHP <= 0 || $CharacterSheet_Player.fight.variables.currentHP <= 0>>
[[Continue->Fight Outcome]]
\<<else>>
\ <<set $Encounter_Target.fight.variables.currentFightMove = $Encounter_Target.fight.fightMoves.random()>>
<<print $Encounter_Target.info.name>> looks <<print $Fight_HealthDescriptor($Encounter_Target.fight.hp, $Encounter_Target.fight.variables.currentHP)>>
<<if $Fight_Helper.isDisabled($Encounter_Target)>>
$Encounter_Target.info.name can't move!
<<else>>
<<print $Encounter_Target.fight.variables.currentFightMove.preparation($Encounter_Target)>>
<</if>>
<<nobr>>
<<for _i, _fightMove range $CharacterSheet_Player.fight.fightMoves>>
<<if _fightMove.activationCondition($CharacterSheet_Player)>>
<<set _fightMoveDescription = $Fight_Helper.getSkillDisplayString($CharacterSheet_Player, _fightMove) >>
<<print "<<link "+ _fightMoveDescription +" \"Fight Logic\">> <<set $CharacterSheet_Player.fight.variables.currentFightMove = $CharacterSheet_Player.fight.fightMoves["+ _i +"]>> <</link>>">>
<</if>>
<</for>>
<</nobr>>
<</if>>
You fall down in exhaustion.
As you try to get back up, the heavy musk of the imp's cock overwhelms you. The demon moans, his cock drips with purple glowing cum.
A part of yourself damns you for not escaping. It's a muffled voice compared to the need that now screams within you. You take his cock into your mouth, his cum instantly infect your thoughts. Your eyes glow purple and you smile at the demon.
The following hours become a blur of overwhelming lust, you fuck in every way possible. You feel some of your power enter his body...
Consciousness suddenly rushes back to you. You wake up alone in the forest, completely covered in both of your cums.
<<set _learnedMove = window.learnRandomMoveFromTarget($CharacterSheet_Imp, $CharacterSheet_Player)>>
<<if _learnedMove>>
(The imp has learned _learnedMove.name)
<<set $CharacterSheet_Imp.fight.fightMoves = $CharacterSheet_Imp.fight.fightMoves.concatUnique(_learnedMove)>>
<</if>>
[[Go back to the Village->Village]]\<<if $Encounter_Target.fight.variables.currentHP <= 0>>
$Encounter_Target.fight.outcomePlayerWins
\<<elseif $CharacterSheet_Player.fight.variables.currentHP <= 0>>
$Encounter_Target.fight.outcomePlayerLoses
\<</if>>
<<nobr>>
/*Unset Fight Variables*/
<<unset $Display_Player_FightMoveOutcome,
$Encounter_Target>>
<<set $CharacterSheet_Player.fight.variables = $FightVariables>>
<</nobr>> It's safer for everyone if those kinds of demon are taken care of.
You kill the Imp who begs for his life.
(You will no longer encounter the imp in random encounters)
<<run $Entity_Helper.killEntity($CharacterSheet_Imp)>>
[[Go back->Village]] The imp crawls to you and unbutton your pants.
"I promise you won't regret this."
With each suck you feel your cock getting bigger and longer. An unholy vitality fills you both as you force the imp deep on your growing dick. He coils his demonic tongue around your cock. It doesn't take long for you to cum down his throat.
He gets up, his wound fully healed from the experience.
"Hope to see you again big guy."
Your cock grew 2 inches.
Your soul has been corrupted slightly (+3)
[[Go Back to the Village->Village]]
<<set $Player_Cock += 2>>
<<set $Player_Corruption += 3>>