Git Product home page Git Product logo

rotten-soup's Introduction

Rotten Soup

A roguelike written in JavaScript with Vue, Vuetify, Tiled, rot.js and PixiJS.

screenshot

While maintaining some roots in traditional roguelike gameplay with features like randomly generated dungeons, turn-based combat and permadeath, Rotten Soup also has many modern features such as tiled graphics, animations, a statically defined overworld, and mouse controls. Since Rotten Soup is developed using JavaScript, you can play it in your browser here!

Features

  • Three detailed areas that you can explore. The Mulberry Town, Forest & Graveyard
  • Randomly generated dungeons with different themes every 5 floors with unique enemies and loot
  • A tough mini-boss that can raise the dead
  • Dozens of unique villagers!
  • Melee, Magic, and Ranged combat
  • Wide variety of playable characters
  • Potions, swords, keys, and spellbooks!
  • Quests
  • Dialog and interaction with NPC's
  • Procedurally generated worlds not unlike Minecraft
  • Weapon enchantments
  • Goal-based enemies

Stuff I'm working on

  • Shops where you can sell/buy items
  • Unique characters classes, skills, and abilities
  • More weapons (Axes, Polearms, Bows, Staves, Morningstar, Whips, Daggers, Clubs, Spears)
  • Enemies that used ranged and magical attacks

Running the game locally

To run Rotten Soup locally, you can clone this repository and install its dependencies with yarn. You will probably need to install vue-cli.

npm install vue-cli -g

Once you do that, you can run the app with yarn serve.

Contact / Feedback

If you have any feedback, please send me an email at [email protected] or drop an issue on GitHub. Any feedback is welcome and greatly appreciated.

Donate

If you've really enjoyed my game and want to buy me a cup of coffee, I won't stop you!

paypal

rotten-soup's People

Contributors

dependabot[bot] avatar larkenx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rotten-soup's Issues

Goal of the game

overall is to collect 4 gems (shadow, blood, ice, smoke ?) and place them in some gate to unlock a door that does something of note

Is compatible with mobile devices?

I opened on my mobile and I got these problems:

  • Is not responsive
  • After the character selection, a black screen appear and nothing happens
  • After approximately 1 minute, map appears
  • After that, I can't see my character. I think is because the not responsive behaviour
  • Map does not response to the touch actions

Is it possible to make some javascript changes to enable mobile compatibility? If someone shows me the right way, I think I can do it!

Thanks

Entities as data / composition over inheritance

Right now, Rotten Soup uses an older OOP paradigm of managing entities. Here's a visual example how the files are laid out from an inheritance perspective.

> tree /Rotten-Soup/src/assets/js/game/entities
│   Entity.js
│
├───actors
│   │   Actor.js
│   │   GoalBasedAI.js
│   │   NPC.js
│   │   Player.js
│   │
│   └───enemies
│       │   GoalBasedEnemy.js
│       │   SimpleEnemy.js
│       │   StatelessAI.js
│       │
│       ├───boss
│       │       Lich.js
│       │
│       └───legendary
│               OrcPriest.js
│
├───items
│   │   Equippable.js
│   │   Item.js
│   │
│   ├───armor
│   │       Armor.js
│   │       Boots.js
│   │       ChestArmor.js
│   │       Helmet.js
│   │       LegArmor.js
│   │       Ring.js
│   │
│   ├───misc
│   │       Beer.js
│   │       Corpse.js
│   │       Gold.js
│   │       Key.js
│   │       Spellbook.js
│   │
│   ├───potions
│   │       HealthPotion.js
│   │       ManaPotion.js
│   │       Potion.js
│   │       StrengthPotion.js
│   │
│   └───weapons
│       │   Battleaxe.js
│       │   Sword.js
│       │   Weapon.js
│       │
│       └───ranged
│           │   Bow.js
│           │   RangedWeapon.js
│           │
│           └───ammo
│                   Ammo.js
│                   Arrow.js
│
└───misc
        Chest.js
        Door.js
        Ladder.js
        LevelTransition.js
        LockedDoor.js
        Store.js

There are several good resources out there that break down why this pattern is bad - I highly suggest watching this presentation by Brian Buckley (creator of Caves of Qud) https://www.youtube.com/watch?v=U03XXzcThGU).

The tldr is that when we define entities via inheritance, we eventually find areas where the same functionality is duplicated over and over again. Consider in the example above if I wanted both a bow & a sword that caused fire damage and costed mana everytime I attacked with it. The sensible approach is designing a master Entity base class, then adding pieces of data or components to that entity class.

My vision for Rotten Soup is not to embrace an "ECS" framework - because I don't personally think this is the right solution. I think we should take ideas of making entities data, and making it so that their characteristics and functionality is defined by modular components!

I have written some experimental code in the items-overhaul branch that toys with some of these ideas. I would love for folks to contribute here and figure out ways that we can redesign the way Rotten Soup handles entities - and if we can solve this problem, then it opens up the game for a massive content push where folks can rapidly create new item types with wild effects to make this game more fun and interesting.

Update README

  • add Link to Discord.
  • update contribution and feedback information
  • Project Setup Section

Converting Project to Electron App?

Instead of connecting to a webserver/link, would it possible to convert the game into an electron app to be played locally as a desktop app.

Side quests following themes of:

  1. reluctant hero
  2. comedic problems or characters
  3. rewards consist of unlocking new areas, abilities, and NPC interactions rather than items. encourages experience and exploration with more gratification.

Opening inventory uses a turn

When opening the inventory by pressing i, the game executes a turn immediately. Surely this isn't intensional?

This behavior caused a problem for me when I actually died the moment I tried to open my inventory, which prevented me from seeing the end game statistics since the inventory was drawn on top.

Thanks for the enjoyable game, btw!

Implement Dijkstra maps...

Implement Dijkstra maps for particular classes or characters to program distinguishable and more interesting AI. (Money-loving enemies, enemies that try and stay at a range, enemies that run away in low HP)

Guilds

Add guilds for each type of combat or class

Is the lich unkillable?

Hi I've tried hitting him with arrows, Bessy, and offensive spells... none have hit him... already explored both mulbery and orc dungeon. Is this where the beta end?

[SIDE QUEST] Mage Tower

Enter the mage tower full of powerful and hostile arcanists. A must-visit location for those looking to specialize in magic abilities, this place will be a treasure cove of spell books, scrolls, and magical gear. Unlocks a room that teleports to different dimensions and an infinite spanning mage tower?

Picking up items gives wrong message when inventory is full

When the player's inventory is full, the game logs a message saying that they successfully picked up the item before it is added to their inventory. If their inventory is full, it properly doesn't pick up the item, but logs the message that they did pick it up anyway

Questions..?

  • Would you mind if I moved the Current Rotten-Soup Projects to the Organization level since they will be for both the desktop and web versions.

  • Thoughts on a Discord Server and Bot that relays updates to the Org as well as providing a space for people to interact.

Level not decreasing

The level is increased (and displayed accordingly) when ascending ladders, but not decreased when descending ladders. The highest climbed level remains displayed.

NPC Pathing

Ability to program routines for NPC's to have a short cutscene where they move somewhere (imagine releasing a prisoner and they scurry off screen)

Turn Project into Org

Would it be possible to turn this project into an organization so that it's easier for people to help?

[REPUTATION]

Dynamic reputation with different NPC's (one may hate you, one may like you) based on actions

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.