Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice
  4. Dismiss Notice

[RELEASED] Rex Engine: A Unity 2D Platformer Engine

Discussion in 'Assets and Asset Store' started by BeeZee, Jun 20, 2017.

  1. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Bagnol, I checked the ContactDamage component and it is set ok, (set to hurt enemies and not the player). What is happening I think is that when this attack hits the enemy it is registering like the player touched the enemy (which usually would result in damage to the player). I have this collider set extra long so the player is far enough away so I am sure the player is not actually touching the enemy. I am thinking that once I figure out how to replace that collider, I can slot one in that will animate over the course of the swing along with the sprite, which will give me the effect I need since this attack hits at different points along its animation.

    If the player touches an enemy they get damaged, but if an attack hits the enemy the enemy is damaged. I am trying to find in the code where this is determined whether the collision was an attack (and apply the damage) or if it was just something else to ignore.
     
  2. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    You are a life saver... Not only does it work like a charm, but it really helped me understand how the DataManager works. Plus I can easily reapply the process for any other NPCs! Might get a bit heavy on the NPC script in the end but at least it works !

    A billion thanks ! :D:D:D You made my day !
     
    Bagnol likes this.
  3. jeremyfryc

    jeremyfryc

    Joined:
    Mar 11, 2014
    Posts:
    94
    Hey Brittany, I got you covered. You can totally do that using properties in the animation itself. I made two short videos about how to achieve this here:

    PART 1: https://imgur.com/a/fByrlmt
    PART 2: https://imgur.com/a/Dp6gyVm

    What you'll be doing is changing the size and position of the collider based on the animation frame it corresponds to. I hope this helps!
     
    brittany and Bagnol like this.
  4. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Thank you so much jeremyfryc. That is awesome. That is exactly how I wanted it to work but I got confused and thought it wouldn't work with Rex like that for some reason. It seems to work pretty well but right now, I am setting where and what size I want the collider in three separate places that correspond to three separate frames of animation. But the animator isn't just switching right to those on the frame I want, it is gradually shifting and morphing it as it animates. I can't figure out how to stop it from doing that. I want it to be the size and position it is, until it gets to the next frame, where it immediately goes to the next size and position, without anything in between. Do you know how I can make it behave like that?
     
    jeremyfryc likes this.
  5. BeeZee

    BeeZee

    Joined:
    Sep 25, 2012
    Posts:
    657
    You'll want to click on "Curves" in the Animation window (on the bottom), click and drag to select all the relevant frames in your animation (the ones where the collider is changing), then right-click any of those frames, go to "Both Tangents" in the menu, and choose "Constant." That will stop Unity from trying to tween the movement between the frames, and instead, each frame should just snap to the next value.
     
    brittany and jeremyfryc like this.
  6. jeremyfryc

    jeremyfryc

    Joined:
    Mar 11, 2014
    Posts:
    94
    Yep, gotcha. In that case, make sure there are no frames in-between the keyframes of the animation that have the box collider. For example, if you have a 4-frame attack animation, and the box collider appears at frames 2 and 4, each a different location, here's what you do:
    1. Make sure that each sprite is assigned to a frame with NO frames in-between. You can adjust how many frames play per second in the animator. That thing that says "60", that's "60" frames per second. Just adjust it to how many frames per second you want. 12, 24.. something like that is pretty standard for frame-by-frame animation.
    2. Frame one, attack box-collider is inside the character sprite.
    3. Frame two, attack box-collide is at the first attack position.
    4. Frame three, attack box-collider is inside the character sprite again.
    5. Frame Four, attack box-collide is at the second attack position.
    With those settings, there will be no smooth transition of the box collider size. It will go inside-outside-inside-outside. Does that help a bit? Let me know. Keep up the good work!
     
    brittany likes this.
  7. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    BeeZee and jeremyfryc, thank you both so much! It works great now. I'm very happy.
     
    jeremyfryc likes this.
  8. BlueAizu

    BlueAizu

    Joined:
    Feb 23, 2015
    Posts:
    1
    First of all congratulations for landing that dream job!!

    I discovered Rex Engine about a month ago (coincidentally) and I'm sad to see it taken down, but at the same time I'm glad I found it before it was. Better late than never, as they say. I'm not a coder so I was struggling using Unity's default 2D platform game framework, but Rex Engine has been helping make something that feels significantly better.

    At this point the game I'm doing is barely a game, but it's so easy to add features and abilities that I've gotten further into it than ever before. It lets me focus on doing what I do best, which is creating animations for it. Even if it's the end of Rex Engine's time on the Unity Store, I'll certainly keep using it since it just feels so good to play! The engine's too good to just leave in the dust!

    Since I noticed someone mention swimming controls earlier I thought I'd share a solution I came up with. It's an underwater moveset inspired by Wario Land which uses infinite midair dashes. The character still sinks and needs to dash to move vertically, but the controls are powerful and I'm happy with how they turned out.



    I'm still tinkering with Rex Engine to see what other things it can do, but overall I'm pleased with it so far. I hope the community for it sticks around!
     
  9. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    Glad to see that this is an open topic ! I'm actually also trying to implement the 2D Lighting system (using Brackey's tutorial as a base start, like the good doggie that I am :rolleyes:) I'm able to set up lights in my scene perfectly, but when I hit the play button I'm getting the good old grey screen. Is there something I might have overlooked ? Or a little tweak necessary to make the whole thing work with the parralax camera ? I've tried and retried several times to make sure I wasn't forgetting anything but I'm always getting the big bad grey screen o_O

    EDIT : I have both URP and LWRP installed in their latest versions (7.4.1), and I'm running Unity 2019.4.0f1
     
  10. Wavefaring

    Wavefaring

    Joined:
    Mar 9, 2015
    Posts:
    7
    Grey screen? Hrm... Did you use the Canvas Camera as the Base, switch all the others to Overlay, and add them to the stack on the Canvas Camera as in my picture example?
     
  11. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Is there a slot to put an animation that plays when you take damage?

    As an aside, I have been playing with the AI system and it is a thing of beauty! Oh it is wonderful. Every enemy. Every boss. It is just going to make it so much fun creating them all.
     
  12. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    No, I did not :rolleyes: Your example must have escaped my eyes. I'll give it a go !
    EDIT : Indeed, works perfectly ! Thanks a lot ! :) My only remaining question will be this : even by selecting "Target Sorting Layers : All" on a 2D Light, the Player will still remain unaffected by said light. Is there a way to include lighting on my Player prefab without touching the Light 2D scrpit ?

    The damage animation slot is situated on the controller on the Player prefab, as "knockback state". ;)
     
    Last edited: Jul 8, 2020
  13. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Thank you very much BorisCerdan. :)
     
    BorisCerdan likes this.
  14. vizard00

    vizard00

    Joined:
    Feb 10, 2017
    Posts:
    13
    It was a huge success , sad to see it disappear , i was waiting for some mega updates like inventory Map Blocking States and More Level Props ... but congratulation for your new job .
     
  15. unicoea

    unicoea

    Joined:
    Feb 18, 2013
    Posts:
    60
    Why i can't find rex engine in unity asset store?
     
  16. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    @unicoea Unfortunately it's no longer available for purchase on the Unity Asset Store. The developer no longer has the time to actively work on it so it's been removed.
     
  17. Lars-Steenhoff

    Lars-Steenhoff

    Joined:
    Aug 7, 2007
    Posts:
    3,455
    I have 2 questions

    1 Are you willing to make it open source on github?
    2 Are you planning to get back to rex perhaps a rex 2 in the future?
     
    tessiof likes this.
  18. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    Disclaimer - This code requires the ReWired input system from the Asset Store. It's also in an incomplete state. I tried to make a version that didn't rely on it but I had too much trouble getting a "While X button is held down" function working properly with Unity's input - either way I'd recommend it with Pro Camera 2D as must-have assets to pair with Rex. The system is pretty basic, but with a little effort it could potentially be modified to suit your project. It's just difficult to make a system that works for every game. It requires two scripts to run fully, but the Block Collision script *should* be optional. I think.

    Basically the following Block State works like a simple version of the shield from Smash Bros. - Pressing the block button (set to Rex's Run button in the example but you can change that to whichever button you want) will cause the player to play a short "Block starting" animation, then enable a separate collider on the player to block projectiles and start playing a looping "Blocking" animation, then when the button is released it will play a "Block ending" animation and disable the collider.

    Initially this only blocked projectiles, but I've added a separate system to detect melee attacks and play a flinch animation and play particles of your choice as hit sparks. Melee collision gets pretty tricky though, so it's currently only set up to block all attacks by making the player completely invincible while blocking - so attacks from behind will be blocked too. Someone else might have some input in a good way to fix that but it's too late at night for me to fix right now.

    It requires a little setup -

    1. Go to your player's Animator (slotted into the Anim slot on your RexActor component) and create 4 new states named BlockFlinch, BlockBegin, BlockLoop and BlockEnd (as seen in attached screenshot).
    2. In BlockFlinch, slot your flinching animation into the Motion slot, in BlockBegin slot the animation for your character preparing the shield, in BlockLoop slot your *looping* blocking animation, and in BlockEnd slot the animation for your character ending the block/putting the shield away/whatever.
    3. Create a child GameObject for the player to be your block collider, give it a 2D collider of your choice and a Kinematic Rigidbody2D component.
    4. Add the Block Collision component to the shield, and slot the whole character GameObject into the Actor and Audio Source slots. Drag the shield gameobject into its own Block Collision's Block Collider slot.
    5. Add a particle system as a child of the shield gameobject and slot it into the Block Hit Sparks slot.I'd recommend unchecking the PlayOnAwake box)
    6. Drag your flinching animation into the Block Flinch Animation slot - this is purely to let the component know the duration of the animation.
    7. Drag an audio clip into the Flinch Sound slot.
    8. Add the Block State to your character's Controller GameObject with all the other states.
    9. Drag the whole player GameObject into the Actor and Audio Source slots.
    10. Drag the shield/block collider gameobject into the Block Collider slot.
    11. Drag the corresponding animation files into the Block Start and Block End slots respectively (Again to let the state know the duration of the animations)
    12. Drag audio clips into the Block Start and End Audio slots respectively.
    Note - Melee blocking is achieved by making the player invincible while blocking, and playing the flinch animation, sound and particles to fake the effect of the player being hit. This can be toggled off and on in the Block State component, it's up to you. Also, the time it takes to transition into and out of blocking is determined by the corresponding animations. If it's a long animation, it'll take a while for the block to actually trigger, if it's a very short animation, the player will start blocking much more quickly.

    I added a shield sprite to mine for the demo video but it's not necessary - you can do the same if you'd like. Hopefully I haven't forgotten anything or made it seem too complex. It just requires a lot of slotting GameObjects into the right variable locations.

    In the following video you can see it in action - my art and audio assets are a little limited at the moment so please excuse the roughness of this content (You'll probably notice Booster's idle animation being used as a placeholder). I used a flinch animation for pretty much all of the animation slots to differentiate it from the main looping animation. Also a reminder that it doesn't currently care which direction melee attacks come from.

     

    Attached Files:

    Last edited: Jul 9, 2020
    OscarLeif, JRBlake and PhantomFox128 like this.
  19. Wavefaring

    Wavefaring

    Joined:
    Mar 9, 2015
    Posts:
    7
    Sounds like you aren't using a Lit shader type for the Player Character. I'm guessing that's because when you upgraded your scene to the 2D renderer, the PC wasn't in it because it's spawned on start.

    You can either change the shader on the PC manually to a Lit one, or you can use Unity's feature to upgrade the Project itself to the 2D renderer:
    upload_2020-7-8_10-53-49.png
     
    Bagnol likes this.
  20. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    When we are setting up a Projectile Attack, how do we set the spawn point for the projectile so we can line it up with the end of the gun?

    Edit: In one of the tutorial videos, I saw the camera bounds being adjusted by grabbing a handle on the top, bottom, left, or right and moving that and it was snapping to multiples of the room size. It also had settings for each side where you could set a few different options like killing the player. I don't see any of it in my scene; how do I get that?
     
    Last edited: Jul 9, 2020
  21. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    @brittany For the projectile, I believe it's spawned from 0,0,0 of the GameObject with the Attack component. So if you select your weapon/attack prefab and drag it to the muzzle of the gun it should fire from there.

    As for the level boundaries, go to Window>Rex Engine> Rex Level Editor and it should enable the handles, and from there you can select the SceneBoundaries in your hierarchy under RexEngine>Gizmos to find the option to make the boundary a bottomless pit which kills the player.

    Here's a link to the video in question if you were having trouble finding it again -

     
    brittany likes this.
  22. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Thank you very much Bagnol! Using the "Requires Vertical Press" option on the Projectile attack, selecting the option to make it aimable, and repositioning the spawn point has given me what seems to be a great 4 way aiming implementation. I just use a different projectile attack for each direction up and down and configure accordingly. I haven't fully animated it yet but it seems to be working.

    Really without too much work I should be able to implement diagonal up and diagonal down by editing the script to add those directions to the Require Button Press setting.

    I am still having trouble with the level boundaries not showing up in the scene. When I look in the Gizmos object I see the Scene Boundaries objects but when I look at them in the inspector they are all greyed out like they are disabled or something.
     
    Bagnol likes this.
  23. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    That sounds awesome, glad to hear you're making progress!

    That'll generally be due to the Level Editor window - those Gizmos go dark if the Level Editor isn't open. While it's open they enable again and you can edit them.
     
    brittany likes this.
  24. brittany

    brittany

    Joined:
    Feb 26, 2013
    Posts:
    93
    Thank you! It is awesome :). And yes you were right about the Level Editor window. I didn't understand how that worked and that I needed to keep that window open. It's working great.
     
    Bagnol likes this.
  25. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    Uggh... sounds obvious now that you say it :rolleyes:
    But yeah, indeed, you were right. Everything works perfectly now.

    Thank you !

    So excited for this to actually work ! Being able to properly light the scenes is going to be a huge graphic update on my project!

    Taking this opportunity to share a little showcase (laggy) gif displaying some of the game's environments :D
    Can't wait to light all of these !
    AeternumValeTravel.gif
     
  26. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    Those look really cool @BorisCerdan. It's got a great diversity. I look forward to seeing more!
     
    BorisCerdan likes this.
  27. OscarLeif

    OscarLeif

    Joined:
    Jul 17, 2016
    Posts:
    68
    Rex engine development is stopped ?
     
  28. vizard00

    vizard00

    Joined:
    Feb 10, 2017
    Posts:
    13
    Hello Guys ,
    I cant make a Terrain Tilemap act as ( Pass Through Bottom )
    with the (Tilemap Collider 2D) but the (Box collider 2D) works ,

    Help please
     
  29. OscarLeif

    OscarLeif

    Joined:
    Jul 17, 2016
    Posts:
    68
    You really need to use the Tilemap Collider ?
    passThroughBottom in rex engine need to check the "Boundaries" a tilemap Collider boundaries will be really big.
     
  30. tessiof

    tessiof

    Joined:
    Dec 6, 2017
    Posts:
    25
    Making it open source would be a nice way to walk into the sunset.
     
  31. Deleted User

    Deleted User

    Guest

    Or just selling it at a heavy discount, since I know the developer must have put a LOT of work into this asset... Considering how much you get for it, I don't see why offering it for < $20 with the disclaimer that technical support will only be community-based would be a problem. That would also help set it apart from Corgi, though having used both I prefer Rex for being a lot more streamlined.
     
  32. vizard00

    vizard00

    Joined:
    Feb 10, 2017
    Posts:
    13
    I make Platfomes with Tilemap
     
  33. vizard00

    vizard00

    Joined:
    Feb 10, 2017
    Posts:
    13
    Nice parallax
     
    BorisCerdan likes this.
  34. jeremyfryc

    jeremyfryc

    Joined:
    Mar 11, 2014
    Posts:
    94
    Hello everyone! I hope you all are doing well with your RexEngine projects. I'm still actively using the engine, and I'll be posting updates on my game's Devlog about it. Feel free to check it out:



    And to answer @OscarLeif -- while the developer of RexEngine has stopped working on it, the community around it is still active as you can see. It's a wonderful asset that is flexible and easy to add on to. Many of us regularly post additions, and help each other out with issues we run into.
     
  35. PhantomFox128

    PhantomFox128

    Joined:
    May 22, 2019
    Posts:
    157
    Just a quick update: I posted before about an issue I was having regarding Rex's colliders and I'm fairly confident in saying that it was most definitely a major error on my part. Quick tip for using actors that move: make sure the colliders X Offset is set to zero, otherwise you may run into some issues!
     
    jeremyfryc and Bagnol like this.
  36. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    @jeremyfryc This video was really good, both games look awesome! I'll definitely be keeping an eye on their progress.
     
    jeremyfryc likes this.
  37. PhantomFox128

    PhantomFox128

    Joined:
    May 22, 2019
    Posts:
    157
    Real quick: it seems like the Starting Jump animation for the Jump State doesn't work as it just snaps to the overall jump animation. Is there a fix for this?
     
  38. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    @PhantomFox128 I assume the variable responsible for that was possibly meant to be made public somewhere, but as far as I can see it's hidden. If you have a look in BaseJumpState on line...345 I think, there should be a float variable set inside the JumpCoroutine called "duration" and it should be set to 0.0f by default. Try changing that to a number like 0.1f and see if it looks better. It seems by default the Starting Jump animation is technically played, but it switches to the Body phase of the jump after 0.0 seconds so...technically also isn't played. I assume it's set this way by default because Booster's Jump cycle doesn't have a Jump Starting animation. Easy enough to correct though with no coding knowledge required.
     
    PhantomFox128 likes this.
  39. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    Hey guys quick question : I'm trying to set up a melee enemy using the base Enemy Prefab, I've done my animations and AI and everything works pretty good, but I'm hitting a roadblock : I want to give my enemy a Melee Attack, so I'm just popping Rex's base Melee Attack by going through "Tools" -> "Rex" -> "Add Melee Attack". My problem is the following : the MeleeAttack prefab uses a separate sprite holder for the attack animation, animating the Attack itself, but not the player. Thing is I already have an attack animation that directly applies to the player, not an external attack sprite. I tried to play around with the sprite holders to make it that the animation plays only on my player (only adding the box collider needed without actually animating the attack itself) but I'm getting nowhere. My player sprites will just disappear and play no animations at all (no walking, no idle, etc)

    This question probably has been already answered before, but what's a simple way to look at this that I'm obviously overlooking ? :rolleyes:
     
  40. martinreimer

    martinreimer

    Joined:
    Feb 21, 2018
    Posts:
    16
    Please consider giving this tool over to the community or selling it for a

    Congrats! Please consider giving this tool to the dev community or selling it at discount with no support. I was honestly going to purchase it at the next Unity store sale.
     
    Lars-Steenhoff likes this.
  41. PhantomFox128

    PhantomFox128

    Joined:
    May 22, 2019
    Posts:
    157
    Just tried it, but unfortunately didn't seem to work. Seems like all it does at the moment is set a delay for overall jump animation.
     
  42. jeremyfryc

    jeremyfryc

    Joined:
    Mar 11, 2014
    Posts:
    94
    Good question! I don't think it's been asked directly before, so let's discuss it. I made a quick video explain how to set up the melee objects and animations. You can check it out here:

    https://www.loom.com/share/15fabcab901a459996a3b3df4e595d05

    I hope it helps! Let me know if you have any more questions.
     
    BorisCerdan, Bagnol and JRBlake like this.
  43. Bagnol

    Bagnol

    Joined:
    Sep 5, 2013
    Posts:
    169
    @PhantomFox128 Hmm that's strange. All I did was slot a random animation in the Starting Jump slot on the Jump State component and increased the duration variable in BaseJumpState and it's working fine. I'm not sure what could be the issue if it's just not playing the animation at all.
     
  44. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    Thank you so much for taking the time to do that ! That's very kind of you :)
    Indeed I was confused between the Actors animations, and the added Attack animations. Thanks for clearing that up ! Everything works as intended now ! :D

    Btw, congrats on your DevLogs and your games... they both look amazing ! Are you working full time on those ? (out of curiosity haha)
     
    jeremyfryc likes this.
  45. PhantomFox128

    PhantomFox128

    Joined:
    May 22, 2019
    Posts:
    157
    I take it back: it looks like it does play, but the actor has no delay on the actual jump, so it plays while they're ascending and depending on how fast the animation is (I think), it looks like can get cut off early. This also looks to be true for all actors as well. I had a starting jump animation for my player character that I took off for the time being, but put it back on just for this. Looks like it's doing something similar.
     
  46. ShirohelmDev

    ShirohelmDev

    Joined:
    Jun 26, 2019
    Posts:
    32
    ive started working on my game shatterheart after making pixel art for it most of the summer. However due to the end of development there are some features im really worried about implementing now, Namely a minimap, the main gimmick of my game is the player will change color based on what beam weapon they are using. Below is one of the rooms i have. Anyways perhaps we could set up a discord to collab and make more features? upload_2020-7-15_20-4-19.png upload_2020-7-15_20-5-30.png
     
  47. jeremyfryc

    jeremyfryc

    Joined:
    Mar 11, 2014
    Posts:
    94
    No problem! Haha full time? Wouldn’t that be great. No. Just something I decided to start last week and threw it together Sunday afternoon. It was fun! I have a regular full time job and making games is a great creative outlet and a fantastic way to work on projects long distance with friends!
     
    Bagnol likes this.
  48. BorisCerdan

    BorisCerdan

    Joined:
    Jun 3, 2020
    Posts:
    17
    Well your game project looks super professional, and I think the episodic concept of having an overall story told through different game genres is a dope idea ! You should try to kickstart it ;)
     
    Bagnol and jeremyfryc like this.
  49. NamraGame

    NamraGame

    Joined:
    Feb 17, 2019
    Posts:
    31
    @BeeZee aaaah! too bad :) well, I guess most of us used it to build prototype anyway, so, good luck. I'm a bit suprised you dropped your own business to go to a dream job (isn't supposed to be the opposite :p ). Anyway, cheers
     
  50. ShirohelmDev

    ShirohelmDev

    Joined:
    Jun 26, 2019
    Posts:
    32
    im gonna be frank coding isnt my strongest suit so i have full intention of making a game with this engine. There is unironically a single road block. Namely making the map.This is a phenomenal program i was just wondering if anyone here could help me implement a few features
    -if anyone wants the files one could add more to rexactor and contact damage to enable new breakables
    -a color change option connected to what attack set is in use
    -metroidvania style minimaps
    -a sort of save and load with 3 files
    -an option to prevent respawning of blockers and bosses


    thats all i can say, im making a commercial game, a metroidvania about personal growth and overcoming adversity. the art style is somewhat as simple as possible to give a sort of nes feel. I have 47 scenes done after about about around 2 weeks of level making although ive been making graphics and music all summer. These features are unironically the only ones holding me back

    upload_2020-7-17_20-23-41.png upload_2020-7-17_20-24-11.png
     
    Last edited: Jul 18, 2020