photobucket is better when hosting images. All I see are mediafire ads.
Also, would this help?
http://www.sprites-inc.co.uk/
Printable View
photobucket is better when hosting images. All I see are mediafire ads.
Also, would this help?
http://www.sprites-inc.co.uk/
Spread gun (contra) finished. Working on Search Snake style weapon next.
That's because it's a link to a qst file ;) , and yeah I have that site bookmarked. ;p But thanks anyway.
Also, I came across a bug where the boomerang had no limit of times fired on screen. Metal Saw!!! Anyway to reproduce that where it doesn't return. (Not much of a brang that way, but what the heck)
Did you have a good trip? Mine was great.
Version 0.3 for 461 http://www.mediafire.com/?ftww02zzyix
it's getting there. All tiles for combos use c-set 0-4. enemies, sprites 5-9. Pallete and recoloring work almost complete. Dr Wiley complete tiles added.
Onto the enemies now. I'm in a dilemma as to what enemy the Gleeok should be...hmm...
Well I went ahead and scripted leaf shield(which uses 4 ffc's..not quite done yet), and metal saw from MM2, as well as an optional teleport beam, and Gravity Well. Yep, Gravity well! It sucks in enemies within proximity and damages the shit out of them...and you think Aires Saber is overpowered. :D
Hopefully i'll have a working enemy sprite sheet done in a bit. And now that I know about ffc's and animating large ffc's, there should be plenty of variety.
Now where did I put my spare time at? ...I know it's around here somewhere...
EDIT: Triple post?! ..ouch. If anyone want's to merge them that's fine by me.
Are you coding these weapons in the same way I am? That is, FFC scripts running on FFCs 29, 30, 31?
We'll want to synthesize all weapons into a single easy-to-use script before we finish the toolbox. To that end, I'm going to be re-scripting my custom weapons to be more modular.
Take a look at my SHMUP enemy script. Notice how I can just keep adding enemies by adding two "if" statements? Thats what I'm going for with weapons. That way, you can add more just by sticking stuff into the code and not changing anything else.
If I have time, I'll set that up this weekend so you can just create code to dump into the weapon script.
Well as a matter of fact, I am. Well ffc 25-29 to be exact, as the global weapon script I was working on ran into a few problems one could say. I still would like to get one scripted for the benefit of people that know squat about scripting, as it was designed to be really easy to use. Some global variables and item[D] variables, and that's really it. No messing with ffc's at all. I haven't given up though because I think the community needs one.
Bact to ffc's: Well I kinda broke the script into 3 sections, didn't change anything though, for example ;
And the jist of the general weapon part:Code://========================================================
// ITEM SCRIPT MAKANITO
// translation: deadly air
// It creates a vacuum that sucks in nearby enemies
// and can kill them instantly.
// At a high level this is probably the most powerful
// attack in the game. exp must be set accordingly.
// D0 - the CSet of the projectile
//=========================================================
item script Makanito{
void run (int cset){
int deadly_air_combo = 10;
ffc deadly_air = Screen->LoadFFC(29);
if (makanito_level == 1){
Game->PlaySound(11);
makanito_exp++;
if(Link->Dir == 0) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y - 16;
deadly_air->Vy = -1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo;
deadly_air->CSet = cset;
}
if(Link->Dir == 1) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y + 16;
deadly_air->Vy = 1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo;
deadly_air->CSet = cset;
}
if(Link->Dir == 2) {
deadly_air->X = Link->X - 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = -1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo;
deadly_air->CSet = cset;
}
if(Link->Dir == 3) {
deadly_air->X = Link->X + 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = 1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo;
deadly_air->CSet = cset;
}
}
else{
if (makanito_level == 2){
Game->PlaySound(35);
makanito_exp++;
if(Link->Dir == 0) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y - 16;
deadly_air->Vy = -1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+1;
deadly_air->CSet = cset;
}
if(Link->Dir == 1) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y + 16;
deadly_air->Vy = 1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+1;
deadly_air->CSet = cset;
}
if(Link->Dir == 2) {
deadly_air->X = Link->X - 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = -1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+1;
deadly_air->CSet = cset;
}
if(Link->Dir == 3) {
deadly_air->X = Link->X + 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = 1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+1;
deadly_air->CSet = cset;
}
}
else{
if (makanito_level == 3){
Game->PlaySound(35);
makanito_exp++;
if(Link->Dir == 0) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y - 16;
deadly_air->Vy = -1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+2;
deadly_air->CSet = cset;
}
if(Link->Dir == 1) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y + 16;
deadly_air->Vy = 1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+2;
deadly_air->CSet = cset;
}
if(Link->Dir == 2) {
deadly_air->X = Link->X - 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = -1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+2;
deadly_air->CSet = cset;
}
if(Link->Dir == 3) {
deadly_air->X = Link->X + 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = 1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+2;
deadly_air->CSet = cset;
}
}
else{
if (makanito_level == 4){
Game->PlaySound(35);
makanito_exp++;
if(Link->Dir == 0) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y - 16;
deadly_air->Vy = -1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+3;
deadly_air->CSet = cset;
}
if(Link->Dir == 1) {
deadly_air->X = Link->X;
deadly_air->Y = Link->Y + 16;
deadly_air->Vy = 1;
deadly_air->Vx = 0;
deadly_air->Data = deadly_air_combo+3;
deadly_air->CSet = cset;
}
if(Link->Dir == 2) {
deadly_air->X = Link->X - 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = -1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+3;
deadly_air->CSet = cset;
}
if(Link->Dir == 3) {
deadly_air->X = Link->X + 16;
deadly_air->Y = Link->Y;
deadly_air->Vx = 1;
deadly_air->Vy = 0;
deadly_air->Data = deadly_air_combo+3;
deadly_air->CSet = cset;
}
}}}} //end of else statements
}
}
With this added inside the while(enemy->IsValid) part:Code:// =================================
// MAKANITO MOVEMENT
// =================================
if(this_ffc->Data == beam_animation_makanito){
damage = 1;
if ( (!(this_ffc->Data == beam_animation_makanito))||(this_ffc->X < 10) || (this_ffc->X > 230) || (this_ffc->Y > 150) || (this_ffc->Y < 10)){
this_ffc->Data = 1;
this_ffc->CSet = 0;
wobble = 0;
initialize = 0;
this_ffc->X = 16;
this_ffc->Y = 16;
}
}
else{
Code://==============================================================================
// *MAKANITO VACUUM EFFECT*
if( ( (this_ffc->Data == beam_animation_makanito) || (this_ffc->Data == beam_animation_makanito+1) ||
(this_ffc->Data == beam_animation_makanito+2) || (this_ffc->Data == beam_animation_makanito+3) )
&& (Screen->ComboS[ComboAt(this_ffc->X+8, this_ffc->Y+8)] == 0) && !(current_enemy->Tile==0) ){
if((this_ffc->X > current_enemy->X) && (this_ffc->X < current_enemy->X+32)
&& (this_ffc->Y > current_enemy->Y-32) && (this_ffc->Y < current_enemy->Y+32)){current_enemy->X++;}
if((this_ffc->X < current_enemy->X) && (this_ffc->X > current_enemy->X-32)
&& (this_ffc->Y > current_enemy->Y-32) && (this_ffc->Y < current_enemy->Y+32)){current_enemy->X--;}
if((this_ffc->Y > current_enemy->Y) && (this_ffc->Y < current_enemy->Y+32)
&& (this_ffc->X > current_enemy->X-32) && (this_ffc->X < current_enemy->X+32)){current_enemy->Y++;}
if((this_ffc->Y < current_enemy->Y) && (this_ffc->Y > current_enemy->Y-32)
&& (this_ffc->X > current_enemy->X-32) && (this_ffc->X < current_enemy->X+32)){current_enemy->Y--;}
}
//===============================================================================
And some variables, with the experience points handled mainly by the Global Script. As you can see though, they aren't nearly done yet, but I'll have some cool stuff to showcase soon enough. :)
Also, I can't believe no one's done this yet (maybe no ones thought of it...?) but people complain about inputR and inputL as running out of buttons to script stuff to. But what about multiple inputs? for example do you need jump AND slide to be different buttons in a side scroller? ...just an idea.
Quote:
Originally Posted by C-Dawg
Isn't it set up kinda like that already? :shrug:
I fixed the pallete distopia(finally) enabling me to add enemies at last. Got a bunch of weapons rolling...enough for a demo at some point, more recoloring ect.. It's actually very easy to use now. :) With 3 csets to spare (5, 10, and 11.) 10 and 11 is actually 0 and 1, but with a purple for ripping ease. enough rambling though.
Thoughts? MegaMan_Tileset_ver0.5_b584
Edit: Well that versions almost obsolete now, I worked on it a bit more. :) I would like to add a scripting base to it though, something simple, just some weapon stuff. A few to start with, nothing crazy. Maybe megashooter, metal blade, and work from that. The roc's feather will work for the time being. You mentioned a slightly moded version of GW, so I'll wait for that. Also I was thinking to add a [D] variable so the enemy cset flashing and knockback is disabled by default unless specified by the author.
Oh, and started comboing...Wow, it's so easy to make screens for these sidescrollers, a demo and working tileset is not that far off. ...also added weapon/item sprites from gba and snes games, for forwards compat, should anyone want to add updated tiles...right now i'm pleased with the way the NES graphics actually look. Wasn't too sure untill I started actually using them.
Yep, sidescrolling screens are easier to make because they don't require floor tiles and doodads everywhere. But they require more scripting since you need to account for gravity with most of your entities.
By the way - it's not "mega shooter." It's the arm cannon, or Mega Buster in later games. Arm cannon is exceedingly simple - just use my ship cannon and let it fire in four directions. Should be easy to let the player upgrade to Mega Buster (charged shots, maybe re-work the Cancer Charge to make it more like megaman) or the Bass Buster (eight directions).
I finished the Leo Lazer (stupidly overpowered against bosses that don't simulate flashing invulnerability, since it hits repeatedly for 8 damage a tic across the whole screen). Only five more custom weapons to go before I'm done with the Zodiac weapons. We can then get to work synthesizing my scripts with yours. That should give the designer about, what, 16 or so weapons to assign to robot masters?
We should probably next work on a weapon select system. Arm cannon can be default A weapon, and B weapon should be the custom weapons aquired from bosses. That way the player can use the normal subscreen to select a weapon, but we don't have to worry about two scripts competing for the same FFCs.
A demo is probably a long way off. We'll still need scripts that:
(1) Give each weapon their own ammunition (global variables that get loaded into the magic bar when a particular weapon is fired and before magic is checked, perhaps)
(2) Set up a global or ffc script to handle sidescrolling and L-button jumping
(3) The standard megaman boss selection screen
and MOST importantly
(4) modular robot master scripts that don't require the designer to do any scripting to customize their robot masters.
Taurus Flame (easily used for Air Cannon) and Virgo Whip (sort of Castlevania-ish) are now complete.
Just two more weapons to do, I think - Sagittarius and Capricorn.
Sweet work with the new weapons btw. Also!, What do you think about 6! ffc weapon scripts active! (!)
-ffc's 31,30,29- for Mega cannon(charge shot ffc 32...hmm, how do you set your's up again?). 28,27,26,25 for all other weapons. Although it would be extremely rare that all 8(7) would be used at any time. This way you could have A + B weapons at once. And the way I'm doing ffc weapons now pretty much eliminates most of the slowdown that you get. ....so long as there is less than 100 enemies on screen at once.....maybe 25 with 7ffc's.....hrm.
And also... Because of the non buggy and awesomely implemented:
A 2x2 charge shot. with other weapons using these, along with bosses, etc.Quote:
int TileWidth
* The number of tile columns composing the FFC.
int TileHeight
* The number of tile rows composing the FFC.
int EffectWidth
* The width of the area of effect of the combo associated with the FFC,
* in pixels.
int EffectHeight
* The height of the area of effect of the combo associated with the FFC,
* in pixels.
Large enemies and bosses only need to be 1 ffc. Did you know the Giant crab boss is only 5 ffc's?
Anyhoo, I scripted some turret firing scripts, that fire ffc's directly at link, along with working on utility ffc projectile scripts that allow you to set any kind of effect to projectiles by adding it to the slot the first ffc uses as projectiles. (homing, spread shot, fork shot, wrap-around shot, etc) These activate once the ffc velocity is greater than 0, or if this->Data is greater than 8. Although I STILL need help with the circular shot. (as seen in dr.Wiley fight in mm3.
Here's one of many failed attempts. Yes, I admit, I suck at Geometry. :p
Can you fix it doctor?Code:ffc script ffc_wobble2{
void run(){
int wobble = 0;
while(true){
if(this->Y > 168||this->Y < 0||this->X > 248||this->X < 0){
this->X = 0; this->Y = 0; this->Vx = 0; this->Vy = 0;
this->Data = 1;
}
if(this->Vx != 0 || this->Vy != 0){
int x = this->Vx; int y = this->Vy;
this->Vx = x *Sin(wobble);
this->Vy = y *Cos(wobble);
wobble++;
}
Waitframe();
}
}
}