Ideas and (Memory) Optimization for Dungeon project

I haven’t made an actual game and Help topic in a while.

I’ve been making a Dungeon Crawler and I need mechanic ideas, enemy design ideas and special attacks and lastly, game modifiers for certain difficulties chosen.
I’ll go in-depth with the ideas I need help with and the current notable mechanics I have.
I’d also like ideas on how to optimize and make my device system/s more efficient and use less memory because I’m at ~14-15% memory with just the main mechanics of the game.

I’m also planning on creating this map FULLY on mobile. (on an iPad)
It’s gonna be a challenge, but definitely not impossible.

PS (please read)

PS: If you think this is a showcase, look at this:


Difficulty Selector

Difficulty Selector:



These pictures are connected, by the way.
This would’ve just been two pictures but the FOV on mobile is quite small compared to a computer, that’s been holding me off. :sweat_smile:

Other picture: not part of the difficulty system, but still has actions (blockcode) corresponding to it.
Screenshot_20240113_230319_Chrome

Picture 1: How this works is that when a player presses the button, it opens a popup.
If the player clicks Call-To-Action 1 (select difficulty), it Triggers the Trigger and runs blockcode simjlar to this but it differs on the difficulty chosen. I’ll talk about the channels first, the property will be explained with the third picture.

Channel 1: (showoverlaylivesleft)
Pretty self-explanatory, it shows the Game Overlay that displays how much lives you have left.

Channel 2: ([insertdifficultyhere]difficultychosen])
This activates sentries with higher health/lower health corresponding to the difficulty chosen.
This also applies with vending machines but instead of health, price.

Okay, now let’s talk about the two properties.
Let’s go back to the third picture.

Property 1: (LivesLeft)
Sets the LivesLeft property’s value to 5.
This is the same property used to update the Game Overlay’s text.

Property 2:
Sets the 5lives property’s value to true.
Okay, this is kinda confusing.
I’ll explain it.
Screenshot_20240113_230319_Chrome

When a Player is knocked out, it triggers the four triggers and runs some blockcode. (If you’re confused why there’s only three triggers in the picture, it’s because I added one)

Here is the blockcode:

If the Gimpossible difficulty is chosen, the trigger sets the 5lives property’s value to a “true” one.

When the player is knocked out and the 5lives property is true (meaning the 5lives difficulty is chosen), a counter gets incremented on the “increment5livesleft” channel.

Also, the counter has a target of 5 but it differs on the difficulty chosen.

The counter is then connected to a Team Switcher that switches the player’s team when the target value is reached which means the player used up all their lives. (target is 5 for the gimpossible difficulty)

By the way, I forgot to mention that there’s a trigger different from all the other triggers in picture 3.

It’s the InfiniteLives trigger.
It runs this blockcode:

If the VeryEasy difficulty is chosen and the player gets knocked out, it checks if the InfiniteLives property’s value is true, it deactivates the 10lives and 5lives trigger (also the 15livestrigger but I didn’t add it at the time of creating the picture) which disrupts the counter’s signal preventing the trigger from being triggered and then so incremening the counter which stops the player from switching to spectator.
It broadcasts on the “InfiniteLives” channel which is then sent to change the text of a Game Overlay:

I did not use the InfiniteLives Trigger with a Counter for the exact same reason.

Simplified Version

When the player selects a difficulty, it sets a property that corresponds to the amount of lives you get for that difficulty to a true value. [the formatt is as follows: #lives] Then, it sets the LivesLeft property to said # value. The only exception is for choosing the “Very Easy” difficulty, which only sets the “InfiniteLives” property to a true/false value. This it to avoid the Game Overlay saying “999999999999999 Lives Left” as it causes screen clutter and it isn’t the best thing we could do.
Instead, when receiving on the “infinitelives” channel (which is triggered when the player chooses the “Very Easy” difficulty, it runs this code:

Set Text | Create Text With "Lives Left:"
"Infinite ∞"

[I just realized that I could’ve just used one text string but hey, it doesn’t affect it that much.]

When the player gets knocked out, it Triggers 4 Triggers that check if these true/falss properties have a “true” value: InfiniteLives (which is set to a true value when the player chooses the ‘very easy’ difficulty), 15lives (which is set to a true value when the player chooses the ‘easy’ difficulty), 10lives, (which is set to a true value when the player chooses the ‘normal’ difficulty) and finally, ‘5lives’ which is set to a true value when the player chooses the ‘hard’ or ‘gimpossible’ difficulty.
Let’s cover what happens when the player chooses any difficulty other than the ‘very easy’ difficulty which sets the InfiniteLives property to a true value.
Let’s start with 5lives which is set to a true value when the player chooses the ‘hard’ or ‘gimpossible’ difficulty.
When the player gets knocked out, the triggers check if one of the four true/false properties are set to a ‘true’ value.
Now, the trigger detects that the ‘5lives’ property is true.
It decrements a counter.
When the counter, reaches zero, the player switches to a spectator.
This is the case for all the other difficulties, except the ‘very easy’ difficulty, which gives you infinite lives.
I have explained it above.

Okay, now let’s move onto

Difficulty Selector and Game Modifiers Optimization

When you select a difficulty, it modifies the game.
Here are what certain difficulties do to modify the game’s difficulty when chosen:

Let’s go back to the first and second picture.



The “VeryEasy” difficulty activates a 1.5x Damage Boost (for 30 seconds) and gives you a sped boost lasting for 30 second as well.
It gives you an Epic Zapper to start with.
The “Easy” difficulty is almost just as same, just subtract 0.25x from both the Damage Boost and Speed Modifier ans now you have a 1.25x Damage and Speed Boost!
Then, things get a little bit more boring.
Choosing the Normal difficulty starts you off with a Rare Zapper and the Hard and Gimpossible ones start you off with an Uncommon Zapper.

I’d also like some ideas on what modifiers to add to each difficulty individually, and they can be anything, more speed, more damage, a better starting weapon and more buffs.

I’m also working on a seperate ‘game-modifying’ system where the host can enable or disable critical hits, achievements, map selection, disabling lore and other things to modify the game.


Memory Optimization ideas with the Difficulty Selector, Game Modifiers and LivesLeft system

Okay, now before anyone says, “Use number properties instead of true/false ones!
You could make property value 1 stand for VeryEasy, 2 stand for Easy, 3 stands for Normal and so on and use a Checker to check those properties.
That would save a lot of memory without using blocks.”

Yes, I have been thinking of that and it would probably save ~2-3% memory and that would put me at a lower memory count for more mechanics.
It’d put me at 11-12% 17-18 memory more or less compared to the 15% I’m at now using true/false properties. I crossed out some stuff because I’m now at 20% emory.

Any other tips to make my system/s more efficient and use less memory/just general tips?
Also, yes I have read The Ultimate Guide to saving memory along with some of the replies in the topic.

I’ve also added a lot more stuff to this, which puts me at 20% memory.

Edit: while reading back, i just realized i could do all the code in one trigger instead for checking for every (true/false) property in a seperate trigger and the part where the triggers deactivate all triggers but itself when they run isn’t that important because they’ll only run if the true/false property is true IN THE FIRST PLACE.
This would save me about 4-5 memory including this not far above:

Okay, now before anyone says, “Use number properties instead of true/false ones!
You could make property value 1 stand for VeryEasy, 2 stand for Easy, 3 stands for Normal and so on and use a Checker to check those properties.
That would save a lot of memory without using blocks.”

Yes, I have been thinking of that and it would probably save ~2-3% memory and that would put me at a lower memory count for more mechanics.
It’d put me at 11-12% 17-18 memory more or less compared to the 15% I’m at now using true/false properties. I crossed out some stuff because I’m now at 20% emory.

Enemies, Bosses and Art Ideas

I made a spaceship-like thing using plant canisters, space beds (including the vertical variation of it) and space containers.
Screenshot_20240204_115848_Chrome
Does anyone have ideas to improve it?
If you also have better spaceship art designs, I’d like to hear them.

For the bosses and enemies, I’m thinking of having each level have a theme (the main theme will always be space though) and then the boss’ main gimmick/special ability revolving around that mechanic using boss special attacks.
Also, I’ve looked in the Custom Bosses guide but none of those really interested me would fit in my map , so I’m asking for ideas.
I’m also planning on making multiple ‘stages’ to each boss using multiple sentries which adds new abilities or strengthens the boss.

Here are some of my ideas for boss special attacks/abilities (that you can also add onto in the comments)

Knockback
-activates zones around the boss and teleports the player behind the zone the player entered

Stun
-pretty self-explanatory, stops the player from moving for a few seconds

Posion / Oxygen Deplete
-i have an oxygen system in my map, what this would do is deplete the oxygen faster than usual for a few seconds or just take away a large portion of oxygen

Curse
-adds a debuff to the player, gives them an evil eye with a debuffed damage booster or disables health regeneration for a few seconds

[Insert Suggested Ability Idea Here]
-blah, blah, blah. Special Ability Description

If you could give me ideas for the themes and/or the boss to go with that theme, that’ll be very appreciated.

(I have no idea on why I posted this so late for most people)

NOOOO WHY DID NO ONE REPLY ANYMORE

8 Likes

Boss Theme:
Power of the Sun.

Tints your entire screen white with the power of the sun, and and then follows up with a series of white lasers. Upon defeat, it goes supernova and you must get to a certain distance away from it before you get vaporized. After that, it collapses into an ultra dense neutron star, where you must finish off the core of the star to win. Don’t get too close to it though, or else the gravity might crush you flat. Also the radiation is somehow firing quantum portals at you.

4 Likes

Idea No. 2.

The Dark Side of the Moon

A complementary boss to the power of the sun, the screen will alternate between a white and dark tint, a total of 8 times, to represent the 8 main phases of the moon. During the waxing phase, invisible barriers with increasing opacity will change places throughout the arena, while during the waning phase, barriers will still change places throughout the. map. but with decreasing opacity.

During the Second phase, it will enter the eclipse state. The screen will gradually begin to turn white, while the moon begins to turn darker. During this phase, the boss cannot be damaged, and It will receive a significant boost in damage, fire rate, and accuracy.

Finally, when the screen is completely white, and the moon is entirely dark, it will enter the state “Totality”. The ground of the battleground will be completely white, and the moon will be completely black. The enhancements from the second phase will still be present, and a respawn zone will appear around the boss. Additionally, the player will receive random speed boosts to make the player more uncontrollable, and a laser attack will be randomly used in this form, where lasers shoot outwards like rays.

5 Likes

NUMERO UNO:


Use numbers instead of booleans. You can then use counters to set the properties instead of blocks. This saves you about 400 memory.

5 Likes

You can make a system where a quest is one night at Terry

2 Likes

BUMP! @Haiasi needs help.

Could you use more channels/blocks? Use a lot of relays.

How many devices with code do you have? I want to know if I can save you some memory.

2 Likes

Yooooo! That boss looks awesome! Great job on it and this post.

I have around 5. (Not including the 9 more blocks because getrithekd already found a way to simplify it, I’ll just delete the blocks and turn the true/false properties into numbers, using counter-linked properties as 1 for true and 0 for false. I’ll do it when I’m done with my game and polishing it up to save memory because I’m scared I’ll make a mistake lol.)

2 blocks are for a questioner (I used your guide called “how to show how many questions a player got right at the end of the game” or something along the lines of that), 1 block to update the livesleft overlay when receiving on a channel _ when the livesleft property changes, another block to update a pseudo-health overlay, and I’m pretty sure I have one more block-code device (or not).

As for @Dark_Hydra, it’s not a boss lol, it’s a spaceship.

3 Likes

wait, isnt this a guide?

There is a simpler way than my guide. Instead, use counters to represent the right, wrong, and questions answered. Then those update properties, which are in the end game widget. That just saved you two blocks.

2 Likes

This topic was automatically closed 3 hours after the last reply. New replies are no longer allowed.