Activity

iris

Added a pause menu!

Added a simple pause menu! It took a bit of time just getting all the game’s system to properly freeze when the game is paused, especially the boss battles.


The background is darkened and blurred, and this also took a while to get working. The blur in particular was difficult to get right, i decided to use a GLSL shader to produce the effect, problem is i suck at GLSL. Fortunately i could find someone else who had implemented gaussian blur (which is a good common type of blur). It worked, but i ended up switching to another function because the blur costed like 800 FPS lol, and the new one is basically free performance wise.


i also had to fix some interactions when returning to the main menu, and to stop the player from immediately firing their gun when you press resume, but all in all everything went smoothly :3

Attachment
1

Comments

Igelkott
Igelkott 18 days ago

Looks splendidly awesome!!

iris

Small patches + optimizations

The cacti on the main menu used to be completely flat planes, and when the camera spun and you saw them from the side they looked a bit odd. Fixed by making the cacti cross shaped, like two intersecting flat planes.


I also gave enemies gravity, which hadnt been a problem until this level where theres actually a ledge for a enemy to fall off.


I also optimized one function thats used a lot in the game, especially for boss battles. Its called find_marker, and basically locates a special tile placed somewhere on the current level. Its used for me to in the level editor mark certain regions and to trigger boss battles and etc. Previously it iterated through the entire map until it found the tile, and this function was often called several times per frame. Now all the marker tiles’ locations are stored to a hashmap which leads to super fast querying and no more iterating.


Furthermore, I replace more old assets on levels with new custom assets. Replacing old “general purpose” type tiles with custom drawn assets for just that level or location I think adds a lot of detail.


I also fixed the direction you face when loading a level from a save. Previously you always faced the right, but since every other level is RTL rather than LTR, you should face the left for those levels. See attachment 2.


Lastly, I also improved the way the lasers look on one level. I drew undersides to the pipes they were attached to as well as adding hooks and centered chains for them to be carried by. See attachment 3.

Attachment
Attachment
Attachment
0
iris

Shipped this project!

Hours: 27.28
Cookies: 🍪 755
Multiplier: 27.68 cookies/hr

Created hackvertisements!!

built this entire project from scratch in Ruby with Rails!! you can login with hackclub auth, and create hackvertisements!! anyone can also add a hackvertisement embed to their website, which displays a random hackvertisements on each page load!!

if you dont want to make a hackvertisement, you can at least check out the demo video in the readme if you want to see what the process of uploading one looks like!

iris

Get actual production server running + final tweaks!

this devlog was just about fixing some final details as well as getting an actual server running (which you can access at https://hack.irispond.net/).


i updated a lot of text, added a link to the leaderboards page, made all hackvertisements have a hackclub flag in the corner that links back to the hackvertisements homepage. i also fixed some CSS of the embeds themselves.


for the server stuff, i spent most of the time in config files, getting assets to load properly and getting the encryption working. i also decided to make the leaderboard only display the host of the website, so i strip ‘https://’ and trailing ‘/’. i realised that one page was being displayed twice in the leaderboard, one for http, and one for https, and it just looks cleaner imo.


thats basically it, the server is functional (i hope), i havent shipped yet, but feel free to start creating your own hackvertisements!!! it would be great getting some feedback before the final ship, and just so that im not the only one who was uploaded hackvertisements pf

GO MAKE HACKERTSIEMENTS!!!!!

Attachment
0
iris

Dark mode support yay

wasnt really planning on adding this, i sort of like having bright and happy pages but figured i might as well after working on this website late at night and havign my retinas burned.


i also worked on other parts of the homepage, like the text contents, and fixing some overflow issues on chromium browsers. i also fixed some inconsistent borders for the embeds.


lastly, i also made error message notices show in red. previously, all notices were green, which worked for messages like “Hackvertisement successfully created!”, but felt a bit misleading on fails.

Attachment
2

Comments

Igelkott
Igelkott about 1 month ago

Looks great!!

iris
iris about 1 month ago

thanks <3

iris

Add root user and an admin panel !

for management reasons, i decided to add an admin panel! i decided the easiest way to go about this is to mark one user as an admin, or the root user. in this case i simply made it so the user with the id=1 is the root. this has the benefit of ensuring there is never more than one root user, since ids must be unique for this database.


the root user has access to the admin panel, which lists all hackvertisements and all data attributed to them. all security checks are also basically disabled for the root user, meaning you can edit and delete other user’s posts.


i also wrote a little helper script for elevating a user to root status (and moves the potential previous root user to a regular user if there is one)


project is now nearing completion (yay) or at the very least an MVP stage, so i will try looking for hosting and a domain. something like Nest would be perfect but seeing as its down i think i might use my raspberry pi. if someone has any tips, on domains or hosting, please lmk!!

Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

:yay: I want this so bad!

iris

Leaderboard :3

theres now a leaderboard which shows the pages that have displayed the most hackvertisements! yay

you can opt out of the leaderboard, but if you opt in, the iframe will use referrerpolicy="origin" and send the current websites domain root path as the referer header, which then gets logged by the servers database.


the leaderboard rn is probably really inneficient and would not do very well under load, since it is querying and writing to the database every single time a hackvertisement is loaded. i should probably use something like Redis for an in memory database, which is only periodically dumped to the actual stored database.

Attachment
Attachment
0
iris

Clean up and getting CORS working for embeds!

the first screenshot attached shows an actually embedded hackvertisement for the first time! i had to configure some more CORS stuff to get it working but now it should theoretically work even on a non localhost setup.


in the second attachment you can see some small tweaks i did to the navbar. the active tab is now underlined, and i drew icons for both the “home” and “my stuff” buttons. i also fixed a problem with popup/alert windows not displaying over everything else.


i also cleaned up some of the database, removing columns (fields/keys) that were unused. when i was making this DB i had no clue what i was doing so there were some redundant columns.

Attachment
Attachment
0
iris

Finally some much needed input validation :o

i started this task by documenting and restructuring the pile of sphagetti which was the user authentication and hackvertisements code. this is my first ever ruby on rails project, so the user authentication is quite literally the first controller i ever wrote for this language.


i added some checks for the authentication to among other things allow the server to end an authentication process early if required information is missing.


the hardest part was the hackvertisement upload authentication. first of all, i had to find a library that could parse many different file formats and get metadata like width and height. it was kinda hard to find though since all image libraries were quite large and featured image manipulation, while i only needed to read the metadata. i ended up going with “fastimage” though which works lovely!


i also had to detect animated PNGs. most people expect PNGs to be still, but they can be animated, and many programs and websites dont detect this. i would like all hackvertisements to be non-animated to not be too distracting, so i had to figure out how to detect this. i ended up finding a JS function for this, and translated it myself to Ruby, and it looks like this:

def isPngAnimated(data)
      idat_pos = data.index('IDAT')
      idat_pos != nil and data[0..idat_pos].index('acTL') != nil
end
Attachment
0
iris

Set up hackvertisement serving and embeds!!

the core functionality of hackvertisements is now finished! users can create, edit and delete hackvertisements, and users can also embed hackvertisements into their own websites!!


the embed is an iframe with its src set to the hackvertisements server. it simply displays a random entry in the hackvertisements database :3
i also did my best to make the embed work on most websites. i want it to be really easy to add without further tweaking or it breaking the website’s flow or causing overflow.


i also added a code block which you can copy which contains the required embed code. (see second attachment)


i still have a lot of work to do regarding sanitizing user input, things like enforcing the image’s width&height, enforcing that it is an image, enforcing that the url is a url, etc.

Attachment
Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

Omg will have like 5 hackvertisments on my website when this goes public! Keep up the good work!!

iris

Added deleting hackvertisements yay

*i added support for deleting your previously uploaded hackvertisements now :3
i also drew two icons, one for the edit button (a pencil icon), and one for the delete button (a trashcan).
lastly, added more user authentication so now i dont think someone else can edit/destroy someone elses hackvertisements.


NOTE: i havent actually made the uploaded file get deleted from the CDN though, its entry is only removed from the database. for some reason, the hackclub CDN doesnt have an API endpoint for deleting uploaded files. i will see if i can get around this, or potentially pull request, as this seems like an obvious feature. keep in mind the CDN server is seperate from this projects server.

Attachment
0
iris

Added styled pages for uploading and editing hackvertisements!

theres now a cool dashboard where you can see (and edit) all your uploaded hackvertisements, and where you can create new hackvertisements!

i also wrote some short instructions for creating hackvertisements, as well as hover tooltips for the two form inputs.


i also added some very basic security measures, like not allowing someone else to edit your hackvertisement, and blocking the hackvertisement controller entirely from non-logged-in users.

Attachment
Attachment
0
iris

Working on the design of the site :>

the website needs to be fun! want to make sure you have the right vibe of the project, so it cant be boring and professional.


have only finished the home page (for both when youre logged in and out), so will work on the dashboard for viewing/editing/deleting your uploaded hackvertisements and uploading new ones.

Attachment
Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

Ooo looks great, that frog in the bin is sooo cute!

iris

Added a special dev login yay

this devlog i added a python helper for directly interfacing with the database and adding a fake user. i also added a form on the main page of the website for logging in directly with a user id, so you can log in to these fake user accounts, sidestepping the hackclub auth.


this is only enabled for development servers obviously so people dont hijack eachothers accounts :3


might work on styling the website a bit next, dont want it to look professional and boring . maybe might otherwise try to finish up the main functionality of the server, i.e. also serving hackvertisements for people to embed.

Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

Cool beans!

iris

List user’s hackvertisements on homepage

you can now see your uploaded hackvertisements on the homepage/dashboard thingy! cool beans!

Attachment
2

Comments

Igelkott
Igelkott about 1 month ago

Love it!! So cool! Will def make multiple (if allowed)!

iris
iris about 1 month ago

ofc you can make multiple!!!!!

iris

Working image uploads!!!

ive now got image uploads working !! im planning to use hackclub’s CDN service for the actual image hosting, since they offer an API, but for testing i didnt want to use it to avoid sending them a bunch of bad or unnecessary requests, so i setup a local, fake CDN server. its just a flask server which offers the same endpoints as the real hackclub cdn server with the same errors and required arguments, which i can use while in development.


only logged in users can upload images and in the database the owner of a hackvertisement is stored, as well as a user’s owned hackvertisements, which i will use in the future. theres no user input validation yet, though, so thats something i have to work on. i also want to list all your hackvertisements on the homepage dashboard, and allow for editing/deletion of them.

:3

Attachment
0
iris

Added signing out and slack user data integration

You can now sign out after signing in and rather than displaying your real name you instead see your hackclub username and profile picture :>


I had to update the hackclub auth scope to get the user’s slack id and then query an API to get user data but i think its worth it as i feel a tad bit uncomfortable whenever i see my real name on apps rather than an online username

Attachment
0
iris

First devlog :3

hi! i am going to be making a cool little way of showcasing your hackclub projects! anyone can add a hackvertisement embed to their website and it will display a random hackclubber submitted hackvertisement :>


i decided to use Ruby on Rails for this since its something ive been seeing everywhere and seems fun to learn. it was not fun to learn. i spent maybe 3 hours just installing it and getting it to run. everything felt incredibly unfamiliar and i really struggled with this but did eventually sort of get a hang of it and you can now log in with your hackclub account!

Attachment
0
iris

cactus :3

added some cactuses to the main menu :)
they do look a bit strange since they are completely flat, but for now i left it like this since i think its still an improvement to having no details.


this was SO infuriating to add, again, because of the rendering library i use having extremely limited 3d support. at first, i wanted to place the cactuses by placing random points on the plane at runtime, and drawing planes there with the cactus texture. but, the rendering library doesnt allow rotations of planes, and they were lying down rather than standing upright. i could fork the library to change this, or dynamically generate meshes at runtime but it seemed like a huge hassle so i decided to do it in blender.. problem though, the depth buffer doesnt account for transparency, so the cactuses being planes with transparent regions would occlude things behind it that shouldve been visible. i ended up making the cactus meshes actually follow the shape of the texture to prevent this, having no transparent regions, which took forever to do, but alas.
cactus_block

Attachment
1

Comments

secretaditzu78
secretaditzu78 about 1 month ago

It looks cool, you could try adding some pixelated shadows to the cactus and tower, and maybe some outlines to the buttons.

iris

Added saving and player bubble on main menu

The game now saves your progress on each level complete, and on the main menu, your project is displayed with a bubble saying “YOU ARE HERE” pointing to a part of the tower. the higher you climb / the further you get in the game, the higher this bubble will be pointing at.

Attachment
0
iris

Added UI to main menu :3

The main menu actually has a menu now! I show the game’s logo and two buttons, one for playing and one for accessing options (that I have not yet implemented though). You can also navigate the buttons with a controller yay


I also noticed the 3D background scene didnt render on web builds which i fixed by changing how it was rendered. Previously I rendered the scene to a purposefully low-resolution texture to pixelate it a bit and make it fit in better, but this didnt seem to work for WebGL so I instead render it directly to the screen. This does though mean i lose that pixelated effect which is unfortunate but I havent figured out another way to solve this for now.


Also noticed the game didnt work at all on google chrome, only firefox, which was due to the gamepad api plugin. I just had to add a null check for it though so was a quick fix.


Might add the options menu next, or maybe add saving and loading?

Attachment
1

Comments

secretaditzu78
secretaditzu78 about 1 month ago

Lookin sick! :)

iris

Created a 3D version of the tower for the game’s main menu

I thought it would be cool to have a 3D represensation of the tower showing on the main menu, sort of like Celeste does. I created the scene in blender with the tower and surrounding ground.

But my gosh was it ever difficult to get it rendering in my project. The rendering library I use does support limited 3D rendering which is what I used, but no way to load 3D models, or even to position or rotate the object-when you render a mesh it will always be at 0,0,0, you have to move the camera.


I used the .obj 3D format since it is pretty easy to comprehend, and since the way it structures data seemed similar to what the rendering engine wanted. It took me several hours, but I did eventually get it working! The hardest part was getting the UVs also working but I got there in the end :)


I also made the camera orbit around the tower. I havent done the actual main menu part yet, i.e. the UI like the logo, buttons, etc, but i had to get this out of the way first.

Attachment
2

Comments

secretaditzu78
secretaditzu78 about 1 month ago

Woahh! Cool!

Igelkott
Igelkott about 1 month ago

That looks fantastic, such a great idea!!!

iris

Add clouds !!

I’ve been wanting to add clouds to the sky of my game for like ages but struggled with the implementation. I had previously tried creating an overly complex system for handling them which just ended up with me achieving nothing but having 6 different git stashes.


Now I just decided to simplify it a lot and got it working really easily :)

I also made it so that he higher you climb in the tower the more spare the clouds get.

Attachment
0
iris

Added a small intro to the game

Previously, you spawned outside the tower and simply wandered in to the first level through an open wall. Now, instead, i put a large gate there, that you enter, at which point the screen fades to black and the game’s title is displayed, before fading back out and loading the first actual level.


The code to do this is some REAL sphagetti code as it is sort of handled in a weird special hook in the game’s master loop and reuses and repurposes some variables related to level completing. Its rough, but i’ll never have to touch this code again (HOPEFULLY prayer )

Attachment
2

Comments

Igelkott
Igelkott about 1 month ago

Cute!

secretaditzu78
secretaditzu78 about 1 month ago

Nice ! :]

iris

Slopes and bug fixes! :>

This devlog I worked on fixing minor bugs that had been bugging me (no pun intended) for a long time.


Lasers had since their introduction been killable by the player, since all enemies were killable, and the laser shooters were implemented as enemies.


Previously you would also not die if you walked into a “death tile” from the side, only if you landed on it. This didnt apply for most levels, but on some you could accidentally do this which obviously looks really odd.


Finally, I thought it’d look good if the decorative stairs by the arena at the first boss battle would actually work as stairs. I Implemented a system for my level editor to add slopes, so you now slide diagonally up those stairs! yay

Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

ooooo those stair look really cool, another idea I maybe will be yoinking hehe… at this rate my game is just gonna be a cowboy tower demake

iris

Worked on level aesthetics and consistent design!

(i hope compression doesnt entirely ruin this attachment)

This devlog i focused on cleaning up some old levels with inconsistent design and creating new assets for levels, to move away from sort of “general” assets that i overused.


comp1
Firstly, something that has been bugging me for so long is that, at the first boss battle of the game, the floor is wrong. The level is part of the first world but uses the second world’s floor asset. I also drew a little stair up to the arena to highlight the elevation change.


comp2
On several levels, i had used stacked barrels or stone tiles, which look really odd, and should instead just use a single larger object. I replaced all instances of this, and drew some new assets when needed.


comp3
One other thing i changed was that all levels used the same chandelier everywhere. Especially for the second world, that is supposed to be sort of industrial, this looked really weird so I drew new lighting sources specifically for the second level, a light bulb thing and a mini lava pipe.

Attachment
1

Comments

Igelkott
Igelkott about 1 month ago

Looks splendid!

iris

Added level editing tool to fine-tune camera behaviour

I can now from the level editor adjust the camera’s offset! This is useful for sections in levels where you are moving up / down, and you need to see where you are going. This is done in the level editor with invisible special tiles, but that ive made visible for the devlog to explain.


The camera offsetting tiles utilise the special number tiles that i had created a long time ago for specifying enemies’ attack delays. I had purposefully made that number tile system modular to make future level editing tools like this easier to implement, which really payed off now :>

Attachment
3

Comments

Igelkott
Igelkott 2 months ago

That camera looks really good! I might take some… let’s say inspiration from it muhahahah

sl4shed
sl4shed 2 months ago

this is really cool, altho maybe you could replace this camera control system with something more automatic. i remember making a geometry dash clone where i just had like the camera try to have the player centered at all times but it was kinda smoothed, i think this is kinda like what you’re trying to accomplish here.
i just had like a buffer zone where the player could move and once the player touched a certain area in the top part of the screen the camera would slowly move up/down depending on where the player was

iris
iris 2 months ago

oh, sl4shed, that is exactly how it works, this is just an addition to that system! the camera already has a system that tries to center the player (with a buffer zone), but this system is only reactionary, and sometimes i need to proactively move the camera upwards by some offset, like when youre travelling upwards and i want the player to see where youre going

iris

New level + experimental bloom!

Created a new level focused heavily around wall climbing mechanics. This level, like the previous one I worked on, really sort of pushed the limits of the level engine, so I had to fix a lot of bugs to get it working properly, most regarding the level transition animation.


I also decided to try experimenting with screen-space effects like bloom! (it might be hard to see on the screenshot because of compression)

bloom showcase

I’m not sure how I want to use the effect so currently you can only enable it through a command-line argument. It is a bit overwhelming sometimes, and it cant actually know what is “bright”, and just goes off color, but this can have problems with non-bright white objects, like skeletons, appearing like theyre glowing which looks odd. I’m thinking it could fit in at the third world which is a bit dark and gloomy, but i’m also considering working on a system to only selectively apply bloom to specific objects, like lanterns and chandeliers.


I just really want the game to look polished, and I think experimenting with screen-space effects like bloom, color correction, vignette, etc, could be good ways to get that final bit of polish.

Attachment
1

Comments

Giovanni Nodal -  Hackclub ZRL Santa Meet and Greet Coordinator

digging the lighting. keep on working! this game has a whole lot of potential.

iris

New level and bug fixes

Added a new level utilising the new fog :)


Though i had to fix a lot of bugs for the new level, one thing was lasso hooks being placed next to an enemy path causing a crash on launch. Basically, the enemy path is an invisible part of the map that decides a path that some enemies can move along (like the bats). The problem however was that it thought the lasso target was an enemy and tried to set that enemy’s path.


The new level also needed a way for me to stop projectiles at a specific place, so i also made the projectile-barrier special tile. It also is an invisible special tile that only projectiles collide with.


I also worked on a system of sort of dynamic lighting but I had to stash those changes and will perhaps pick that up later.

Attachment
2

Comments

secretaditzu78
secretaditzu78 2 months ago

UUU coool!

iris
iris 2 months ago

tysm !

iris

Added spooky fog =)

Basically, when failing to add clouds to the background, i accidentally created fog and decided it looked really cool and made it so i can paint fog to levels!
I created this effect because i wanted to debug why the clouds werent behaving properly, and made it so the clouds rendered over everything else, and i turned up their density super high, and made them only have 2% opacity. This coincidentally looked a lot like fog. So the fog actually consists of these semi-transparent cloud textures, see the second attachment.


I think it looks really cool and fits into the spooky theme of the third world. (but im also open to suggestions!!!)


note: i still havent gotten clouds working lmao

Attachment
Attachment
2

Comments

Igelkott
Igelkott 2 months ago

Fits the theme wonderfully! Looks very intriguing and spooky!

secretaditzu78
secretaditzu78 2 months ago

Nice details!

iris

Added raycasts for lasso swinging

You can only perform a lasso swing now if you actually have a line of sight to the hook/target. Previously you could actually target a hook on the other side of a wall and swing from it which looked really buggy, though this only was a problem on one level that I know of. I implemented a simple raycast that solves this though!

Attachment
1

Comments

Igelkott
Igelkott 2 months ago

Cool !

iris

Made laso-swinging possible by holding the JUMP button while mid-air

Previously, you could only lasso with a dedicated lasso button. I’ve now added that you can hold jump again while mid-air to perform a swing. This feels a lot more natural on controller in my opinion.
I hope the attachment makes sense

Attachment
1

Comments

hack.clubber
hack.clubber 2 months ago

That’s super cool

iris

Shipped this project!

Hours: 22.06
Cookies: 🍪 525
Multiplier: 23.79 cookies/hr

Shipped !!

this is my personal website ive been working on!!


this ship i have added a windows 98 inspired projects page (with draggable windows), a microblog, a clippy inspired frog guy in the corner that you can chat with, a fully working minesweeper clone, a cozy little pond, a somewhat sophisticated build script to generate parts of the site, and more !

ive also joined two webrings!

really happy with how everything turned out!

iris

Add a cozy little pond !

theres now a little pond site! theres a couple of different creatures and you can change the weather and time of day.
it also tracks how long youve spent at the pond which is also saved to local storage. you can see total time spent in the bottom left corner.

pond
(press me^)

Attachment
4

Comments

Igelkott
Igelkott 2 months ago

Woah that pond is so cute !!! I love the rain and day/night effect, this is what web development should be!

iris
iris 2 months ago

thanks igelkott !!!

yefoi
yefoi 2 months ago

probably the most personal project ive seen in a while, huge break from the 3 vibe coded slop projects i had to vote on earlier <3

iris
iris 2 months ago

woaw!! thank you so much !! thats so nice <3

iris

Joined the No-AI webring :>

this is a really active webring that i see everywhere and ive always wanted to join, and now i have! this site is now part of the two webrings, the no-ai webring, and hackclub’s own “pages” webring.
Also added some new buttons to the site’s button collection

Gave froggy more braincells

Gave froggy some new responses and knowledge. froggy is still reeally stupid but i think its fun to perpetually add more and more knowledge to it.

Attachment
Attachment
0
iris

1. Removed .html from all links on the published website

so links that previously went to …/projects.html now would go to …/projects. this is done by the build script though, so its only applied on the published website, and viewing the site locally still uses .html and therefore still works.

2. Set up github actions!

previously, the build script was ran on my local machine which built the site and published the results to the specific github pages branch. now however, i have a github action that does it instead (on github’s servers), that i can run by pressing a button

Attachment
0
iris

Added FROGGY!!!

i added a clippy-like little frog in the corner of the main page! you can press it to chat with it. it uses a simple javascript algorithm to respond, both recognizing phrases, and recognizing sentence structure like if the user is asking for its opinion on something, tied to a small knowdledge bank of opinions and facts.


really quite simple but i think its charming ! froggy ftw

Attachment
4

Comments

Igelkott
Igelkott 2 months ago

OMG such a cute frog! If i could have any animal in the world, i’d chose froggy! Well done!

iris
iris 2 months ago

thanks <3 ! (you sure you wouldnt pick a hedgehog?)

katopirat
katopirat 2 months ago

How to make the big text and line in devlog

iris
iris 2 months ago

markdown! begin a line with a Hash sign (followed by a space) to make it a header! use triple hash sign on an empty line to make horizontal line. i recommend using an extension like Flavortown Utils or Spicetown to allow a rich text editor

iris

Improved BEANS screensaver

made the DVD screensaver thingy only change color when it bounces, like the real deal! the previous version of this was just a gif, where the logo changed color every second or so. this old version is still whats shown if you dont have JavaScript enabled, but this new version uses JS to change the hue of the logo on each bounce.

Attachment
3

Comments

ExcitedAdom
ExcitedAdom 2 months ago

Wow!

Igelkott
Igelkott 2 months ago

Cool beans!

iris
iris 2 months ago

thanks !!

iris

Added playable minesweeper!!

for funsies i added an entire playable game of minesweeper at the bottom of the main page! i really like minesweeper and this isnt the first time ive written an implementation of it :>


check it out !

Attachment
2

Comments

chefpenguino
chefpenguino 2 months ago

really cool project! i love the design of ur site, its so silly & cute 😭

iris
iris 2 months ago

!! tysm!! glad you like it :>

iris

Styled text at projects page to look win98-y

previously, only the project cards themselves were styled like this but i figured i might as well do the effect for the full page. i had to rework several parts of the drag window code since windows can now vary in size, but i got it working fast enough.
i also fixed support when dragging a window and scrolling at the same time, previously the window stayed at the same spot but now it perfectly follows.


i think it looks lovely! for the next devlog, im considering perhaps writing a minesweeper game to put on the main page because i really like minesweeper, but not sure.

Attachment
2

Comments

Igelkott
Igelkott 2 months ago

Lovely indeed! Your own peronally styled minesweeper sounds fun af

iris
iris 2 months ago

thanks! :yay:

iris

Display projects in windows 98 style !??

made project cards be themed like windows on windows 98 and draggable!


the most of the time was spent on the code for making them draggable, since i need the elements structure to stay the same even when you drag one of them, and to prevent overflow when dragging a card off-screen.
i solved this by having a position=absolute div that fills the entire body, that has overflow=hidden, that dragged cards are moved to. their active position is also noted and used as an offset for dragging. because this would ordinarily cause all other cards to shift, i also add a “ghost”-card (with visibilty=hidden) to fill its space on the main div.


i think it works really well, but there may be some bugs still that i havent found

Attachment
1

Comments

Igelkott
Igelkott 2 months ago

Awesome sauce!

iris

Added emoji support to my website!!

i need to be able to write :yay: and have the yay emoji render, regardless of where i am- so i decided to add it to my website so i can freely :yay: where i so please!! this is also handled by the build.py script, since i didnt want this being ran by the frontend since it doesnt have to be.

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

:yay: That’s an awesome feature!

iris
iris 2 months ago

thanks !!

iris

Add microblog!

i moved the DVD screensaver thingy to a new block to make space for a little microblog ! its going to be really simple, short messages or status updates that i post there. pretty cool!!


next up: i kind of want to add support for (some) slack emojis on my website, so i could type ։yay։ and have the build.py script replace it with an inline img of the :yay: emoji

Attachment
1

Comments

aloyak
aloyak 3 months ago

I like the asthenic, ur cooking bro!

iris

Made projects grow on hover

I made them smaller by default but sort of grow when hovered to make them a bit more fun i think

Added custom link buttons

Again, this was just for fun, and to make the links stand out. I have many links on my website to other websites, but these navigation links i wanted to be visibly distinct, so therefore i drew these buttons (visible in the gif, ‘projects’ and ‘home’).

Added DVD screensaver thingy

Ever since moving projects to its own dedicated page, ive had this unused block on the main site. For now i just slapped a knockoff dvd screensaver there. Did you know that that screensaver thingy can be done with just pure HTML? Checkout the element

Attachment
Attachment
0
iris

Added dedicated projects page!

Previously, I didnt have a dedicated page for all my projects and you could only scroll through a carousel of the games ive made. Now i have a page where you can see all my projects spread out, both videogames and non-videogame projects.
The games are scraped from my itch.io page by the build script mentioned in last devlog!

Attachment
0
iris

Worked on a build script that scrapes my itch.io and compiles it into an HTML file that is rendered through an iframe on the main page. The reason I chose to do it like this is because I want my site to be completely static so that:
A) it is easily hostable with github pages
B) anyone can use the website, even without Javascript enabled
I also joined the Hackclub “page” webring!!

Attachment
Attachment
0
iris

Added spawn region outside the tower

Now on the first level of the game, you actually spawn outside the tower in a little deserty environment. The entire rest of the game still takes place inside the tower but i just thought this would be a nice little touch !


It was kind of rough to add, seeing as a lot of code uses the horizontal boundaries of the level, for things like drawing the rest of the tower and for camera bounds and transitions, and this level would now need an exception to that, seeing as its boundaries are not the same as the tower’s.


I struggled a lot with the blend between the tower and the ground, and some minor details of how it should look, and im still not sure whether im happy with it yet or if im going to revisit it later, but i think it looks good enough for now.

Attachment
2

Comments

secretaditzu78
secretaditzu78 3 months ago

Uuu, Nice!

iris
iris 3 months ago

thanks!

iris

Added controller/gamepad support!

I figured this game could work really well on a controller so decided I would try implementing support for it. Thankfully, finding a Rust crate that could handle interfacing with the hardware, wasnt particularly hard. The problem, however, was getting it to work. I could get it to work on local builds, but when compiling for web (which is how the game will be released), it wouldnt detect my controller.


This was odd as i know the JS gamepad api should be able to detect it. I dug into the plugin code for the crate, i.e. the part that interfaces with the browser, and realised it was skipping my controller, as it had a non-standard mapping. I simply removed this check and everything works great!


also how do you like my knockoff snes controller?

Attachment
2

Comments

sl4shed
sl4shed 3 months ago

what do you use to build your game for the web with rust? i was wondering if something like emscripten exists for rust the other day

iris
iris 3 months ago

rust can build for WASM natively, and the graphics library i use has full support for it! you just need a bit of boilerplate html and JS, then load the .wasm file !!

iris

Three levels + web support

This devlog I worked on three levels, one of them was new. I redesigned one of the first levels in the game, to have a unique theme! Previously, it had just reused some generic assets from the first world, but now it has a sort of old western bar theme with unique tiles. The two other levels were on the last world.


I also set up web builds! (see attachment 2). I’ve made web playable games with rust before so i expected it to be really straightforward, but I ran in to some issues, mostly because of the shader i had written for the sky, which had some incompatability issues.

Attachment
Attachment
2

Comments

secretaditzu78
secretaditzu78 3 months ago

looks cool but you should add shadows to objects

iris
iris 3 months ago

oooo good idea ill try that later

iris

Wall Climbing!

I added wall climbing! Some surfaces on the third world are now marked with white and can be climbed on and jump from to perform a wall jump! I want each world to have unique appearences, enemies, and movement mechanics, and this is a movement mechanic unique to the third (and final) world.

I also drew a bunch of assets and whatnots!

Attachment
4

Comments

Igelkott
Igelkott 3 months ago

Those paintings and candle holders look soooo good! And another fun movement mechanic? I’m, so excited to play this!

iris
iris 3 months ago

yipee!! thanks!

secretaditzu78
secretaditzu78 3 months ago

woww, that is cool

iris
iris 3 months ago

thanks !!!

iris

Made enemies fade out upon death as suggested by secretaditzu78! I’m not sure how well you can see it in the GIF, but i think it adds a bit of polish!


I kind of want to work on the sky again and add clouds! I also want the very first floor to be on the ground, and i imagine you wont actually spawn inside the tower, and rather outside it in a desert-y environment, and youll walk in to the first level. So i might work on this next!

Attachment
3

Comments

secretaditzu78
secretaditzu78 3 months ago

Woow! NICE

Igelkott
Igelkott 3 months ago

That looks so good, love the skeletons!

iris
iris 3 months ago

ty :D

iris

Previously enemy spawners only spawned based on player proximity, which made it impossible to sync several enemies spawning at once. Now I also added a new level design tool, the trigger-based-spawner! It allows me to draw a trigger zone, which when the player enters, will make enemies with spawners tied to that trigger spawn. The spawners and triggers are colour coded, so I can create different groups.

Attachment
0
iris

Created skeletons that arise from tombstones!


Previously, all enemies in the current level were immediately loaded, but now i can create enemies like these that dont “activate” until the player gets close enough.


Something I still have to do is to maybe add a way of syncing the spawning of multiple enemies? As you can see in the video, the three skeletons all start emerging at different points in time, as i move closer. I would need some way to sync multiple enemies to make them all trigger at once.

Attachment
2

Comments

secretaditzu78
secretaditzu78 3 months ago

Sick! Tip: use a goast effect when a skeleton dies, so it did not disappear like magic, it will make a difference. GL!

iris
iris 3 months ago

oooo!! good idea! will try that out!

iris

I added a gradient for the sky! Instead of being a solid blue color, it instead gets darker the higher and higher you climb !!

The sky is now a GLSL shader, and i wrote a simple gradient function that allows me to enter arbitrary RGB steps. Making the shader took me quite a bit, but it was made easier by using shadertoy, which allowed me to see the changes in realtime. I also had to make sure the sky you see through windows also followed this gradient, previously the windows just had blue colored pixels.

I also drew more assets for the third world, mostly different furniture. I took some inspiration from old antique victorian era kind of furniture, as i want it to feel kind of old and creepy i guess?

I also added BLOOD that you die in!

Attachment
Attachment
0
iris

This devlog i worked on correcting player mistakes. I added:

  • Coyote Time
  • Jump buffering
  • Horse mount buffering

I realised that some levels were really infuriating because you had to perfectly time mounting a horse while in mid-air, and if you pressed space a few frames too early before being in range of the horse, it wouldnt work and you would die. I decided to add a few frames of leeway, such that mounting is instead active over a span of a few frames.
Following that, i decided to add the same thing for jumping. When you are just about to land, and want to immediately jump again as soon as you land, it can be really hard to time that second jump. Now, if you press space a few frames before landing, it will still issue that jump when you touch the ground.
I also added “coyote time”, which basically means that for a few frames after walking off a ledge, you can still jump. When you are trying to jump as long as possible, you’ll want to press space at the very last moment, and timing this can also be really frustrating and the jump is often failed, so this also adds a bit of parkouring leeway.

Attachment
1

Comments

Igelkott
Igelkott 3 months ago

Sounds neat!

iris

Added a new enemy movement type that follows a predetermined path! In the attached gif you can see bats flying along two seperate paths. The green and red markings are obviously just debug information and wont be present in the actual game, but i think it illustrates pretty well how this works.


I made it so the level itself, on load, finds all these path-loops, and links all adjacent enemies to it. This is what took most of the time of the devlog. I also had to work out how to get the loops to always be stored in clockwise order, but thankfully it was easy enough.


You can see in the second attachment exactly how i create these in my level editor. I have a special layer for adding things like enemies, but now on that layer i can also paint these paths.


Next, i’m kind of interested in making the outside sky color change, the higher you get in the tower, and to add things like clouds perhaps?

Attachment
Attachment
0
iris

This devlog I worked on making each world somewhat visually distinct. Previously this was only done within the level design, while the exterior tower background and elevator design remained constant, but now these are all custom for each world :>


This actually took SOOO long to get working, see, when you move to the next level, the camera doesnt actually move up a floor, and rather the camera position stays pretty much at the same XY-coordinates relative to the current level. So what i needed to do is track what your actual “climb-height” is, i.e. how far up you have moved. This is so i can properly know what the color exterior of the tower should have at any given place. This also makes it possible for me to ex. make the sky get darker along a gradient, the higher you climb, or add clouds that get more frequent the further up you get.


I also drew some assets for the third world of the game! See the second attachment for what I have so far. I want this world to be a bit grim and maybe spooky?


Will work on enemies for this new world now!

Attachment
Attachment
2

Comments

Igelkott
Igelkott 3 months ago

Pretty goddamn nice looking windows gotta say!

iris
iris 3 months ago

thanks!

iris

Added badges that you get for defeating bosses! I think it looks pretty good and it gives some visual progress to the game :>

note: it currently shows three badge-slots though ive only made two bosses/worlds thus far, but i’m aiming to have at least three.

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

Badges look so clean imho!

iris
iris 3 months ago

thanks igelkott!

iris

Added Fireking boss for the second world! He has two different attack phases, and he’s only damageable for one of them. I really liked the way he turned out and the arena itself. This boss fight is what the majority of the time of this devlog was spent on.


I also created two new levels for the second world itself, and made a system for setting a specific spawn and end position for a level. Previously the game itself just figured this out at runtime, but for many levels i want more control over this. Implementing it properly took quite a bit of time to do since ive hardcoded the old spawn point system at so many places in the codebase, but i think it works now.


I improved horses a bit too, making them easier to mount while upside down, and made the camera smoothly lerp to the new position when mounting, as opposed to the abrupt teleport which is how it was earlier.

Attachment
Attachment
1

Comments

mrsiuuuu_x1
mrsiuuuu_x1 3 months ago

Wow!

iris

I worked a lot on the visuals of the boss battle (see the second attachment), i made the dialogue UI smoothly glide in, and i added cinematic bars that appear during the boss fight. I also added dust effects when he lands. Other than that, i also added decorative piles of barrels, so when he throws barrels at the player, he is no longer just pullign them out of thin air.


I also improved the lasso visuals, made it connect to the actual ring, rather than the centre of it, and change the texture of the hook when the lasso connects, to show the lasso wrapped around it.


I also decided to sort levels in to different “worlds”. I dont really want to call it worlds as its all in a single tower, but they just correspond to different visual themes of levels with different relevant mechanics, like the second world has machinery, pipes and lava, and introduces the horse mechanic and lasers.
I want each world to end with a boss battle, and the boss i previously made is now the boss for the first world.


I also spent roughly 2 hours debugging some visual bugs that i only got on Windows. On my linux laptop which i have been developing the game thus far, everything looked good. But on this windows computer, there were flashing at the edges of some tiles, there was a gap between the player’s torso and legs, and pixels werent pixel-perfect. I havent really fixed the root of the issues, but at least i fixed the symptoms of it, so i think its fine?

Attachment
Attachment
1

Comments

Igelkott
Igelkott 3 months ago

I think different worlds is a great idea! So when the player thinks there will never be anything close to as cool as the lasso, you hit them with the omnidirectional horse! And you have in that moment secured yourself a 30x modifier, good on you!

iris

Added a boss battle! The boss has two different attack phases, and you need to shoot him 16 times to kill him. He also has a line of dialogue that he says the first time you fight him. To add support for bosses, I chose to create a Boss trait in my Rust code. All bosses will implement this trait. The trait itself is really simple, just a single update function that receives mutable references to the entire game state.


The reason i chose to make it like this is because all bosses i want to add will have practically nothing in common with eachother, aside from perhaps a position property, but even thats debatable. By just having a trait, it means all bosses have their own struct, their own unique properties and their unique code. Them also having access to the entire game state means the entire boss fight itself can also be managed by the boss, things like raising barriers to trap the player on the arena, or showing particle effects. Everything about bosses is very flexible, is what i’m trying to say.


I spent a lot of the time on the animations itself, and i think he looks alright. A lot of the other time was also refactoring old enemy and projectile code. I also updated the laser beam animation and gave a minor visual overhaul to two levels.


Thats about it!

Attachment
3

Comments

btz
btz 3 months ago

looks cool!

iris
iris 3 months ago

thanks!

Igelkott
Igelkott 3 months ago

This boss fight looks capital S aweSome! The boss look so good and all the moves look like they came out of professional made game! This game couldn’t have turned out cooler!

iris

Added transition between levels! Previously it would just cut to the new level which looked a bit abrupt, and there was no way for the player to realistically know that they had traveled up a floor by the elevator, as you just kind of teleported to another elevator.
This took quite some time to get working right and I had to restructure some code which is why this kind of minor feature took so long to implement. I also had to bother with drawing the entire previous level during the transition when both floors were visible at the same time.

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

Looks good!

iris
iris 3 months ago

ty <3

iris

Added LASERS!! I can place laser cannons around the map that fire a laser ray every couple seconds. I think theyre really fun! I also added a new death animation for lasers (see video attachment 2). I also made a new system for my level editor where i can mark the delay of enemies (including laser cannons) which took a really long time to implement but now allows me finer control over enemy behaviour.


I also made horses omnidirectional (vid #3). They can be placed as such to climb walls, or even walk in the ceiling! I think thats really fun :>

I also made horses return to their spawn point after having being ridden, to prevent soft locks on some levels. I can however in my level editor mark a “no return” zone, where the horse will not return to its origin while the player is inside, because on some levels i’ll want them to stay by the player to for instance boost the player to a higher platform.


I also made a new level utilizing vertical horses and lasers, and as usual ill continue working on more levels!

Attachment
3

Comments

regonold520
regonold520 3 months ago

I really love the artstyle of this project

iris
iris 3 months ago

tysm!! glad you like it

Igelkott
Igelkott 3 months ago

Woah those animations look sick, my favorite is probably the laser death animation, so clean! And omnidirectional horses, sounds amazing for some vertical level design combined with those cool lasers, so excited to see where this goes!

iris

This devlog i added support for animated tiles which i used to create lava, a fun new way to die! I also added support for different death animations based on death cause ,which looks really good. I also added a new jump animation thats really silly and i love it!


I also added HORSES! Horses stand idle until the player mounts them, at which point they start running, uncontrollable by the player. They can walk on lava (OBVIOUSLY), and when you dismount a horse you also gain a bit of height which can be used to jump higher. Both of these aspects will be utilized in level design .


I’ll keep working on new levels next!

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

I may be a sucker for horses, but that my friend is one heck of a horse! I’m genuinely so excited to play this game and try out the horse and lasso mechanic, it looks so fun! Different animations for different death causes sounds quite fun as well, you gotta be careful so noone steals that…

iris
iris 3 months ago

thanks a lot!!! if you steal my idea of different death animations based on death cause i will SUE!!! (i definetily didnt steal the idea of animated tiles from your last devlog (shh))

iris

I added a new enemy that throws dynamite which explodes in a ball of fire !! i really like the way it turned out, and adding this enemy forced me to rework the projectile system to make it a lot more flexible which means i have more flexibility in the future to add cool stuff!


I also changed the ways level progress, since at the end of a level, there is an elevator that takes you to the next floor of the tower, and previously you would always be reset to the left wall of the tower, but now i made it so the next level will always start at the side of the tower that the last level ended on. It’s somewhat hard to explain but i hope the picture makes more sense.

Next I reckon i’ll keep working on pumping out more levels.

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

Woah that dynamite thrower and explosion looks sick! Really impressive the way you manage to stick to the artstyle!

iris
iris 3 months ago

thanks !!

iris

This devlog ive worked on levels! I first and foremost added an elevator at the end of every level that takes you to the next level. I also added spikes which kill you, as well as a new bandit (that also does kill you).
I’ve also decorated the levels a fair bit, added windows and chandeliers and more props. I also added tooltips to the first level that show you the controls, like LMB to shoot and RMB to lasso swing.

Attachment
1

Comments

Igelkott
Igelkott 3 months ago

Woah all that in 3 hours! Love the chaindelier!

iris

Added swinging with a lasso! I can now place hooks like the one you see in the attachment below that the player can swing from. The most of the time of this devlog was spent on the physics for the swinging and the exact implementation details of how it should work, making it easier to use and more arcade-like rather than perfectly realistic.
I also added dying and restarting the current level when you die.
Next I think I’ll work on creating actual levels! Maybe adding more enemies, too

Attachment
2

Comments

Igelkott
Igelkott 3 months ago

What a fun mechanic! The implementation looks so smooth as well, well done! Looking forward to seeing what awesome levels you can come up with utilizing this!

iris
iris 3 months ago

thanks thats so nice!! I’m glad you think the implementation looks good, as the bulk of the time spent was just adjusting the physics back and forth to make it smooth. thanks mr igelkott!

iris

Added enemies and firing projectiles! The enemies cant currently fight back and just randomly move left and right. I made the player animation be split in to two animations, one for the torso and one for the legs. This makes it possible to show ex. a shooting animation independently of the legs’ animation.
Will work on making enemies shoot back at you!

Attachment
0
iris

Added player and physics! I could reuse the physics calculation code from old projects, otherwise this wouldve taken like five hours. In Tiled, the tilemap editor I use, i have one specific layer be the “collision” layer, which is the one that the player collides with. The rest are just background or details.
Since this is supposed to be a tower, I made it draw the sides of the building at the horizontal edges of the level, and draw a solid dark color above and below it, which is supposed to be the outside of the building / other floors of the tower.
Anyways, will work on maybe adding enemies or more complex levels next?

Attachment
0
iris

Ive set up level loading from Tiled! Tiled is a tilemap editor software, and ive now added support to load their fileformat to level data in my project. The entire level is also statically rendered to a texture, so when i draw the level each frame, rather than drawing each tile individually, it just draws the rendered texture.
Will work on player (movement) next!

Attachment
0
iris

Initial commit! I set up the bare minimum for loading assets and rendering a little character to the screen! I am using RUST with macroquad as my game engine, ive used it a lot before and i reallllyyyy like it!! The assets i actually load directly from aseprite project files, this is something i learnt some time ago, and it saves SO MUCH time! I can even directly reference specific animation tags! I have learnt alot from my previous games and this is one of the most useful things i started implementing for all my games.

The game will be an action platformer with a cowboy theme or something. thanks for reading <3

Attachment
0