Author Topic: Danmakufu Contest #8 - This Ain't Space Invaders! RESULTS ARE IN  (Read 31342 times)

Drake

  • *
The 8th Danmakufu Contest is now set to begin!
  This Ain't Space Invaders! 

What? Stagnancy, in MY RaNGE???? I can't let this stand.
This is a contest in tribute to the very retro shmup games such as Space War!, Galaxian, Asteroids, and of course despite the title, Space Invaders. Also, to the danmaku line, as we are a Touhou forum after all.
The object of this contest is to create a retroesque, yet danmaku, game in Danmakufu, entirely in one boss script. All of the game system, enemies, patterns, (and optional player and scoring system) must be programmed in this one script. In addition, I will be providing all graphics that are to be used in the 'game', as well as certain functions that should be adhered to.

Once again, we will have Community Voting; partly because one person judging is slightly unfair, but mostly because I want to join as well. This means that instead of only me judging your works, anyone who wants to can play all the scripts, judge each one and give me their scores (out of ten) with a few phrases describing why they judged as they did. I will tally up the scores and determine the winner based on this.
I count for two votes though dohohoho



Rules and tips:
  • As should be obvious, use only the graphics and such I give you. When you submit your script, you should need only submit the txt file, as everything else is provided and universal.
  • To play your script, change the name of the primary script accordingly, then change the boss call line in the controller. You are going to want this controller to stay unchanged aside from that.
  • Background stays black at all times. I would say "no add-blending", but as there are only black and white, it doesn't matter. Regardless, don't work around doing bullshit like RGB changing with effects.
  • You really don't need 'flashy' effects. More emphasis goes on patterns and game design as a whole, not really incredible pixel explosions.
  • Despite this, 'building' is permitted.
  • Using the default Reimu and Marisa is allowed, but major points are awarded to those who go beyond the obvious and create a small game or their own system of sorts. Use the Insert Coin player if you plan to script your own (not inside the player; inside the boss script, of course!)
  • As you will shortly find out through the provided functions, everything should ideally move 'pixel'-perfectly. Everything moves on exact 'pixels'.
  • If you still haven't opened anything yet, 'pixels' are actually 2x2 pixel blocks. Screen resolution is 192x224, for all intents and purposes.
  • Please!!!! submit useful functions specific to the contest restrictions if you think it will help other participants. I didn't include everything. These functions by themselves are only a starting point, I want to put an emphasis on community contribution.
  • Speaking of which, in the DNH folder is a text file for bullet definition. But, it's nearly empty because I'm too lazy to do this all myself. Once you get going with your script, please post the contents of your definition file so I can update this post with a standard so everyone has the same one.
  • Any scripts I find with errors popping up are disqualified, and if it doesn't work out of the box (why it wouldn't being one text file I have no clue), disqualified as well.
  • Bonus for 8-bit music, not needed though. Sound effects? Eh, I guess that too.
  • Having two difficulties is recommended. Not all people play the same difficulty, so having only one difficulty poorly balanced is a big no-no. It isn't a must, but as your peers are judging you you'll want to be careful with balancing.
  • RETRO! The theme of this contest is to keep it retro, so the less graphical blurs and general cleanliness, the better. Points are awarded for making it look authentic.

  • Anyone can judge the scripts, even if they haven't entered, or even really know anything about danmakufu at all! Obviously, nobody can judge their own script.
  • All your votes will be pruned through by yours truly. You should have solid reasons for giving someone a certain score, and if it looks as if there's a bias involved I'll call you out on it / throw it out.



All scripts must be submitted by 11:59:59 PST (GMT-8), April 11. You have a bit more than two weeks. Entries two seconds late will once again be accepted.
All judgments are accepted until a week afterwards, on the 18th.


Danmakufu to be used located here.
Current shot definition script here.

Go.
« Last Edit: April 19, 2011, 06:12:34 AM by Drake »

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #1 on: March 26, 2011, 05:34:45 AM »
A new contest right before exams! :toot:

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #2 on: March 26, 2011, 05:51:29 AM »
A new contest right before exams! :toot:

SHUT THE FUCK UP AND SUBMIT

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #3 on: March 26, 2011, 06:02:30 AM »
<&Stuffman> If the only thing we're submitting is a single text file then how do we include music

And Stuffman gets in the first punch!
If you're going to include sound effects and music, then do make a folder (still though, only use the one boss script!). In which case, you are going to have to reference the previous directory to get retro.png to load, since you are not allowed to move the universal files. You will have to use GetPreviousScriptDirectory!

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #4 on: March 26, 2011, 07:49:23 AM »
Still working out kinks in contest, locked tomporarily until Drake fixes stuff. Rules will be simliar and stuff though so get brainstorming.

[05:19:13]   <Drake>   >DRAKE IS A MORON DELAYD UNTIL HE FIXES HIS RETARDED BULLSHIT
« Last Edit: March 26, 2011, 09:47:51 PM by Naut »

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #5 on: March 26, 2011, 09:48:09 PM »
ALRIGHT LETS DO THIS

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #6 on: March 26, 2011, 09:52:04 PM »
ALRIGHT LETS DO THIS
LEEERRRROOOYYYYY JEEENNNKKK*pichun*

8lue Wizard

  • Cobalt Magician
  • (Apparently)
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #7 on: March 26, 2011, 09:53:00 PM »
We only get one text file... does that mean we're limited to a single card pattern?

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #8 on: March 26, 2011, 09:56:11 PM »
For submitting contributions, submits functions and the like in the same format as the Misc Snippets thread.
For submitting bullets, use the same format as in the current definition file. You only need to define the rect and number; ID the bullet according to what position it's in on the image (currently I have #23 and #30). Please comment in a name and bullet size as well.


We only get one text file... does that mean we're limited to a single card pattern?
Not at all. What you do with your one boss file is up to you; you can have just one pattern, or you can make several, you can make object enemies, or even a small game. How you accomplish that is up to you. You can use the IRC channel to ask specific questions.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #9 on: March 26, 2011, 10:41:41 PM »
Naut brought to my attention that because you black out the player graphics in order to make their own games and players, you'd have to tell people in advance to black them out to play your script and bullshit like that. To circumvent that, I added an empty player script to use as a player controller. You still script your player in the one boss script.

For the people who already downloaded and don't want to download again again again, plop this in the script folder and add .\emptyplayer.txt to the #Player in the controller.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #10 on: March 27, 2011, 12:47:17 AM »
Some functions for people to use.


DrawInteger
(x-coordinate, y-coordinate, number, scale, layer)

Draws an integer at the specified coordinates on a specific layer. For example, it can be used to draw a score counter on the frame, if you specify it being drawn on the eighth layer.

Code: [Select]
task DrawInteger(x, y, Number, scale, layer){
let number = ToString(Number);
loop(7){
number = erase(number, length(number)-1);
}
function GetNumberXRect(num){
return ((num-48)*5);
}
let rect = [];
let objArr = [];
ascent(i in 0..length(number)){
rect = rect ~ [GetNumberXRect(number[i])];
objArr = objArr ~ [Obj_Create(OBJ_EFFECT)];
}

ascent(i in 0..length(number)){
ObjEffect_SetTexture(objArr[i],retro);
ObjEffect_SetPrimitiveType(objArr[i], PRIMITIVE_TRIANGLEFAN);
ObjEffect_SetLayer(objArr[i], layer);
ObjEffect_SetScale(objArr[i], scale, scale);
ObjEffect_CreateVertex(objArr[i], 4);
ObjEffect_SetVertexUV(objArr[i], 0, 0 + rect[i], 56);
ObjEffect_SetVertexUV(objArr[i], 1, 3 + rect[i], 56);
ObjEffect_SetVertexUV(objArr[i], 2, 3 + rect[i], 61);
ObjEffect_SetVertexUV(objArr[i], 3, 0 + rect[i], 61);
ObjEffect_SetVertexXY(objArr[i], 0, -1, -2);
ObjEffect_SetVertexXY(objArr[i], 1, 2, -2);
ObjEffect_SetVertexXY(objArr[i], 2, 2, 3);
ObjEffect_SetVertexXY(objArr[i], 3, -1, 3);
Obj_SetPosition(objArr[i], x + i*5*scale, y);
}
yield;
yield;
ascent(i in 0..length(number)){
Obj_Delete(objArr[i]);
}
}

DrawString
(x-coordinate, y-coordinate, string, scale, layer)

Draws a string of only alphabetical characters (not case sensitive) at the specified coordinates.

Code: [Select]
task DrawString(x, y, String, scale, layer){
let string = ToString(String);
function GetCharXRect(car){
if(car== ' '){
return 130;
}else if((car-0)<97){
return ((car-65)*5);
}else{
return ((car-97)*5);
}
}
let rect = [];
let objArr = [];
ascent(i in 0..length(string)){
rect = rect ~ [GetCharXRect(string[i])];
objArr = objArr ~ [Obj_Create(OBJ_EFFECT)];
}

ascent(i in 0..length(string)){
ObjEffect_SetTexture(objArr[i],retro);
ObjEffect_SetPrimitiveType(objArr[i], PRIMITIVE_TRIANGLEFAN);
ObjEffect_SetLayer(objArr[i], layer);
ObjEffect_SetScale(objArr[i], scale, scale);
ObjEffect_CreateVertex(objArr[i], 4);
ObjEffect_SetVertexUV(objArr[i], 0, 0 + rect[i], 63);
ObjEffect_SetVertexUV(objArr[i], 1, 3 + rect[i], 63);
ObjEffect_SetVertexUV(objArr[i], 2, 3 + rect[i], 68);
ObjEffect_SetVertexUV(objArr[i], 3, 0 + rect[i], 68);
ObjEffect_SetVertexXY(objArr[i], 0, -1, -2);
ObjEffect_SetVertexXY(objArr[i], 1, 2, -2);
ObjEffect_SetVertexXY(objArr[i], 2, 2, 3);
ObjEffect_SetVertexXY(objArr[i], 3, -1, 3);
Obj_SetPosition(objArr[i], x + i*5*scale, y);
}
yield;
yield;
ascent(i in 0..length(string)){
Obj_Delete(objArr[i]);
}
}

Example:

Code: [Select]
@MainLoop{
DrawString(470, 60, "Score", 1, 8);
DrawInteger(502, 60, GetScore, 1, 8);
yield;
}

Draws a score counter on the frame. Changing the scale to anything but 1 blurs the graphic to shit, so have fun with that.

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #11 on: March 27, 2011, 01:23:08 PM »
I imbued this thread with Charisma, it will attract people now (aka being sticky)

Thaws

  • _m廿廿m_
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #12 on: March 27, 2011, 03:08:20 PM »
I can't believe it's almost 5 months since the last contest already. :ohdear:

It took me quite a while to even understand what the rules are talking about. :V


Next contest will be: "Make full game". So this is just a warming up :V

The object of this contest is to create a retroesque, yet danmaku, game in Danmakufu, entirely in one boss script.

 :o
« Last Edit: March 27, 2011, 04:13:32 PM by Thaws »

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #13 on: March 27, 2011, 03:16:58 PM »
Another contest!  :toot:

Wait, if we include music and sound effects, do we put them in a folder or something?
What if it clashes with other people's?

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #14 on: March 27, 2011, 06:38:15 PM »
wHaT iF wE aDd BrOfsiaIAtais

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #15 on: March 27, 2011, 08:17:18 PM »
Wait, if we include music and sound effects, do we put them in a folder or something?
What if it clashes with other people's?
Instead of giving just the one text file, submit a folder with your sound effects and music. However these should be pretty minimalist; I don't count on many extra files being needed. So a theoretical file structure would be basically

th_dnh (contest 8)\script\Name - Title.txt
th_dnh (contest 8)\script\alltheotheruniversalthings.files


or

th_dnh (contest 8)\script\Name - Title\Name - Title.txt
th_dnh (contest 8)\script\Name - Title\allofyourmusicandstuff.files
th_dnh (contest 8)\script\alltheotheruniversalthings.files


It shouldn't interfere with anything at all.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #16 on: March 28, 2011, 12:25:12 AM »
Shot Data

Code: [Select]
#UserShotData

ShotImage = "script\retro.png"
ShotData{ //square 4x4
id=1
rect=(0, 0, 4, 4)
}
ShotData{ //rectangle 4x8
id=2
rect=(8, 0, 12, 8)
}
ShotData{ //square 16x16
id=3
rect=(16, 0, 24, 8)
}
ShotData{ //cross, transparent center, 12x12
id=4
rect=(28, 0, 40, 12)
}
ShotData{ //square, transparent center, 12x12
id=5
rect=(44, 0, 56, 12)
}
ShotData{ //diagonal, 2 4x4 squares
id=6
rect=(60, 0, 68, 8)
}
ShotData{ //cross, solid center, 12x12
id=7
rect=(72, 0, 84, 12)
}
ShotData{ //T block, small pyramid, 12x8
id=8
rect=(88, 0, 100, 8)
}
ShotData{ //large pyramid, 20x12
id=9
rect=(104, 0, 124, 12)
}
ShotData{ //small spaceship thing on the top right 12x12
id=10
rect=(128, 0, 140, 12)
}
ShotData{ //squid 16x16
id=11
rect=(0, 16, 16, 32)
}
ShotData{ //ghost 16x16
id=12
rect=(20, 16, 36, 32)
}
ShotData{ //ufo 32x14
id=13
rect=(40, 18, 72, 32)
}
ShotData{ //small fairy 16x16
id=14
rect=(76, 16, 92, 32)
}
ShotData{ //big fairy 30x18
id=15
rect=(96, 16, 124, 34)
}
ShotData{ //alien 22x16
id=16
rect=(128, 16, 150, 32)
}
ShotData{ //squiggly thing 6x14
id=17
rect=(0, 36, 6, 50)
}
ShotData{ //arrowhead solid base 10x10
id=18
rect=(8, 36, 18, 46)
}
ShotData{ //arrowhead 10x10
id=19
rect=(20, 36, 30, 46)
}
ShotData{ //pointy arrow 10x10
id=20
rect=(32, 36, 42, 46)
}
ShotData{ //circle with cross 10x10
id=21
rect=(44, 36, 54, 46)
}
ShotData{ //skinny arrowhead
id=22
rect=(56, 36, 62, 46)
}
ShotData{ //arrowhead transparent center 10x10
id=23
rect=(64, 36, 74, 46)
}
ShotData{ //what the hell is this thing 10x10
id=24
rect=(76, 36, 86, 46)
}
ShotData{ //stubby arrowhead
id=25
rect=(88, 36, 98, 44)
}
ShotData{ //coin? rice? oval? you decide. 6x8
id=26
rect=(100, 36, 106, 44)
}
ShotData{ //curvy arrowhead, mm yeah i likes me dem curves baybeh ooo yeuh 10x10
id=27
rect=(108, 36, 118, 46)
}
ShotData{ //big rectangle 10x12
id=28
rect=(120, 36, 130, 48)
}
ShotData{ //big circle 10x10
id=29
rect=(132, 36, 142, 46)
}
ShotData{ //small circle 8x8
id=30
rect=(144, 36, 152, 44)
}
ShotData{ //you... you... double circle! 16x16
id=31
rect=(156, 36, 172, 52)
}
ShotData{ //4x4 transparent shot
id=32
rect=(240, 0, 244, 4)
}

Wait another day or two and I'll write your script
« Last Edit: April 10, 2011, 05:12:52 AM by Naut »

Kylesky

  • *The Unknown*
  • Local Unbalanced Danmakufu Idiot Scripter
    • My useless youtube account... (will be useful in the future *I promise*)
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #17 on: March 28, 2011, 07:08:45 AM »
This just occured to me... are you forcing everyone who wants to use "emptyplayer.txt" to learn how to detect every single bullet in use and create their own hitbox collision detection method? :wat:
Danmakufu Script Thread :V Latest Script: Intertwining Mechanical Intervention (temp name)

Yooooouuutuuuubeeee Channel Latest Video: Contest #8 Entry

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #18 on: March 28, 2011, 07:16:54 AM »
Maybe. Maybe not. It depends on what you want to do in the first place.
For the sake of argument, creating a simple hitbox detection and other systems will make a good exercise for people to think outside the box, no pun intended.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #19 on: March 28, 2011, 02:11:18 PM »
This just occured to me... are you forcing everyone who wants to use "emptyplayer.txt" to learn how to detect every single bullet in use and create their own hitbox collision detection method? :wat:

Translation of Drake's response:

Yes

Kylesky

  • *The Unknown*
  • Local Unbalanced Danmakufu Idiot Scripter
    • My useless youtube account... (will be useful in the future *I promise*)
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #20 on: March 28, 2011, 02:56:58 PM »
Translation of Drake's response:

Yes

yeah... I got that...
Danmakufu Script Thread :V Latest Script: Intertwining Mechanical Intervention (temp name)

Yooooouuutuuuubeeee Channel Latest Video: Contest #8 Entry

Blargel

  • RAWR!
  • I'M AN ANGRY LOLI!
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #21 on: March 28, 2011, 07:33:10 PM »
Making a whole game with a boss script... including the player. Damn it Drake stop appealing to the side of me that likes doing batshit stuff with stupid limitations! :(
<WorkingKeine> when i get home i just go to the ps3 and beat people up in blazblue with a loli
<Azure> Keine: Danmakufu helper by day, violent loli by night.

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #22 on: March 28, 2011, 10:35:49 PM »
Nobody would end up doing much batshit stuff if it weren't for limitations.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Helepolis

  • Charisma!
  • *
  • O-ojousama!?
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #23 on: March 30, 2011, 04:23:05 PM »
Allright, I will see what I can do for this contest. Have been busy with some editing and is coming a long nicely. But going to need some custom player movement baked in.

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #24 on: March 30, 2011, 06:45:07 PM »
hi guys, since every graphic (except for alphanumerics) is even-width you should be adding 0.5 to all x and y positions to make the graphics cleaner, just an fyi

I'm pretty sure I had that done by default but I guess I changed it for some reason.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -

Kylesky

  • *The Unknown*
  • Local Unbalanced Danmakufu Idiot Scripter
    • My useless youtube account... (will be useful in the future *I promise*)
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #25 on: March 31, 2011, 05:32:43 AM »
Heh... later than my usual thanks to extremely crappy internet :V anyway...



*copy-paste from bulletforge

This has got to be one of the crappiest things I've ever submitted... oh well...

Sorry about the large file size, but you guys DID say "a full game" :V

Script is subject to change if ever I don't feel too lazy to fix/nerf this thing... (the music isn't even the least bit fitting)


Sonic Distortion (Use the insert coin player please)

The player is a ship that has no attack, but movement causes sound waves that can destroy enemies to emit from the ship and also increases the heat level of the ship. If the heat level reaches the max the ship will die. The player has one life to complete the entire game. Each bullet that hits the player will result in a deduction of ship armor. Each enemy that collides with the player will cause an immediate loss.

There are 3 stages in total, the start of each stage will add 4 shots worth of armor to the ship.

Graze points are given depending on the time the player is near the bullet, rather than the number of bullets.

The game focuses more on survival than enemy killing, so don't get too pissed when you can't kill an enemy.

2 Difficulties:
Harmonics - around Normal+
Amplitudes - around Lunatic
« Last Edit: March 31, 2011, 06:18:09 AM by Kylesky »
Danmakufu Script Thread :V Latest Script: Intertwining Mechanical Intervention (temp name)

Yooooouuutuuuubeeee Channel Latest Video: Contest #8 Entry

Chronojet ⚙ Dragon

  • The Oddity
  • 今コソ輝ケ、我ガ未来、ソノ可能性!!
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #26 on: March 31, 2011, 05:44:45 AM »
.... Right. Do we PM Drake with the comments?

EDIT:
Kylesky, goddamnit! All your script does is create the "Spell Card Bonus!" thing with a +0 bonus and the spell capture sound. Then it ends. Never mind It works now.

I keep dying. I don't even get why. And sometimes it happens when I FUCKING STAND STILL.
There is nothing visible how I see it, and there are no bullets that can possibly kill me, so I really don't get it.
I fucking give up.
I won't even rate this thing, if I can't get it.
« Last Edit: March 31, 2011, 05:56:09 AM by ミョウリ »

Blargel

  • RAWR!
  • I'M AN ANGRY LOLI!
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #27 on: March 31, 2011, 06:07:24 AM »
RETRO! The theme of this contest is to keep it retro, so the less graphical blurs and general cleanliness, the better. Points are awarded for making it look authentic.

Probably not so good that your intro screen is fucking BLURRED TO OBLIVION.
<WorkingKeine> when i get home i just go to the ps3 and beat people up in blazblue with a loli
<Azure> Keine: Danmakufu helper by day, violent loli by night.

Kylesky

  • *The Unknown*
  • Local Unbalanced Danmakufu Idiot Scripter
    • My useless youtube account... (will be useful in the future *I promise*)
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #28 on: March 31, 2011, 06:16:12 AM »
Really? it works fine for me :wat: I'll try checking some things...
« Last Edit: March 31, 2011, 06:21:24 AM by Kylesky »
Danmakufu Script Thread :V Latest Script: Intertwining Mechanical Intervention (temp name)

Yooooouuutuuuubeeee Channel Latest Video: Contest #8 Entry

Drake

  • *
Re: Danmakufu Contest #8 - This Ain't Space Invaders!
« Reply #29 on: March 31, 2011, 06:43:27 AM »
あたしって、ほんとばか
you didn't update your shotsheet, which is why you get invisibullets and still randomly die

Judging works the same as the last contest; don't judge anything until the submission deadline. Just send in everything at once, don't submit as you go along or whatever.

A Colorful Calculating Creative and Cuddly Crafty Callipygous Clever Commander
- original art by Aiけん | ウサホリ -