Replacement to boss stage objective, you now have to activated altar to spawn the boss
QoL
Added tracker that follow important thing out of the screen removed the old chest tracker at it's now outdated
Changes
reduced health achievement requirements to adapt to the 0.8.2.0 health balance
Fixes
Being able to dash out of screen during Arena stages
Modding
RogueGenesiaMod class now contain `ModData ThisModData` that you can always access inside your mod, it is added as a variable before OnModLoader is called
Added a function inside your mod `GetSoulCardCreationData(string relativePath)` that allow to load a SoulCardCreationData from a json
Added a button to automatically set-up a visual studio project for your mod.
Mod Uploading windows description and changelog now automatically resize for your text
Input field in Mod Uploading windows no longer lag the game
You can now create CardRequirement without a SoulCardScriptableObject just using the card name, this should make cardRequirement to other mods much easier.
Slighty improved how dll are loaded in (thank to chendrak)
Added PetAPI into modding api to add custom pet, to add custom behaviour you'll need to use RogueGenesia.Actors.Survival.Pet, it contain `AddBehaviours()` and `RemoveBehaviours()` functions
You can now add tracker that will display on the border of screen if something is out of screen - `RogueGenesia.UI.GlobalIndicatorHelper.AddObjectToTrack(Transform,Sprite)`
Tracker for transform will automatically be removed when the object is destroy and be hidden if it's on screen Tracker for Position will automatically be removed when the position in on screen
Experimental : Added `OnMonsterTakeDamage(Monster, DamageInformation)`. I'm worried it may tank performance this event is only called in modded version of the game
Hotfix 0.8.3.0a
Changes
Slighty increased Time for time limit optional objectives
Increased elite spawn-chance in elite kill count stages objectives
Fixes
Card reward disappearing when obtaining optional reward in challenge that remove additional card selection as reward
(modding) DropDrown option not really being dropdown option
0.8.3.0
0.8.3.0
Content
2 New stage type 1 rare that can appear after zone 2 1 uncomon that can appear anywhere
2 new possible objective in elite stages
2 new uncommon objective in normal stages
Optional objectives that when completed give better rewards
QoL
Improved Lust's card icon
Gold pick-up sprite change with it's value (change at 10, 100 and 1000)
Slighty changed the achievements order (so challenges achievements don't fill up the 10 first pages)
(modding) Upload mod changed to Upload mod update for already uploaded mod
Fixes
bug where tooltip for profile Gamemode were not working if you created your first profile
evasion triggering before sage's leaf
Hourglass challenge affecting timer
GameHistory not working for game without active talents
(modding) Workshop/upload button being mixed up for mods and causing issues to update mod on workshop
(modding) OnStageEnd being called more than one and in the wrong place (called every frame during the timer count down)
Modding
Changed how unlocks are working with achievements > beforehand, achievement had one slot for each type of unlockable > Now, most unlockable content got put into the same class which contain informations required for unlocks, so achievements just contain a list of all unlockables
Added `SetMonsterLists()` function in GameManager class
Added `GetEnemyList()` ,`GetEnemyPatternList()` and `GetMaxEliteAtOnce()` functions in StageInfoClass and StageObjective class
`OnStageStart()` in StageInfoClass now take LevelObject as parameter
`LevelObject` class now contain EnemyPool, which contain the list of possible enemy for the stage, they are added during `BuildObjective(LevelObject level)` of StageInfoClass
Added New Event `OnMonsterKilled(Monster)`
Added `AddArtifact(...)` function to ContentAPI
Rogue: Genesia, April monthly Dev-Blog
Hello everyone, time for the montly Dev-Blog!
This Monthly Dev-blog will be focus on what I was working on during this month, replying to a few question I've seen recently and finally on the upcoming features.
Work done
Since last Monthly dev blog, I was mainly focused on 0.8.1 and 0.8.2
0.8.1 was focused on implementing proper modding into the game 0.8.2 started as a simple fix for an artifact bug and greatly spiralled into an important code rework arround Artifacts, I'm going to go deeper into details later.
0.8.1 - Modding update
So far i'm very happy with the modding possibilities of the game, it's still very early in the life cycle of modding, but, well it's starting. I've made an example mod and a guide on how to start creating mod. The information are still a bit barebone for now, but I'll slowly improve it over time, it can be hard to find a balance between working on modding and working on the game.
I plan to make a few additional mod myself (to give more base for modder and to fulfill some request I wouldn't implement into the base game for various reasons)
Technical debt and refactorisation
So far, since the release of 0.7, players could have the impression the developement of the game is slow. I'ven't seen players complain about that overall, but I think some person may think it is the case.
Content-wise, the additions were quite scarse, Over the last 6 month, there were no new difficulty added or tangible content.
Content wasn't my focus so far. 0.8 update, more than just an addition of avatars and talents, was also an important rework of the code of the game.
Developing a software (and especially game) create a technical debt, this is often the case when you add feature that are not planned at the very begining. As a developer I often have to do the choice between doing thing quickly or doing it "properly" (this is not technically correct as there is no definitive proper way to make thing). However, the "properly" part of doing something depend on the scope of the feature. and experience. I'm much more experiences now that I was when I started Rogue: Genesia, and I can much more easily design robust and future-proof system into the game.
I'll take for example Artifact that received an important refactorisation during update 0.8.2:
Artifact was made during the very early part of the game. I had no idea of the exact scope of the game back then. So how do I make an artifact that increase your stats ? Simply make a check if I own the artifact and increase the stats during the stats calculation. However while this is a simple and quick implementation, it can become a problem if I have 50/75/100 or even 200 different artifact, I am going to increase the stats calculation code to take every case possible ?
It'll quickly become a long code of repetition, can easily create bug, is an huge issues to maintain and actually is not that performant... i've create Technical debt.
This is one of the factor why I've not added many artifact since the release of the game, because the current system is simply not made for and adding more artifact would just make the rework harder and longer to do.
So while someone reported to me a minor bug about Broken statuette not updating the stats correctly during survivors (it only referesh after you leveled-up). I took a look, and quickly noticed I had two choice :
make a 5 min patchwork that will just make it even more of a pain to make a proper system later
spent multiples day reworking the whole artefact system to fit the new need
After doing the first choice for many previous similar situation I've decided this time to go for the second option.
The new system made artifact a separate object (code wise) which would listen to events that are now called at the place where the old artifact implementation was. This has good advantage :
Very slighty improve performance, where before I had to check if I owned each of the artifact, now it only call the owned artifact without have to check if I own each of them. (the performance gain is very low)
made the system much more flexible and created space to add more artifacts
Greatly increased the speed at which I could add artifact, especially if it does multiple things at once
Made artifact moddable (having hardcoded artifact mean modder had to patch function using CLI cursor, and could easily lead to issues if multiple modder wanted to implement similar artifacts)
The total rework of the artifact took about 1 week. about 3 day for artifacts themselve, but since artifact was seriously intertwined with other system (stage objective and pick-up) I ended up having to refactore them too, applying the same approach as artifact, making them much easier to add new content for them and making them moddable.
Of course, remaking those system create a lot of bug, which can take a lot of time to find and fix.
Now you can imagine the same process went for the Enemies, Stages, Difficulties, Gamemodes and Cards. avatars and talents were designed with this approach from begining so refactoring them wasn't needed, but it still took time.
Two other important time-sink during the developement of Update 0.8 were
The animation of avatars Avatars design usualy take between 2 to 6 hours, each having 3 animation is about 1 to 2 week of work time, and finally having to draw victory and game-over sprites
UI elements Making an Menu is about 1 to 3 day of work each, having to design the UI and coding the logics.
All those factor lead to a huge developement time for minor content addition during those last few months.
And now ?
While there is still a few refactorisation I would like to make, they are much less important and are post-poned for later (Right now I'm thinking of Achievements and Soul-Shop upgrades, and likely challenges much later)
Those new refactorisation and rework of the game allow for a much easier addition of contents. and I can share with you a few of the addition that are comming with Update 0.8.3.0
New stage type
2 News stage type has been made so far that should increase diversity. more will come over time
Elite Swarm stage
They are a bit self explaining, they are basically the Swarm stage, but with ONLY elite monster. These will only appear in zone 3 or more, and are a bit rare.
Arena
Arena will be stage were the camera is fixed and unzoomed, and you cannot leave the screen They are slighty harder than normal stage. I'm thinking of adding a bit of structure into these stage.
New stage Objectives
Wanting more diversity into the run, new stages objective has also been added
as a simple objective, some elite stage will simply ask you to kill a set number of elite
There will also be a rare stage objective where enemies are much more likely to drop gold and you goal is to find a set value of gold
I'm also experimenting with a stage objective where you have to defend the shop-keeper for a set duration, and keeping him alive reward you with gold coins as well as a shop instead of a reward
Optional Objectives
Finally one last thing I'm currently experimenting with for the 0.8.3 update is the addition of option objective which will increase the end of stage reward.
Replies to a few concerns
Before I talk about what is planned for the next month, I want to replied a few question/concern I've noticed
Optimisation
The patch is still being worked on, as I'm not directly working on I still can't give a set ETA, there is hope for it to be ready for update 0.9, but I can't give any promises.
Crashes
I know a few people are having crash with the game. From looking into it, the crashes seam to be due to the game taking too much ressources (ram and vram) This issues is very likely to be fixed with the optimisation patch.
Pet DLC
There will be 2 different Pet DLC, each costing 1$, one for a dog and another one for a cat. The reason I'm making them DLC instead of including it with a game update is that it was a popular request from userbase to have pets following you. I personally don't think they are an important addition to the game and they are actually a bit of an investment to add int othe game (animations, design). Making them as paid DLC is a way for me to mitigate the cost of the adding something I don't think is important while making the community happy, however to make sure it's not a paid advantage, they will be stictly cosmectic, they won't serves any purpose.
However, I've noticed than making them "useless" annoyed a part of the community. After a bit of reflexion, I've made the pet having multiple "behaviours":
Behaviours are small AI component of the pet that control it's action, the pet will choose random behaviour everytime the previous behaviour is finished. In the vanilla game, the pet will have 2 behaviours, idle and walking along the players The catch is that these behaviours are moddable. adding or removing behaviours with modding will be possible.
I plan to release a mod after the DLC release that will add a simple "fetching" behaviours where the pet will pick-up collectible for the player. This is I think the best way to keep them as cosmectic while allowing player who want to have trully useful pet be happy.
(of course adding more pets via modding will be possible)
"I would have preferred more progress on the game itself, and what it offers itself, over anything to do with modding"
This is something I've seen when I talked about artifact refactorisation (to make them moddable), and I think is shared by a few players. While it's true a bit of time went into modding, as I explained above, this is often more complex, and striking the balance between modding and progressing the game can be difficult. while it look like I spent a lot of time into modding. I would say I spent about 5% to 10% of my developement effort toward modding. (it's even likely I've spent a little bit more effort toward writing these monthly dev blog than modding)
Modding is too hard
There is a balance between having an easy modding and having a complete modding. You can't make a modding that allow lot of thing to be easy and available to everyone especially when you are an Indie developer, knowing nothing on how to make a game modable when you start working on it. My target for modding difficulty/possibilities was RimWorld/TmodLoader. so far I think the possibilities and difficulty of modding for Rogue:Genesia is alongside these game.
Also, just recently, Chendrak released EasyCard. which is a mod that allow for anyone to make card easily filling up json and adding an image. There is also a pack of card made by PlushPaws using EasyCard
You also are more than welcome to come on the discord if you have any question about modding or need help
0.8.2 Nerf
I've also seen some people concerned or even complaining about the recent "Nerf" First off I don't think they did much more than reading the patch note before complaing. The "nerf" affect both the player and the monster, and was made so it's shouldn't be much different than before. from the feedback I had, many players didn't even noticed any changes. The goal of the nerf wasn't the made the game harder but to reduce the uncontroled powercreep you have arround Zone 3. i've seen many complain from begineer player slow and unfun fight with enemy in zone 3.
The main reason being they simply skip to much of the damage source and end-up having good survivability but very low damage, leading to a boring game.
After collecting a lot of feedback of a long period (I've seen this appear multiple time on the Steam forum during those last few month) I've decided to greatly reduce many of the Damage multiplier you can find (making the stacking a bit less important) balanced the enemy health arround that (to give an idea of the nerf, Necromancer (zone 3 boss) health went from 5 billion to 250 Million)
Nerf also reduced Huge Health bonus card, that simply pulled player toward those boring build, seeing a +40% health bonus is much more appealing that a +0.2 base damage. (however proper tank build are still possible and fun)
Too much Typo/spelling mistakes in news/Changelogs
I prefer to spent my time working on the game. And english is not my first language :).
And then?
Right now, I'm waiting for the pet's animation to be finished before seriously starting to work on Update 0.9, that will like other Major update follow a lenghty beta phase with players.
Until then I'm working on 0.8.3 update and likely a few minor patch depending on the time required for the hired person to finish.
So I would target for a start of 0.9 update developement to be for Early May and the release of 0.9 targeted for June or July 2023, Release of update 0.9 will also see a price increase of the game from 4.99$ to 6.99$
0.9 Update will add C-rank difficult into the game (both Survivors and Rogs Mode)
the definitive scope of 0.9 is not yet confirmed, but I would like to add 2 major additional features:
Zone variant Goal would be to have variant of zone to add more diversity into the game. For example, having a snow forest biome instead of the normal forest biome for the first zone
Stage modifier Those would be "Curse" or random afixes to stage, modifying how they work. Like increasing the like-hood of elite spawning/ they maximum number Changing the zoom level Disabled a random weapons ...Inverting your controls (I know you're gonna hate that) (nothing definite yet, still thinking of idea for that)
This will also be acommpagnied with neccessary content (cards, events, artifact...) to accomodate for the increased lenght of games and QoL additions (Monster list in encyclopedia...)
Update 0.8.2.1
(made a lot of ground work for the upcoming Pet dlc, I'm just waiting for the animations to be ready)
QoL
Improved Worm gland visual
Card can also be filtered by mods
Changes
Reduced Active talent charge requirements for many talents :
Worm Gland (1000/950/900/800 to 400/350/300/250)
Wind Blade (1000/950/900/800 to 400/350/300/250)
Swordrang (1000/950/900/800 to 500/450/375/300)
Shuriken (1000/950/900/800 to 400/350/325/300)
Pike (1000/950/900/800 to 300/260/230/200)
Magic Wand (1000/950/900/800 to 300/275/250/200)
Kunai (1000/950/900/800 to 275/250/225/200)
Katana (1000/950/900/800 to 550/500/450/400)
Fire Ring (1000/950/900/800 to 250/200/150/100)
Explosive Vial (1000/950/900/800 to 700/600/550/500)
Crossbow (1000/950/900/800 to 750/700/650/600)
Cleaver (1000/950/900/800 to 400/350/325/300)
Fixes
Negative ammo display
Ouroboros necklace artifact name
Tooltip on talent charge bar about charge rate being display as the charge
(Modding) BuffOverride not correctly replacing a buff
(Modding) Dependency version check being inverted (validating dependency if the version was equal or lower instead of equal or higher)
(Modding) Some mod not being loaded as they should
Hotfix 0.8.2.0b
Fix
Shop keeper having a much smaller level-up shop at high level
Poisonous debuff Tooltip
Fix Plexus' sadism totem effect still effectives after one usage
Bug when changing tab for multiple mod in mod options
Tooltip not working correctly on resolution other than 1920x1080
Hotfix 0.8.2.0a*
Fixes
Cursed belt description still showing 1.5%
Some artifact effect not being displayed on some card buff
Modding
Added `OnStageStart()` function for `StageObjective`
Added `OnStageStart()` function for `StageInfoClass`
Update 0.8.2.0
Warning
Run save are not compatible
Major Change
major Damage/Health rebalance
This update feature a major rebalance of player and monster Health and damage. This is mainly a reduction of multiplier to avoid uncontrolable scaling after midgame, that would often lead to either being unkillable or killing everything in one hit. (this mainly affect D-rank world and end of E-Rank,as F-rank didn't have much of this issue) Balance is still experimental and very open to feedback on improving the balance
QoL
<*> Artifacts list in encyclopedia where you can check the unlocked artifacts information
<*> You can now put your mouse over buff to get a name and description
Volume slider now correctly scale in the logarithm scale (also migrating to unity audio mixer)
Moved the load button to be in the start game menu
Added a warning if you try to start a new run while you have a ongoing run in the same Gamemode
Added an option to prevent the start of new run if you have an ongoing run in the same Gamemode
Gold display in survivors mode when playing as shop-keeper
Tooltip for the talent and talent bar
Added a bit more detail in artifacts list
Added tooltip to profile gamemode when creating a new profile
New Artifact
Ouroboros Necklace - Upon dying, gain a card selection (once per Stage)
Changes
Cursed belt Health regen increased from 1.5% to 3% of max health
Dash refill Potion pick-up distance no longer scale with player pick-up distance and is now 2m when dash charge are full
Removed Quantum processor compatibility
Fixes
E key not being rebind-able and causing issues
evasion sometime proccing twice in the same attack
Evasion not properly capping damage to 10% of player's max health
Shadows from sun glitching on medium shadows setting
Way to display challenge you shouldn't had unlocked already
Card selection option description
Option menu always being scrolled
Option text not using the right font
Buff stacking bug when going over 999 stack (now it properly cap at 999 stack)
Soul-shop gamepad button for refund being displayed as B when it should be Y
Gamepad navigation issues with game history
Bug where the game thinking you were on keyboard just after you did a gamepad input for the first time after moving the mouse
Talent bar fill in pause menu not filling correctly
Modding
<*> Custom Pick-up can be added into the game <*> Custom Stage Objective can be added into the game
Updated from .Net 4.x to .Net Standard 2.0 (Sadly I don't have the option to upgrade further, it'll likely be updated again when the engine will be ported to Unity 2022 later on)
Added `string GetSaveName()` to `GameModeClassInfo`
Added `bool HasSave()` to `GameModeClassInfo`
Added `void LoadSave(GameModeSO gameMode)` to `GameModeClassInfo`
Added `void ClearSave(bool EndOfRun)` to `GameModeClassInfo`
They are used to make the saving location handled by the gamemode instead of being hardcoded into the game
SoulCard class now contain `GetName()` ,`GetDescription()` and `GetDescriptionOnLevelUp()` function so you can make your own custom dynamic description for custom cards (Description and name override still work and are still supported, this is just to give modders more control over that)
Added `GetName()` and `GetDescription()` function to buffs
Complete rework on how Artifacts work. That mean they can finally be modded in
Artifacts which are missing or have incomplete factorisation :
CorruptedCore
TrainingWeight (incomplete)
AdventurerLicence (incomplete)
ChampionBracer (incomplete)
Gilgamesh Crown, Seal and Ring
Artifacts that won't be refactored in the near future (for technical reasons)
Portal Device
Wander Helmet
Changes to the API
Moved a lot of "content Adding Function" to ContentAPI to clean-up ModGenesia class
AddCustomStat
AddSoulShopUpgrade
AddEvent
AddTalent
AddCustomDamageSource
AddCustomEliteAbility
Removed all "obselete" legacy function from ModGenesia class, you now have to use the function from the correct class API
AddCustomCard
AddCustomStatCard
AddCustomWeapon
AddCustomChallenge
SetSoulCardInfo
MakeCardRequirement
ReplaceRogSkin
GetCardFromName
`RegisterBuff` and `GetBuffID` got moved from ModGenesia to BuffAPI Collectible now has a `GetPickUpRange()` function that return the distance at which they can be picked up
Events Changes (for modding)
`DamageInformation` struct was changed to a class to ease modification of the info using events `LevelObject` struct was changed to a class for the same reason new `FloatValue` class used to pass modifiable float in events UnityEvent class got replaced by OrderedEvent class, they function the same way, however, you set an order value to set the priority for your event, default order is set to 500, lower value mean higher priority
New Events
`OnPlayerHitByProjectile` - was previously `OnPlayerTakeProjectileDamage` (it is called before all other TakeDamage events)
`OnPlayerTakeDamage_PreDefence` (Called before Defence from player is applied to damageinformation)
`OnPlayerTakeDamage_PostDefence` (Called after defence is applied to damageinformation)
`OnPlayerTakeDamage_BeforeApplying` - was previously `OnPlayerTakeDamage`
`OnPlayerTakeDamage_PreDeathCheck` - Called after the player had received the damage to his health and before the death is checked)
`OnPlayerLoseHealth(float previousHealthValue, FloatValue newHealth)` - Walled whenever the player lose health
`OnPlayerDeathCheck` - Called when the game is doing a death check (only called when health is 0 or less), can be used to prevent death of the player.
`CalculatePlayerExtraHealthBar(AvatarData, FloatValue newMaxHealth)` - used to calculate the second healthbar (troll blood for example)
`CalculateCardPickCount` - used to change the amount of card pickable
`CalculateFreeRerollCount` - used to change the amount of free reroll on level-up
`CalculateFreeRarityRerollCount` - used to change the amount of free rarity reroll on level-up
`CalculateFreeBanishesCount` - used to change the amount of free banishes on level-up
`CalculateEnemyBudgetAndDelay` - used when calculating the maximum enemy budget and spawndelay
`CalculateBudgetBossModifier` - used by bosses to change the maximum enemy budget and spawndelay when they are spawned
`OnEatFood(PlayerEntity,FloatValue HealValue)` - called when the player is eating food and regain health
`OnCalculateMonsterStats` - called when a monster is spawned and the stats are being calculated
`OnMonsterLoot` - called when a monster die, killed by the player (doesn't procc if killed by phoenix totem or end of level)
`OnRollShop_Generate(ShopGenerationInfo)` - called when generating the shop
`CalculateShopDiscount(FloatValue priceMultiplier)` - called when calculating the shop discount
`OnCardWeightCalculation(CardWeightEventInfo)` - called when calculating a card weight
`OnSelectStageObjective(LevelObject)` - called when generating a stage Objective
`OnCalculateExperienceReward(LevelObject, FloatValue experienceReward)` - called when calculating the experience reward from completing a stage
`OnCalculateGoldReward(LevelObject, FloatValue goldReward)` - called when calculating the gold reward from completing a stage
`OnCalculateCardSelectionReward(LevelObject, FloatValue cardSelectionReward)` - called when calculating the number of card selection given from stage completion
`OnCalculateArtifactReward(LevelObject, FloatValue artifactReward)` - called when calculating the number of artifacts given from stage completion
April First Update
Greetings, players!
I am excited to announce the release of Patch 0.69.42. This patch is all about... well, nothing! Here's what you can expect:
Added Quantum processor compatibility, you can now run Rogue:Genesia on quantum computer at ludicrous speed!
Removed a few lines of code that were doing nothing.
Fixed a bug where nothing happened when you do nothing. Now, nothing still happens, but it happens more efficiently!
Optimized the game to not use less memory and processing power when nothing is happening.
Added a new loading screen featuring a blank screen to represent the nothingness that awaits you in the game.
Improved the AI of the NPCs so that they can now do nothing more convincingly.
Increased the amount of space between objects in the game world to create a sense of emptiness and nothingness.
Increased the randomness of the weather patterns in the game, so that sometimes it will rain, and sometimes it won't. But in either case, nothing will happen as weather is a lie of the illuminati.
Added absolutely nothing to the game.
I hope you enjoy this patch and the absolute nothingness it brings to your gaming experience.
Remember it's April first and you better don't get fooled by everything you see today.
On a more serious note, I am Still working on the game, And I am too busy to make a real April first meme update. Optimisation issues are known, but the patch is still going underway. Meanwhile, I'm currently working on a complete refactoring of artifact so they can be modded into the game (as well as refactoring of stage's objective and item pick-up for so they can also be modded into the game)
Once the next Patch is done, I'll focus on making a proper modding guide to help to make thing more user friendly. As well as a proper API documentations