Git Product home page Git Product logo

mc-tower-defence's Introduction

Hi there ๐Ÿ‘‹

I'm Zak - A backend developer interested in game development, Kubernetes, DevOps and security

Technologies

wowzers

Activity

woah

Since I use orgs for some of my work, be sure to also check out:

  • emortalmc - A Minecraft server written for Kubernetes in Java and Golang utilising Kafka and Microservice infra
  • smart-giveaways

mc-tower-defence's People

Contributors

loofifteen avatar renovate-bot avatar renovate[bot] avatar thyamix avatar zakshearman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

yukkimoru

mc-tower-defence's Issues

Revamp Plans

Plans for the revamp

Move to a PvE system

PvP will be no more! There will be preconfigured waves.

New and more dynamic maps

I can't build and I can't get a builder, therefore - convert publicly distributed maps to tower-defence maps and give the creators credit throughout.

Maps can have multiple paths that can change throughout based on a user placing obstacles.

Proper Pathfinding

Instead of giving relational positions to tell a character when to turn. we instead give the coordinates of every corner and use pathfinding to calculate the shortest path.

Reactions

Add reactions between different status effects

  • Frozen + Explosion = Shatter
  • Frozen + Projectile = Blocked
  • Frozen + Burning = Melt

Reactions:

  • Shatter = Cancels Frozen, does 1.5x damage
  • Melt = Cancels Frozen, does 2x damage
  • Blocked = Blocks damage

Reactions could be displayed via a hologram (similar to a damage indicator), a particle effect or both.

Reactions may need a cool down as to not be OP.

Others in the future.

Towers shooting dead enemies at the same time

The logic to not shoot dead enemies needs a locking mechanism.

For multiple towers that shoot at the same time, e.g. 4 archer towers, they could all still shoot at the same mob.

Autogenerated mob/tower stats

It's nice having the flexibility right now but it's painful.

Stat displays like fire rate, damage, etc.. should be standardised so they can be used to autogenerate descriptions.

There should still be addon descriptions for special abilities, or maybe just a system to account for these and their changes (e.g Bomber Tower has explosion radius)

Share inventories between players rather than creating new ones

Sharing inventories between players for the upgrade UI, mob spawning UI, etc. will make it easier to synchronize the inventories if multiple players have them open at the same time. This will work as there are no moving items in any of the inventories. Any action in UI will change a single inventory and will be reflected amongst all players will little-to-no effort.

Walls

Walls are on the last tower block of the map.
Giants trample walls.

image

1- Water wall (slows enemies in it but doesnt stop them)
2- Wooden fence (Stops enemies, has a low HP threshold)
3- Stone wall (Stops enemies, has a medium HP threshold)
4- Obsidian wall (Stops enemies, has a high HP threshold)
5- Electric Fence (Stops and deals medium damage to enemies, medium HP threshold [should not outdamage any tower])

Tower Intellect Module

Add a module that players can purchase that allows them to choose what enemies a tower targets:

  • First
  • Weakest
  • Strongest
  • Closest
  • Furthest

Others:

  • Implement these into a player-configurable module.

Also prevents the tower from targeting enemies that are invulnerable to their damage.

Story mode (Campaign)

You can have different chapters in a story with different maps, towers, waves and restrictions that can be set so the user can't but everything.

Possible ideas with this:

  • Research tower levels to use them
  • Research buffs such as more coins dropped
  • Each map/section in the story mode will have a meta with info about it (waves, map name, max players, difficulty rating, restrictions)

Difficulty Rating

Difficulty rating should be dynamic - you should be able to calculate the effect of different amounts of players on the difficulty.

Stacking Damage Indicators

To save memory and also make damage indicators to read, would it be possible to create good looking damage indicators that stack on the previous damage dealt?

Unit tests

Now that it's easier to do unit tests with Minestom, this should be taken advantage of.

Lots of the core aspects of TowerDefence can have unit tests made for them, especially data loading:

  • todo

The project should be built out significantly in its structure before unit tests are created as to ensure they are not a burden.

Implement free/starter troops

  • Identify if a troop's first level is free
  • Free first level troops should be automatically unlocked for all users.

Castle Shield

Buyable upgrade to defend the castle

Features:

  • 500 HP
  • 10000 max HP
  • 30 second cooldown on purchasing

Castle Towers

The towers at the end (by the castle) have a Guardian style effect - reducing the damage dealt be enemies. This can be upgraded.

Investigate whether the appearance can be changed (whether we can reuse the towers used for normally placed towers).

Add mobs

This only lists special mobs which have special abilities.

Mobs:

  • Zombie - Free, simple base troop
  • Skeleton - Simple base troop, suitable for early game attack when levelled up. Levels up into a wither skeleton where it is invulnerable to fire damage.
  • Llama - Splits at a tower causing it to get covered in cobwebs and temporarily stunning it.
  • Bees - Cheap and only counts as .25 of a unit, has low health and moves fast, Dies after attacking the tower. Stings a tower that attacks it concussing it for 1/2 a second??
  • Endermen - Extremely fast and weak mobs, teleport forwards on damage.
  • Slimes - High health, move slowly, can jump over walls, turns into magma cubes at higher level. Splits into smaller when it dies
  • Golem - Big fat tank, starts as Iron Golem, turns into a Warden at max level.
  • Giant - Le obvious
  • Rainbow Sheep

Zombie (Default Unlock)

Damage Type: Bludgeoning
Flying: No
Ignored Effects: Poisoned
Ignored Damage Types: Poison
Unit Cost: 1

Level 1

Unlock Cost: -1
Send Cost:
Health:
Damage: 1
Movement Speed:

Level 2

Will wear leather armour

Unlock Cost:
Send Cost:
Health:
Damage:
Movement Speed:

Level 3

Will wear chainmail armour

Unlock Cost:
Send Cost:
Health:
Damage:
Movement Speed:

Level 4

Will wear gold armour

Unlock Cost:
Send Cost:
Health:
Damage:
Movement Speed:

Level 5

Will wear diamond armour and be a zombie villager

Unlock Cost:
Send Cost:
Health:
Damage:
Movement Speed:

Overloadable configurations

Data for towers and mobs should be retrieved from the resources and then any values overwritten by local storage. This allows for full customisation whilst not being a pain in the ass.

Progress:

  • General overloading system
  • Overloading Towers
  • Overloading mobs

Progress:

  • Files are saved to the disk automatically and loaded from the disk

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

dockerfile
Dockerfile
  • azul/zulu-openjdk 21-jre
github-actions
.github/workflows/build.yaml
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
  • com.github.johnrengelman.shadow 8.1.1
  • dev.emortal.minestom:core eafe4f7
  • net.minestom:minestom-snapshots 7e59603d5f
  • dev.emortal.api:common-proto-sdk 15284aa
  • dev.hollowcube:schem 1.0.1
  • dev.hollowcube:polar 1.7.2
  • com.github.ben-manes.caffeine:caffeine 3.1.8
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.5

  • Check this box to trigger a request for Renovate to run again on this repository

Add towers

Towers:

  • Lightning (stats)
  • Bomber (animations, stats)
  • Charity (animations, stats)
  • Archer (stats)
  • Blizzard (stats)
  • Necromancer (stats)
  • Earthquake (builds, animations, firing logic, stats)
    Engineer (need to check if possible?)
  • Pyromancer (builds, animations, firing logic, stats)
  • Tornado (animations, firing logic, stats)

Tornado

Throws mobs up in the air with particle animations and spins them around.
Would require adding a weight property to every mob to determine if they are too heavy to pick up.
If the weight of the mob is <= 15% of the capability of the tower, it is thrown to the enemy's side.
Rain droplets falling from the clouds

Charity

Increases money gained by enemies that die within its range
Shows particles out front to signify when it has made money (/particle minecraft:happy_villager 6.25 175 32.5 0.2 0.4 0.2 1 20)

Archer

Shoots arrows at a target periodically.
At level 3 shoots flame arrows
At level 4 shoots two arrows at two targets
At level 5 shoots explosive flame arrows

Blizzard

Slows enemies within its radius
Snowing on top from 4th level onwards

Dynamic resistance/modifier system

Every EnemyMobLevel should have resistances and modifiers that can be assigned to them. However, these may need to be modified on a per-troop basis.

  • EnemyMobLevel has a List
  • A Resistance consists of the target tower and conditions such as X level and X modifier
  • A Resistance has an apply(Tower source, float damage) method to modify damage
  • A Resistance has an isApplicable(Tower tower) method to check if it can be applied to damage from X tower


  • An EnemyMob will have a List that is modifiable within the class - if a resistance is updated and the list is the original list, it will clone the list and then proceed to modify it.

UI/UX improvements

All of the below is open to discussion on how to improve UI/UX.

The Problem

I don't expect a user to jump in and immediately know what to do without some experimentation, but very few people have ever seen towerdefence like this so we need to give them pointers in the right direction.

Right now the game is very confusing to new users.

Finalised ideas to implement

N/A right now

Suggested Ideas

### Show placeable area when a user tries to place where they can't

Outline the placeable area with particles (redstone dust?) when a user tries to place a tower on an area they can't (i.e wrong side of the map, clicking the floor, etc..).

This should be combined with a chat message superseded by new placement mechanics

Change spawn points to the start of the map

Right now the user spawns at the end of the map facing towards the start. Would it be easier for the user if they spawned at the start of the map?

Show outline of tower size when a user fails to place a tower as it is too big for the area

Kinda just the title here. If a user tries to place a tower and there isn't size, show an outline in blocks of where that tower would try to place so it's clear to the user it couldn't place there. This would also make it clearer to the user that they're for instance trying to place a 5x5 in a 3x3's area. This has been superseded by new placement mechanics that always show the outline before a tower is placed.

Mad suggestion - have a preview at the start of the game showing off the map

Goal: Show the users basic functions and make it clear what side of the map they are on.

Have a cinematic preview at the start of the game by taking over the user's view.

  • Have some towers on each side that are shooting at mobs and for 5 seconds, pilot the user around each side. This should show them quickly how the game functions.
  • Have them then smoothly glide to the spawn point on their side of the map and have the temporary enemies and towers disappear.

User settings

For both preference and performance reasons, allow users to change some settings.

Settings to change:

  • Show damage indicators
  • Show raw HP or % HP
  • Change fly speed
  • Thinner particles - We can make the distance between particles doubled
  • Make configurable via GUI

Storage methods:

  • JSON
  • MongoDB

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.