Author Topic: Danmakufu Q&A/Problem Thread v3  (Read 213423 times)

8lue Wizard

  • Cobalt Magician
  • (Apparently)
Re: Danmakufu Q&A/Problem Thread v3
« Reply #450 on: March 20, 2010, 09:47:39 AM »
>.< Why does Danmakufu hate sound files?

I'm trying to add sounds (.mp3's) into my Nazrin player, but it's only playing half the sound. .wav's will play correctly, but they're also about 10 times bigger.

Drake

  • *
Re: Danmakufu Q&A/Problem Thread v3
« Reply #451 on: March 20, 2010, 05:04:29 PM »
Sound effects just seem to belong in wav files, no matter how huge they become. For anything that isn't music I just suggest using wav files anyways.

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

Nobu

  • Serendipitous Youkai
  • *
  • i post while naked
    • My Tumblr
Re: Danmakufu Q&A/Problem Thread v3
« Reply #452 on: March 20, 2010, 10:25:32 PM »
Is there a way to program something into a bullet so that it does something upon colliding with the hitbox of another bullet/laser (or programming the bullet/laser to affect any bullet that comes into contact with it),  such as splitting into more bullets/deleting/etc?

Basically, i'm trying to make a laser that effectively blocks and disperses bullets that collide with it, but I don't even know where to begin trying to program this behavior. Any help or advice would be much appreciated.
Tumblr (sometimes NSFW) | PM for Facebook

Re: Danmakufu Q&A/Problem Thread v3
« Reply #453 on: March 20, 2010, 11:00:02 PM »
Is there a way to program something into a bullet so that it does something upon colliding with the hitbox of another bullet/laser (or programming the bullet/laser to affect any bullet that comes into contact with it),  such as splitting into more bullets/deleting/etc?

Basically, i'm trying to make a laser that effectively blocks and disperses bullets that collide with it, but I don't even know where to begin trying to program this behavior. Any help or advice would be much appreciated.
Object bullets and the Obj_SetCollisionToObject/Collision_Obj_Obj functions are what you're gonna need.

All bullets that will affect or be affected need to be object bullets/lasers, and then set Obj_SetCollisionToObject to true for each object, then make statements where if Collision_Obj_Obj is true, do whatever you wanna do (explosions of bullets or rainbows w/e)

Iryan

  • Ph?nglui mglw?nafh
  • Cat R?lyeh wgah?nagl fhtagn.
Re: Danmakufu Q&A/Problem Thread v3
« Reply #454 on: March 20, 2010, 11:00:13 PM »
Ahehehehem, yeah, that is somewhat advanced.

All bullets and lasers you want to use have to be object bullets and object lasers, the ids of which you need to store in arrays. If you want only a fixed number of these lasers, and if you want none of them to disappear, it is fairly doable. If you to create any number of lasers and if you want these lasers to fade away, it becomes somewhat tricky.

Then you have to perform Collision_Obj_Obj checks for every possible combination

As a scripting example, you need to create an array for the object ids of the lasers right at the beginning of your script. Then you need to make your regular object bullet creation task, where you check in the while{} part if the bullet is colliding with any of the lasers which ids are stored in the laser array. If it collides, you insert the code that does what you want to do.
Important is that you have to delete the id in the array after the laser ceases to exist, or else the arrays will grow larger and larger, and danmakufu bitches around if its arrays become too long.

A code example that you would insert at the beginning of the script:

Code: [Select]

let lazors = [];

task TLazor(x, y, whatever){

   let obj=Obj_Create(OBJ_LASER);

   lazors=lazors~obj;

   //insert standard object laser stuff here

   while(Obj_BeDeleted(obj)==false){

      //insert laser behaviour code here

      yield;

   }

   let number=0;
   
   while(number<length(lazors)){

       if(lazors(number)==obj){ //checks if the place in the array holds the id

           lazors=erase(lazors, number); //if it does, danmakufu deletes the place

       } else{
           number++; //if not, it moves on to the next
       }

   }

}

This would be the framework code for the lasers. Now you need to include the following code in the while{} part of the object bullets:

Code: [Select]

ascent(i in 0..length(lazors)){
   if(Collision_Obj_Obj(obj, lazors(i))==true){

       //stuff you want to happen when the bullet hits the laser.

   }
}

Though I wouldn't swear by this code. It is midnight around here, so I may have mode a stupid mistake or two here and there...
« Last Edit: March 20, 2010, 11:11:02 PM by Iryan »
Old Danmakufu stuff can be found here!

"As the size of an explosion increases, the numbers of social situations it is incapable of solving approaches zero."

Nobu

  • Serendipitous Youkai
  • *
  • i post while naked
    • My Tumblr
Re: Danmakufu Q&A/Problem Thread v3
« Reply #455 on: March 21, 2010, 12:53:59 AM »
Suikama, Iryan, thank you so much. *_*

I was scouring the wiki looking for something like Collision_Obj_Obj and Obj_SetCollisionToObject, but completely missed it over until now.
Tumblr (sometimes NSFW) | PM for Facebook

Nimble

  • Broken English Fox
  • Rushing toward the bullet!
    • Viewmix
Re: Danmakufu Q&A/Problem Thread v3
« Reply #456 on: March 24, 2010, 06:55:35 PM »
How can I rorate ObjectEffect =w=?
I try ObjEffect_SetAngle and it fly away :o


Infy♫

  • Demonic★Moe
  • *
Re: Danmakufu Q&A/Problem Thread v3
« Reply #457 on: March 24, 2010, 06:58:00 PM »
Code: [Select]
ObjEffect_SetAngle(obj,0,0,angle);

Re: Danmakufu Q&A/Problem Thread v3
« Reply #458 on: March 24, 2010, 07:01:34 PM »
You have to define your vertices around the 0,0 point if you want to use ObjEffect_SetAngle. For a 64x64 image, it would be something like:

ObjEffect_SetVertexXY(obj, 0, -32, -32);
ObjEffect_SetVertexXY(obj, 1, 32, -32);
ObjEffect_SetVertexXY(obj, 2, 32, 32);
ObjEffect_SetVertexXY(obj, 3, -32, 32);

Then you can set the angle with ObjEffect_SetAngle(obj, 0, 0, angle);

I usually just use trigonometry and set the XY coordinates every frame instead of dicking around with the 0,0 point and SetAngle. But I also like to fuck around with the shape of my objects, so :V

Nimble

  • Broken English Fox
  • Rushing toward the bullet!
    • Viewmix
Re: Danmakufu Q&A/Problem Thread v3
« Reply #459 on: March 24, 2010, 07:50:59 PM »
You have to define your vertices around the 0,0 point if you want to use ObjEffect_SetAngle. For a 64x64 image, it would be something like:

ObjEffect_SetVertexXY(obj, 0, -32, -32);
ObjEffect_SetVertexXY(obj, 1, 32, -32);
ObjEffect_SetVertexXY(obj, 2, 32, 32);
ObjEffect_SetVertexXY(obj, 3, -32, 32);

Then you can set the angle with ObjEffect_SetAngle(obj, 0, 0, angle);

I usually just use trigonometry and set the XY coordinates every frame instead of dicking around with the 0,0 point and SetAngle. But I also like to fuck around with the shape of my objects, so :V


oh ... I got it...
I use this before

   ObjEffect_SetVertexXY(OE_MagicCircle, 0, GetX-25, GetY-25);
   ObjEffect_SetVertexXY(OE_MagicCircle, 1, GetX+25, GetY-25);
   ObjEffect_SetVertexXY(OE_MagicCircle, 2, GetX+25, GetY+25);
   ObjEffect_SetVertexXY(OE_MagicCircle, 3, GetX-25, GetY+25);

after change to Obj_SetX, Obj_SetY and ObjEffect_SetVertexXY(OE_MagicCircle, 0, -25, -25); it rolate correctly.
* Nimble facepalm
« Last Edit: March 24, 2010, 07:57:33 PM by Nimble »

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: Danmakufu Q&A/Problem Thread v3
« Reply #460 on: March 25, 2010, 03:58:41 PM »
You have to define your vertices around the 0,0 point if you want to use ObjEffect_SetAngle. For a 64x64 image, it would be something like:

ObjEffect_SetVertexXY(obj, 0, -32, -32);
ObjEffect_SetVertexXY(obj, 1, 32, -32);
ObjEffect_SetVertexXY(obj, 2, 32, 32);
ObjEffect_SetVertexXY(obj, 3, -32, 32);

Then you can set the angle with ObjEffect_SetAngle(obj, 0, 0, angle);

I usually just use trigonometry and set the XY coordinates every frame instead of dicking around with the 0,0 point and SetAngle. But I also like to fuck around with the shape of my objects, so :V

I've actually tried doing this, and even though this does work, it's not all that accurate. If it happens to be a circle and you try to spin it this way, you'll notice it'll always be a bit off and you can't ever quite get it to be perfect. There is a a way to achieve that, though, but you can't do it this way. Instead of setting definite points in SetVertexXY and using SetAngle to spin it, you'll revolve the actual XY coordinates themselves in a circle around an imaginary center (center of the image) using angles to define the points and with a radius half the width/height of the desired image. This way, even if your circle may not be a perfect one, it will definitely rotate like it. Even if it's an oval and not a circle, it can easily morph it too look like one and spin around it's actual center.  A few pixels does make a difference.  This is the code you want.

Code: [Select]
ObjEffect_SetVertexUV(obj,0,0,0);
ObjEffect_SetVertexUV(obj,1,0,64);
ObjEffect_SetVertexUV(obj,2,64,0);
ObjEffect_SetVertexUV(obj,3,64,64);

while(!Obj_BeDeleted(obj)){
Obj_SetPosition(obj,GetX,GetY);

ObjEffect_SetVertexXY(obj,0,radius1*cos(ang1),radius1*sin(ang1));
ang1+=360/4;
ObjEffect_SetVertexXY(obj,2,radius1*cos(ang1),radius1*sin(ang1));
ang1+=360/4;
ObjEffect_SetVertexXY(obj,3,radius1*cos(ang1),radius1*sin(ang1));
ang1+=360/4;
ObjEffect_SetVertexXY(obj,1,radius1*cos(ang1),radius1*sin(ang1));
ang1+=360/4;


ang1+=angrotation;
yield;
 }



To make this work, you'll have to plug in some variables. I already explained what the radius should be.
As for ang1, this image is set to spin. Plugging in ang1 starting at 0 at the beginning of the task, each ang1+=360/4; spins the degrees of the angle by 90 degrees, to draw the left, right, top, and bottom of the image.  ang1+=angrotation at the end there will be your angular rotation after each of the XY coordinates have been set. It works by shifting the entire ang1 after it made a complete 360 and drew the said image at those points. You'll have to plug in and define ang1, radius1, and angrotation yourself at the beginning of the object task.

Azure Lazuline

  • Looooove!!
  • PM me for free huggles and love!
    • Entanma Project - indie game development
Re: Danmakufu Q&A/Problem Thread v3
« Reply #461 on: March 25, 2010, 10:27:57 PM »
That's getting overly complicated. If it doesn't spin perfectly, then that just means your vertices are off.

Re: Danmakufu Q&A/Problem Thread v3
« Reply #462 on: March 25, 2010, 10:30:45 PM »
Ummm why not just use this?

Code: [Select]
   ObjEffect_SetVertexXY(obj, 0, x+(radius)*cos(angle), y+(radius)*sin(angle));
   ObjEffect_SetVertexXY(obj, 1, x+(radius)*cos(angle+90), y+(radius)*sin(angle+90));
   ObjEffect_SetVertexXY(obj, 2, x+(radius)*cos(angle+180), y+(radius)*sin(angle+180);
   ObjEffect_SetVertexXY(obj, 3, x+(radius)*cos(angle+270), y+(radius)*sin(angle+270));
angle+=2;
« Last Edit: March 25, 2010, 10:32:43 PM by Demonbman »

Fujiwara no Mokou

  • Hourai Incarnate
  • Oh, so this trial of guts is for ME?
    • Profile
Re: Danmakufu Q&A/Problem Thread v3
« Reply #463 on: March 27, 2010, 01:35:39 AM »
Ummm why not just use this?

Code: [Select]
code

It's just not my style.

Elementoid

  • Having a heated affair with feux-familiars
Re: Danmakufu Q&A/Problem Thread v3
« Reply #464 on: March 27, 2010, 05:11:12 PM »
I'm having a bit of a problem with this tutorial. I tried copying the end code with the bullets that are supposed to bounce off the sides, but it's not working.

After figuring out there was a missing bracket for the task itself, Danmakufu is now telling me that "Bullet" isn't identified. I've got yields in the right places (I think - one at the end of MainLoop and the end of the task's while statement, right?) and as far as I can tell there aren't any other problems.

If someone could help me with this, I would be much obliged. This is the code I have right now.

Furienify

  • Yeehaw!
  • Equestrian Fansubber
    • Youtube Channel
Re: Danmakufu Q&A/Problem Thread v3
« Reply #465 on: March 27, 2010, 05:19:38 PM »
I'm having a bit of a problem with this tutorial. I tried copying the end code with the bullets that are supposed to bounce off the sides, but it's not working.

After figuring out there was a missing bracket for the task itself, Danmakufu is now telling me that "Bullet" isn't identified. I've got yields in the right places (I think - one at the end of MainLoop and the end of the task's while statement, right?) and as far as I can tell there aren't any other problems.

If someone could help me with this, I would be much obliged. This is the code I have right now.

You have your bullet task in @Finalize. I don't think it should be there. Your script should look something like this:

Code: [Select]
@Finalize{
Deletion Stuff Here
   }

Tasks/Functions go here

} <---script_enemy_main final bracket

Edit: Also, it's much easier to use Pastebin for danmakufu stuff. Just c/p.

Iryan

  • Ph?nglui mglw?nafh
  • Cat R?lyeh wgah?nagl fhtagn.
Re: Danmakufu Q&A/Problem Thread v3
« Reply #466 on: March 27, 2010, 06:16:55 PM »
I am typing something, and then my internets explode for an hour. Great.

Anyways, yeah, what Fury said.


On another note, I advise you to read the tutorial as it is posted on this forum, rather than on the wiki. It may very well be that the wiki formating has screwed up some of the code parts.

However, the missing } bracket error seems to be in the original, too. I'd change it, but since the post it is in is no longer mine, I can't.  :(
Old Danmakufu stuff can be found here!

"As the size of an explosion increases, the numbers of social situations it is incapable of solving approaches zero."

Elementoid

  • Having a heated affair with feux-familiars
Re: Danmakufu Q&A/Problem Thread v3
« Reply #467 on: March 27, 2010, 06:27:21 PM »
Furienify: I guess when I read "behind @Finalize" I assumed that it had to be in it.

Iryan: Mkay, I'll check out the other tutorial.

Than you both for the prompt responses. They helped a lot.  :)

Re: Danmakufu Q&A/Problem Thread v3
« Reply #468 on: March 27, 2010, 06:56:12 PM »
However, the missing } bracket error seems to be in the original, too. I'd change it, but since the post it is in is no longer mine, I can't.  :(

Fixed both forum and wiki versions.
« Last Edit: March 27, 2010, 07:00:12 PM by Naut »

Furienify

  • Yeehaw!
  • Equestrian Fansubber
    • Youtube Channel
Re: Danmakufu Q&A/Problem Thread v3
« Reply #469 on: March 28, 2010, 12:19:22 AM »
Posting here since I can't get any help on IRC.

Background: I'm using Helepolis' custom cutin script.

1. Occasionally (I can't seem to pin it down) the cutin is called but it doesn't make the whole 'spellcard noise'. Is there any way to fix this?

2. On the second card of my entry, the cutin flashes by for maybe a third of a second and then runs away as fast as possible. On my first card this isn't a problem, but neither make any noise.

Any tips on how to fix this?

Blargel

  • RAWR!
  • I'M AN ANGRY LOLI!
Re: Danmakufu Q&A/Problem Thread v3
« Reply #470 on: March 28, 2010, 02:36:30 PM »
Posting here since I can't get any help on IRC.

Background: I'm using Helepolis' custom cutin script.

1. Occasionally (I can't seem to pin it down) the cutin is called but it doesn't make the whole 'spellcard noise'. Is there any way to fix this?

2. On the second card of my entry, the cutin flashes by for maybe a third of a second and then runs away as fast as possible. On my first card this isn't a problem, but neither make any noise.

Any tips on how to fix this?

I noticed these problems as well. I dunno what the trigger is, but under certain conditions, the sound doesn't play. In the script I'm working on currently, all the cut-in calls don't make a sound, not even the normal CutIn ones. It probably has something to do with the timing in mine because I call them in @MainLoop about a second after the spellcard script starts. The easiest fix is probably just to make a sound effect yourself, which is what I will be doing once I get around to adding sound.

As for the cut ins disappearing too quickly, which cut in style were you using? I did notice that if you use the MoF style cut ins, the portrait will move kinda strangely. It probably is a mistake or oversight in the custom cut in script itself and Helepolis or someone else who feels like reading through the code needs to fix later.
<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.

Chronojet ⚙ Dragon

  • The Oddity
  • 今コソ輝ケ、我ガ未来、ソノ可能性!!
Re: Danmakufu Q&A/Problem Thread v3
« Reply #471 on: March 28, 2010, 06:15:03 PM »
I noticed these problems as well. I dunno what the trigger is, but under certain conditions, the sound doesn't play. In the script I'm working on currently, all the cut-in calls don't make a sound, not even the normal CutIn ones. It probably has something to do with the timing in mine because I call them in @MainLoop about a second after the spellcard script starts. The easiest fix is probably just to make a sound effect yourself, which is what I will be doing once I get around to adding sound.

As for the cut ins disappearing too quickly, which cut in style were you using? I did notice that if you use the MoF style cut ins, the portrait will move kinda strangely. It probably is a mistake or oversight in the custom cut in script itself and Helepolis or someone else who feels like reading through the code needs to fix later.

This happens to me, too, but I just call PlaySE("se\seUseSpellCard.wav"); or whatever the name of the sound was.

Nobu

  • Serendipitous Youkai
  • *
  • i post while naked
    • My Tumblr
Re: Danmakufu Q&A/Problem Thread v3
« Reply #472 on: March 28, 2010, 07:45:42 PM »
As for the cut ins disappearing too quickly, which cut in style were you using? I did notice that if you use the MoF style cut ins, the portrait will move kinda strangely. It probably is a mistake or oversight in the custom cut in script itself and Helepolis or someone else who feels like reading through the code needs to fix later.

I thought it was kinda strange too, until I actually looked at how the MoF cut-ins move. They really do do that weird quick movement from the top right corner to the bottom, then rise up slowly. I think it's more noticeable/looks weird due to the level of opacity in the initial part, but the movement itself is pretty much spot on.
Tumblr (sometimes NSFW) | PM for Facebook

Furienify

  • Yeehaw!
  • Equestrian Fansubber
    • Youtube Channel
Re: Danmakufu Q&A/Problem Thread v3
« Reply #473 on: March 28, 2010, 08:18:29 PM »
It's not Kanako-style though, I'm using the Nazrin type. I've tried all 3, and for this one particular spell it just goes by really quickly.

Blargel

  • RAWR!
  • I'M AN ANGRY LOLI!
Re: Danmakufu Q&A/Problem Thread v3
« Reply #474 on: March 28, 2010, 08:29:25 PM »
I thought it was kinda strange too, until I actually looked at how the MoF cut-ins move. They really do do that weird quick movement from the top right corner to the bottom, then rise up slowly. I think it's more noticeable/looks weird due to the level of opacity in the initial part, but the movement itself is pretty much spot on.

Yeah, I realize MoF cut ins do move like that, but I think it moves too fast or something. I dunno.



ANYWAYS, time for a rant about the idiocies of Danmakufu because I'm super frustrated at this thing I was working on that became impossible to do. Period. No work arounds will save you here. My goal was to make a function called StringToNumber. It was supposed to take a string that has only numbers and one or no decimal points and convert it into the corresponding float. However, I came across two issues, one of which I overcame and one of which completely stumped me and caused me to give up and rage at Danmakufu.

Issue 1: The Character Data Type
Most of you should be familiar with how Danmakufu stores integers are floats and, therefore, all numbers are stored as the same data type and can be freely compared with each other. You may also be aware of the boolean data type which stores only true or false, as well as the string data type which stores letters (and numbers and symbols). What you may not know if you only worked with Danmakufu is that there is also a character data type. The string data type is actually an array of characters, which means that you can do stuff like "this is a string lol"[3] and it will give you the character "s". That's pretty neat and all, but the issue comes up when you try to do if("this is a string lol"[3] == "s"), or in other words, see if a specific character in a string is a certain character. At first glance, that looks fine, but when you try to run it, Danmakufu will throw an error. This would likely stump a lot of Danmakufu users who never touched another scripting/programming language, and it even stumped me for a bit until I realized that "this is a string lol"[3] gave me a character and that I was comparing this character to a 1-character-long-string "s". I was doing the equivalent of if([1, 2, 3, 4][3] == [4]) which would compare a number to an array. What I really had to do was this: if("this is a string lol"[3] == "s"[00]).

What the hell, right? Well this was the least of my problems.

Issue 2: WTF Fail Math
Hey, what's 1*10000000000? It should be 10000000000, right? Well, not according to Danmakufu! What's that you say? Danmakufu can't possibly be that stupid? Well guess what? It is. It reallly is THAT stupid. If I used OutputDebugString to output just 10000000000, it would output it just fine. However, if I outputted 10000000000*1, it would give me 9999997952. That's 2048 off from what it should be, by the way. Likewise, multiplying 10000000000 with 2 would multiply the inaccuracy by 2. Just for no apparent reason, multiplication with large numbers becomes extremely inaccurate. I have found no way to solve this problem. The engine is just that bad.

In all the times I've been working with Danmakufu, I've always thought that it was a weak language and that it had some rather strange and somewhat annoying quirks. I also thought that some of its features could use some polishing, However, I had never thought I'd encounter a big enough problem that would prevent me from doing something I wanted to do. I always thought that there would be a workaround to get around or somewhat fix the problem. And now I've been proven wrong. Thanks Danmakufu for being a pain in the ass. I can't wait for Musuu to become as useable as Danmakufu without all of its idiocies.
« Last Edit: March 28, 2010, 08:31:21 PM by Blargel »
<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.

Re: Danmakufu Q&A/Problem Thread v3
« Reply #475 on: March 28, 2010, 08:41:57 PM »
Quote
2048 off
Sounds like a memory problem or something. Looks like the developers never even considered large numbers :moogy:

Iryan

  • Ph?nglui mglw?nafh
  • Cat R?lyeh wgah?nagl fhtagn.
Re: Danmakufu Q&A/Problem Thread v3
« Reply #476 on: March 28, 2010, 09:18:18 PM »
Issue 2: WTF Fail Math

 :o

Waitaminute...

If it is only the mathmatical operators of second and higher order that danmakufu fucks up, wouldn't it theoretically be possible to test how exactly danmakufu fucks up the math and then, if it fucks it up the same way everytime (which is most likely true), write a function that corrects these errors by the means of addition and subtraction? I know it is incredibly time-consuming, stupid, bothersome, asinine and totally not worth the effort, but damnit!

On an unrelated note, I don't think I've ever used the word fuck on a forum before, most certainly not more than once in a single post.  :/
Old Danmakufu stuff can be found here!

"As the size of an explosion increases, the numbers of social situations it is incapable of solving approaches zero."

Re: Danmakufu Q&A/Problem Thread v3
« Reply #477 on: March 28, 2010, 09:21:04 PM »
function Goddamnbasicfuckingmaththatdanmakufucan'tevendoproperlyshiiiiiiiiiiit(number1, number2, operation{
   //lol have fun
}

On an unrelated note, I don't think I've ever used the word fuck on a forum before, most certainly not more than once in a single post.  :/
Programming does that to ya

Azure Lazuline

  • Looooove!!
  • PM me for free huggles and love!
    • Entanma Project - indie game development
Re: Danmakufu Q&A/Problem Thread v3
« Reply #478 on: March 28, 2010, 09:27:44 PM »
(stuff about character data type)
if("this is a string lol"[3] == "s")

The character data type is indicated the same way as in C - with single quotes, not double quotes. Use single quotes around 's' and it should work perfect without having to use the "s"[0] ugly workaround.
As for your other question, I have no clue.

Drake

  • *
Re: Danmakufu Q&A/Problem Thread v3
« Reply #479 on: March 28, 2010, 10:39:30 PM »
<- uses single-quotes for characters
<- giggled at bagel for first problem
<- wtfd at second

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