Skip to content

crypticC0der/Modulo2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

plan

modulo2

this is the second iteration of the idea of an abstract tower defence game this is weirdly more inspired by risk of rain that it is bloons or mindustry alot of how you buff towers will be through items that give effects, think tesla coil from ROR1/2

ok so rundown, you exist ur a small person runnin around a giant area and theres a timer in your inventory you have a couple basic components to build defences

the goal of the game will be to survive both your own defences and the enemies pursuit of you

the way the defences work will be the main thing, so you get a base and you can give it a head that will give it the ability to attack not neccicary but like very reccomended, currently i have like 4 ideas for heads:

  • flamethrower
  • laser turret
  • rocket(possibly unneciary)
  • generic gun

each of these attacks will have proc coefficents based on their defult rate of hit per second so any on hit effects with the laser turret arent broken af you upgrade the towers by placing modifiers next to their base (yes this means modifiers can effect multiple towers) the normal modifers like dmg up will only take up a 1x1 tile, bases take up 2x2 some better upgrades might take up liek 2x2 or 1x2 depending on their power

the two interesting things about this aside from the emergent gameplay with funny effects and tinkering with them, is how the towers attack yes both two things are that one thing

thing one

basically they dont target by default, by default they will just rotate their head and shoot without any regard of the enemies or your position you will be ably to add targeting system modifiers (in the game modifiers will be called modules, hence the name) that will focus on things and shoot instead of shooting randomly this is where thing 2 comes in

thing two

you arent considered diffeent by the towers so if you get hit by a projectile you will get hurt just like the enimies do and if you give it targeting system 1 it will target you as well (target system 2 does then recognise you) and you can get caught in crossfire

now why owuld this be an issue, you will be away from the towers and the enimies spawn wave by wave

wrong, enemies will be coming constantly and you wanna know how you upgrade sure hope theres a section about that

upgrading/resources

so you can find resources on the map and you spawn with some but enemies drop wepons and armor which can eb decrafted into resources so easy, why is this intresting its interesting cos enemies drop their shit where they die, and they will die realistically near your towers so you have to approach your machines of death to try get these resources and these machines unless very upgraded will not be able to tell u from enemies

modules and upgrades

so towers will level up and get minor stat boosts cos of that, you can spend cash to level em up too but thats silly towers will ‘mutate’ every 5 levels and gain a positive boost and a negative boost, these can b fun if i do em well like lunar items from risk of rain, you dont get to choose what mutation they get, but you can choose wether to let it happen the first 3 times, after that it does it anyway

modules will be placed around towers, towers will have a range and if the modues are out of that range(probably like 1 tile around em, ill probably let users increase it at late levels) they dont get the effect say if you have a 2x2 module and only half of it is in, im unsure on wether or not to either fully allow the effect or only slightly

also modules and towers can be destroyed

multiple modules of the same type are aimed to be not busted cos there is always the issue of maxing dmg and attck speed ranges will be based on the tower type and can be done in a bunch of ways and tower bases can be a bunch of sizes but generally they are 2x2

every base will get generated wants normally 2 positives and 1 negative so all upgrades in the positive respect would be doubled (after scaling) and then the negatives would applied by a small amount per modules

enemies

i want enemies to naturally upgrade themselves, depending on how much valuables they steal from u by destroying your towers and time progression itd be fun to have like a tree wherein they can obtain properties and add them to the tree so you can easily keep track of their weaknesses

module types

depending on their strength i will assign them enums, to dictate their y and x length also i want all modules to be upgradable pretty easily all modules and towers blow up when you destroy them, this is the only way to get rid of them, they cannot be sold

uncommon - T1/T2/T3 (stat boosts) ie dmg up light blue

  • dmg up
  • attack speed up
  • proc chance up
  • regen up
  • dmg multiplier up
  • attack rate up
  • attack speed up
  • rotspd up

exotic - T1/T2/T3 (mechanical changes aka changes how it fires) ie targeting computer or the gun head yellow

  • random shoots in random directions but constantly shoots this only makes sense in ranged,im not implementing it anywhere else except maybe area (maybe), could make it have the starting point somewhere random but nearby
  • homing melee - not done (i do this by moving the point it goes around in the direction to the nearest enemy, and back when theres no enemy) gas - done spike - done laser - done bullet - done area - done
  • predictive ranged - done area - done melee - not done, will be done by targeting where the enemy will be
  • rapidFire all - done
  • returning only makes sense for ranged which its done for
  • spdUp all - done
  • polar only makes sense for ranged, which its done for

rare - T1/T2/T3 (procables) ie on hit chance to make a explosion purple

epic - T1/T2/T3 (really cool and fun things) ie tesla coil fushcia

crafting

i want to have like 6 bars and you put more of certain ingredients in to change the ratios on the bars the closer you are to the perfect ratio the better it will be each resource will mean a specific thing there will be 2 components to how good a thing is:

  • how close it is to the desired ratio the higher this is, the higher the chance of mutations is
  • how many resorces you put into it the higher this is, the more potent it is like multiple stacks in risk of rain

these two components mean that you need to figure out things by adjusting the amount youre putting in and you cant just shovel in a fuck ton of resources into a good recipie you find

components

blade parts

high damage all enemies red(ish, maybe)

sparkon

electricity stronger enemies dark blue (very different to soul)

soul energy

exotic components enemies but you need to be close whitey blue

organic matter

things that are oddly powerful/create life damaging yourself green

low density metal

everything really fast enemies gray

combustine

fire weapons towers exploding, then killing the enemies that were caught in the explosion red/orange

keeping inventory

i am calling inventories decks like a sylladex from homestuck they will be similar as in there are different types based off different data structures i will not store resources in the deck because the deck is for single quantity crafted items

enemies

so the way enemies will work is they will have a collection of modifiers to combine into a tree there will be multiple trees and on tree creation they will be given certain “adjectives”

  • smart -> finds flaws in your defences and targets them
  • fast -> aims entirely on speed
  • offensive -> aims on attacks and health
  • clustering -> aims on rushing through your defences in one strong mass
  • tricky -> built to dodge and be hard to hit smart+tricky would be hellish
  • flying -> able to avoid ur defences and fly through

if adjectives cant give you anything instresting it goes by relentless

  • relentless -> focuses on health mainly and production

the things that the tree could go is

  • cluster?
  • speed
  • health
  • attacks
    • damage
    • attack rate
    • modifiers
  • properties

you will start against a relentless tree then later in the game the it will generate a few more trees the later trees will be given more adjectives and eventually will be very difficult the way to figure out the amount of adjectives the new tree has is reversefib(floor(n/10)) round 10 will change any trees created at this point to have 1 adjectives round 20 will change any trees created at this point to have 2 adjectives round 30 will change any trees created at this point to have 3 adjectives round 50 will change any trees created at this point to have 4 adjectives round 80 will change any trees created at this point to have 5 adjectives round 130 will change any trees created at this point to have all adjectives

there would be a bunch of cost based upgrades and the tree would work out how good each would be and then choose the most cost effective ones there would be a pressure rating and the game would aim to keep it at a constant amount via sending certain waves and getting upgrades that would ensure it is kept high the upgrade based way this would work is via the game would work out a win/cost based system for every upgrade where it would generate the cost effectiveness of the tower and compare itwith (avgpressure per dollar) * time to upgrade this would work out wheter the upgrade is worth the time spend and each upgrade would have a cost and a pressure every round each tree gets some points and can spend the points on a upgrade decided by the above metric

pressure it would be a combination of

  • damage player is taking
  • difficulty of enemies * qty

it would slowly rise and fall in a way that when the player has been taking it easy from the enemies they will go hard

the amount of points the enemy gets to apply on sending bloons is calculated by doing max(const * (const - pressure) * abs(sin(round/4)),100) each tree will have a cost based on not its upgrade but the number of adjectives then you will do sum(upgradePressure)/costFunc(adjectives) to work out the cost prossure coefficent the priority will have a random value the using priortity you work out how much cost you get on each attack and the more you buy of each type the more value you get so it shouldnt send many different tree attacks at one

bases

bases can be various sizes and shit and generally have a range with at least a radius of 2 idealy certain ones can be smaller or like have notched edges each tower will generate a certain set of properties they want which will have 2 positives and 1 negative so itd be like “hi yes i want to be a tower that shoots lighting, pulls enemies closer but has slow attack speed” or “let me be a applying flame, has good aiming and low damage” i think all the properties will be based off a module

base types

i want to cover all towers from bloons and all towers from factorio

  • raycast
  • area damage
  • single projectile
  • spot based (maybe)
  • landmine esc

all of these will be able to go into the respective tree some of these can be represented as just a base with a module ie bidirectional so i am unsure about adding them cos like omni, bi, funnel and homing should all be modifiers in my opinion

targeting

cooler but harder way

i want each “turret” to have a rotspd which defines how fast they can rotate and then each head will have a like range of degress they can snap to so if you are aiming at an enemy at 30 degress and it dies say the next enemy is at 35 degress you can just snap to it multiple shots will be handled in two ways

  • funnel funnel gives like a head more heads so like they are with a small degree apart so one head it as -5 degrees and the other is at +5 degrees
  • bidirectional this gives heads in a way that they have large coverage so like one shoots at 0 degrees and the other does so at 180 degrees

medium way

turrets have a rotspd and this can be upgraded

  • funnel shots every time you shoot enemies it will shoot multiple shots with a degree of seperation
  • bidirectional the closest head moves towards the enemy and the other head also shoots

easy way

turrets have no rotspd and will fix to an enemy that is being targeted

  • funnel shots every time you shoot enemies it will shoot multiple shots with a degree of seperation like 1 degrees
  • bidirectional every time you shoot at the front you also shoot at the back

issues with non easy ways

the targeting system would have to be done to find the best enemy that is also near, i would need to balance which to shoot out of a enemy near the player and a enemy near the turret though currently there is no targeting so i guess i could just ignore any factors other than how near it is to the head (possibly) i greatly prefer the medium and cooler ways but they are harder to do and i want to get the game at a demoable point slowing down is always bad

enemies

  • star - only in weak spots 4 sides - attacks quadruoupled + more weak spots
  • circle - default hemisphere - weak at the back quaterfoil - regens
  • square - stronger rectangle - strong + fast octagon - super fucking strong + big
  • triangle - fast furious diamond - spawns 2 triangles curvilinear - speeds up nearby enemies, normal speed

items

bases

rocket

base

projectile

laser

base

this will shoot a single instant laser at the enemy and peirce through ti homing: it will bounce to enemies

projectile

beam

consistant damage version of raycast

gun

base

projectile

flamethrower

base

rapid shot, pew pew, flame

projectile

area damage

base

this will deal damage to all around it

projectile

landmine

base

projectile

tesla coil

base

this will shoot out ukelele blasts to all the entities in its range that bounce 3 times max how do i measure the bounces, have a list lmao

projectile

gas machine

base

this will shoot out gas which disapperates and becomes weaker it will be projected in a direction but slow down over time

projectile

visual identiy

neon asthetic aka bright colors and dark colors will need to redo

  • crafting box
  • deck box
  • item cards
  • all items
  • all bases
  • ui sidebar
  • ui topbar

pallete

#1a1f2a - background #1a1b26 - alt background #a9b1d6 - forground #ff1178 - pink #fe0000 - red #fff205 - yellow #01fff4 - blue #7cff01 - green #f2a400 - dirk orange #0715cd - john blue #6c00da - gamzee purple #de0266 - gay pink #f5a9b8 - trans pink #5bcefa - trans blue

modding modulo2

i am thinking of allowing dynamic sprite loading, having some asset related stuff in a xml file maybe i could have lua code in the xml file allowing all the assets to be coded in the thingy i intend on using moonsharp for the C# lua interpretation www.moonsharp.org the problems i see are getting C# to generate classes from lisp and the other problem i see is getting C# to run finite state machines with lua functions

i think my solution will be items and shit in xml all attacks, debuffs ,procs and modules should be in lists with names the item database and waves will be loaded via xml

custom attacks, debuffs and procs aka classes will be loaded in via C# dll this all works well in theory

game concept

ok so what the game is about is building turrets, yes why build turrets well because there are enemies

what do the enemies want then they want uuhhhhh a gold orb what does the gold orb do? uhhhh everything in its range gets homing and 2x attack speed

why do the enemies attack the player then uhhh the player has the orb why cant the player just drop the orb uhhhh they can but enemies can attack it then

so how do the enemies move cos of this well they just want the orb so they pathfind to wherever that is

pathfinding

they move to the orb they avoid other stuff

ui

stuff to show minus name and icon

  • means referance

defence

hp debuffs type power stability

turret

*stats procs attacks type properties power stability

enemy

*stats procs attacks type properties

module

hp effect power stability type in range

orb - damageable

debuffs hp regen type

melee attacks

center and aim position need to be abstracted to a function

  • dagger (mid) random -> attacks random directions at full distance homing -> doesnt reset center returning -> n/a polar -> n/a
  • hand + sword (mid) default -> arm goes half sword length away and then swipes, cant move while swiping predictive -> predictive + always moving random -> attacks random directions at within range homing -> center slowly moves towards an enemy returning -> n/a polar -> n/a
  • tenticle (v.hard) normal -> tentacle goes to enemy, the entire tenticle is collision boxes random -> attacks random directions within range homing -> it will become 2 tenticles, the middle focuses on one enemy, the other focuses on another returning -> the start and end are at the center and it sorta loops back around on itself now i know that sounds dumb BUT it will only look dumb if it is

    homing and returning will need to be implemented in a way that you have one tentacle, this tentacle can be made of a bunch of seperate tentacles so homing -> 1/2 at enemy 1, 1/2 at enemy 2 returning -> 1/2 at enemy 1, 1/2 at center returning + homing -> 1/3 at enemy 1, 1/3 at enemy 2, 1/3 at center this will be hard to do, but v interesting, modulo be like, spends days working on a synergy between 2 special properties on a single attack, we have like 12 unique attacks wtf polar -> n/a fuck that shit

  • beam (easy) normal -> goes to the nearest enemy and when going through them it deals damage, length will be equal to range random -> spins, doesnt aim randomly, just spins homing -> center moves to enemy +random -> center goes around the range perimiter, maybe click to cycle through shapes returning -> n/a polar -> n/a

procs

explosion on hit (total) pulls enemies in (base) shoots lasers to nearby enemies (total) makes an enemy leave a poisionous trail (base) stuns them (base) delayed explosion (total) pushes enemies away (base) knocks hit enemy back (total) slows enemy down (base) changes side (base) leaves a toxic splash on the floor (base) all enemies that touch it get poisioned (base) changes into a different enemy (na) decreases attack speed (base) increases own strength (base) turns gold and drops double cash (base) absorbs hits and then applies them to all enemies around it (base) spawns things that home onto enemies (total) halves its health (na) if below half health turn invincible for 5 secs, else kill (na) make all movement in the wrong direction (base) deal 5x damage (total) reset all cooldowns (na) make a saw orbit it (total) make the enemy constantly do tesla coil effect on nearby enemies (total) it takes damage for every meter itmoves (base) collapse risk of rain (base) if close 2x deal damage (na) heals perent for all the damage dealt (total) the faster an enemy is moving the more damage it takes (total) makes enemy do negative damage turn into shrapnel shoot two shots in opposite directions confuses enemies black hole that pulls in everything creates a temporary mega high priority target creates a quaddirectional laser beam reverses any healing spawns a bouncy saw

currently programmed “things”

walls: power linearly effects health

towers: power effects dmg, max health, attack rate by the function f(power)=pow(power,1/3)

special properties modules: cannot be stacked hrngr attack modules: can be stacked f(power,multiplier) { (dmg,attackRate) *= sqrt(power*multiplier)} stacking purely adds another attack, though i could have it go through the list of attacks and have it add to the power and multiplier

proc modules: can be stacked stacks are applied easily the multiplier and power will need to be done creatively for each module

stat modules: stacks easily multiplies easily

components

ugh ook so im revisitng this after like a while now i had a concept for components but uhhh now i do not

basically it will go as such, you have a grey orb, this can be fasioned into either a red orb or a green orb there are also blue orbs dropped by your towers

now red orbs are made in a red orb machine, they take log2 time of how much you make, they also sap health away from any thing in its radius, the more things nearby the faster it saps

green orbs are made in a green orb machine the time they take is constant no matter how many you put in but it relies on you being there for the entire time

all orbs are dropped based on the power of the damageable object enemies drop grey orbs based on their level towers drop blue orbs based on their power

blue orbs are collected by enemies, and they level up based off an exponential graph the amount of xp to level up is determined by 2^(level-1)

i think generally this should be good

why the fuck did i implment components

components will be spawned by running playerbehavior.me.SpawnComponent(

About

modulo is a 2d tower defence game

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published