Ok, what about:
Or if there are going to be eyes, at least make them firey:
Meanwhile in snail land:
(Remember that having a white background drains more battery power.)
Ok, what about:
Or if there are going to be eyes, at least make them firey:
Meanwhile in snail land:
(Remember that having a white background drains more battery power.)
Yeah, Iād say go with that. I like the jaw. It looks a lot more better than my design of it.
How big of a dent does it make when it comes to battery, if that question isnāt too hard to answer?
Also, like the snail design.
Yeah, the jaw is perfect now, and the flame eyes can be itās soul still burning within it.
Iād personally wouldnāt mind seeing designs from other users in the community. We can as a community submit some designs and critique one another.
I donāt even have a general idea, but Iām pretty sure it does because lit pixels draw power but unlit pixels donāt.
It can also use less memory in certain circumstances because columns of black pixels around the edge of an image are essentially waste.
Things with white backgrounds can be adapted to black:
Which one?
This one?
Or this one?
Thanks. Might need a bit more freezing though.
Agreed.
Most sprites need to go through a few revisions as well.
Sometimes having more than one person contribute to a sprite works better.
I guess when you put that into consideration, it would be beneficial overall.
Iād go with the one that has the rounded six teeth ( the second one).
Youāre welcome, and also true. You should add it in if you can.
Exactly. I hope a good portion of the community could contribute to this game in some way if it were to come to being.
On the Arduboy, because of the way the screen format is, images are stored in columns of 8 pixels, so it pays for them to be multiples of 8 vertically, but not horizontally, so if it turns out at the end that all the 32x32 images could fit into 32x31, that would save 4 bytes per image (assuming compression isnāt being used).
Good, thatās my prefered one too.
The best I can think to do it throw in some snowflakes:
I concur.
Why not just let the player have the option to invert the game from a menu?
That could also work if it isnāt a hassle to inplement.
So something like this?
So telling from the image, itās a 8x16 image, and letās say that the red is nothing more than blank. So what youāre saying is if it isnāt utilizing the most right columns, it doesnāt even need to be added and the image can just be 7x16, correct? Also, can it be stored as decimals instead of just hexidecimal?
Perfect! This will make @Freezingsnail proud!
Edit: What if you call it Salinkryo. Itās the combinations of the word Kryo, ( spelled ĪŗĻĻĪæ in greek) which means cold, and salinkari, ( spelled ĻαλιγκάĻι in greek) which means snail. I used google translate to get the words.
Edit2: Also along with sprites, we should come up with original move concepts.
And also, Would you also say that battle animations are necessary, like fire being blasted at the enemy when using a fire move?
Edit 3: The Prequel ( joke):
Iāve made my version of @Freezingsnailās, well, snail. Here are the variations
The difference between them all are the eyes.
I also found this design while searching in google frozen snails ( if you love snails, donāt search that up). It looks like something that could also be adapted.
The name comes from a adjective noun generator, like the xbox live suggest a name use to spit out.
Iāll leave the other sprites I make up to interpretation as who they may be for.
Unfortunately sprites are also not my strong point.
Interesting. My name is simply my last name backwards.
They look pretty good in my opinion. Spookuid is just a name that Iāve came up literally now for the first one. And the second one. Hmmm⦠Mr.Krabs. No, Iām joking. How about Crabjoy? I donāt know, Iām bad at naming.
Hang on, Iāll dig Emutyās image outā¦
It works like this:
Hence a column of block is just a block of 0x00
, which is essentially a waste which can be trimmed off.
Essentially yes.
If the image was going to be drawn with a mask then the black background would probably be cut off anyway.
If the image was going to be drawn solidly then itās usually possible to draw a black rectangle beforehand.
It does depend on the circumstances, but usually cropping images one way or another ends up being cheaper in the long runā¦
Yes, but really thereās no difference.
Decimal, hexadecimal and binary are all just different ways of representing the same thing.
In the end it will all be converted into binary so that the computer (the Arduboy) can understand it.
If you donāt yet understand hexadecimal or binary, have a read of this, itās my favourite introduction to binary and hex.
(So much so that Iāve added it to my resource collection.)
Could work.
Really I think if weāre going to be basing characters on people on the forum it would be best to get them to either choose or accept the name, so it probably doesnāt matter much whether I like it or not, it would be up to @Freezingsnail.
(Kryokali is also an option :P
.)
Yep, as in cryogenesis, cryostasis and cryokinesis
I guessed thatās what it would be.
(Salinkari is also an island in Finland aparently.)
That would take a massive chunk of memory, so if there were animations I think it would be best to restrict the animations to just simple things matching the element of the move.
I think the shell is a big improvement.
I prefer the first three but donāt have a particular favourite out of those.
I found where it comes from. Strange website.
Itās a little hard to tell what they are because of the detail.
Looks like a squid with skull markings and a crab with odd markings on the front.
If in doubt, portmanteaus.
With a few exceptions like Ekans and Roggenrola, most Pokemon names are portmanteaus (e.g. infernape = inferno + ape, rhyhorn = rhino + horn, articuno = arctic + uno).
Aww man. All of this brainstorming just makes me want this game to happen already! Itāll take a long time though, if itās going to happen at all.
Thatās the gist of it.
Also I was thinking about how type bonus could be implemented last night, as Iām also trying add that in the project Iāve been working on. I was thinking of using an array along this line
int effectivenessMatrix[] =
f w e f water/flying //target types
fire { 1, .5, 1, 1, .5,
water 2, 1, 1, 1, 1,
electric 1, 2, 1, 2, 4,
flying 1, 1, 1, 1, 1 }
//^ attack types
And then using enums you could pull out the modifier:
enum types : int {
fire //0
water //1
electric //2
flying //3
water/flying //4
int getEffectivenessModifier( types attack, types target){ //water , fire
//(attack * total number of types ) * target
index = ((static_cast<int>(attack) * 5 ) + static_cast<int>(target)); //((1 * 5 ) + 0 ) = 5
return effectivenessMatrix[index]; // returns 2 for 2x damage.
}
This is also definitely better than how I had first planned it out in my project (forloops running through a list)
I learned Binary once, but I forgot it. Iāll use your link to refresh my memory while learning hex. Thankyou.
True, itās up to @Freezingsnail to decide that. Kryokali is also a really good name.
I saw that too when I was searching up salinkari. Thatās a funny coincidence.
I guess it would be best to keep it simple then if it was able to be fitted.
Thankyou. I like the first one, but the third oneās a close second.
Haha, thatās hilarious. I gotta check that out.
True. Iāll keep that in mind.
Pseudo code Iām guessing?
You canāt store .5
in an int
(or at least not like that).
The general idea is close.
Iāll write something and post it when Iām done.
Yea I know you canāt have decimals, otherwise it wouldnāt be an integer. It could be -1 or something else, it really doesnāt matter what that numbers are since theres no damage formula to plug them in. Or you could just double all of the numbers and then have the modifier over 2 in the equation as a simple fix.
enum class Type : uint8_t
{
None,
Fire,
Water,
Electric,
Wind,
};
constexpr const uint8_t TypeCount = 4;
class DualType
{
private:
uint8_t value;
constexpr const uint8_t Type1Mask = 0x0F;
constexpr const uint8_t Type2Mask = 0x0F;
constexpr const uint8_t Type1Shift = 0;
constexpr const uint8_t Type2Shift = 4;
constexpr uint8_t packTypes(Type type1, Type type2)
{
return ((static_cast<uint8_t>(type1) & Type1Mask) << Type1Shift) | ((static_cast<uint8_t>(type2) & Type2Mask) << Type2Shift);
}
public:
constexpr DualType(Type type) : value(packTypes(type, Type::None)) {}
constexpr DualType(Type type1, Type type2) : value(packTypes(type1, type2)) {}
constexpr Type getType1(void) const
{
return static_cast<Type>((this->value >> Type1Shift) & Type1Mask);
}
constexpr Type getType2(void) const
{
return static_cast<Type>((this->value >> Type2Shift) & Type2Mask);
}
};
enum class Modifier : uint8_t
{
Same,
Half,
Double,
Quarter,
Quadruple,
};
uint16_t applyModifier(uint16_t value, Modifier modifier)
{
switch(modifier)
{
case Modifier::Same: return value;
case Modifier::Half: return value >> 1;
case Modifier::Double: return value << 1;
case Modifier::Quarter: return value >> 2;
case Modifier::Quadruple: return value << 2;
default: return value;
}
}
Modifier typeTable[TypeCount][TypeCount] PROGMEM =
{
// Fire
{
Modifier::Half, // Fire
Modifier::Quarter, // Water
Modifier::Same, // Electric
Modifier::Double, // Wind
},
// Water
{
Modifier::Double, // Fire
Modifier::Same, // Water
Modifier::Same, // Electric
Modifier::Half, // Wind
},
// Electric
{
Modifier::Same, // Fire
Modifier::Quadruple, // Water
Modifier::Same, // Electric
Modifier::Half, // Wind
},
// Wind
{
Modifier::Half, // Fire
Modifier::Double, // Water
Modifier::Same, // Electric
Modifier::Half, // Wind
},
};
Modifier getModifier(Type attackType, Type defendingType)
{
return (attackType == Type::None || defendingType == Type::None)
? Modifier::None :
static_cast<Modifier>(pgm_read_byte(&typeTable[static_cast<uint8_t>(attackType)][static_cast<uint8_t>(defendingType)]));
}
uint16_t handleAttack(uint16_t baseValue, Type attackType, DualType defendingType)
{
const Modifier mod1 = getModifier(attackType, defendingType.getType1());
baseValue = applyModifier(baseValue, mod1);
const Modifier mod2 = getModifier(attackType, defendingType.getType2());
baseValue = applyModifier(baseValue, mod2);
return baseValue;
}
This is a start at least.