GithubHelp home page GithubHelp logo

micro-hack's Introduction

µ-hack

Traditional roguelike written for the Mini Micro.

Review the files in the "factories" folder to see what items, weapons, shields, armor, etc. are defined.

Available on itch.io here

Features

Health Regen

When you begin resting ("r"), a rest timer begins to increment. Every time you rest a d20 is rolled. If the result of the d20 is less than the rest count + constitution modifier, you will receive +1 restored HP.

What this means in-game is that the odds of your health being restored increase the longer you rest, with it maxing out to definitely healing after 20 turns at rest.

Entities

Every entity, includes the player, has a race, class, and weapon. Each entity also has the following attributes:

  • level
  • xp
  • dexterity
  • strength
  • constitution
  • maxHP
  • currentHP
  • constitutionModifier
  • dexterityModifier
  • strengthModifier
  • armorClass
  • baseAttackBonus
  • maxCarryingCapacity
  • maxPushCapacity
  • weaponDamage

References

micro-hack's People

Contributors

treytomes avatar

Stargazers

 avatar  avatar

Watchers

 avatar

micro-hack's Issues

Need a loading screen.

The initial game state takes a while to generate. Need an indicator that something is happening.

Need a way to run away.

Entities should be able to spend endurance points to run away from a battle, if they're not too exhausted.

Action Cost

Every action has a cost in Action Points (AP).

AP starts at 0. When an action is take, the cost of the action (e.g. walking = 100 AP, running = 50 AP) is subtracted from the total entity AP. Now the entity is sitting at -100 AP. Each round AP is increased by an amount calculated based on the entity's "speed" attribute. e.g if entity speed = 25, it will take 4 rounds for the entity AP to get back to 0, at which point the entity can take another action.

Aww rats.

Rats should appear on level 1 in place of kobolds.

Battle Heat

Have a battle heat meter increase every time an attack is made. Use the heat meter to help decide how much XP the player gets after the battle. Longer battles (indicating strong / more enemies give me XP.

Use the battle heat value to calculate the Challenge Rating (CR) of the encounter, e.g. XP = 50 + (Encounter CR × 25)

Use key.axis in place of explicit arrows.

key.axis should make the game more friendly to gamepads. It will also make custom key mappings a bit more complicated.

I just can't decide if I want to do this or not. Keep going back and forth.

Fluent color interface.

I like the pattern from this page. Convert that into some math and build a fluent interface for colors. I want to be able to do something like color.silver.darker.

Implement a BSP map generator.

BSP maps are very regular, which is useful for certain types of settings. Maybe the dwarf settlement on the top levels of the dungeon.

Burning

Need ability to set entities and wooden objects on fire.

Save/Load

Need to be able to save a game state and reload that same state. Not sure yet exactly what that will need to look like.

Maybe a separate save file for each level? With a game save encompassing an entire folder?

Implement a town generator.

This one will be a big deal. The results of the random dungeon map generator and the cavern generator can be stack to create a little village in a mountain valley. That village will need to be populated with NPCs and things to make it look more village-y.

There should be a little dwarf camp somewhere along the edge of the map, up against the mountains.

The stairs down into the dungeon are behind the camp.

Super important to the story to get this one right.

Implement a merchant NPC.

This will be primarily for testing.

Add the merchant to the starting room, with the up-stairs that go nowhere. The player can sell things back to the NPC that he finds around the dungeon. Maybe buy some extra potions or whatnot.

Multiple hand slots.

Right now we have a weapon slot and a shield slot.

Replace this with an array of hand slots. Each "hand" could hold a weapon or shield.

Allow alternate keys

For example, select should allow both 10 (enter) and 13 (return); exit should allow both 27 (esc) and 96 (back tick, for keyboards like my iPad keyboard that lack an Esc key!).

Suggested API would be, in keybindings.ms, allow a list instead of a number. Then accept any key code in the list as indicating that function.

Traps

Kobolds are well-known for settings traps. Pit traps, spike traps, arrow traps, etc.

Not exactly sure how I'll implement these yet.

Character Sheet

Before the Level Up feature can be implemented properly, we need a character sheet that a player could potentially edit.

This same character sheet can also be recycled into the game start screens to let the player design their character a bit.

for-loop check.

The inventory UI had a bug when the player's inventory was empty. Review each of the for-loops (not ranges) to make sure they work when the target list is empty.

The Quickening

On level up, instead of particles going out, having them come in.

Kobold camps

  • Designate one room in a dungeon as a kobold camp.
  • Decorate the room with "campy"-things.
  • Kobolds will randomly spawn in their camp room, as long as the room isn't too crowded.
  • The campfire tile should burn anything that steps into it. Being able to cook over it would be a nice touch.

Game States

Right now everything exists in the gameplay state.

We need a higher level system that can encompass a starting menu, a save/load game menu, and some type of game settings that can be serialized to json.

Inventory selection context

Rather than having separate windows for using an item versus dropping an item, have a single inventory interface. When an item is selected present a list of options for what you can do with that item.

Level Up

XP and level is now being tracked. What happens when a character levels up?

Needs more research before implementation.

Enhanced doors.

Doors are currently a map tile. I think they need to be upgraded to entities.

  • Interacting with a door will toggle it between open and closed, unless it's locked.
  • Wooden doors can be burned.
  • A door can be bashed until it's "dead", leaving behind a pile of whatever material it's made from.
  • If a door is in the "jammed" state, it cannot be toggled between open and closed.
  • A door can be "un-jammed" by interacting with it.
  • Doors can be jammed with items that have the "jammable" attribute.

Implement armor.

This will work almost the same as shields. Just needs to get done.

Release process.

Need to implement the release to itch.io process described by sebnozzi on Discord.

Entity Auto-Pickup

Create a behavior that will allow any entity to automatically pick up an item when the item is adjacent. If the equipment is an improvement then use it.

Damage types.

Slashing, stabbing, piercing. It relates to the weaknesses of different types of monsters and armors.

This one will probably get done further down the line.

Slime Monsters

Use only the random walking algorithm. Have the slimes randomly split in half, which will then cut their HP in half. They can use the same healing algorithm as the other monsters to slowly recover.

Without a way to set them on fire, there won't be much defense.

Add a speed attribute and give each action a cost.

Cost should be in some type of action points. Entities get a certain number of action points back at each round equal to their speed attribute. When their action point meter gets back up to 0 they can take an action.

Range attacks.

A lot of things are throw-able:

  • daggers
  • arrows (from bows)
  • rocks
  • etc

Fast Travel

The player uses the "<>" keys to travel the stairs. Usually those only work while standing on the stairs. Make it so that they always work if there are no monsters on the level.

If there are monsters on the level, send a message stating "Fast travel not allowed when monsters are nearby."

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.