FightFuckFeed.me(0.9.1.0) - Nonbinary Alpha

Forum for the Vore games, and other downloads
Forum rules
Don't ask about updates. If there is an update, it will simply be posted. If someone is committing to a timeline, they will just tell you the timeline without needing anyone to ask.

Use Looking for master thread when you are not posting about an existing game.


You use this forum and website at your own risk for all links and uploads. There is no quality control or malware scanning or testing done here. Proceed with caution and use a virtual machine (VM) for any uploads strongly recommended. Virus/malware scanners alone are generally not good enough.

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby Content2020 » Tue Aug 16, 2022 6:46 pm

I know this game is pred focused, so I don't expect this request to be considered, but since there's so much dialogue for when your companions get eaten, is it possible for the same to be applied to the player (simply replacing the companion with the player in the dialogue)? Rather than a text simply saying "you died"? Maybe add a struggle option or lock off the controls until all the dialogue has been used up and you die. This will make this an even better open-world experience
Content2020
Been posting for a bit
 
Posts: 43
Joined: Wed Jun 17, 2020 9:56 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby Wollffett » Tue Aug 16, 2022 8:47 pm

Content2020 wrote:I know this game is pred focused, so I don't expect this request to be considered, but since there's so much dialogue for when your companions get eaten, is it possible for the same to be applied to the player (simply replacing the companion with the player in the dialogue)? Rather than a text simply saying "you died"? Maybe add a struggle option or lock off the controls until all the dialogue has been used up and you die. This will make this an even better open-world experience

not quite sure what you mean but there is alot of player prey content i very rarely get a you died text i do belive thats what happens if you get killed and not eaten
User avatar
Wollffett
Participator
 
Posts: 227
Joined: Fri Aug 10, 2018 2:36 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Wed Aug 17, 2022 2:20 am

Content2020 wrote:I know this game is pred focused, so I don't expect this request to be considered, but since there's so much dialogue for when your companions get eaten, is it possible for the same to be applied to the player (simply replacing the companion with the player in the dialogue)? Rather than a text simply saying "you died"? Maybe add a struggle option or lock off the controls until all the dialogue has been used up and you die. This will make this an even better open-world experience


"You died" Will only trigger when dying from creatures too small to eat you.

I do confess that the player prey content has been lacking though. And I'm slowly working on that.
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby Content2020 » Wed Aug 17, 2022 11:29 pm

Didn't know about the medium and above dialogues. I was mainly talking about the simple "the _ eats you!" and others. I should have been more observant.
I'll look forward to when you add more unwilling dialogue for all sizes. Honestly, all you have to do is change up the "feed" dialogue or the companion vore death ones. That'll do it for me.
"Player digest prey slowly" but in reverse would be cool too
Content2020
Been posting for a bit
 
Posts: 43
Joined: Wed Jun 17, 2020 9:56 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Thu Aug 18, 2022 5:31 am

Content2020 wrote:Didn't know about the medium and above dialogues. I was mainly talking about the simple "the _ eats you!" and others. I should have been more observant.
I'll look forward to when you add more unwilling dialogue for all sizes. Honestly, all you have to do is change up the "feed" dialogue or the companion vore death ones. That'll do it for me.
"Player digest prey slowly" but in reverse would be cool too


Huh, I'd figured that they'd only be triggering when a scene is censored. I didn't think any races still hadn't gotten any proper feast scenes for the player! Which races are triggering this?
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby sansuki » Thu Aug 18, 2022 5:24 pm

heromc wrote:
Content2020 wrote:Didn't know about the medium and above dialogues. I was mainly talking about the simple "the _ eats you!" and others. I should have been more observant.
I'll look forward to when you add more unwilling dialogue for all sizes. Honestly, all you have to do is change up the "feed" dialogue or the companion vore death ones. That'll do it for me.
"Player digest prey slowly" but in reverse would be cool too


Huh, I'd figured that they'd only be triggering when a scene is censored. I didn't think any races still hadn't gotten any proper feast scenes for the player! Which races are triggering this?


I actually got something like this just the other day with a Tiger Queen, and I don't THINK I had anything censored..
User avatar
sansuki
---
 
Posts: 1593
Joined: Fri Aug 22, 2008 11:00 pm
Location: New England

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby Content2020 » Thu Aug 18, 2022 7:48 pm

Just about every race below medium
I'm playing the free version btw
Content2020
Been posting for a bit
 
Posts: 43
Joined: Wed Jun 17, 2020 9:56 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Thu Aug 18, 2022 7:58 pm

Noted. I'll give this a look when able :)
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby unit72 » Mon Aug 22, 2022 5:30 pm

Greetings heromc,
I noticed your code is probably hard to work with so i decided to refactor it. But instead began writing from scratch.
I already have a game UI whick looks nice and doesn't require much scrolling for large parties.
As a proof, i attach this:

Spoiler: show
Code: Select all
<!DOCTYPE html>
<html>


<head>
    <title>Test</title>
   <link href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;600;800&display=swap" rel="stylesheet">
   <link href="https://fonts.googleapis.com/css?family=Londrina+Solid&display=swap" rel="stylesheet">
   <link href="https://fonts.googleapis.com/css?family=Love+Ya+Like+A+Sister&display=swap" rel="stylesheet">
   <link href="https://fonts.googleapis.com/css2?family=Luckiest+Guy&display=swap" rel="stylesheet">
</head>


<style>
    /* colors */
     
    :root {
        /* https://css.land/lch/ */
        --black: #000;
        --white: #fff;
        /* cyans: lch * 25 200 */
        --cyan-60: rgb(32.71% 61.47% 62.25%);
        --cyan-65: rgb(38.04% 66.74% 67.49%);
        --cyan-70: rgb(43.36% 72.08% 72.81%);
        --cyan-75: rgb(48.71% 77.49% 78.2%);
        --cyan-80: rgb(54.09% 82.97% 83.66%);
        --cyan-85: rgb(59.51% 88.52% 89.19%);
        --cyan-90: rgb(64.99% 94.13% 94.78%);
        /* yellows: lch * 70 100 */
        --yellow-70: rgb(68.72% 69.05% 5.77%);
        --yellow-75: rgb(74.34% 74.38% 14.54%);
        --yellow-80: rgb(80.02% 79.78% 21.14%);
        --yellow-85: rgb(85.75% 85.25% 27.1%);
        --yellow-90: rgb(91.53% 90.78% 32.8%);
        --yellow-95: rgb(97.37% 96.39% 38.37%);
        /* reds * 75 35 */
        --red-25: rgb(48.17% 0% 4.62%);
        --red-30: rgb(56.46% 0% 6.51%);
        --red-35: rgb(64.99% 0% 8.16%);
        --red-40: rgb(72.31% 7.41% 11.14%);
        --red-45: rgb(78.44% 15.92% 15.36%);
        --red-50: rgb(84.61% 22.55% 19.7%);
        --red-55: rgb(90.81% 28.59% 24.16%);
        /* pinks * 75 345*/
        --pink-30: rgb(53.6% 0% 37.35%);
        --pink-35: rgb(61.74% 0% 43.25%);
        --pink-40: rgb(70.08% 0% 49.3%);
        --pink-45: rgb(78.52% 0.64% 55.44%);
        --pink-50: rgb(84.44% 14.17% 60.6%);
        --pink-55: rgb(90.41% 22.05% 65.85%);
        --pink-60: rgb(96.42% 28.77% 71.16%);
        /* oranges * 75 65*/
        --orange-40: rgb(54.57% 30.67% 0%);
        --orange-45: rgb(61.35% 34.76% 0%);
        --orange-50: rgb(68.26% 38.92% 0%);
        --orange-55: rgb(75.31% 43.17% 0%);
        --orange-60: rgb(82.49% 47.49% 0%);
        --orange-65: rgb(88.92% 52.37% 7.09%);
        --orange-70: rgb(95% 57.55% 14.25%);
        /* grays */
        --gray-40: rgb(36.95% 36.95% 36.95%);
       
        --gray-65: rgb(61.84% 61.84% 61.84%);
        --gray-70: rgb(67.08% 67.08% 67.08%);
        --gray-75: rgb(72.39% 72.39% 72.39%);
        --gray-80: rgb(77.78% 77.78% 77.78%);
        --gray-85: rgb(83.23% 83.23% 83.23%);
        --gray-90: rgb(88.76% 88.76% 88.76%);
    }
   
   
    html {
        height: 100%;
        margin: 0;
        user-select: none;
    }
    body {
        box-sizing: border-box;
        font-family: "Londrina Solid";
        height: 100%;
        margin: 0;
        padding: 20px;
        text-align: center;
    }
    .button {
        border-radius: 10px;
        cursor: pointer;
        font-family: "Luckiest Guy";
        height: 50px;
        position: relative;
    }
    .button.inactive {
        cursor: auto;
        pointer-events: none;
    }
    .center {
        left: 50%;
        position: absolute;
        top: 50%;
        transform: translate(-50%, -50%);
    }
    .flex {
        flex: 1 1 0;
    }
    .flex-column {
        display: flex;
        flex-direction: column;
        row-gap: 20px;
    }
    .flex-row {
        column-gap: 20px;
        display: flex;
        flex-direction: row;
    }
    /*.grid-row {
        display: grid;
        grid-column-gap: 20px;
        grid-template-columns: 1fr 1fr;
    }*/
    .log {
        border-radius: 10px;
        box-sizing: border-box;
        font-family: "EB Garamond";
        min-height: 200px;
        padding: 30px 20px;
        text-align: justify;
    }
    .map {
        border-radius: 10px;
        box-shadow: inset 0 2px 10px #0003;
        display: grid;
        font-family: "Love Ya Like A Sister";
        grid-template-columns: 10px repeat(3, 1fr) 10px;
        grid-template-rows: 10px repeat(3, 1fr) 10px;
        text-align: center;
        width: 320px;
    }
    .map-tile {
        position: relative;
    }
    .party {
        background-color: #fff;
        border-radius: 10px;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        height: 100%;
        overflow: clip scroll;
        row-gap: 10px;
        scrollbar-width: none;
        padding: 10px 10px 20px;
    }
    .test {
        box-shadow: inset 0 2px 10px #0003;
        /*height: 100%;*/
    }
   
    /* unit cards */
    .unit-bar-health, .unit-bar-horny, .unit-bar-hungry {
        border: 3px solid #000;
        border-radius: 10px;
        bottom: 5px;
        box-sizing: border-box;
        color: #fff;
        display: inline-block;
        height: 20px;
        position: relative;
        width: 30%;
    }
    .unit-bars {
        display: flex;
        /*flex-direction: row-reverse;*/
        height: 0;
        margin-top: 10px;
        position: relative;
    }
    .party.left .unit-bars {
        flex-direction: row-reverse;
    }
    .unit-body {
        border-radius: 5px;
        padding: 5px 5px 10px;
        position: relative;
    }
    .unit-box-dark {
        border-radius: 5px;
        display: inline-block;
        padding: 0 5px;
    }
    .unit-box-light {
        border-radius: 5px;
        display: inline-block;
        padding: 2px 5px 4px;
    }
    .unit-head {
        align-items: baseline;
        column-gap: 10px;
        display: flex;
        flex-wrap: wrap-reverse;
        /*row-gap: 5px;*/
    }
    .unit-head > :not(:first-child) {
        margin-top: 0;
        margin-bottom: 0;
        z-index: 2;
    }
    .party.right .unit-head {
        flex-direction: row-reverse;
    }
    .unit-name {
        border-radius: 5px;
        display: inline-block;
        margin-bottom: -5px;
        margin-top: 0;
        padding: 5px;
        position: relative;
    }
    .unit-stats {
        display: flex;
        justify-content: space-evenly;
        text-align: center;
    }
   
    /* alignment */
   
    .button > *, .map-tile > *, .unit-bar-health > *, .unit-bar-horny > *, .unit-bar-hungry > * {
        left: 50%;
        position: absolute;
        top: 50%;
        transform: translate(-50%, -50%);
    }
    .party.left {
        text-align: left;
    }
    .party.right {
        text-align: right;
    }
   
    /* shadows */
   
    .party {
        box-shadow: 0 2px 10px #0003;
    }
    .button {
        box-shadow: 0 2px 5px #0003;
    }
    .unit-name::after {
        /* fix for incorrect shadows */
       background-color: inherit;
       content: "";
       z-index: 1;
       display: block;
       position: absolute;
       inset: 10px 0 0 0;
    }
    .unit-name > * {
        /* fix for fix for incorrect shadows */
        position: relative;
        z-index: 2;
    }
    .log, .map {
        box-shadow: inset 0 2px 10px #0003;
    }
    .unit-box-light, .unit-body, .unit-name {
        box-shadow: 0 2px 3px #0003;
    }
    .map-tile {
        box-shadow: inset 0 0 40px #0001, inset 0 0 5px #0003;
    }
    .unit-box-dark {
        box-shadow: inset 0 2px 3px #0003;
    }
    .unit-bar-health, .unit-bar-horny, .unit-bar-hungry {
        box-shadow: 0 2px 5px #0003, inset 0 -1px 5px #0002;
    }
   
    /* colors */
   
    .button, .unit-name, .unit-body {
        background-color: var(--cyan-80);
    }
    .selected.button, .selected .unit-name, .selected .unit-body {
        background-color: var(--yellow-95);
    }
    .inactive.button/*, .inactive .unit-name, .inactive .unit-body*/ {
        background-color: var(--gray-85);
    }
    .unit-box-dark {
        background-color: var(--cyan-65);
        color:            var(--cyan-90);
    }
    .selected .unit-box-dark {
        background-color: var(--yellow-85);
        color:            var(--white);
    }
    /*.inactive .unit-box-dark {
        background-color: rgb(67.08% 67.08% 67.08%);
        color: rgb(88.76% 88.76% 88.76%);
    }*/
    .unit-box-light {
        background-color: var(--cyan-90);
        color:            var(--cyan-65);
    }
    .selected .unit-box-light {
        background-color: var(--white);
        color:            var(--yellow-85);
    }
    /*.inactive .unit-box-light {
        background-color: rgb(88.76% 88.76% 88.76%);
        color: rgb(67.08% 67.08% 67.08%);
    }*/
    .unit-bar-health {
        background-color: var(--red-55);
        border-color:     var(--red-45);
    }
    .unit-bar-horny {
        background-color: var(--pink-60);
        border-color:     var(--pink-50);
    }
    .log {
        background-color: var(--gray-40);
        color:            var(--yellow-95);
    }
   
    /* biome colors */
    /* "biomes"
     *
     *  road
     *  river
     *  building
     *  pond
     *  shrine of resurrection
     *
     *  forest
     *  plains
     *  jungle
     *  swamp
     *  desert
     * 
     *  cave
     *  canyon
     *  mountain
     *
     *  sea
     */
   
    .map-tile.building {}
    .map-tile.canyon {}
    .map-tile.cave {
        background-color: var(--gray-40);
        color:            var(--white);
    }
    .map-tile.cliff {}
    .map-tile.forest {}
    .map-tile.jungle {}
    .map-tile.path {}
    .map-tile.plains {}
    .map-tile.sand {}
    .map-tile.shrine {}
    .map-tile.swamp {}
    .map-tile.water {}
   
</style>


<body>
    <div class="flex-column" style="
        height: 100%;
        margin: auto;
        min-width: 720px;
        max-width: 960px;
    ">
        <div class="flex flex-row" style="min-height: 400px">
            <div id="party-left"  class="flex party left" ></div>
            <div id="party-right" class="flex party right"></div>
        </div>
        <div class="flex flex-row">
            <div class="flex flex-column">
                <div id="buttons" class="flex-row" style="column-gap: 10px"></div>
                <div id="log" class="flex log"></div>
            </div>
            <div id="map" class="map">
                <div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div>
                <div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div>
               
                <div class="map-tile"></div><div class="map-tile"></div>
                <div class="map-tile cave"><span>Crumbling<br />cave</span></div>
                <div class="map-tile"></div><div class="map-tile"></div>
               
                <div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div>
                <div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div><div class="map-tile"></div>
            </div>
        </div>
    </div>
</body>


<script>
    console.log ("i hate javascript!");
    console.log ("i hate javascript!"); // intentional - do not replace with loop


    /* biomes and objects
     *
     *  road
     *  river
     *  building
     *  pond
     *  shrine of resurrection
     *
     *  forest
     *  plains
     *  jungle
     *  swamp
     *  desert
     * 
     *  cave
     *  canyon
     *  mountain
     *
     *  sea
     */
     
    /* environment
     *  water - buffs aquatics/amphibious
     *  darkness - fight/feast/flirt/fuck miss 50%, easier to flee
     *  indoors - flying doesn't work
     */
     
    /* creature traits and abilities
     *  size - can only eat same size or smaller
     *  bloodsucker - can feast on creatures of any size, unsuccessful feast still drains hp and stats
     *  bloodless - does not have blood
     *  liquid - unsuccessful feast against it still drains hp, stats and size, grows in size when eating same size
     *  deadly - can kill with fight
     *  flying - evades 50%
     *  aquatic - evades 50% when in water, stats lowered outside of it
     *  amphibious - same but without penalty
     *  darkvision - does not miss in darkness, can't be missed with flirt in darkness
     *  sunlight sensitive - reduced stats when not in darkness
     *  counter on miss
     *  unconditional counter
     *  reach - negates flying
     *  double attack - target two creatures at once
     *  regeneration - regains hp every turn
     *  random targeting - can't choose targets
     *  splash attack - hits everyone
     *  counter bypass - does not trigger counters
     *  boosts stats - has milk/fruits/whatever to boost stats when flirting
     *  charming - can put to sleep with flirt
     *  seductive - can convert creatures to their side in combat
     *  enraged - fight is doubled, goes away when flirted with
     *  resist/immune - effect of a certain action type is halved or negated
     *
     *  hungry - feast is doubled, can't fuck, becomes horny when fed willing prey
     *  stuffed - can't feast, fight is halved, falls asleep if fucks
     *  horny - peaceful, can't fight and feast, can't resist fuck, fight and feast against it are doubled but it becomes not horny
     *  asleep - skips turns, fight brings to 0, can't resist feast
     *  willing - can't resist feast if horny, can be fed to others
     *  fled - can't act or be targeted
     *
     *  creature joins in combat when you roll fuck double its roll
     *  in peaceful just exceed its roll
     *  a single willing creature will join the party unconditionally
     *
     * encounter ends when there are only horny and sleeping creatures on one side or none at all
     *
     * basically horny bar defends tanky creatures with low fuck which are easy to convert
     *
     * large party penalty: creature sometimes will skip their turns because they think they're safe and can fuck around
     * very large party penalty: creatures will eat each other because they think you won't notice anything
     */
   
    class Species {
        constructor (
            name, size, tags, health, horny,
            minFight, maxFight,
            minFeast, maxFeast,
            minFlirt, maxFlirt,
            minFuck, maxFuck,
            minFlee, maxFlee,
            feed
        ) {
            this.name = name;
            this.size = size;
            this.health = health;
            this.horny = horny;
            this.tags = tags;
           
            this.minFight = minFight; this.maxFight = maxFight;
            this.minFeast = minFeast; this.maxFeast = maxFeast;
            this.minFlirt = minFlirt; this.maxFlirt = maxFlirt;
            this.minFuck = minFuck; this.maxFuck = maxFuck;
            this.minFlee = minFlee; this.maxFlee = maxFlee;
            this.feed = feed;
        }
       
        creature () {
            let c = new Creature (
                this, this.name, this.health, this.health, this.horny, this.horny,
                this.minFight, this.maxFight,
                this.minFeast, this.maxFeast,
                this.minFlirt, this.maxFlirt,
                this.minFuck, this.maxFuck,
                this.minFlee, this.maxFlee,
                this.feed
            );
            c.decreaseStats (this.feed);
            c.increaseStats (this.feed * 2);
            return c;
        }
    }
   
   
    class Creature {
        constructor (
            species, name, health, maxHealth, horny, maxHorny,
            minFight, maxFight,
            minFeast, maxFeast,
            minFlirt, maxFlirt,
            minFuck, maxFuck,
            minFlee, maxFlee,
            feed
        ) {
            this.species = species;
            this.name = name;
            this.health = health;
            this.maxHealth = maxHealth;
            this.horny = horny;
            this.maxHorny = maxHorny;
           
            this.minFight = minFight; this.maxFight = maxFight;
            this.minFeast = minFeast; this.maxFeast = maxFeast;
            this.minFlirt = minFlirt; this.maxFlirt = maxFlirt;
            this.minFuck = minFuck; this.maxFuck = maxFuck;
            this.minFlee = minFlee; this.maxFlee = maxFlee;
            this.feed = feed;
        }
       
        rollInitiative () {
            this.initiative = minFlee + Math.random () * (maxFlee - minFlee + 1);
        }
       
        canEat (other) {
            return other != this;
        }
       
        /* rules:
         * max stat can't be lower than min
         * stats grow proportionally to your stats plus stats of the eaten creature
         */
        increaseStats (amount, creature) {
            const stats = ["maxHealth", "maxHorny", "minFight", "maxFight", "minFeast", "maxFeast", "minFlirt", "maxFlirt", "minFuck", "maxFuck", "minFlee", "maxFlee", "feed"];
            let pool = stats.map (creature ? s => this [s] + creature [s] + 1 : s => this [s] + 1);
            for (let i = 1; i < pool.length; i++) {
                pool [i] += pool [i - 1];
            }
            for (let i = 0; i < amount; i++) {
                let value = Math.random () * pool [pool.length - 1];
                // i won't do binary search in such a small array
                for (let j = 0; j < pool.length; j++) {
                    if (value < pool [j]) {
                        this [stats [j]]++;
                        if (j < 2) this [["health", "horny"][j]]++;
                        break;
                    }
                }
            }
           
            // todo: fix min > max
            // todo: limit this somehow
        }
       
        // high stats are more likely to decrease
        // can't decrease below 0
        decreaseStats (amount) {
            const stats = ["maxHealth", "maxHorny", "minFight", "maxFight", "minFeast", "maxFeast", "minFlirt", "maxFlirt", "minFuck", "maxFuck", "minFlee", "maxFlee", "feed"];
            let sum = stats.map (s => this [s]).reduce ((a, b) => a + b);
            for (let i = 0; i < amount && sum > 0; i++) {
                let value = Math.random () * sum;
                for (let j = 0; j < stats.length; j++) {
                    if (value < this [stats [j]]) {
                        this [stats [j]]--;
                        sum--;
                        break;
                    }
                    value -= this [stats [j]];
                }
            }
            this.health = Math.min (this.health, this.maxHealth);
            this.horny = Math.min (this.horny, this.maxHorny);
        }
   
        html () {
            //let selectedCreature;
            let clickable;
            switch (selectedAction) {
                case ACTION.none:
                    // in hostile encounter you can't click creatures to select
                    // in peaceful you can select and deselect allies
                    clickable = !initiative && this.party == 0;
                    break;
                case ACTION.fight:
                    // can attack neutrals and hostiles
                    clickable = this.party != 0;
                    break;
                case ACTION.feast:
                    // can't click self
                    // can't target creatures you can't eat
                    clickable = selectedCreature.canEat (this);
                    break;
                case ACTION.flirt:
                    // can't click self
                    clickable = this != selectedCreature;
                    break;
                case ACTION.fuck:
                    // can target anyone
                    clickable = true;
                    break;
                case ACTION.flee:
                    // only flee from hostiles
                    // this button should be inactive in peaceful encounters
                    clickable = initiative && this.party != 0;
                    break;
                case ACTION.feed:
                    // can't click self
                    // can't target creatures that can't eat you
                    clickable = this.canEat (selectedCreature);
                    break;
            }
            let style = this == selectedCreature ? " selected" : "";
            let clickStuff = clickable ? ` style="cursor: pointer" onclick="clickCreature(${this.party}, ${this.id})"` : "";
            return `
<div class="unit${style}"${clickStuff}>
    <div class="unit-head">
        <span class="unit-name"><span>${this.name}</span></span>
        ${this.tagsHtml ()}
    </div>
    <div class="unit-body">
        <div class="unit-stats">
            <span class="unit-box-light">Fight<br /><span class="unit-box-dark">${this.minFight}-${this.maxFight}</span></span>
            <span class="unit-box-light">Feast<br /><span class="unit-box-dark">${this.minFeast}-${this.maxFeast}</span></span>
            <span class="unit-box-light">Flirt<br /><span class="unit-box-dark">${this.minFlirt}-${this.maxFlirt}</span></span>
            <span class="unit-box-light">Fuck<br /><span class="unit-box-dark">${this.minFuck}-${this.maxFuck}</span></span>
            <span class="unit-box-light">Flee<br /><span class="unit-box-dark">${this.minFlee}-${this.maxFlee}</span></span>
            <span class="unit-box-light">Feed<br /><span class="unit-box-dark">${this.feed}</span></span>
        </div>
        <div class="unit-bars">
            <span class="unit-bar-health" style="background: linear-gradient(90deg, var(--red-55) ${100 * this.health / this.maxHealth}%, var(--red-30) 0%)"><span class="center">${this.health} / ${this.maxHealth}</span></span>
            <span class="unit-bar-horny" style="background: linear-gradient(270deg, var(--pink-35) ${100 * this.horny / this.maxHorny}%, var(--pink-60) 0%)"><span class="center">${this.horny} / ${this.maxHorny}</span></span>
        </div>
    </div>
</div>`;
        }
       
        tagsHtml () { return ""; }
    }
   
   
    const SIZE = {
        tiny:   0,
        small:  1,
        medium: 2,
        big:    3,
        huge:   4
    };
    const ACTION = {
        none:  -1,
        fight: 0,
        feast: 1,
        flirt: 2,
        fuck:  3,
        flee:  4,
        feed:  5
    };
    const ENVIRONMENT = {
        none:     0,
        indoors:  1,
        water:    2,
        darkness: 4
    };
    const TAGS = {
        none :  0,
    };
   
    const SPECIES = {
        /* creatures   
         *  angel   
         *  bat     
         *  bee     
         *  bunny   
         *  cat     
         *  centaur
         *  chicken
         *  cow     
         *  deer   
         *  dragon 
         *  drow   
         *  elf     
         *  fox     
         *  frog   
         *  giantess
         *  goat   
         *  goblin 
         *  harpy   
         *  human   
         *  lizard 
         *  mermaid
         *  mouse   
         *  naga   
         *  octopus
         *  ork     
         *  pig     
         *  plant   
         *  slime   
         *  spider 
         *  succubus
         *  tiger   
         *  troll   
         *  wolf
         */
       
        human : new Species ("human" , SIZE.medium, TAGS.none,  5,  5,   0, 2,  0, 2,  0, 2,  0, 2,  0, 2,  2),
    };
   

    function shuffle (array) {
        for (let i = array.length - 1; i > 0; i--) {
            let j = Math.random () * i | 0;
            let k = array [i];
            array [i] = array [j];
            array [j] = k;
        }
    }
   
    function rollStat (min, max) {
        return min + Math.random () * (max - min + 1) | 0;
    }
   
    function updateEverything () {
        partiesElements.forEach ((e, i) => e.innerHTML = parties [i].map (c => c.html ()).reduce ((a, b) => a + b, ""));
       
        // update buttons
        if      (!selectedCreature)           buttonRowElement.innerHTML = "no one selected";
        else if (selectedCreature.party != 0) buttonRowElement.innerHTML = "enemy turn";
        else {
            // button is only clickable when there are targets
            let strings = [
                parties [1].length,
                parties.some (p => p.some (c => selectedCreature.canEat (c))),
                parties.some (p => p.some (c => c != selectedCreature)),
                true,
                initiative,
                parties.some (p => p.some (c => c.canEat (selectedCreature)))
            ].map ((b, i) => (i == selectedAction ? " selected" : "") + (b ? `" onclick="clickAction (${i})` : " inactive"));
           
            buttonRowElement.innerHTML = `
<div class="flex button ${strings[0]}" style="cursor: pointer" onclick="clickAction(0)"><span>fight<br />${selectedCreature.minFight} - ${selectedCreature.maxFight}</span></div>
<div class="flex button ${strings[1]}" style="cursor: pointer" onclick="clickAction(1)"><span>feast<br />${selectedCreature.minFeast} - ${selectedCreature.maxFeast}</span></div>
<div class="flex button ${strings[2]}" style="cursor: pointer" onclick="clickAction(2)"><span>flirt<br />${selectedCreature.minFlirt} - ${selectedCreature.maxFlirt}</span></div>
<div class="flex button ${strings[3]}" style="cursor: pointer" onclick="clickAction(3)"><span>fuck<br />${selectedCreature.minFuck} - ${selectedCreature.maxFuck}</span></div>
<div class="flex button ${strings[4]}" style="cursor: pointer" onclick="clickAction(4)"><span>flee<br />${selectedCreature.minFlee} - ${selectedCreature.maxFlee}</span></div>
<div class="flex button ${strings[5]}" style="cursor: pointer" onclick="clickAction(5)"><span>feed<br />${selectedCreature.feed}</span></div>`;
        }
    }
   
    function clickCreature (party, id) {
        let target = parties [party] [id];
        let roll;
        switch (selectedAction) {
            case ACTION.none:
                if (initiative || party != 0) throw "...";
                selectedCreature = selectedCreature == target ? null : target;
                updateEverything ();
                return;
            case ACTION.fight:
                if (party == 0) throw "...";
                // do action
                if (target.health == 0) {
                    removeCreature (target);
                }
                else {
                    roll = rollStat (selectedCreature.minFight, selectedCreature.maxFight);
                    console.log ("fight roll " + roll);
                    target.health -= roll;
                    if (target.health <= 0) {
                        target.health = 0;
                    }
                }
                if (!initiative) rollInitiative ();
                break;
            case ACTION.feast:
                if (!selectedCreature.canEat (target)) throw "...";
                // do action
                if (party == 0) {
                    selectedCreature.increaseStats (target.feed, target);
                    removeCreature (target);
                }
                else {
                    roll = rollStat (selectedCreature.minFeast, selectedCreature.maxFeast);
                    console.log ("feast roll " + roll);
                    if (roll >= target.health) {
                        selectedCreature.increaseStats (target.feed, target);
                        removeCreature (target);
                    }
                    if (!initiative) rollInitiative ();
                }
                break;
            case ACTION.flirt:
                if (target == selectedCreature) throw "...";
                // do action
                if (target.horny == 0) {
                    console.warn ("(stub) flirt on max horny");
                }
                else {
                    roll = rollStat (selectedCreature.minFlirt, selectedCreature.maxFlirt);
                    console.log ("flirt roll " + roll);
                    target.horny -= roll;
                    if (target.horny <= 0) {
                        target.horny = 0;
                    }
                }
                break;
            case ACTION.fuck:
                // do action
                roll = rollStat (selectedCreature.minFuck, selectedCreature.maxFuck);
                console.log ("fuck roll " + roll);
               
                break;
            case ACTION.flee:
                if (!initiative || party == 0) throw "...";
                // do action
                let a = rollStat (selectedCreature.minFlee, selectedCreature.maxFlee);
                let b = rollStat (target          .minFlee, target          .maxFlee);
                console.log ("flee roll " + a + " vs " + b);
                if (a >= b) a.tags |= TAGS.fled;
               
                break;
            case ACTION.feed:
                if (!target.canEat (selectedCreature)) throw "...";
                // do action
                target.increaseStats (selectedCreature.feed, selectedCreature);
                removeCreature (selectedCreature);
                break;
        }
        selectedCreature = null;
        selectedAction = ACTION.none;
        updateEverything ();
    }
   
    function removeCreature (creature) {
        let party = parties [creature.party];
        for (let i = creature.id, j = i + 1; j < party.length; i++, j++) {
            (party [i] = party [j]).id = i;
        }
        party.pop ();
       
        if (!initiative) return;
        for (let i = creature.turnOrder, j = i + 1; j < initiative.length; i++, j++) {
            (initiative [i] = initiative [j]).turnOrder = i;
        }
        initiative.pop ();
        if (creature.turnOrder <= turnOrder) turnOrder--;
    }
   
    function clickAction (action) {
        if (!selectedCreature && action != ACTION.none) throw "...";
        selectedAction = selectedAction == action ? ACTION.none : action;
        updateEverything ();
    }
   
    function rollInitiative () {
        if (initiative) throw "...";
        console.log ("rolled initiative");
    }
   
    function log (string) {
        logElement.innerHTML += string;
    }
   
    function clearLog () {
        logElement.innerHTML = "";
    }
   
   
    // entry point
   
   
    var partiesElements  = [document.getElementById ("party-left"), document.getElementById ("party-right")];
        mapElement       =  document.getElementById ("map");
        logElement       =  document.getElementById ("log");
        buttonRowElement =  document.getElementById ("buttons");
   
        selectedCreature = null,        // creature
        selectedAction   = ACTION.none, // id
        initiative       = null,        // combat only
        turnOrder        = -1,          // combat only
        parties = [
            [SPECIES.human.creature (), SPECIES.human.creature (), SPECIES.human.creature (), SPECIES.human.creature ()],
            [SPECIES.human.creature (), SPECIES.human.creature (), SPECIES.human.creature (), SPECIES.human.creature ()]
        ],
        dirtyFlag = false;
        map; // todo: generate
   
    parties.forEach ((p, pi) => p.forEach ((c, ci) => { c.party = pi; c.id = ci; }));
   
    log ([
        "I know this is a roguelike, it's meant to be extremely difficult, but I can't help but feel like I have a guillotine wrapped around my head with a clown-faced troll just waiting for the opportune moment to pull the lever.",
        "Despite my best attempts to build my team up, something always pops up and I lose my team and my game in one fell swoop.",
        "The game's all about 'resource management' and fatality is a big thing. 'Permadeath, deal with it' remember?",
        "I don't think there is a way to beat it... Yet."
    ] [Math.random () * 4 | 0]);
   
    updateEverything ();
</script>


</html>


It's unfinished yet, there are lots of todos, but eventially features will be added. I'm not a real front-end developer but i know how to write clean code. I know the cause of log messages corruption and can fix it.
My goal is to make the game easier to develop and harder to play (evil laughter).
The main differences are that i use min and max stats instead of just slightly randomized one. All creatures will have health, horniness and hunger and conditions that depends on them. It will be possible for the enemy to seduce YOU!! I want to make mixed encounters (for example two foxes and one elf). There will be ways to disable the creature's best option or resist it.

I hope you are not angry at me for not asking permission? I have good intentions!
unit72
Been posting for a bit
 
Posts: 38
Joined: Sun Nov 04, 2018 2:40 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Mon Aug 22, 2022 10:16 pm

unit72, This is absolutely interesting! I can't say that I'm interested in rewriting FFFme itself, but it does seem like an interesting setup you've landed on. I've been planning on making the character setup scroll as yours does, but haven't had time to really dig into the code to have it behave how I'd need it to. I really like the look of it though, so this might be the inspiration I need.

I've got absolutely zero issue with people tinkering with the code or trying new things. My only reservation, which you've obviously not done, is for people to hack the game to give other people the paywalled content. Beyond that, please don't worry about experimenting for fun.

I'd ask that if you were to take the idea and release your own game, that you not use any of my code/css/prose, but the actual concept isn't something I'm worried of getting stolen. I would love for there to be more games with this format, since I'd play the hell out of them!


Overall this is hella neat! It would be interesting to see a clone of FFFme to compare how you'd go about the gameplay loops and such. It looks like you've already gone on your own path there, and it's got me intrigued.
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby unit72 » Tue Aug 23, 2022 11:07 am

Well i will not use your code and css because my are better, and ok i will not use your prose. I allow you to use my code and css freely though. I will post updates in this thread. A little advise for you how to fix all text bugs once and for all: use [TAG] and not just TAG, because you will get result such as PROsomethingONIST if you match just TAG. Encase it in brackets or whatever and search for a string with them when replacing.
unit72
Been posting for a bit
 
Posts: 38
Joined: Sun Nov 04, 2018 2:40 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Tue Aug 23, 2022 3:24 pm

unit72 wrote:Well i will not use your code and css because my are better, and ok i will not use your prose. I allow you to use my code and css freely though. I will post updates in this thread. A little advise for you how to fix all text bugs once and for all: use [TAG] and not just TAG, because you will get result such as PROsomethingONIST if you match just TAG. Encase it in brackets or whatever and search for a string with them when replacing.


I'll be sticking with my own mess. I know it well, and it's treated me right. Honestly, I'd really suggest you go and try to make your own game rather than just a direct copy of FFFme. I just don't really see the point of a clone.
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby Kendri » Sat Aug 27, 2022 8:19 pm

Hey, this is pretty cool. I've been looking for a text-based vore game a la TiTs/CoC/Nimin for a while and this has a lotta potential. I know they're early builds, but I do like the simplistic mechanics. You just jump in and you vore. Kinda hope the simplicity is maintained down the road. Ironically, I also hope the character descriptions and encounters become more detailed and descriptive. Looking forward to future installments! :)
User avatar
Kendri
Been posting for a bit
 
Posts: 36
Joined: Sat Jan 18, 2020 10:15 pm

Re: FightFuckFeed.me - 0.7.0.3 - Big Cockvore Update!

Postby heromc » Sun Aug 28, 2022 2:44 am

Kendri wrote:Hey, this is pretty cool. I've been looking for a text-based vore game a la TiTs/CoC/Nimin for a while and this has a lotta potential. I know they're early builds, but I do like the simplistic mechanics. You just jump in and you vore. Kinda hope the simplicity is maintained down the road. Ironically, I also hope the character descriptions and encounters become more detailed and descriptive. Looking forward to future installments! :)


No plans on complicating the mechanics. The current gameplay loop is what I'm aiming to maintain. Writing has been improving slowly. I don't have any formal education there lol!
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby heromc » Fri Sep 02, 2022 3:04 am

Image

Scat!
For those of you who aren't satisfied with just defeating your enemies, now the digestive process can be brought to it's natural conclusion!

New Features:
> The Player and other creatures can now take big fat dumps, either right after eating, or later while traveling.
> Monsterfolk take shits based off of their species. Tiny bunny pellets, white avian splatters, cowpies, and coiled canine craps.
> Eat more, shit more. Want to make a big steaming pile worthy of being remembered? Get your grub on and gobble everyone up.
> Something silly triggers if you travel with waaay too many sluts clogging your bowels.
> See leftovers of your meals. Patches of fur, scales, bones, and other mementos can be found in each stool. Certain races can even influence the color!
> Lots of custom settings! Super gross? Bone in? bone out? fuckit, just the bones!


To access all this stinky content, join the FFFme Subscribestar for just 1$/month!
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby Nescio » Fri Sep 02, 2022 9:57 am

I believe the scat/disposal option creates a bug when in combat. Everytime its on and I click the blue "wolfgirls turn" bar to proceed it just send me right to the new game settings and character creation. It works fine when the scat/disposal option is off.
User avatar
Nescio
Been posting for a bit
 
Posts: 20
Joined: Sun May 15, 2016 9:50 pm

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby heromc » Fri Sep 02, 2022 12:04 pm

Nescio wrote:I believe the scat/disposal option creates a bug when in combat. Everytime its on and I click the blue "wolfgirls turn" bar to proceed it just send me right to the new game settings and character creation. It works fine when the scat/disposal option is off.

Very weird! I'll look into it asap.
Vore Game: FightFuckFeed.me - 750,000 smutty words and counting!
Bunns are not food!
User avatar
heromc
Intermediate Vorarephile
 
Posts: 447
Joined: Fri Jul 03, 2009 1:44 am

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby Anonymous111 » Sun Sep 04, 2022 9:10 pm

the features added in the previous update are still unavailable to free players despite them no longer being the latest features, why?
Anonymous111
Somewhat familiar
 
Posts: 91
Joined: Sun Jul 22, 2018 6:50 pm

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby KingNothing » Mon Sep 05, 2022 12:02 am

Anonymous111 wrote:the features added in the previous update are still unavailable to free players despite them no longer being the latest features, why?


Dev's said a few times that anything they probably wouldn't have added if not for their backers will remain locked to subscribers for much longer.
User avatar
KingNothing
Participator
 
Posts: 265
Joined: Sat Feb 21, 2015 4:43 am

Re: FightFuckFeed.me(0.7.1.2) - Scat!

Postby Cobbly » Tue Sep 06, 2022 5:40 pm

Is there any way to increase the appetites of my non premade allies?
User avatar
Cobbly
Somewhat familiar
 
Posts: 91
Joined: Wed Jun 01, 2016 2:28 pm

PreviousNext

Return to Vore game

Who is online

Users browsing this forum: a295, adrian98, arrow23, blackovanossar, Bunick, Carashi, Cilis, dawunas, dirk42, drhook, e2s86, Guitex, JackandSliver, john51015, Karma09, KroboFuentes, mimic, Omegarus, Onmawarpath, QueenLevy, soullord, T653, TheMastermind, ticcitoby421, wenqing4u, Yandex [Bot], YukiArikaMuze