Code Monkey home page Code Monkey logo

esports-manager's Introduction

NOTE: THIS PROJECT IS STILL UNDER DEVELOPMENT, AND IS NOT READY FOR GAMEPLAY YET.

This project is going through a rework. Lots of things are broken and might not even compile right now. If you want to try out the last working Debug version, check out the master branch.

eSports Manager Logo

eSports Manager

eSports Manager aims to become a free and open source eSports management game, licensed under the GPLv3, based on titles like Football Manager and the deceased Championship Manager.

The idea here is to bring a full-fledged experience in eSports, playing major leagues and big championships, managing players, setting up practices and discovering new talents.

In this game, you will be able to set up your team, get them to play in whatever position you would like them to, set up strategies, choose which race/champion/hero they're going to play with, and read match descriptions as they happen live, much like Football Manager on its early days. Managing finances, finding sponsors, boosting your players' morale are also going to play a role in that experience.

INSTALLATION

The game is still not ready to be played. Many features are yet to be implemented, and a lot of things are missing. There's no gameplay experience, only testing material here.

SCREENSHOTS

The UI is being reworked.

HOW TO RUN THE DEBUG VERSION

I have removed the debug version because of the project's rewrite. When the new UI is available, I will update this document with the new instructions to run the debug build.

FEATURES

Check FEATURES.md to get more information on the planned features and features that are already implemented.

CONTRIBUTE

Check our CONTRIBUTING.md to get more information on how to contribute to the project.

LICENSE

eSports Manager - A free and open source eSports management game
Copyright (C) 2020-2024  Pedrenrique G. Guimarães

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Check LICENSE for more information.

esports-manager's People

Contributors

pedrenriquewdg avatar sturdy-robot avatar

Stargazers

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

Watchers

 avatar

esports-manager's Issues

Prepare locale

As I'm writing the GUI, I realize it may be a good thing to start preparing the GUI for i18n elements. I have to learn how to use the gettext library and replace text with locale elements.

Commentaries: Replace print_commentary() with get_commentary()

Print_commentary is not an appropriate name. Refactor to get_commentary.

Reasons: this function will not print commentaries. It will only get them. It's not its job.

The match_live handler should then notify the observer if a new commentary came up, and then should print it.

  • Refactor get_commentary
  • Implement Observer
  • Implement Notifier
  • Make observer-notifier work

Picks and Bans

  • Implement Picks and Bans with a GUI for the user to choose the proper Bans.
  • Implement an AI to pick and ban champions as well, based on player's specialty

Team Logo Generator

Create a Team Logo Generator to generate the team logos automatically based on random parameters and patterns. Should follow the generator patterns that are established in #29

GUI

  • Title page
  • New Game Screen
  • Load Game Screen
  • Create Manager
  • Team Management Screen
  • Match Live Screen

Database Editor

Implement a Database Editor to edit:

  • Teams
  • Players
  • eSport-related features, such as champions, races, or any other important feature
  • Championships
  • Patches

It might be a separate app that can access the db. It's not a priority for alpha release, though.

Database

  • Organize database in categories
  • Find a better alternative than JSON or XML files
  • Expand player, team, champions and championship databases

Championships

  • Implement Championships
  • Generate Championship names

Player

  • Date of Birth
  • Preferred Champions
  • Store Champion Skill Lvl
  • Improve Player Name Generation
  • Expand Player Nationality

Documentation

  • Document the code (PARTIALLY DONE)
  • How to play
  • Wiki
  • Edit README with info about the game and in-game screenshots

Mockups and Diagrams

Create general mockups and diagrams to illustrate how the game will be played out.

Game Design Document

Production of a GDD defining all elements and features of the game, possible implementations and diagrams that will compose the final product.

Roadmap

At this point in development, I think it would be nice to have a clear idea of what needs to be implemented in some releases. Coming up with a Roadmap will be a motivation to implement the missing features, and will give me an idea of what needs to be done at certain points, focusing my attention on these points.

Add a config file

  • Add config file with definitions
  • Make it comply with the Settings menu
  • Make it easier to scale fonts

Implement MVC

I feel like to achieve what I'm trying to accomplish, I have to implement sort of an MVC architecture, to decouple rules and logic from the GUI representations.

Picks and Bans heavily rely on UI interaction to function, so I need some sort of MVC architecture to avoid implementing all logic from P&B into actual UI code.

This will help me out later on when experimenting with new UI ideas, instead of just PySimpleGUI prototype.

Match Live

  • Implement game logic
  • Calculate results based on player's and champion's skills
  • Probability calculations and RNG
  • Implement basic game events
  • Implement Live Commentary
  • Implement events, event generation

Match Series

Find a way to implement a match series, which means:

  • Match is a best of one
  • Match is a best of three
  • Match is a best of five

etc...

Then we could play multiple matches in sequence.

Project Definition

Introduction

eSports Manager is exactly what the name implies: an eSports manager game. Based on famous franchises, such as Football Manager and the now deceased Championship Manager. This game was born out of a dissatisfaction with the current available options on the market that concern eSports.

The idea is to bring the gameplay experience you would find in these legendary manager games, without any of the limitations that the other alternatives present to the player:

  • You don't need to be connected to the internet to play this game
  • You don't need to create an account on a website
  • You don't need to wait hours to get to play a match
  • You don't need to set up a hundred different things for each player of your roster to get them to play better each game
  • You don't need to buy packs of cards to have the chance of getting a good player
  • No lootboxes, no pay-to-win
  • No license fees
  • No restrictions to what you can do with this game whatsoever
  • There's no over-complicated game mechanic: most things should be self-explanatory and pretty much straightforward

Also, you should find in this game every aspect that makes each eSport unique: patch changes are going to affect competitive matches, your pick/ban choices are going to affect each match and player, each player has strengths and weaknesses that you have to explore in every match.

And yes, in this game, you may choose which eSport you want to focus on: RTS, FPS and MOBA. It is still not clear if we are going to make three separate products from this core concept, but the initial idea is to give the player the ability to choose an eSport to focus on, just in one client. If this idea does not hold up to the test of time, we may separate them in different products in the future, but the core eSports Manager will stay the same, as I believe they will all benefit from the same core.

Gameplay Overview

How will it be played?

Following the standard of manager games, the game relies on the mouse to be played, with screens and buttons to be clicked on.

New Game

First of all we will have a menu screen with basic options: "New Game", "Load Game", "Settings", "Editor", "Credits", "Exit Game". Pretty standard for most games. Nothing more that I can think of. Names are self-explanatory, except for:

  • "Editor": In this editor you are going to find a database editor. You may edit eSports Teams (Logo, Names, Financial Status, League, Region, etc.) and their players. Also, you may edit the eSport itself, adding champions/races/guns or whatever component is part of the eSport. It should be a very good modding tool.
  • "Settings": Configure game settings such as Screen Size, Graphics, Amount of Text during Match Live, and etc.

Clicking on "New Game" will show an option to select the desired eSport. After that, you can start choosing the Region of the Team, with the option of selecting an existing team in the database, or creating a new team from scratch. You can also choose when you want to start the season, and if the game will follow a random history, or if it will retrieve database history. If it follows a random history, random team results are going to be generated, and certain teams will carry the title of Champions of past seasons, which may also affect players' morale. If it follows a history from the database, the past seasons champions will be the same as in the database, and the game will not generate random data from other games.

After that, you can choose your manager's name and details. And then you are in the game. The main UI will feature a dashboard with information about your team, latest championship news, information on the next match, information about patches, a brief calendar, and there will be a menu that allows for navigation.

Main Dashboard

In this menu, you will find the Advance Time button, that will advance to the next day or to a defined date or even until an important event comes up (it's up to you), which might be some sort of interaction with other teams, or when the next match is close. When your team has a match coming up, the button shifts to Next Match.

Playing a Match

When playing a Match, you should define the team's formation and enter the essential pick/ban phase (for MOBAs, not clear how this would play out in RTS or FPS), and it's up to you to choose the heroes/champions used by your players.

The Match will pop up with info about the players and their champions. That's when Match Live Commentary comes up: every now and then the teams will perform an action, and their actions will show up on the user's screen, just as if there is someone shoutcasting this game.

At the end of the match, all data will be updated with KDA, performance ratings, which will affect player's performances and form later on. This means that if you're team is on a winning streak, they're going to get hyped up for next games, and this is going to increase the chances of winning other matches. Going on a losing streak, on the other hand, will demotivate your players and will increase your chances of getting fired.

Hiring players

Hiring new players depends on your financial situation. You can either approach other teams to hire them, or find new talents in the SoloQueue/Ladder. These prospects will have potential skills that can be explored, and if you practice a lot with them, they might reach their peak.

Patch changes

Every now and then the game generates patch changes that are going to affect in-game choices, more specifically picks and bans. Champions/heroes will get nerfed or buffed, and its up to you to identify that. Your players have to be prepared for these potential changes, and you have to keep practising with different champions to improve their skill lvls to avoid stalling out behind.

Sponsors

Sponsors provide ways to get financial and performance boosts. Each season you will get approached by sponsors to sign contracts, depending on the relevance of your team. If your team is very strong, bigger sponsors will offer very significant contracts. Your sponsorship depends on your team's performance, and the financial boost might come with specific requests ("get 14 kills in a match", "win against your rival", "win 3 games in a row", or so on and so forth). Every so often the sponsor will provide items that might boost players' performances temporarily or permanently. It's up to you to choose what's best for your team at certain points.

Practice

Your team has to practice regularly, so teams are going to approach you for scrims, or you can approach them to set up a calendar of scrims. You can either relegate practice sessions to an auto-manager, or you can play it as a normal set of matches and watch every step of the way. They will have Match Live Commentary as well. The other way to practice is to let your players play their usual SoloQueue/Ladder, which provide less points to your players individually, but can be fired more often than scrims.

Major championships

Winning a league might qualify your team for major championships, such as World Championship or other International Competitions. Winning these championships will provide a major financial boost and will make your name desirable for other teams.

These are right now the main aspects planned for the 1.0.0 release of the game. Further details are going to be found on a future Game Design Document.

Development

The game is developed using Python 3 (currently 3.8.3), using a Pipenv. You will find all the project's requirements in the Pipfile. You may find specifics in the CONTRIBUTING file as soon as it's ready for Contributing. You will also find every information needed to get this project running on your machine, and the code style used in this project. Please, also follow the Code Of Conduct described there, so any contributor that does not follow our Code of Conduct will be dismissed.

License

The license is GPLv3. Defined on the License document and on Readme as well.

Add Match Scheduling

  • Following the Calendar implementation (#51) add auto match scheduling.
  • Add the match dates to the Match class

Add Player Impact Factor

Some of the ideas I had was to make player reputations (international or national). But based on that idea, I thought about of making some sort of Player Impact Factor.

Players with high impact factor influence positively on the team's win probability. One way to do that is instead of making a simple average (total of players skill level and points divided by the number of players on the team) we could use a weighted average. Thus, players with high impact factor would have higher weights.

I thought about making weights range from 1 to 5.

Rewrite GUI event handler

I'm currently very unhappy on how difficult it is to maintain the GUI event handler. Researching ways to make it less daunting.

Rewrite Tests

I'm currently working on a complete rewrite of most of the game's generators, and soon I will work on the match implementation. I found that it will be much better to encapsulate most of the code in classes, so I'll be doing that from now on. All of the work will be on a 'rewrite' branch, and soon I will merge it to 'develop'.

However, rewriting everything will break all the tests. I need to take the time to rewrite all the tests as well.

Currently we are using unittest, but I'm also thinking about switching to Pytest.

Team

  • Implement the roster function properly

CI/CD

It's important to start thinking about CI/CD, I'm still writing tests and studying a bit about it to get everything ready for a CI/CD.

Player Enhancements

  • Implement player attributes
  • Implement player portraits
  • Champion Multipliers should be only to some champions (see #5)

[bug] tower event bug

Describe the bug
There's a bug in the match live simulation: if a team has no lane towers but the inhibitor has not been destroyed and the EventHandler generates a tower event trying to destroy this team's towers, the game bugs out because the list of available towers is empty (None). Match does not progress, and you can't reset the match.

To Reproduce
Steps to reproduce the behavior:

  1. Set a team's lane towers to all 0.
  2. Set all the inhibitors up.
  3. Generate a tower event trying to destroy this team's towers.

Expected behavior
The game shouldn't generate tower events for that.

Screenshots
No screenshots available.

Desktop (please complete the following information):

  • Windows 10

Additional context
It's a rare bug to replicate and generate. I should come up with ways to try to prevent this, but I guess once this game is released this will become much more common. So it is a critical bug to solve.

Decouple most of the code

  • I feel like most of the code is already decoupled, but I think we could improve on decoupling a lot of things, such as player, teams and champion classes, so they can be reused later. As the goal for this project is to support several eSports, code reuse should be crucial.
  • I also plan on reusing most of the code on another open source management game, so this should be a priority here.

Refactor Generators

  • Add nationalities file which will be composed of a dictionary of regions and nationalities. Each nationality will have a sigma and a mu, which will be used to calculate the average skill of the players from that nat.
  • Refactor generator methods to apply to the GeneratorInterface
  • Generate a unified file for game data
  • Make IDs consistent
  • Decouple places that use generators

Add Calendar

  • Add a calendar table
  • Refactor usages of datetime.now() to use the calendar dates
  • Refactor the Settings generation
  • Implement Seasons (which season you want to start? available options: 2015, 2016, 2017, 2018, ....)

Apply TDD

  • Studying TDD to apply it to this development

Champions

  • Implement new Champion Name generation
  • Implement Champion Release date
  • Implement Champion Patch Changes
  • Improve Champion Skill Lvl generator
  • Champion Portraits
  • Champion Counters
  • Champion Lanes
  • Champion Types

Add more player and team names

I got a bunch of new names for teams and players. I just have to add that to the project. Also, I think I made a fallback in case I end up scraping the .txt files.

Tox

Add tox automation to test this project in multiple virtualenvs. Currently, I think this project only works on Python 3.8 and above, I have not tested it on other Python versions, but I think it will not work well in 3.7. With tox we can effectively test that and see exactly what is needed to run this project.

Match tester: custom teams

Match tester should be able to customize the teams and skill lvls.

So I can test if a fully packed team can easily swipe a very bad team.

Object Oriented Approach

  • I'm studying rewriting Match Live to follow an object oriented approach, and I think we could approach use some objects here and there.
  • For that I'm also studying a Design Patterns and how to apply it to this project.

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.