Giter VIP home page Giter VIP logo

dungeon's Introduction

Dungeon

Travis CI AppVeyor Coverity Scan Build Status codecov.io Gitter

Dungeon is a text-based open-world role-playing-game. You are in control of the life of a character that wakes up with a headache and can't remember exactly what happened to him. You need to do your best to equip yourself to explore Darrowmere scavenging for powerful and valuable treasure.

You are completely free to explore Darrowmere however you want. Be it slaying the most terrible creatures, drinking milk directly from cows, or reading books found in the world to learn about its history and the lives of some of the Commons (the human-like race of Darrowmere) that lived there. Some books may even teach your character magical spells that give him some advantage when dealing with the aberrations roaming the land.

The world is randomly generated, making each and every experience unique. There is also an in-game wiki with a lot of information about the different facets of the game. You can also browse the wiki online.

Screenshots

See the gallery.

Running the game

Download a release.

You only need an updated version of Java to play this game.

Awards

In 2017 this project won Yegor Bugayenko's Software Quality Award.

Software Quality Award

Tools

YourKit

YourKit

YourKit supports open source projects with its full-featured Java Profiler. YourKit, LLC is the creator of YourKit Java Profiler and YourKit .NET Profiler, innovative and intelligent tools for profiling Java and .NET applications.

Building the game

If you want to build the game locally, issue

$ git clone https://github.com/bernardosulzbach/dungeon.git
$ cd dungeon
$ mvn package
$ java -jar target/dungeon-[version].jar

Reporting bugs

Bug reports, questions, and suggestions are welcome on our issue tracker.

Contributing

If you know Java, Python, or even if you just know English well, you can contribute.

Check out the issue tracker to see what could be done or figure out something you would like to do and start working on it.

Discussing your ideas on the tracker before coding is a good way to increase the chance of your changes being accepted.

Do not forget to also read Dungeon's contributing guide.

Versioning scheme

Dungeon uses semantic versioning.

  • A release that is incompatible with old saved files increases the MAJOR version.
  • A release that adds content in a backwards-compatible manner increases the MINOR version.
  • A release that makes backwards-compatible bug fixes increases the PATCH version.

License

The game is licensed under the BSD 3-Clause license.

dungeon's People

Contributors

bernardosulzbach avatar cpolidore avatar gabriel200899 avatar gitter-badger avatar immutablevoid 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

dungeon's Issues

Clock?

Let the hero only know that is morning / afternoon / etc until he picks up a watch.

@gabriel200899 O que tu achas? Relógios de pulso é um pouco futurístico, mas eu acho que é uma ótima ideia (plagiada do CDDA).

[FUTURE] Predefined locations symbols

@gabriel200899, um pedido:
acredito que no futuro a "campanha" será gerada por um algoritmo que, inicialmente, apenas distribuirá Locations predefinidas.

Querias que tu fizesses algumas e deixasses nessa issue (eu arrumo como quiser depois, mas tu provavelmente programa-las-ás).

Por exemplo:

 F = Forest
 D = Desert

Como não temos múltiplas cores, é necessário utilizar um letra diferente para cada location.

Isso é uma contribuição importante, leva a sério. Podes já definir o que deve spawnar em cada location também (permittivity e toda a porcaria que tu conseguir imaginar). Essa issue não será fechada e servirá de referência futura.

Implement wiki

Implement a simple but fully operational in-game wiki.

Walking problem

Using "sw" walks south because the implementation may only check for the first character.
It should check for the abbreviation or the full name of a direction.

Unambiguous pick

As it has been done to "kill", make "pick" work without arguments when there is no ambiguity. A more generic checkIfEmptyKillIsUnambiguous is likely the right way to do this.

TODO

Design

  • Create a Command class (to encapsulate the commands entered by the user).
  • AchievementBuilder class.
  • Load hints from resource files.
  • Store aliases independently and let the player add and remove aliases.
  • Tagging system for locations. So special behavior could be added by appending a String to a set.
  • Tags for "N", "E", "S" and "W" (accessible by North, East, South and West, respectively).
  • Implement a type for the possible commands, create an instance for every command and iterate through a list instead of using a big if-then-else chain.

Features & Content

  • Hero must also be able to critically hit with his bare hands.
  • 20 achievements.
  • Rivers.
  • Bridges.
  • Maps (a map command that prints an ASCII map of the locations the player already visited).
  • Creature will have an bloodAlcoholContent double variable (% by volume).
  • AttackAlgorithms will account for insobriety.
  • Pocket Watch and Wrist Watch instead of clock.
  • Implement a third coordinate to Point (z).
  • Implement dungeons (in z = -1).
  • Implement healing during sleep.

Changes

  • Remove the leveling system.
  • Make less-than-enough-for-a-full-bite heal less than enough-for-a-full-bite would.

Magical items & magic modifying

Implement magical items that have colored name and that modify your spells (a factor by which magic damage or healing is multiplied).

Short tutorial

Write a tutorial and a tutorial command.
Suggest the tutorial if the game launches without any saved games.

Killing with spells should not count to unarmed

Create a type such as CauseOfDeath and use it in BattleStatistics.

This type would contain:

  • A value of an enumerated type such as TypeOfCauseOfDeath that defined what was the type of the killing hit (such as poisoning, weapon, magic, etc.).
  • The ID of what killed the target.

Suggestions

  • Warlock could be an achievement for killing five creatures with magical attacks.

The road not taken

The road not taken
Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;
Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear
Though as for that the passing there
Had worn them really about the same,
And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads onto way,
I doubted if I should ever come back.
I shall be telling this with a sigh
Somewhere ages and ages hence;
Two roads diverged in a wood, and I
I took the one less traveled by,
And that hás made all the difference.
ROBERT FROST, 1916

Colocar esse poema no jogo.

"poem" pode ser o comando dele.

Integrity / charge

@gabriel200899
Assim como o player não deve saber até os segundos, acho que não é legal saber que uma arma está com 21/100 (por exemplo).

Deveria ser algo como: broken, damaged, ...

Sugestão

<nome>
slightly damaged <nome>
damaged <nome>
severely damaged <nome>
broken <nome>

New Spell System

New usage

Do not use spells during combat.

Syntax

cast [spell name] on [target name]

Where target is any Entity.

Using an aggressive spell (such as Fireball) should initiate a combat.

New spells

Add healing spells.

Achievements

Spell based achievements will require hit killing.

Save file size

In order to reduce the size of the saved games - that likely will become an issue as the game gets more and more content - Locations far from the player could lose some data. A swamp should stay a swamp forever, but after the player is (say) 100 locations away, the creatures, (common) items and spawners of that location could be erased and regenerated when needed.

Backpack system

Let the character equip different bags and backpacks that work as his or hers inventory. A character could also drop the backpack and pick it up later on to recover all items that were inside it.

Plurals

Fox........................................2
Rat........................................3

is ugly. I plan something closer to

You see two foxes and three rats.

However, to make this possible, I need to provide multiple names for monsters and items.

Additionally, article should become a field. So that the game gets a fox and an ogre straight.

Better ResourceParser.

A few improvements are necessary in order to further develop the game.

  • Lists (e.g.: SKILLS: FIREBALL | FROST_BOLT)
    | looks like a good separator for elements. It is very unlikely that text, however big, will contain |.
  • Different line breaks (e.g.: \ and \\)
    Currently \ is replaced with \n, whilst there should be a line break (for bigger passages) that would be converted to a mere space.
    Reuse the following table in CONTRIBUTING.md if implemented
Line break Replaced by
\
\\ \n

Fixes to v0.0.8

  • debug achievements command that shows all not yet unlocked achievements.
  • debug spawn [creature_id_1, creature_id_2, ...] command.
  • Sometimes Seth does not sleep enough - fix this as soon as possible.
  • When it is too dark, let Seth see some things, just not everything.
  • Let debug exploration use a Table.

Requirements for Dungeon 0.0.3 - Achieve

  • Abstract Achievement class [with isUnlocked() and update(Hero)]
  • BattleLog class
  • BattleAchievement class
  • ExplorationAchievement class
  • Hero.visitedLocations (CounterMap) // counts how many times the player visited a location
  • Hero should have a 5% critical hit chance (through his attack algorithm)
  • Help strings loaded from a file
  • Luminosity (ParOfDay attribute)
  • LightPermittivity // a location-specific attribute that defines how much light penetrates a give location

Serialize parsed resources.

- [ ] Benchmark how fast it is to generate game data from resource files.
- [ ] Benchmark how fast it is to load game data from binary files.
- [ ] Benchmark how fast it is to generate a SHA-1 from the resource files.
- [ ] Evaluate if it is better to reload just when something changes.
- [ ] Implement serialization / deserialization of game resources to improve starting performance.

DungeonScript

Notas para meu futuro eu:

Considere criar uma linguagem de script que será utilizada em todo o jogo (SQLite parece exagero).

Comentários, texto de ajuda, localizações, monstros e items, inicialmente, seriam definidos por esses scripts.

// Define Ghoul
# Linhas iniciadas por "//" ou "#" são ignoradas.

// ID e TYPE são strings e o jogo terá alguns HashMaps carregados na memória para dinamicamente
// acessar o conteúdo que foi lido dos scripts.
ID: GHOUL
TYPE: UNDEAD
NAME: Ghoul
ATTACK: 12
ATTACK_ALGORITHM_ID: UNDEAD

Refactoring

Replace all

a = container.get(b); container.remove(b);

with

a = container.remove(b).

Better world generator

As soon as we get more than one location preset, we can start to think about regions.

Initially, I am thinking about implementing simple blobs of similar locations.

For instance, this would be a "decent map":

FFFFDD
FFFDDD
FFFFDD
FFFFDD
FFFFFF
F = forest
D = desert

This will not, however, be achieved by randomly picking locations, so I think that we will need an algorithm that, after picking a random location preset, generates a "blob" of that location. Maybe a blobSize variable should be part of the location preset, so that we don't get hundreds of ponds or a single forest location in the middle of the desert.

Quest system

Sample use case for the first version of the quest system

  1. Player issues talk [npc_name].

2.a) If the player does not currently have the NPC's quest, it will be added to his journal.

2.b) If the player already has the quest, the NPC will ask the player to finish it.

  1. After the player finishes the quest, talk [npc_name] transfers the quest items to the NPC and gives the character his reward.

Observations

  • The player can access the Journal at any time through the journal command.
  • All quests will be based on collecting items and returning them.

Printing Mobs.

Os mobs são printados assim:
Bat
Bat
Bat
Bat
Rabbit
Rabbit
Será feito algo para que eles sejam printados assim:
Bat(4)
Rabbiter(2)
Caso sim, antes da release ?

Dungeon 1.0.0

Dungeon will get a new, clean, repository at version 1.0.0.

This issue will be used as a tracker for all the improvements needed to get to the version 1.0.0.

Feel free to add your request / modification.

  • Start a release goals list.
  • Spawns.
  • Remove all TODOs (finishing them along the way, obviously) from the code.
  • Abstract Achievement class [with isUnlocked() and update(Hero)].
  • BattleLog class.
  • BattleAchievement class.
  • Critical hits for the hero.
  • Hero must also be able to critically hit with his bare hands.
  • Implement better printing so that output avoids cutting words in the middle due to too long strings.
  • ExplorationAchievement class.
  • Hero.visitedLocations (CounterMap) // counts how many times the player visited a location.
  • Hero should have a 5% critical hit chance (through his attack algorithm).
  • Help strings loaded from a file.
  • Luminosity (ParOfDay attribute).
  • LightPermittivity // a location-specific attribute that defines how much light penetrates a give location.
  • Issue #40
  • Inventory size increases with leveling.
  • Perfect the existing time system.
  • Campaign has 20 achievements.
  • Creature will have an bloodAlcoholContent double variable (% by volume).
  • AttackAlgorithms will account for insobriety.
  • Implement the Fibonacci sequence.
  • Pocket Watch and Wrist Watch instead of clock.
  • Load hints from resource files.

Disfunctional selection algorithm

If there is a fruit bat and a bat in the same location, kill bat does not work.
Maybe the selection should use the same algorithm that the wiki search does.

Ideas for v0.0.8

  • After a creature dies, its corpse will lay on the ground and all the items it had in its inventory will be dropped.
  • Milk command to get milk from cows. MILKABLE tag.
  • Readable items with actual text (letters, journals etc). READABLE tag.

Requirements for Dungeon 0.0.4 - Invent

This release implements the inventory system (currently, a prototype).

  • Create the Inventory class.
  • Hero has-a Inventory.
  • Inventory size increases with levelling.

Additionally, this release will also implement foods and world (in-game) time system.

  • Perfect the existing time system.
  • Resting only replenishes your health up to 60%.
  • Eating replenishes your health up to 100%.

Even further, this release also does the following:

  • Campaign has 20 achievements.

Weather system

Initially, consider a system that only randomly changes the weather and we limit ourselves to writing out the weather to the output of look.

After that, the weather system should keep a log of the weather and then refresh calls could take that into account. This way an item may evaluate how much it has deteriorated since its last refresh and update its status. Also, implement funnels that collect rain water into barrels or something similar.

HP and EXP bars

In the bottom of the window, using a whitespaces with a colored background make two bars.

Bonus: centered, write "HP: x/y" and "EXP: x/y" for extra nothing.

Feedback command

Discuss: a feedback command that allows the player to send feedback (to whom?) in the game.

A first simple version could send an e-mail to me ([email protected]) but that does not look right. Having a server that could get these messages and update a static page with them would be neat.

Faulty command history

Upon death, after reloading the game, the command history is problematic.

The cursor is still at your last before-death command and your new commands just overwrite older ones (they do not get added to the end).

Poisons

Magical poisons that may be added to weapons to inflict extra damage.

Initially, just more damage. Later on special effects may be added.

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.