Deliverable 3: MVP - QuitoTactico/DnD-AI GitHub Wiki
1. Architecture & Data
1.1. Deployment Diagram
UPDATES:
- We designed it according to the provided guide.
- Needed programming language added.
- Needed libraries and dependencies added.
- External API interfaces added.
- Database tables (models) added.
- Showing components based on the functional requirements stablished.
1.2. Component Diagram
UPDATES:
- Changed the diagram composition entirely by using the system functionalities as components.
- Using the "Game" component as the main aspect of the diagram.
- Specified the Functional Requirements that are produced by each functionality and which component uses it.
- Small description of each Functional Requirement added.
- Added the inputs from the user and which component needs them.
1.3. Data Model
If the text is too small for reading in your computer, please open it in another window to zoom on it.
UPDATES:
- Entity abstract interface created. It encapsulates many common attributes and functions between Character and Monster.
- Tiles model created.
- Campaign model created.
- Forean keys from Entity (Character and Monster), Treasures, History and Tiles, to Campaign were added.
Campaign
Represents a specific adventure or series of events in which players participate. It contains all necessary settings, including map dimensions, narrative context, objectives, and progress tracking. It essentially forms the backdrop against which the game's events unfold.
id (AutoField): Unique identifier for the campaign.name (CharField): Name of the campaign.size_x, size_y (IntegerField): Dimensions of the campaign map.initial_context (CharField): Descriptive text providing the backstory or setting of the campaign.start_date, completion_date (DateTimeField): Timestamps for when the campaign starts and optionally completes.turns (IntegerField): Counter for the number of turns that have passed in the campaign.is_completed (BooleanField): Status indicating whether the campaign has been completed.objective_str (CharField): Description of the campaign’s objective.
Weapon
Manages all the different types of weapons that characters and monsters can wield. This includes templates for weapon types (like a generic sword) as well as unique instances of weapons (like a legendary sword). Weapons are crucial for combat mechanics, affecting how characters and monsters inflict damage.
id (AutoField): Unique identifier for the weapon.is_template (BooleanField): Specifies if the weapon is a template or a specific instance.name (CharField): Name of the weapon.is_ranged (BooleanField): Indicates if the weapon is ranged.weapon_type, damage_type (CharField): Type and nature of the damage the weapon inflicts.physical_description (CharField): Visual description of the weapon.image (ImageField): Image file representing the weapon.damage, range, range_level_points, durability, level (IntegerField): Various statistics describing the weapon's capabilities.
Entity (Abstract Base Class)
Serves as a foundation for any character or creature in the game, encapsulating common attributes such as health, strength, and equipment. This model is abstract, meaning it is not used directly but provides a base set of fields and methods that other models inherit.
campaign (ForeignKey): Campaign to which the entity belongs.name, physical_description (CharField): Name and physical description of the entity.weapon (ForeignKey): The weapon the entity is wielding.got_initial_weapon (BooleanField): Indicates if the initial weapon setup is completed.Various Stats (IntegerField): Includes max_health, health, strength, intelligence, dexterity, physical and magical resistance, constitution.x, y (IntegerField): Coordinates of the entity on the campaign map.icon (ImageField): Visual representation icon.inventory (TextField): Serialized dictionary representing the entity's inventory.
Character
Defines the players' avatars or NPCs (Non-Player Characters) within the game. Characters have unique attributes like playability, story background, and class/race which influence their abilities and roles within the campaign. They engage in actions like fighting, interacting with other characters, and progressing through personal storylines.
- Inherits all attributes from Entity.
is_playable (BooleanField): Specifies if the character is playable or an NPC.story (CharField): Background story of the character.image (ImageField): Image of the character.character_race, character_class (CharField): Race and class of the character, determining specific traits and abilities.level, exp, exp_top (IntegerField): Level and experience metrics managing the growth of the character.
Monster
Represents the various creatures and antagonists players encounter throughout the campaign. Monsters can be key to the narrative or just part of the challenges players face. They have similar attributes to characters but are typically not playable and are designed to provide combat challenges and narrative engagement.
- Inherits all attributes from Entity.
is_key, is_boss (BooleanField): Flags indicating if the monster is crucial to campaign progress or is a boss.monster_race, monster_class (CharField): Race and class of the monster, determining specific traits and abilities.exp_drop (IntegerField): Amount of experience points the monster gives when defeated.
Treasure
Manages items that can be discovered within the campaign, such as weapons, gold, or other valuable resources. Treasures can be hidden or guarded and provide incentives for exploration and combat. They can also play a role in advancing the plot or character development depending on their significance within the game's story.
id (AutoField): Unique identifier for the treasure.campaign (ForeignKey): Campaign the treasure belongs to.is_key (BooleanField): Flag indicating if the treasure is crucial to campaign progress.treasure_type (CharField): Type of treasure (e.g., Bag, Weapon).weapon (ForeignKey): Specific weapon associated with the treasure if applicable.discovered (BooleanField): Indicates if the treasure has been found.inventory (TextField): Serialized dictionary representing the contents of the treasure.x, y (IntegerField): Coordinates of the treasure on the campaign map.icon (ImageField): Visual representation icon.
History
Records significant events and changes within the campaign. This model can track everything from combat results to narrative developments, serving as a log or diary of the campaign’s progress. This is especially useful for maintaining continuity and providing players with a recap of past events.
id (AutoField): Unique identifier for the history entry.campaign (ForeignKey): Campaign related to the history entry.is_key, is_image (BooleanField): Flags indicating if the entry is crucial or contains an image.author (CharField): Creator of the entry.text (CharField): Text content of the history entry.color (CharField): Color associated with the entry.date (DateTimeField): Timestamp of the entry.
Tile
Represents a single unit of space on the campaign’s map. Each tile has a type that affects its interaction with entities (e.g., grass, water, mountain). This model is essential for visually and functionally designing the game's environment, affecting movement and the placement of characters, monsters, and treasures.
id (AutoField): Unique identifier for the tile.campaign (ForeignKey): Campaign the tile belongs to.tile_type (CharField): Type of tile, e.g., grass, water, mountain.x, y (IntegerField): Coordinates of the tile on the campaign map.
2. Corporate Image
Slogan
“Level up your game!”
Logo
We had these three options:
Finally, we decided for the dragon vs rat one, in this two presentations:
Text below
Text at the right
Fonts
-
Sixtyfour - https://fonts.google.com/specimen/Sixtyfour?query=sixty
-
Workbench - https://fonts.google.com/specimen/Workbench?query=workbench
-
Jacquarda Bastarda 9 (not used yet, it will be used on some info menus and the guide) - https://fonts.google.com/specimen/Jacquarda+Bastarda+9?query=bastard
Color Palette
| Where it's used? | HEX |
|---|---|
| Black font | #000000 |
| Background | #212529 |
| Map background | #2C3034 |
| Gray font | #808080 |
| Actual icon (dragon vs rat) | #DD263C |
| Buttons | #D62828 |
| History and white font | #FFFFFF |
Miguel left these ones commented. I will put them here if they're needed in the future.
| Color | HEX |
|---|---|
| Black | #333333 |
| Dark Grey | #212529 |
| Grey | #454c54 |
| Brown | #462e2e |
| Brown | #BCA371 |
| Red | #D62828 |
| Red | #ff6f6f |
| Light Grey-Blue | #8DA1B9 |
| Green | #21D19F |
Evidences
The logo and the color palette are being used in the game interface.
3. Repository
- https://github.com/QuitoTactico/DnD-AI/tree/main
- https://github.com/QuitoTactico/DnD-AI/blob/main/requeriments.txt
- https://github.com/QuitoTactico/DnD-AI/blob/main/README.md
4. Video
https://www.youtube.com/watch?v=wstDAuMiXww
5. Project management
5.1. Project (Backlog)
https://github.com/users/QuitoTactico/projects/1
5.2. Weekly Meetings
https://github.com/QuitoTactico/DnD-AI/wiki/Weekly-Meetings
5.3. Report Retrospective
- What should we continue to do (best practices)?
Esteban: Working with passion, that literally carried the process all the time. Using good practices at coding made the things understandable for the rest of us. Reporting the things that we were doing was very useful. Always testing before adding to the main prevented us so many problems, "destroying production" like the people says. Being cautelous with the database, this time we didn't corrupted it! XD.
Miguel: We keep meeting like we planed, which is good. Using Slack and GitHub helps us talk and keep track of our codes. When we look at each other’s work, we find mistakes and learn. Also, celebrating when we do something good makes everyone happy!
Sebastián: Developing in the branches of each of us, keeping the main one intact. Discussing how we want the page to look, where each thing will be and how the users are going to interact with it. Asking for help to others members of the group (But not too much).
- What should we start doing (process improvements)?
Esteban: A better distribution of work. Maybe I work too much, but, I worked everytime I had free time, because I loved this project. Also this was something I wanted to present to my friends, so... It had to be the best thing it could be.
Miguel: We should use automatic tests. Now, we test by hand, which takes lots of time and we still miss things. We also should code together more, so evryone learns and helps
Sebastián: Indeed, a better distribution of the work. I think Esteban is working a lot on the project and I, personally, not too much. And I feel a little bad about it. We should assign better the tasks for each one of us, and make them progressively. And then share progress in detail with the other members of the group. Also we should organize better the files of the project.
- What should we stop doing (process problems and bottlenecks)?
Esteban: NOT RESTING ENOUGH TIME, I'm dying!. Waiting to another member to finish his work to continue, not searching for alternative works to do while waiting. That could be solved with a better planning of responsabilities, they needed to be grouped better. But is understandable, we didn't knew how to do some of these responsabilities, or what does we needed to develop them.
Miguel: We try to do too much at once and get tired. Our code gets messy. We shouldn’t skip checking each other’s work, even if we’re in a hurry. We need to stick to our rules, even when we have deadlines
Sebastián: We should assign better the responsabilities for each of us.
5.4. Class Assignments
https://github.com/QuitoTactico/DnD-AI/wiki/Class-Activities,-Diagrams-and-Models
6. Sprint Review
Sprint Pitch will be made by Esteban during class time.
- Pitch from a single team member.
- Demo of functionality by member, they must be the most representative of the problem. Present the requirements developed for this Sprint, remembering that they must be those of greatest value to the final product.]
