Jump to content

Photo

Custom Boss Kit & BigEnemy DX

FFC Enemy

  • Please log in to reply
27 replies to this topic

#1 kurt91

kurt91

    Follower of Destiny

  • Members
  • Real Name:Kurtis
  • Gender:Male
  • Location:Eastern Washington University

Posted 11 March 2014 - 06:02 PM

Non-Scripter's Custom Boss Kit + BigEnemyDX

Description

Finally, a way to put an end to most of those requests for custom bosses! Inspired by the Newbie's Custom Boss used in many SMW hacks, this script will allow anybody to create their own custom bosses using nothing more than this pre-made script, the Enemy Editor, and the included bonus script "BigEnemyDX", a modified and less-buggy version of the commonly-requested BigEnemy script that allows the user more control over the exact size and details of their boss.
 
The way it works is like this. By creating up to three separate enemies with functions not normally compatible with each other, this script will combine them together into a boss with all the behaviors put together. For example, creating a boss with Peahat-style movement, but shoots fireballs at Link, forcing him to dodge attacks until the boss is vulnerable.

 

Demo Example
 
Demo Quest by Alucard648
 
Code

 
Custom Boss Kit
UPDATE 1: Added support for splitting/tribbling enemies. (Update by Alucard648)

UPDATE 2: Added support for Wizzrobe movement, as well as various bugfixes. (Update by Alucard648) 

BigEnemyDX

 

BigEnemyDX Specialty Kit (Made by Alucard648)

Contains various specialty versions of BigEnemyDX script for the following situations (All versions work identically to BigEnemyDX)

MassBigEnemy - Applies settings to all enemies on the screen

MassBigEnemy (Enemy Specific) - Applies settings to all enemies of a specific type

MassBigEnemyContinuous - Applies settings to chosen enemy as well as all summoned enemies

Setup

== Custom Boss Kit ==
 
Place an FFC with the script attached anywhere on the screen. Does not need to be visible. Choose enemies from the screen's enemy list. The first enemy on the list would be "1", the second would be "2", and so on.
 
D0: Enemy used for Movement patterns and Graphics
D1: Enemy used for Weapon fire
D2: Enemy used for Collision detection
D3: Set to 1 if you want the boss's body to not damage Link upon contact. Contact with the "core" of the boss will still cause damage.
D4: Shooter enemy's X-offset
D5: Shooter enemy's Y-offset
 
D4 and D5 only need to be used if used in conjunction with the BigEnemyDX script. They will allow your boss to shoot its weapons from the proper position. For instance, to make a dragon breath fire instead of it coming out of its crotch. The enemy used for collision can be positioned through the BigEnemyDX script.
 
Also, in most cases, the enemy used for D1 and D2 should be made invisible. That way, it will appear that the enemy used in D0 is performing all of the actions.
 
If all three slots (D0, D1, and D2) are not required and a simpler enemy is desired, leaving D2 blank should cause D1 to be used for both weapon fire as well as collision.
 
==BigEnemyDX==
 
When used correctly, this script should fix all problems that the normal BigEnemy script causes.
 
D0: Enemy on screen's enemy list (first enemy on list is "1", second is "2", etc.)
D1: Width of enemy (measured in pixels)
D2: Height of enemy (measured in pixels)
D3: Sprite X-offset
D4: Sprite Y-offset
D5: Hitbox X-offset
D6: Hitbox Y-offset
 
Resources

 
No external resources should be required. All that is needed is std.zh.
 
Special Thanks

 
I had a lot of help putting this together, so it's only fair to give credit where it's due. The people who were the biggest help to me were:
 
Alucard648 (Coding and Testing)

Russ (Coding Advice)
Anikom15 (Coding Advice)
Saffith (Coding Advice)
SUCCESSOR (Coding Advice)
Moscowmodder (Coding Advice)


Edited by kurt91, 20 March 2014 - 12:54 AM.

  • ⒸiTz SaRkI gD™ likes this

#2 Alucard648

Alucard648

    Adept

  • Members
  • Gender:Male
  • Location:castle Dracula

Posted 14 March 2014 - 02:40 PM

Please, update to the newer version of the script:

 1. Added proper support for splitting and tribbling enemies. In my solution Shooter and Collision parts will be killed if Movement part splits/tribbles.

import "std.zh"

//Bossmaker script arguments:
// D0: Movement part enemy in the list.
// D1: Shooter part enemy in the list.
// D2: Collision part enemy in the list. Also known as "core" or "weak point"
// D3: Set to 1 if you want for boss` body not to damage Link on direct contact. 
//    Contact with re is always harmful.
// D4: Shooter`s X position offset.
// D5: Shooter`s Y position offset.
//     Use these arguments if you want to have boss shoot Eweapons from proper position.
//     For Collision part use BigEnemy script with HitBox offset argument
 
//DECLARE VARIABLES
int EnemyMove; //Variable for Movement Enemy Data
int EnemyFire; //Variable for Weapon Enemy Data
int EnemyColl; //Variable for Collision Enemy Data
bool Dual_Enemy = true; //Variable for Dual Enemy Mode
bool Triple_Enemy = true; //Variable for Triple Enemy Mode
 
ffc script BossMaker{
void run(int Movement, int WeaponFire, int Collision, int Background_Boss, int Shooter_XOffset, int Shooter_YOffset){
Waitframes(4);

//DETERMINE HOW MANY ENEMIES ARE BEING USED IN THE SCRIPT
Dual_Enemy = true;
Triple_Enemy = true;
npc EnemyMove = Screen->LoadNPC(Movement);  //Load enemy data used for appearance and movement
if(!EnemyMove->isValid()){
Quit();
}
npc EnemyFire = Screen->LoadNPC(WeaponFire);   //Load enemy data used for behavior and weapon fire
// if(EnemyFire->isValid()){ //If a second enemy exists
// Dual_Enemy = true; //Activate "Dual Enemy" mode
// }
if(!EnemyFire->isValid()){ //If a second enemy does not exist
Dual_Enemy = false; //"Dual Enemy" mode does not activate
}
npc EnemyColl = Screen->LoadNPC(Collision);   //Load enemy data used for collision and touch effects
// if(EnemyColl->isValid()){ //If a third enemy exists
// Triple_Enemy = true; //Activate "Triple Enemy" mode
// }
if(!EnemyColl->isValid()){ //If a third enemy does not exist
Triple_Enemy = false; //"Triple Enemy" mode does not activate
}
while(EnemyMove->isValid()){ 
if((Dual_Enemy == true)&&(EnemyFire->isValid())||(Triple_Enemy == true)){ //SETTINGS FOR BOTH DUAL AND TRIPLE ENEMY MODES
EnemyFire->X = EnemyMove->X + Shooter_XOffset;   //Weapon enemy X-Coordinate attached to Movement enemy. Offset is applied to position.
EnemyFire->Y = EnemyMove->Y + Shooter_YOffset;   //Weapon enemy Y-Coordinate attached to Movement enemy. Offset is applied to position.
if(Background_Boss>0){//Check if the boss is not in the same plane as Link
	//Set NPC`s all Defenses to "ignore" if you want for boss body not to take damage from Lweapons.
EnemyMove->CollDetection = false;//Movement enemy collision detection turned off
EnemyFire->CollDetection = false;//Shooter enemy collision is off
}
}
if((Dual_Enemy == true)&&(Triple_Enemy == false)){ //SETTINGS FOR DUAL ENEMY MODE ONLY
if(EnemyMove->HP <= 0){ //If movement enemy's HP reaches zero
EnemyFire->HP = 0;//Set Weapon enemy's HP to zero
Quit();//Boss is dead. Finita la comedia.
}
}
if((Triple_Enemy == true)&&(EnemyColl->isValid())){ //SETTINGS FOR TRIPLE ENEMY MODE ONLY
EnemyColl->X = EnemyMove->X; //Collision enemy X-Coordinate attached to Movement enemy
EnemyColl->Y = EnemyMove->Y; //Collision enemy Y-Coordinate attached to Movement enemy
if(Background_Boss>0){//Check if the boss is not in the same plane as Link
	//Set NPC`s all Defenses to "ignore" if you want for boss body not to take damage from Lweapons.
EnemyMove->CollDetection = false; //Movement enemy collision detection turned off
if(EnemyFire->isValid()){// Some bosses have no turrets but have cores
EnemyFire->CollDetection = false; //Shooter enemy collision is off
}
} 
if((EnemyColl->HP <= 0)||(EnemyMove->HP <=0 )){ //If Collision enemy's HP reaches zero or movement part is already destroyed. 
EnemyMove->HP = 0;//Set Movement enemy's HP to zero
EnemyColl->HP = 0;//Set Collision enemy`s HP to 0. 
                  //This is useful if the Triple boss is killed via chain reaction 
                  //if there are multiple Bossmaker scripts running in one screen.
if(EnemyFire->isValid()){
EnemyFire->HP = 0; //Set Weapon enemy's HP to zero
}
Quit();//Boss is dead. Finita la comedia.
}
}
Waitframe();
}
// This 2-line piece of code destroys Shooter and Collision parts if EnemyMove pointer
// is rendered invalid in the way other than killing enemy. 
// This can occur if enemy splits(like Digdogger) or tribbles.   
if (EnemyFire->isValid()) EnemyFire->HP=0;
if (EnemyColl->isValid()) EnemyColl->HP=0;
}
}

ffc script BigEnemyDX{
    void run(int EnemyNum, int Width, int Height, int XDraw, int YDraw, int XHit, int YHit){
        Waitframes(4);
        npc Boss = Screen->LoadNPC(EnemyNum);
        if(!Boss->isValid()){
            Quit();
        }
        Boss->Extend = 3;
        
        Boss->HitWidth = Width;
        Boss->HitHeight = Height;
        Boss->TileWidth = Width/16;
        Boss->TileHeight = Height/16;
        Boss->DrawXOffset = XDraw;
        Boss->DrawYOffset = YDraw;
        Boss->HitXOffset = XHit;
        Boss->HitYOffset = YHit;
    }
}
 
//D0 = Enemy on Screen's Enemy List
//D1 = Width (measured in pixels)
//D2 = Height (measured in pixels)
//D3 = Sprite X-Offset
//D4 = Sprite Y-Offset
//D5 = Hitbox X-Offset
//D6 = Hitbox Y-Offset

Updated test quest: Added whistle in the room with that bizzare Digdogger-based boss to test new code.

https://www.mediafir...pm3h5dsrgd7c10l



#3 kurt91

kurt91

    Follower of Destiny

  • Members
  • Real Name:Kurtis
  • Gender:Male
  • Location:Eastern Washington University

Posted 14 March 2014 - 03:07 PM

Did I accidentially upload the wrong version, or did you come up with that just recently? I could have sworn that I had put up the newest one, but I had to look for a bit to figure out which one was which. Give me a bit, and I'll swap out the link in the first post.

 

EDIT: Replaced the first post with the updated version.


Edited by kurt91, 14 March 2014 - 03:25 PM.


#4 Alucard648

Alucard648

    Adept

  • Members
  • Gender:Male
  • Location:castle Dracula

Posted 19 March 2014 - 05:23 AM

Another update: A quite major one (v 4.0).

//Bossmaker script arguments:
// D0: Movement part enemy in the list.
// D1: Shooter part enemy in the list.
// D2: Collision part enemy in the list. Also known as "core" or "weak point"
// D3: Set to 1 if you want for boss` body not to damage Link on direct contact. 
//    Contact with re is always harmful.
// D4: Shooter`s X position offset.
// D5: Shooter`s Y position offset.
//     Use these arguments if you want to have boss shoot Eweapons from proper position.
//     For Collision part use BigEnemy script with HitBox offset argument
 
const int BOSS_INVISITILE = 50000; //Needed to render NPC invisible.
 
ffc script BossMaker{
void run(int Movement, int WeaponFire, int Collision, int Background_Boss, int Shooter_XOffset, int Shooter_YOffset){
Waitframes(4);

//DECLARE VARIABLES AND POINTERS
npc EnemyMove; //Pointer for Movement Enemy Data
npc EnemyFire; //Pointer for Weapon Enemy Data
npc EnemyColl; //Pointer for Collision Enemy Data
bool Dual_Enemy = true; //Variable for Dual Enemy Mode
bool Triple_Enemy = true; //Variable for Triple Enemy Mode
int FireOrigWeapon; //Declare 6 variables for backing up Weapon, tiles and CollDetection for Projectile and Collision parts
int FireOrigtile;
bool FireOrigCollDetection;
int CollOrigWeapon;
int CollOrigtile;
bool CollOrigCollDetection;
//DETERMINE HOW MANY ENEMIES ARE BEING USED IN THE SCRIPT
Dual_Enemy = true; //Initialize modes as true.
Triple_Enemy = true;
EnemyMove = Screen->LoadNPC(Movement);  //Load enemy data used for appearance and movement
if(!EnemyMove->isValid()){
 Quit(); //Use Enemy placement flags to set up stationary bosses.
 }
if(WeaponFire>0) EnemyFire = Screen->LoadNPC(WeaponFire);   //Load enemy data used for behavior and weapon fire
// if(EnemyFire->isValid()){ //If a second enemy exists
// Dual_Enemy = true; //Activate "Dual Enemy" mode
// }
if(!EnemyFire->isValid()){ //If a second enemy does not exist
 Dual_Enemy = false; //"Dual Enemy" mode does not activate
 }
 else{
 	FireOrigWeapon = EnemyFire->Weapon; //Back up Weapon, Original tile and CollDetection for Projectile part.
	FireOrigtile = EnemyFire->OriginalTile;
	FireOrigCollDetection = EnemyFire->CollDetection;
 }
 
if (Collision>0) EnemyColl = Screen->LoadNPC(Collision);   //Load enemy data used for collision and touch effects
// if(EnemyColl->isValid()){ //If a third enemy exists
// Triple_Enemy = true; //Activate "Triple Enemy" mode
// }
if(!EnemyColl->isValid()){ //If a third enemy does not exist
 Triple_Enemy = false; //"Triple Enemy" mode does not activate
 }
 else{
 	CollOrigWeapon = EnemyColl->Weapon; //Back up Weapon, Original tile and CollDetection for Collision part.
	CollOrigtile = EnemyColl->OriginalTile;
	CollOrigCollDetection = EnemyColl->CollDetection;
 }
 
while(EnemyMove->isValid()){ 
if((Dual_Enemy == true)&&(EnemyFire->isValid())||(Triple_Enemy == true)){  //SETTINGS FOR BOTH DUAL AND TRIPLE ENEMY MODES
EnemyFire->X = EnemyMove->X + Shooter_XOffset;   //Weapon enemy X-Coordinate attached to Movement enemy. Offset is applied to position.
EnemyFire->Y = EnemyMove->Y + Shooter_YOffset;   //Weapon enemy Y-Coordinate attached to Movement enemy. Offset is applied to position.
WizzrobeUpdate(EnemyMove, EnemyFire, FireOrigtile, FireOrigWeapon, FireOrigCollDetection);
if(Background_Boss>0){ //Check if the boss is not in the same plane as Link
	                  //Set NPC`s all Defenses to "ignore" if you want for boss body not to take damage from Lweapons.
EnemyMove->CollDetection = false;  //Movement enemy collision detection turned off
EnemyFire->CollDetection = false;  //Shooter enemy collision is off
}
}
if((Dual_Enemy == true)&&(Triple_Enemy == false)){ //SETTINGS FOR DUAL ENEMY MODE ONLY
if(EnemyMove->HP <= 0){ //If movement enemy's HP reaches zero
EnemyFire->HP = 0;   //Set Weapon enemy's HP to zero
Quit();   //Boss is dead. Finita la comedia.
}
}
if((Triple_Enemy == true)&&(EnemyColl->isValid())){ //SETTINGS FOR TRIPLE ENEMY MODE ONLY
EnemyColl->X = EnemyMove->X; //Collision enemy X-Coordinate attached to Movement enemy
EnemyColl->Y = EnemyMove->Y; //Collision enemy Y-Coordinate attached to Movement enemy
WizzrobeUpdate(EnemyMove, EnemyColl, CollOrigtile, CollOrigWeapon, CollOrigCollDetection);
if(Background_Boss>0){  //Check if the boss is not in the same plane as Link
	                   //Set NPC`s all Defenses to "ignore" if you want for boss body not to take damage from Lweapons.
EnemyMove->CollDetection = false; //Movement enemy collision detection turned off
if(EnemyFire->isValid()){  // Some bosses have no turrets but have cores
EnemyFire->CollDetection = false; //Shooter enemy collision is off
}
} 
if((EnemyColl->HP <= 0)||(EnemyMove->HP <=0 )){ //If Collision enemy's HP reaches zero or movement part is already destroyed. 
EnemyMove->HP = 0;   //Set Movement enemy's HP to zero
EnemyColl->HP = 0;   //Set Collision enemy`s HP to 0. 
                     //This is useful if the Triple boss is killed via chain reaction 
                     //if there are multiple Bossmaker scripts running in one screen.
if(EnemyFire->isValid()){
EnemyFire->HP = 0; //Set Weapon enemy's HP to zero
}
Quit();//Boss is dead. Finita la comedia.
}
}
Waitframe();
}
// This 2-line piece of code destroys Shooter and Collision parts if EnemyMove pointer
// is rendered invalid in the way other than killing enemy. 
// This is true if enemy splits(like Digdogger) or tribbles.   
if (EnemyFire->isValid()) EnemyFire->HP=0;
if (EnemyColl->isValid()) EnemyColl->HP=0;
}
}

//This function temporarily hides Shooter and Collision enemies if WizzRobe 
//(if he is Movement part of the boss) is currently teleporting.
void WizzrobeUpdate(npc carrier, npc part, int OrigTile, int OrigWeapon, bool OrigCollDetection ){
	if (carrier->Type==NPCT_WIZZROBE){
		if (carrier->HitXOffset >= 1000){
			part->CollDetection=false;
			part->OriginalTile=BOSS_INVISITILE;
			part->Weapon=WPN_NONE;
		}
		else {
			part->CollDetection=OrigCollDetection;
			part->OriginalTile=OrigTile;
			part->Weapon=OrigWeapon;
		}
	}
}

ffc script BigEnemyDX{
    void run(int EnemyNum, int Width, int Height, int XDraw, int YDraw, int XHit, int YHit){
        Waitframes(4);
        npc Boss = Screen->LoadNPC(EnemyNum);
       Boss->HitWidth = Width;
       Boss->HitHeight = Height;
        if (Width >=16){
        	 Boss->Extend=3;
        	 Boss->TileWidth = Width/16;
        }
        if (Height>=16){
        	Boss->Extend=3;
        	Boss->TileHeight = Height/16;
        }
       Boss->DrawXOffset = XDraw;
       Boss->DrawYOffset = YDraw;
       Boss->HitXOffset = XHit;
       Boss->HitYOffset = YHit;
    }
}

ffc script MassBigEnemy{ //This version of the script applies BigEnemy settings to all enemies on the screen.
    void run(int Dunmmy,int Width, int Height, int XDraw, int YDraw, int XHit, int YHit){
        Waitframes(4);
        npc Boss;
        for (int i=1; i<= Screen->NumNPCs(); i++){
          Boss = Screen->LoadNPC(i);
          Boss->HitWidth = Width;
          Boss->HitHeight = Height;
          if (Width >= 16){
        	   Boss->Extend=3;
        	   Boss->TileWidth = Width/16;
          }
          if (Height>=16){
        	  Boss->Extend=3;
        	  Boss->TileHeight = Height/16;
          }
          Boss->DrawXOffset = XDraw;
          Boss->DrawYOffset = YDraw;
          Boss->HitXOffset = XHit;
          Boss->HitYOffset = YHit;
        }
    }
}

ffc script MassBigEnemyEnemySpecific{ 
	//This version of Bigenemy script is similar to MassBigenemy but affects only specific kind of enemies.
    void run(int EnemyType,int Width, int Height, int XDraw, int YDraw, int XHit, int YHit){
        Waitframes(4);
        npc Boss;
        for (int i=1; i<= Screen->NumNPCs(); i++){
          Boss = Screen->LoadNPC(i);
          if (Boss->ID==EnemyType){
          Boss->HitWidth = Width;
          Boss->HitHeight = Height;
          if (Width >=16){
        	   Boss->Extend=3;
        	   Boss->TileWidth = Width/16;
          }
          if (Height>=16){
        	  Boss->Extend=3;
        	  Boss->TileHeight = Height/16;
          }
          Boss->DrawXOffset = XDraw;
          Boss->DrawYOffset = YDraw;
          Boss->HitXOffset = XHit;
          Boss->HitYOffset = YHit;
          }
        }
    }
}

ffc script MassBigEnemyContinious{
	//Similar to MassBigEnemyEnemySpecific but also affects enemies that appear after initialization
	//(like enemies summoned by SUMMON_LAYER spell). 
    void run(int EnemyType,int Width, int Height, int XDraw, int YDraw, int XHit, int YHit){
        Waitframes(4);
        npc Boss;
        while(true){
         for (int i=1; i<= Screen->NumNPCs(); i++){
          Boss = Screen->LoadNPC(i);
          if (Boss->ID==EnemyType){
          Boss->HitWidth = Width;
          Boss->HitHeight = Height;
          if (Width >= 16){
        	   Boss->Extend=3;
        	   Boss->TileWidth = Width/16;
          }
          if (Height>=16){
        	  Boss->Extend=3;
        	  Boss->TileHeight = Height/16;
          }
          Boss->DrawXOffset = XDraw;
          Boss->DrawYOffset = YDraw;
          Boss->HitXOffset = XHit;
          Boss->HitYOffset = YHit;
          }
        }
        Waitframe();
        }
    }
}
 
//D0 = Enemy on Screen's Enemy List
//D1 = Width (measured in pixels)
//D2 = Height (measured in pixels)
//D3 = Sprite X-Offset
//D4 = Sprite Y-Offset
//D5 = Hitbox X-Offset
//D6 = Hitbox Y-Offset

1. A couple of bugfixes.

2. Added proper support for teleporting enemies ( when Wizzrobe-like enemy is used as Movement part).

 In my solution the script temporarly turns off Shooter and Collision part`s weapon, visibility (even to Lens of Truth) and CollDetection for Shooter and Core parts when Wizzrobe is currently not visible. Credit goes to Zecora for helping me to detect whether the Wizzrobe is teleporting or firing.

3. Added options for Mass-Making BigEnemies, including ability to apply BigEnemy script to summoned enemies.

 

Updated test quest: https://www.mediafir...pm3h5dsrgd7c10l


Edited by Alucard648, 19 March 2014 - 05:29 AM.


#5 kurt91

kurt91

    Follower of Destiny

  • Members
  • Real Name:Kurtis
  • Gender:Male
  • Location:Eastern Washington University

Posted 19 March 2014 - 05:54 AM

Wow, that's quite an update. I thought this was finished and already moved on. Not that I'm complaining, mind you. It's kind of neat how you seem to have figured out how to fix every flaw with the original version, with support for tribbling enemies and Wizzrobe enemies. Considering that I was having to consult the Wiki on nearly a per-line basis to figure out how to get it to do what I wanted, you got a lot more of it figured out than I would. It's kind of weird now, being able to study a script I originally came up with to learn how to do some new things.

 

A few quick questions about the new version and the new BigEnemy scripts you made.

 

First off, does that global variable need to be there? I was told that you can only have so many of them, so I was wondering if it might be better to just replace the variable with a straight "50000", and leave a note saying to leave that tile blank.

 

Next, as a matter of preference, do you think the various BigEnemy scripts should be separate links, or a single zip folder containing all of them?

 

Let me know what you want me to do, and I'll edit the first post to have the updated scripts.



#6 Alucard648

Alucard648

    Adept

  • Members
  • Gender:Male
  • Location:castle Dracula

Posted 19 March 2014 - 07:41 AM

First off, does that global variable need to be there? I was told that you can only have so many of them, so I was wondering if it might be better to just replace the variable with a straight "50000", and leave a note saying to leave that tile blank.

First off: it`s not variable - it`s a constant that is set once and cannot be changed by any other scripts. Constants don`t count torwards global variable limit as proven by stdConstants.zh which contains 500+ entries.

Second: actually BigEnemies require assload of tile space (don`t know how much but 7-8 pages maybe enough) to render invisible (what if the questmaker tries to use Wizzrobe in conjunction with 8*8 or even larger monster used as core). So to ensure proper invisibility it`s recommended to leave such chunk of consequtive tiles blank. 

Next, as a matter of preference, do you think the various BigEnemy scripts should be separate links, or a single zip folder containing all of them?

Original singular BigEnemy in one file with the BossMaker script and mass versions in separate one.



#7 Mero

Mero

    Touch Fluffy Tail

  • Banned
  • Real Name:Tamamo No Mae
  • Gender:Female
  • Location:Rainbow Factory

Posted 19 March 2014 - 11:03 AM

Can i make bubbles that use bat movement, or does this only work with bosses?



#8 MoscowModder

MoscowModder

    Still fighting the inevitable

  • Members
  • Gender:Male
  • Location:Wisconsin (WHAT)

Posted 19 March 2014 - 11:24 AM

Yep, I'm pretty sure it works on all kinds of enemies.

 

The only proof I have is that my hideous monstrosity I tested it with included an octorock as a shooter...



#9 ZoriaRPG

ZoriaRPG

    The Timelord

  • ZC Developers
  • Gender:Unspecified
  • Location:Prydon Academy

Posted 19 March 2014 - 06:10 PM

Preference:What I suggest, and would find valuable,if this:

 

(1.) Keep the core, and all enemies, as two packages.

 

(2)Upload a master archive of enemies, that you maintain. Each tine you make a new script/boss/enemy, add it to the archive, and re-upload that to a central depot, replacing the old version. If you update any dependency, or any old enemies, use version numbering in the files, inside the ZIP archive, so that people will know what version they are using. For example, if you make a huge moblin, your initial version could be bigMoblin.z. If you make a revised version, rename the original to bigMoblin_old_v1.0.z; and name the latest bigMoblin.z; then with any additional versions, rename the latest file hat you replace (e.g. bigMoblin_old_v1.1) and keep the newest fileas bigMoblin.z.

 

If you include the version inside the script, at its head, it helps people to track what they are using.

 

Each time you do an incremental update, just replace the master ZIP file, with all the new updates.

 

(3) Upload individual enemies in their own database entries. This helps people to find what they want. Inside those posts, link to the core engine scripts (a ZIP file), and the master enemies archive (a ZIP file), so that if the questmaker wants all of the enemies, they don't need to go through the database many times. Note the dependency files for any script in the DV entries; and if possible, inside the scripts (in the same area as the version number.

 

Example:

 

 
//////////////////////////////////
/// Big Moblin Script /// v1.0 ///
//////////////////////////////////
/// Requires bigEnemy.zh       ///
/// Requires stdExtra.zh       ///
/// Requires else.zh           ///
//////////////////////////////////
 

 

If you need a place to host this kind of thing, you are probably already aware that you can use my servers, if you don't have real server access of some kind at this time: File-sharing sites would be really bad for version management, and file naming control, and could go away at any time, due to all the pirated crap, and the shutdown efforts.



#10 kurt91

kurt91

    Follower of Destiny

  • Members
  • Real Name:Kurtis
  • Gender:Male
  • Location:Eastern Washington University

Posted 20 March 2014 - 12:56 AM

Re-updated original post with the added scripts. Out of curiosity, why does the new version back up the information for the Collision and Weapon enemies?

 

By the way, ZoriaRPG, unless I'm misunderstanding what you're trying to say, the kit doesn't quite work like that. Any enemies or bosses you make with it are done through the enemy editor and setting the arguments on this particular script. There aren't any specific enemy scripts to sort through like that. Any specific enemy you would want to let somebody replicate for their quest would be just a list of Enemy Editor settings. I appreciate your offer, but I don't really know what I would upload specifically for individual enemies. Maybe just a list of pictures of the Enemy Editor to help copying them to a new quest as well as recommended tiles?


Edited by kurt91, 20 March 2014 - 12:59 AM.


#11 Alucard648

Alucard648

    Adept

  • Members
  • Gender:Male
  • Location:castle Dracula

Posted 20 March 2014 - 05:43 AM

Re-updated original post with the added scripts. Out of curiosity, why does the new version back up the information for the Collision and Weapon enemies?

Without these backups the WizzrobeUpdate finction (the one that handles proper behavior for teleporting bosses) would be unable to restore original data for those enemies when the wizzrobe reappears. As there are no other way to do this without killing and respawing parts, which can trigger nasty effects when ghosted enemies are used as parts. And Shooter and Collision parts would be remain hidden forever.



#12 ZoriaRPG

ZoriaRPG

    The Timelord

  • ZC Developers
  • Gender:Unspecified
  • Location:Prydon Academy

Posted 21 March 2014 - 12:48 PM

Ah: I didn't understand what you were asking... If the enemy settings are purely via the enemy editor, an example quest, and a series of screenshots, with a how-to guide is all that you will need.



#13 BigJoe

BigJoe

    .

  • Members
  • Gender:Unspecified

Posted 22 March 2014 - 06:44 PM

When using a patra enemy, things get wonky. The subsequent enemies made with it do not stick.



#14 Geoffrey

Geoffrey

    The Giraffe

  • Members
  • Gender:Unspecified

Posted 05 April 2014 - 01:14 PM

This is quite wonderful.  I cannot thank you enough for making this, though I am sure that it will take a while to become proficient even with it.

 

I have a question about BigEnemyDX:  The walking animations work brilliantly, but the firing animations don't appear.  The enemy is 16x32 and behaves as a moblin.  I have set up the firing animation directly beneath the walking animation on the tile page, but still it doesn't appear.  Any idea of how I can fix this?



#15 Alucard648

Alucard648

    Adept

  • Members
  • Gender:Male
  • Location:castle Dracula

Posted 05 April 2014 - 01:30 PM

This is quite wonderful.  I cannot thank you enough for making this, though I am sure that it will take a while to become proficient even with it.

 

I have a question about BigEnemyDX:  The walking animations work brilliantly, but the firing animations don't appear.  The enemy is 16x32 and behaves as a moblin.  I have set up the firing animation directly beneath the walking animation on the tile page, but still it doesn't appear.  Any idea of how I can fix this?

Try to place firing animation so they appear in the same place in tile editor as walking frame but on next tile page.


Edited by Alucard648, 05 April 2014 - 01:31 PM.




Also tagged with one or more of these keywords: FFC, Enemy

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users