TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #6884: Memory's GBA Ninja Five-O in 16:06.98

Console: Game Boy Advance
Game name: Ninja Five-O
Game version: USA
ROM filename: Ninja Five-O (USA).gba
Branch:
Emulator: Bizhawk 2.4.2
Movie length: 16:06.98
FrameCount: 57755
Re-record count: 228386
Author's real name:
Author's nickname: Memory
Submitter: Memory
Submitted at: 2020-09-21 20:00:22
Text last edited at: 2020-09-29 11:37:52
Text last edited by: fsvgm777
Download: Download (43498 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
Ninja Five-O aka Ninja Cop aka Ninja Bastard is a gba video game by Konami.


(Link to video)

Game objectives

  • Emulator used: Bizhawk 2.4.2 - mGBA core
  • Forgoes time-saving damage
  • Memory what the heck, you always take damage to save time

Comments

I started considering this game when Jules mentioned in discord that Cardboard had an improvement wip. While I started this project without a very in depth understanding of the mechanics, I left it with a much greater understanding than what was had before.

Tricks and mechanics

  • If you shoot out the grappling hook prior to landing on the ground, you will cancel any landing animations.
  • The throwing animation can be cancelled by jumping out of a grapple state.
  • Upon pressing up in front of a door, you walk to the center before entering. If you're already at the center, you won't have to walk as far. Therefore it's typically faster to use faster movement to get the center of the door before you hit up.
  • Holding the opposite direction when you're grappling will slow you down, causing your jump speed to decrease when you jump off the grappling hook. This is often used to get the maximum distance when doing the next hook by decreasing height.
  • Jump slashing can sort of freeze your vertical speed, allowing for higher jumps. Alternatively if the goal is to fall fast, you typically want to delay your jump slash such that you just barely have time to shoot out a grapple to cancel the landing animation.
  • If you hit an enemy with a spin slash and then a shuriken hits the enemy, the sword will hit the enemy again one frame later. If you do this with two shurikens, they need to spaced two frames apart.
  • Crouch collision maintenance: If you slide or crawl off a ledge, you keep the vertical collision box of your crouch state for a couple frames until you fall below a certain amount. If you prevent falling below that amount by grappling, you can keep that box and use it to squeeze into 1 tile high tunnels without doing an incredibly slow animation. This can also allow for clips.

Stage by stage comments

Table of time comparisons

Note for sake of simplicity I removed all lag frames from the calculations. VBA has more lag during gameplay but less during loading screens. My timing either starts when the Stage text goes off-screen or when the screen is fully visible. My timing ends either when the screen is totally black or the Stage end appears, with the exception of the very last stage where I end on last input. Positive numbers are frames saved and negative numbers are frames lost.

Screen Publication Cardboard's WIP
Bank 1-1 4 1
Bank 1-2 9 3
Bank 1-3 4 1
Bank 2-1 3 2
Bank 2-2 1 1
Bank 2-3 26 15
Bank 2-4 3 1
Bank 2-5 3 0
Bank 2-6 4 3
Bank 2-7 1 1
Bank 3-1 32 25
Bank 3-2 7 -1
Bank 3-3 12 0
Bank 3-4 10 4
Bank 3-5 14 13
Bank 3-6 17 -6
Bank 3-7 4 2
Bank 4 7 1
Ware 1-1 11 6
Ware 1-2 33 2
Ware 1-3 13 10
Ware 1-4 5 0
Ware 1-5 16 9
Ware 1-6 22 0
Ware 1-7 6 6
Ware 1-8 18 2
Ware 1-9 2 2
Ware 1-10 1 1
Ware 1-11 6 3
Ware 2-1 11 10
Ware 2-2 4 2
Ware 2-3 20 6
Ware 2-4 4 1
Ware 2-5 24 15
Ware 2-6 0 0
Ware 2-7 6 6
Ware 3-1 5 4
Ware 3-2 3 3
Ware 3-3 10 9
Ware 3-4 19 7
Ware 3-5 13 2
Ware 3-6 70 5
Ware 3-7 14 5
Ware 3-8 30 9
Ware 3-9 0 0
Ware 4 0
Airport 1-1 79
Airport 1-2 12
Airport 1-3 1
Airport 1-4 49
Airport 1-5 2
Airport 2-1 3
Airport 2-2 9
Airport 2-3 17
Airport 2-4 0
Airport 2-5 3
Airport 2-6 0
Airport 2-7 5
Airport 2-8 4
Airport 2-9 7
Airport 2-10 9
Airport 2-11 1
Airport 2-12 6
Airport 2-13 14
Airport 2-14 1
Airport 2-15 0
Airport 2-16 0
Airport 2-17 10
Airport 2-18 36
Airport 3-1 10
Airport 3-2 2
Airport 3-3 1
Airport 3-4 2
Airport 3-5 8
Airport 3-6 4
Airport 3-7 9
Airport 3-8 4
Airport 3-9 2
Airport 3-10 4
Airport 3-11 4
Airport 3-12 2
Airport 3-13 10
Airport 4 11
Cave 1-1 6
Cave 1-2 7
Cave 1-3 2
Cave 1-4 12
Cave 1-5 2
Cave 1-6 3
Cave 1-7 2
Cave 2-1 0
Cave 2-2 26
Cave 2-3 10
Cave 2-4 15
Cave 2-5 12
Cave 2-6 1
Cave 2-7 0
Cave 2-8 5
Cave 2-9 3
Cave 2-10 0
Cave 2-11 0
Cave 3-1 3
Cave 3-2 24
Cave 3-3 14
Cave 3-4 160
Cave 3-5 4
Cave 3-6 433
Cave 3-7 2
Cave 3-8 32
Cave 4 12
Base 1 133
Base 2 23
Base 3 601
Base 4 279
Total 2719 191

Bank 1-1

Managed to save a frame off the wip by sneaking in a couple extra slides. Due to the wall after the last enemy before the grapple, the key optimization concern is to get past that enemy as soon as possible to jump as early as possible.

Bank 1-2

I combined strategies of the publication and the wip to save a small amount of time here. I also slid closer to the center of the door than the wip.

Bank 1-3

I mostly used the wip's strategy but instead of doing a neutral direction grapple at the end, I did it to the left to push me farther forward.

Bank 2-1

Slid closer to the center of the door than the wip.

Bank 2-2

Hit down before jumping off the grapple.

Bank 2-3

Different set of grappling patterns and better movement overall.

Bank 2-4

End up closer to the center of the door after grappling back up

Bank 2-5

Ended up identical to wip once you factor out lag.

Bank 2-6

...I forget how I saved time here. I think it was from trying to stay as far left as possible when grabbing the key?

Bank 2-7

Saved a frame by throwing the fireballs sooner, leaving the enemy alive but I get enough meter off the next screen anyway.

Bank 3-1

Different strategy to take down the big guy and holding back while swinging helped save a good chunk of time

Bank 3-2

The direction the silhouette of the ninja bounces is random, you want it to end up as close to the starting location as possible to minimize travel distance at the very end before you regain control.

Bank 3-3

It's possible to save an additional frame here I think but it doesn't matter because it'd cause bad rng on the next screen.

Bank 3-4

Subtle movement differences between wip and here.

Bank 3-5

I changed the strategy coming back up because horizontal movement after rounding a corner while grappling tends to be really fast. Also I go under the last chandelier because grapple fast.

Bank 3-6

So this was before I timed things while removing all lag frames. Not sure if I actually had worse execution here or if the comparison method was just screwy here.

Bank 3-7

Nearly identical to wip, I just held back on the grapple at the end.

Bank 4

I'm not sure how I saved a frame here, maybe I reduced height off my initial jump off the grapple so I could land sooner.

Warehouse 1-1

Strategy here is largely based off the WIP but with improved movement. I managed to get a little further to the right on the moving platform at the top in such a way that when I jumped down I end up landing on the lowest box near the door.

Ware 1-2

Strategy is mostly the same here as the wip though I did slightly improve movement on the way up. Grappling vs sliding off the ledge below the key is identical in time, so I chose grappling because it's cooler.

Ware 1-3

Here you see my preferred grapple movement pattern for horizontal distance. Rather than swinging all the way up and having to wait to fall back down to initiate another grapple, I cancel the swing early and hold back slightly in order to decrease jump height. This tends to save a little bit of time over Cardboard's movement patterns.

Ware 1-4

Identical in time to WIP, I tried a bunch of things but wasn't able to save time here.

Ware 1-5

1-3 but in the opposite direction!

Ware 1-6

Pretty much identical to the wip.

Ware 1-7

Walking on a platform moving in the same direction as you are will speed you up slightly. As such I try to walk on it long enough to prevent any time spent normally walking before the enemy but to not reduce any amount of time sliding after the jump slash.

Since I don't need the meter at the start of the next room, I was able to slide in the spikes below the second moving platform and grapple the ledge which is slightly faster than jumping there.

Ware 1-8

Identical to wip, but I had to rely just on the meter from the one enemy I kill to get through the flames.

Ware 1-9

Basically the same as 1-7, but I don't have any meter meaning I can't slide through spikes on the bottom.

Ware 1-10

Grappling at the very bottom brings me to the center of the door slightly faster without having to worry about the long slide ending animation.

Ware 1-11

Mostly similar to the WIP but I do hold back slightly to reduce jump height off the first grapple.

Ware 2-1

Different movement strategies in various places and slightly improved movement in others. I haven't managed to get the shuriken trick to work on the large enemy here yet, if somebody found a good setup it could save a decent chunk of time.

Ware 2-2

I ended up redoing the previous room at some point and that resulted in the frog on the right getting in the way when I had to come back to the door due to rng. I had to kill it on the way up with a shuriken (if anybody noticed I'll be impressed) which gave me slightly more meter for the next room that I didn't really need but ended up saving a lag frame thanks to it.

I initially did this room before finding the shuriken trick, but it ended up being slower when I timed it. Improvement here was through slightly better optimization.

Ware 2-3

I didn't know at the time how to trigger invincibility while sliding so 1 frame of improvement is probably possible here. I did save a lag frame thanks the additional meter though. You need it to run out before killing the enemy though in order to ensure you have meter for the fires ahead.

Again, haven't managed to get the shuriken trick to work on this enemy, could save a decent amount of time if it worked. Otherwise, similarly to 2-1, different movement strategies and better optimization.

Ware 2-4

It essentially came down to two different strategies that were identical in time, one was more similar to what cardboard did in his wip and the other is what you see here. I chose this one because it looked cooler.

Ware 2-5

Kicking off a wall while grappling is extremely finicky.

The published run and the wip both attack the samurai at the top to get it to turn around, however this ultimately forces it into a less favorable position than simply leaving it alone.

Time is likely able to be saved in this room with backwards grapple spamming, which I discovered at the end of the game.

Activating invincibility to get through the fire would save a small amount of time as I could land on the center of the door, however I need the invincibility for 2-7.

Ware 2-6

Very simple screen.

Ware 2-7

Slightly better movement strategies once again.

Ware 3-1

Saved time by rounding corners while grappling.

Ware 3-2

Managed to almost beat the flame cycle through faster movement. If I beat it, I could have saved my meter for leaving the area with the key rather than spend it entering, as I had to wait a frame or two before I could uncrouch safely.

Ware 3-3

Slightly better optimization was implemented here over the wip.

Ware 3-4

Extremely difficult room to optimize. You need to minimize height of the jump off the swing at the start so you just barely can hit the hostage taker, then getting out of the room is a task as well.

Ware 3-5

Majority of optimization here was figuring out how long to hold back on a swing.

Ware 3-6

It isn't exactly clear how much time I saved over the wip here since this room is quite laggy and I'm sure I removed a fair amount of lag. Otherwise I mostly followed the wip's route through the room.

Additional time could likely be saved here by abusing the crouch collision trick to squeeze into the tunnel at the top.

Ware 3-7

Mostly uses the same strategy as the wip, but optimized a bit better.

Ware 3-8

I mostly followed cardboard's beginning but I did throw in a quick backwards grapple.

I believe I prevented lag on the samurai and then quickly rounded the corner, and used better grapple movement to get back to the door.

Ware 3-9

No matter what I did I seemed to end up with the same time as cardboard so I threw in a jump slash because why not.

Ware 4

This boss was kinda insane. If you hit the boss while he's on the toad with a jump slash, he falls off. However he always falls off the frog on the third hit so I hit him with a jump slash anyway since you can perform it by pressing r on the same frame as A if you're swinging and it comes out faster than the projectile.

Cancelling the throwing animation and minimizing time needed to regrapple the pegs was key to optimizing the end bit.

Previous TASes were either unable to get on top of the roof blind or just didn't try. I grabbed the heart while I was up there but conveniently the noise was cancelled by another sound effect playing. You can tell I grabbed it because the score goes up and it's not there after the fight.

Airport 1-1

This room had a lot of room for optimization. Getting to the top quickly was an interesting task in and of itself.

The published run performs the shuriken trick here on the green samurai but doesn't explain it in the submission notes (thanks). However, it only manages to get 1 extra jump slash hit out of it despite throwing two shurikens. I throw two shurikens and manage to get 2 extra jump slash hits, killing it in 1 slash total, but it can be hard to notice that I even threw them since I'm moving quickly.

I use my preferred grapple movement pattern to quickly traverse to the other side of the room.

Airport 1-2

Slightly better movement here over the published run.

Airport 1-3

Mostly identical movement but I still managed to save a little time when factoring out lag.

Airport 1-4

Slightly better movement at the start.

I again use my preferred grapple pattern to traverse the top of the room but I throw two shuriken before reaching the samurai. This time it's a little more noticeable and I kill this one in 1 jump slash whereas the publication did it in three.

I also save some time on the way back to the door by throwing in some grapples that are immediately cancelled.

Airport 1-5

Slightly better movement here.

Airport 2-1

Airport 2 is by far the longest stage.

Slightly better movement is present here but I wonder if backwards grapple spam can save time here.

Airport 2-2

I skipped a grapple step here and latched onto the bottom of the platform with the door at the top sooner.

Airport 2-3

Significantly better movement here. I land on the ground after the first jump slash to jump off the ground to start the next grapple from higher up, rather than starting it fairly close to the ground. Additionally the height off the jump to get the top hostage taker was minimized.

Airport 2-4

Extremely simple screen.

Airport 2-5

I need to walk slightly before sliding to ensure I don't need to perform any extra slides that cost time.

Grappling makes it so I get back past the box and onto the floor a little quicker.

Airport 2-6

Another simple screen.

Airport 2-7

Better optimization at the start and a faster strategy at the end.

Airport 2-8

The swing strat I came up with at the start was the majority of the timesave here. Swinging after picking up the key is identical in time to sliding.

Airport 2-9

More optimizations with reducing jump height.

Airport 2-10

Similar optimizations as 2-2 but only going part of the way up.

Airport 2-11

The weird grapple I do after jumping off the ledge was the only time save here.

Airport 2-12

Grappling to the ledge after the samurai saved a frame or two, the rest of the time save was from movement down below.

Airport 2-13

Better grapple patterns here.

Airport 2-14

I put a lot of work into this screen... to save 1 frame.

Airport 2-15 and 2-16

Simple screens

Airport 2-17

Way cleaner movement.

Airport 2-18

I minimized the time it took to get into a crouch position a bit better than cardboard here. Additionally my faster grapple patterns led me to nearly outpace the camera, and required me to use invincibility to get past the samurai at the end.

Airport 3-1

Better movement was performed throughout. Rather than throwing the second projectile on the ground, I slowed down a bit and threw it while still grappling such that I could cancel the last part of the throwing animation.

Airport 3-2

Slightly better movement than cardboard here. This may be a spot where backwards grapple spamming can be fast but I'm not sure.

Airport 3-3

Saved a frame by throwing a projectile rather than jump slashing.

Airport 3-4

Slightly different movement pattern. I would want to look into backwards grapple spamming here as well.

Airport 3-5

Again my way of grappling wins out.

Airport 3-6

I kick off the wall to move up and to the right slightly faster.

Airport 3-7

More grappling across the room.

Airport 3-8

Slightly modified version of 3-2, since the ninjas aren't there anymore.

Airport 3-9

Actually just copied 3-4 inputs here since the layout is the same aside from locations of electricity.

Airport 3-10

Slightly faster movement here, and throwing a projectile as the last hit was again faster.

Airport 3-11

Copied 3-8 inputs

Airport 3-12

Copied 3-9 inputs which copied 3-4 inputs.

Airport 3-13

Significantly cleaner movement.

Airport 4

I ended up not getting the same flame dragon pattern as cardboard for whatever reason but I still saved time here with a faster opening strategy and optimized throw animation cancelling.

Cave 1-1

I got rid of the jump slash on the way up since there was really no need for it.

Cave 1-2

I killed the spider at the start to prevent lag. Otherwise improvements were related to the climb up and getting back to the door.

Cave 1-3

You can FEEL the frames saved over cardboard here.

Cave 1-4

I came up with a different strategy for killing the samurai here. Rather than cancel 1 jump slash by grabbing the ledge, I cancelled two. After the first jump slash I fell down, grappled to the wall, jump slashed out of it and grabbed the ledge, allowing me to jump slash one more time without getting stuck in the animation on the ground.

Cave 1-5

Slightly better movement here.

Cave 1-6

Different RNG here led to the top spider spitting webs at me, this forced me to dodge it after grabbing the bottom cage while still aiming for better movement.

Cave 1-7

Frames you can feel

Cave 2-1

Did you notice a pattern with the majority of the rooms where I don't save time?

Cave 2-2

This is a complicated screen. I diverged quite a bit from cardboard here.

Backwards grapple spamming might save time here.

Cave 2-3

Fair amount of divergence from cardboard at the start with 2 grapple swings rather than 1.

Cave 2-4

This screen is significantly less laggy on mGBA than VBA and it still lags a fair amount. Reducing lag was one of the highest priorities, but killing the samurais quickly was also important.

Cave 2-5

...I forget how exactly I saved time here, I know it was from better movement, but I forget the details.

Cave 2-6

Slightly better grapple movement to get on top of the ledge.

Cave 2-7

Extremely easy screen

Cave 2-8

I used movement closer to my first time passing through the room to save time here.

Cave 2-9

Slightly faster movement is still faster.

Cave 2-10 and 2-11

Simple screens, nothing to save

Cave 3-1

Reducing jump heights off swings helps so much.

Cave 3-2

Way better climb up and better projectile spam against the samurai.

Cave 3-3

More of the better grapple movement pattern.

Cave 3-4

This is where I discovered crouch collision box maintenance. Before I only knew about damage warping, which is a related side effect of the trick but that ended up useless. This however allows me to totally change the route for this room. I go bottom first and then activate the crouch collision box to get into the 1 tile high tunnel. Then I jump through the block partially and grapple so I land inside it and slide off that block so I can trigger crouch collision again. Then I grapple to the tunnel leading to the key, skipping slow ledge climb animations. Afterwards, I get into the tunnel to the right and immediately slide back out in order to trigger crouch collision a third time in order to get into the tunnel in a standing state to allow me to clip through the ceiling/floor and go straight to the door.

Cave 3-5

More slightly faster movements thanks to the better grapple pattern.

Cave 3-6

This screen is even more impacted by crouch collision maintenance. I do the left cage first, then get crouch collision to get into the tunnel quickly and then go to the bottom right cage. After that I get crouch collision again so I can clip up to the upper right cage. I end up with less meter so I delay a frame in order to kill some enemies to get enough meter for the boss.

Cave 3-7

Not too complicated a screen but I still saved some time here.

Cave 3-8

I changed up quite a bit of the movement here to save nearly half a second.

Cave 4

This boss is an incredible pain. When he starts making the circular slashes to the sides it becomes an incredible pain to actually hit the boss. You kinda need to hit it up top.

Base 1

I discovered backwards grapple spamming here, frustrating me significantly because I could have looked into this throughout the whole tas.

I skipped the second powerup the publication grabs here because I got to it at a different point in the cycle and that one was rather slow.

Base 2

Killing the first robot here for the powerup allowed me to have extra meter, allowing me to get through some cycles a little faster. This allowed me to reach the central robot before the last laser beam. I killed it to get a little extra meter to fall to the bottom slightly faster.

The ninjas are all on a timer once you get to the bottom so it's important to kill them with jump slashes because that gives you extra meter compared to projectiles. This is extremely key for the final boss.

Base 3

Hey I wonder how you're going to playaround during the flame dragon attac... oh

I really wish Cardboard explained how abusing the screen clearing move affected the boss because it's extremely important.

First I used projectile animation cancelling to get in an extra hit compared to the publication. This allowed me to get full meter. Then I move to the right and trigger the screen clearing move on a specific frame after jumping. The screen clearing move prevents the boss from activating its fire dragon attack and the clone attack. With my positioning and timing, the boss gets hit once, teleports to the left and starts to perform a swing. This provides just enough time to finish him off without having to sit through a flame dragon, saving a whopping 10 seconds.

Base 4

This clip is a bit annoying to setup compared to some others. I have to wait for the electricity to go away because it will hit me otherwise. Then, making it up before the beam cycle at the first open section is rather tight. After that though, it's not too complicated, I prepare the last spin slash long in advance by pressing r extremely early, which buffers it, allowing for early end of input.

Other comments

Special thanks

  • Stella aka fsvgm777 for her love and support these past months. I love you a lot too!
  • Sonia aka Samsara for her initial inspiration to me all those years ago when I made my first submission. You continue to inspire me to this very day.
  • Jules for mentioning Cardboard's unfinished wip in the discord. I might have never tried this game if it weren't for that.
  • Cardboard for writing incredibly weird stuff in his previous run's movie file's comments. That motivated me to beat it so nobody would ever have to see them ever again.


Samsara: Judging a Memory GBA run feels really familiar...

Samsara: Ladies, gentlemen, everybody outside, in-between, and all-encompassing, it's time to get sappy.

When I judged Bionicle way the heck back in the day, I treated it pretty much like any other judgement, just with a little hint of extra "Aw heck yeah, Bionicle was my jam back in the day." My life is really just a series of "back in the days" when you think about it. I had no idea that one judgement would someday turn into... Well, all of this, really. Not just this run, which, spoilers, I'm accepting to inherit the current run's Star, but everything else you've done both as a TASer and as site staff.

Like... Honestly, I'm kinda speechless over it after having looked back at what I've missed in the time I've been away, and Samsara being speechless is an achievement in and of itself. I spent three years feeling unappreciated and overused, like a well-used hammer that just gets lazily and haphazardly thrown to the back of the tool shed after use, and honestly I get really tired of nailing broads if I'm not getting anything out of it. Boards. I meant boards. But here I am now, staring down an incredibly sappy previous judgement and a current special thanks section that validates what I wanted to do for the site during my previous time working there. You became the success I wanted to be. I've never been more proud of someone I only really started talking to less than three months ago, or... Hell, pretty much everyone else I've ever talked to, really, and I've never felt more... I dunno, good? About myself? Sorry, I'm not used to thinking positively about my previous run on the site.

If this were some kind of movie, this is where I would step down and pass the torch, as it were, but... Man, I just came back. That'd be weird. Instead, it's your turn to inspire me, because it's clear I still have a long way to go to reach the new bar that you set using me as your inspiration. There's a metaphor in here somewhere, probably. I've never been good at those.

Oh, heck, I should talk about the dang run, shouldn't I? I've been watching the creation of this run from the beginning, with the thought at the back of my mind always being that this was a game I wanted to look at myself, and I'm simultaneously humbled by the quality of the final product (which is far better than I could've hoped for if I'd done it myself) and motivated to go hard on some other high-complexity run I had on my mind a few years back. Perhaps several of them. Perhaps I'm working on them right now. Hmmmmmmmm.

Nah, that would imply I'm working.

As far as optimization is concerned, well... I said it in the thread, but the tightening of the movement makes nearly every room flow so much faster over both the published run and the improvement WIP, even if you're only a frame or two faster. That's a weird, but incredible rarity, giving a run that already felt ridiculously fast the illusion of being way the hell faster. Needless to say, yeah, excellent work on both entertainment and tech. We've already spoken about the known improvements, and after watching the run a few times over, I see fairly limited usage for them in the earlier stages of the run, definitely not enough to warrant a rejection or a sternly worded "But what if... Redo months of work immediately?" We both know you're coming back someday. You know this because you're you, and I know this because you told me, and also I'm you. I don't think that Judge change glitch wore off yet.

I've started calling back to my previous judgements, I think it's time to wrap up.

In short, this run's sick as hell, and I'm accepting it as an improvement to the published run, hopefully inheriting the Star as well. I can do that, right? I think that's something Judges can do now? Changes, man! Dang!

Aight, time to say something that's never been said on TASvideos before: I'm turning this over to your girlfriend for publication.

fsvgm777: On it, sweetheart~ ❤


Similar submissions (by title and categories where applicable):