Jump to content

Photo

Sideview enemy pack

Actually a real thing [Happening Intensifies]

  • Please log in to reply
15 replies to this topic

#1 Moosh

Moosh

    The Mush

  • Moderators

Posted 30 June 2015 - 04:27 AM

ZC's sideview mechanics on their own are rather weak. It has weird buggy behaviors, is missing some key features like ladder combos, some combo types don't work with it at all. Worst of all, ZC's enemy behaviors in sideview range from buggy to useless to completely incompatible. Pretty much just the walker enemies actually respect sideview gravity, the rest just float about in the air and behave as if gravity isn't a thing. Normally I'd suggest against using sideview altogether (I'm not good at following my own advice :tard: ) but people have and people are and so it falls to scripts to plug up the gaps.

 

To remedy the enemy problem, I figured it would be nice to have a decent pack of simple ghosted enemy behaviors that work in sideview to go alongside regular enemy editor ones. The thing is I'm not a big sideview quest designer and I don't know what sideview quest designers might need. I'm looking for simple ideas that people could get creative with, nothing overly tied to graphics, probably no big enemies or bosses. I'd like to hear you guys' ideas for enemy behaviors, preferably with as much detail as possible.

 

Some ideas I have so far:

  • Basic Walking Enemy: Walks back and forth and turns around if it hits a wall. Can be set to not walk off platforms.
  • Basic Jumping Enemy: Like the walking enemy but periodically jumps. Smart platform behavior would be trickier for this one so it would either need smart screen design or flag 96 herding.
  • Medusa Head: Sine waves from one side of the screen to the other. Can be set to infinitely respawn if it dies.
  • Boo: Moves towards the player and stops when they turn to face it. I sort of already have this one made because of Fedora Toss.
  • Thwomp /Skree: Falls when the player gets close. I imagine Thwomp behavior would rise back up while the Skree would explode into bullets and this could be toggled with attributes.
  • Wall Crawling Enemy: Crawls along solid objects. I've scripted something similar before so it shouldn't be too hard.
  • Wall Bouncing Enemy: This already exists, but I don't think it's been tested in sideview. I'd probably write my own anyways.

 


  • Jared likes this

#2 Timelord

Timelord

    The Timelord

  • Banned
  • Location:Prydon Academy

Posted 30 June 2015 - 05:28 AM

The main missing element is the basic hovering (and line-flying) enemy category:

 

Hover (stationary)

Hover (vertical movement, one dir, or returns after x time, or when touches solid object)

Hover (horizontal movement, one dir, or returns after x time, or when touches solid object)

 

Another thing to decide on, is how to handle enemy behaviour when any enemy reaches the edge of the screen. It could vanish, bounce (think 'Super Mario Bros. Special', by Hudson), or even stay alive, and be redirected by an ff-screen object; the latter would be a huge pain.

 

The Medusa-head pattern ghosted enemy is already in the old script DB. At least, I remember either modifying, or referencing something there, when making them for LSIC. I'm pretty sure that it was usable as-is, except that it didn't obey ghost clocks, and had good settings for its sine movement.

 

Ballistic enemies, are also a popular Mario staple that wormed their way into other games. 

 

I expect that many people would welcome this. I also rarely touch sideview mechanics in ZC, but I was planning to make some classic-arcade style games at some point, for the 'because I can' factor, so having this would be nice. In that vein, the 'rolls with gravity' enemy type (the original 'Donkey Kong' barrel is a good example of that), is a very popular sideview enemy in 8-bit games. Other games have boulders, and similar.

 

  |

 \ /

 

Alucard saved me the trouble of finding that.


Edited by ZoriaRPG, 30 June 2015 - 08:35 AM.


#3 Alucard648

Alucard648

    Magus

  • Members
  • Location:castle Dracula

Posted 30 June 2015 - 07:18 AM

The Medusa-head pattern ghosted enemy is already in the old script DB. At least, I remember either modifying, or referencing something there, when making them for LSIC. I'm pretty sure that it was usable as-is, except that it didn't obey ghost clocks, and had good settings for its spline movement.

Speaking for Medusa heads: I have rewritten the script from scratch:

const int MEDUSA_STATE_WAITING = 0;
const int MEDUSA_STATE_FLYING = 1;


ffc script SineWaveEnemy{
	void run(int enemyID){
		npc ghost = Ghost_InitAutoGhost(this, enemyID);
		
		int HF = ghost->Homing;//Controls the chance of spawning at Link`s Y-posotion.
		int HR = ghost->Haltrate;//Ignored.
		int RR = ghost->Rate;//Ignored.
		int HNG = ghost->Hunger; //Ignored.
		int SPD = ghost->Step; //Medusa`s horizontal movement speed. Default is 150.
		int WPND = ghost->WeaponDamage; //Ignored.
		
		int Amplitude = Ghost_GetAttribute(ghost, 0, 24); //Y-scale of sine wave period. Set to negative for cosine wave motion.
		int Period = Ghost_GetAttribute(ghost, 1, 96); //X-scale of sine wave period.
		int numframes = Ghost_GetAttribute(ghost, 2, 2); //Number of frames in animation for each direction.
		int direction = Ghost_GetAttribute(ghost, 3, 3); //Movement direction. 1 - left-to-right,
		// 2 - Right-to-left, 3 - furthest away from Link, 4 - random.
		int minrespawntime = Ghost_GetAttribute(ghost, 4, 30); //Minimum and maximum wait time between flight cycles.
 		int maxrespawntime = Ghost_GetAttribute(ghost, 5, 90);
		
		ghost->Extend=3;
		
		Ghost_SetFlag(GHF_NORMAL);
		Ghost_SetFlag(GHF_IGNORE_ALL_TERRAIN);
		Ghost_SetFlag(GHF_NO_FALL);
		Ghost_SetFlag(GHF_IGNORE_NO_ENEMY);
		Ghost_SetFlag(GHF_MOVE_OFFSCREEN);
		
		int OrigTile = (ghost->OriginalTile) + (20 * Ghost_TileHeight); //Record Medusa`s original tile.
		//which is needed for animation routine,
		int MedusaState = MEDUSA_STATE_WAITING; //Current enemy AI state.
		int AxisY = 0; //Axis of sine wave. 
		int CurAngle = Rand(360);//Current angular position used for calculating sine wave position.
		int anglestep = 360/Period; //Used for calculating 
		int haltcounter = Rand(minrespawntime, maxrespawntime);//Randomize respawn time after flying off screen.
		int LeftThreshold = -(Ghost_TileWidth*16);// Screen boundary thresholds.
		int RightThreshold = 256; 
		
		//Determine flight direction and starting X-position.
		if (direction == 4) direction = Rand(1,2);
		else if (direction == 3){
			if(Link->X > 128) direction = 1;
			else direction = 2;
		}
		if (direction == 1) Ghost_X = LeftThreshold;
		else Ghost_X = RightThreshold;
		
		while(true){
			if (MedusaState==MEDUSA_STATE_WAITING){
				haltcounter--;
				if (haltcounter == 0){
					CurAngle = Rand(360);
					AxisY = LinkAlign(HF);
					MedusaState=MEDUSA_STATE_FLYING;
				}
			}
			
			else if (MedusaState==MEDUSA_STATE_FLYING){
				if (direction == 1){
					Ghost_ForceDir(DIR_RIGHT);
					Ghost_X += SPD/100;
					if (Ghost_X >= RightThreshold){
						Ghost_Vx=0;
						Ghost_X = LeftThreshold;
						haltcounter = Rand(minrespawntime, maxrespawntime);
						MedusaState = MEDUSA_STATE_WAITING;
					}
				}
				else if (direction == 2){
					Ghost_ForceDir(DIR_LEFT);
					Ghost_X -= SPD/100;
					if (Ghost_X <= LeftThreshold){
						Ghost_Vx=0;					
					Ghost_X = RightThreshold;
					haltcounter = Rand(minrespawntime, maxrespawntime);
					MedusaState = MEDUSA_STATE_WAITING;
				}
				}
				CurAngle += anglestep;
				Ghost_Y = AxisY+ Amplitude*Sin(CurAngle);
			}
			//debugValue(1, direction);
			MedusaAnimation(ghost, OrigTile, MedusaState, numframes);
			Ghost_Waitframe(this, ghost);
		}
	}
}

//Medusa head animation routine.
void MedusaAnimation(npc ghost, int origtile, int MedusaState, int numframes){
	int offset = 0;
	if ((ghost->Dir) == DIR_RIGHT) offset += numframes*(ghost->TileWidth);
	ghost->OriginalTile = origtile + offset;
}

//Determines Medusa`s Y-position on respawning, depending on
//Link`s Y position and Medusa`s homing factor.
int LinkAlign(int HF){
	int imprecision = 256-HF;
	int miny = Link->Y - imprecision;
	int maxy = Link->Y + imprecision;
	return Rand(miny, maxy);
}

Example of enemy tile setup. Note the cursor at the left corner - set original tile in enemy editor above actual graphics.

ZAAT3th.png


Edited by Alucard648, 02 July 2015 - 03:06 AM.


#4 ywkls

ywkls

    Master

  • Members

Posted 30 June 2015 - 09:19 AM

I remember once trying to use ghost.zh to script a larger than normal enemy in sideview gravity. It exhibited some weird behavior. One I noted in larger than normal enemies was the tendency to get knocked back through walls. Another was to fall through the floor even if it was solid.

 

On enemy types...

 

A Burrowing, leever-esque enemy. Leevers ignore sideview gravity completely.

 

A Wall-Jumping enemy. Instead of moving about, it hangs onto one spot on the wall and fires at you or jumps to the other wall periodically.

 

A Life-Draining enemy.  Kind of like the Metroid. I know that someone did a Metroid script a while back, but I don't that they made it where it grabbed you like a Like Like would and had it drain your energy.

 

An enemy with Circular or Arced Movement. These aren't common in normal gravity. I don't know how they'd respond to sideview.

 

Anyways, those are the ideas that I had.



#5 Lejes

Lejes

    Seeker of Runes

  • Members
  • Location:Flying High Above Monsteropolis

Posted 30 June 2015 - 01:34 PM

I made a few enemies for sideview, like the Skree, but they were mostly basic concepts.



#6 SyrianBallaS

SyrianBallaS

    Defender

  • Members
  • Real Name:Samer
  • Location:Detroit, Michigan

Posted 30 June 2015 - 01:59 PM

I'd ask C-Dawg, he's a freaking genius.

I don't know how to help you though.



#7 C-Dawg

C-Dawg

    Magus

  • Members

Posted 30 June 2015 - 02:06 PM

If you say my name three times, I appear.

 

Go download the Zodiac.qst and pop open the hood.  It's not passworded.  If you look at the buffer, you'll find a trio of scripts: general_sideview_enemies, general_sideview_enemies2 and sideview_enemy_setter or something like that.  These are (mostly) self-contained scripts that run all 70 or so sideview enemies in the Zodiac game.  You need to arrange your tiles exactly like mine to make it work, but I set it up so it uses a tile page offset so you can put it where-ever in your tile sheet.  Luckily, you can see the tiles, too.  

 

You also need to make a few tweaks to things like boss life bars and maybe a few other little things, like the combos used for collision detection and projectiles, but really all of the heavy lifting is already done there.

 

Of course, before you use them, you should play through Zodiac to see how they function.  C'mon, give it a shot and give me some feedback.  I'm wrapping up my own to-do list and need more people testing bugs. (A pitch for a script, seems fair.)


Edited by C-Dawg, 30 June 2015 - 02:08 PM.

  • SyrianBallaS likes this

#8 TheLegend_njf

TheLegend_njf

    Deified

  • Members
  • Real Name:Grant

Posted 01 July 2015 - 07:20 AM

I'll be using this, thank you.

#9 C-Dawg

C-Dawg

    Magus

  • Members

Posted 01 July 2015 - 11:58 AM

So if you want to use it, the comments should make things clear.  But, here's a little primer to clarify things:

 

The idea is that you load up the three scripts: general_enemy1, general_enemy2, and enemy_setter.  Or whatever I called them, I forget.  The first two actually run the custom enemies.  They look at what the Ax and Ay values are on the FFC they have been assigned to and read that as the enemy ID and starting data.  Then, they find a place to spawn the enemy and have it act like whatever it should be.  The reason there are two is that, otherwise, the buffer can't compile the whole script correctly; there's too many enemies with too many variables.  It'll compile but it won't run properly.

 

In your game, you only actually use enemy_setter.  You put it on an FFC and using the D0 variables you tell it how many enemies to spawn and what enemy ID you want.  It will use the appropriate code from 1 or 2 as it needs to.  You need to look at the general_enemy codes to see what IDs are used.

 

You need to make a few changes to make these work for your quest.

 

General_enemy 1 and 2 need at least 3 changes to work at all.  First, you need to put the enemy's sprites into your tilesheet in the same way I did mine.  You then change the variable that tells the script which tile starts your enemy graphics.  From there, it uses offsets the same way that Zelda Classic does to draw the enemies.  If you don't want to change collision detection, make sure your graphics have the same general shape as mine!

 

Second, you need to tell the script where your damage combos are.  The script does damage detection by seeing if the player is close enough to the enemy that it should take damage, and if so, it moves an FFC onto the player and assigns it a damage combo on that frame.  (For one-tile enemies, this doesn't work right because the game detects collision with the ghosted enemy first, and so you need to make the ghosted enemy's damage match the assigned damage combo.)  You need a series of blank combos somewhere with increasing damage combos assigned, and then you need to tell the general script where they are.

 

Finally, some enemies use projectiles.  I was lazy and hard-coded these using the location of projectiles on my own combo sheets.  So, for these, you need to actually go into the code and tweak what combo is being assigned to the projectile FFC.

 

With the setter script, all you need to do is change the code so that it has the proper script IDs you assigned to general 1 and 2 in your own code.  

 

Also, you may need to import my LifeBar function or delete the reference to it.  Some of the enemies are lazy custom bosses, so it won't compile unless you use the LifeBar function.  If you remove them, it should work fine without it.

 

That's the minimum you have to do to make the scripts run.  Above and beyond that, you may wish to tweak the item set, damage, and other variables for each enemy to suit your purposes.  There are also parts of the code that implement my stun beam and ice beam, and these are probably superfluous for your purposes. 

 

One other thing to be aware of:  this script will look for FFCs assigned Combo 0 when it needs them and will use them as projectiles, enemies, damage combos, etc.  If your own scripts use FFCs with Combo 0 for something else, then there might be a conflict.


Edited by C-Dawg, 01 July 2015 - 11:59 AM.

  • SyrianBallaS likes this

#10 Moosh

Moosh

    The Mush

  • Moderators

Posted 02 July 2015 - 02:12 AM

@ZoriaRPG: Thanks for the suggestion. The basic floating enemy was super easy to make so I made it and added it to the list. Screen edge interaction options will probably be added to enemies I feel they apply to. I don't see a reason why most enemy types should be allowed to walk offscreen, though. I imagine a Donkey Kong barrel could be made with a simple walking enemy that doesn't turn around on platform edges.

 

@Alucard648: Thanks, I'll be sure to credit you for the sine wave enemy. I had to edit the script a bit to fit in with my other enemies and add some features I wanted, but it works great. Am I missing something or did you make it impossible for the enemy to appear on a random side of the screen since a value of 0 in that attribute defaults to 3?

 

@ywkls: Thanks for the suggestions. These all sound great. I lumped in circular movement with Zoria's floating enemy suggestion and arc movement might be a little too specific unless more people want it. The rest are added to the list.

 

@C-Dawg: Unfortunately, I don't think Zodiac's enemies will be much use to me. I'm not exactly the best at understanding other people's code, unfortunately, and if I understand correctly Zodiac has a whole different ghosting system from ghost.zh. I could of course use enemy concepts from Zodiac, but that would be no different from taking enemies from any other existing platformer. That's a pretty big scope of enemies to choose from. My focus here is finding enemies that the community wants and maybe an existing autoghost script or two that I can package in as well. I still do want to give Zodiac another try, it's just a matter of finding the time. Thanks for offering, though.

 

Here's an update on the enemy list:

  • (Done) Basic Walking Enemy: Walks back and forth and turns around if it hits a wall. Can be set to not walk off platforms.
  • (Done) Basic Jumping Enemy: Like the walking enemy but periodically jumps. Smart platform behavior would be trickier for this one so it would either need smart screen design or flag 96 herding.
  • (Done) Medusa Head: Sine waves from one side of the screen to the other. Can be set to infinitely respawn if it dies.
  • Boo: Moves towards the player and stops when they turn to face it. I sort of already have this one made because of Fedora Toss.
  • Thwomp /Skree: Falls when the player gets close. I imagine Thwomp behavior would rise back up while the Skree would explode into bullets and this could be toggled with attributes.
  • (Done?) Wall Crawling Enemy: Crawls along solid objects. I've scripted something similar before so it shouldn't be too hard. <-Famous last words right there. I assumed this enemy would work in sideview as it does in top down and it didn't. There's still some small bugs to work out.
  • (Done) Wall Bouncing Enemy: This already exists, but I don't think it's been tested in sideview. I'd probably write my own anyways.
  • (Done) Hovering Enemy: Either floats in place, moves horizontally, moves vertically, or moves along a parametric path.
  • Burrowing Enemy: Walking enemy that burrows into solid blocks. Possibly has a flag that determines whether it can teleport around the screen when burrowed.
  • Wall Jumping Enemy: Bounces from wall to wall based on player proximity or on a timer. Can be horizontal or vertical. Shares some similarities with basic walker/trap enemies, so it's low priority on the list.
  • Metroid/Lazy Chase Enemy: Will probably be a basic lazy chase enemy. Metroid type behavior may get added because I just really like Metroids. Having enemies with selective collision like Metroids do is tricky, though.
  • Shooter Enemy?: Maybe a default walking enemy with firing options that are a little more sideview friendly?

 

When everything is finished, how would you guys prefer things be organized? Should all the enemies be in one big .z file? Should each enemy have its own .z? If we venture into more complex enemies, should the be arranged by how difficult they are to set up?

 

I still welcome any and all enemy ideas. If you're not a scripter, not a questmaker who uses scripts, or even not a questmaker at all, let your ideas be known.


  • Astromeow likes this

#11 Alucard648

Alucard648

    Magus

  • Members
  • Location:castle Dracula

Posted 03 July 2015 - 01:34 PM

 

  • Wall Bouncing Enemy: This already exists, but I don't think it's been tested in sideview. I'd probably write my own anyways.

Old Wall bouncer enemy works fine in sideview sreas, thanks for GHF_NO_FALL ghost flag being always turned on.

Anyway, script #2 - Thwomp.

const int THWOMP_STATE_DEFAULT = 0;
const int THWOMP_STATE_FALLING = 1;
const int THWOMP_STATE_ON_GROUND = 2;
const int THWOMP_STATE_RISING = 3;

const int SFX_CRASH = 3; // Sound effect for Thwomp hitting ground.
const int SFX_DROP = 38; //Sound effect to play, when Thwomp starts falling.

ffc script Thwomp{
	void run(int enemyID){
		npc ghost = Ghost_InitAutoGhost(this, enemyID);
		
		int HF = ghost->Homing; //Unused.
		int HR = ghost->Haltrate; //Unused.
		int RR = ghost->Rate; //Unused
		int HNG = ghost->Hunger; //Unused.
		int SPD = ghost->Step; //Speed of Thwomp rising after fall.
		int WPND = ghost->WeaponDamage; // Damage dealt by shards form Skree
		
		int KineticDamage = Ghost_GetAttribute(ghost, 0, 0); //Set to 1 and Thwomp will deal variable
		//damage depending on the speed in the moment of hitting Link, up to 6x original at terminal velocity.
		int NumShards = Ghost_GetAttribute(ghost, 1, 0); //Setting to any number above 0 will turn Thwomp 
		//into Skree that breaks into given number of shards (Rock eweapons) upon hitting ground.
		int SizeX = Ghost_GetAttribute(ghost, 2, 2); // Thwomp size, in tiles.
		int SizeY = Ghost_GetAttribute(ghost, 3, 2); // X and Y, of course.
		int ShardSpeed = Ghost_GetAttribute(ghost, 4, 175); //Speed of Skree`s shards.
		int proximity = Ghost_GetAttribute(ghost, 5, 16); //Thwomp`s proximity trigger X-distance, in pixels.
		
		ghost->Extend=3;
		
		Ghost_TileWidth = SizeX;
		Ghost_TileHeight = SizeY;
		
		Ghost_SetFlag(GHF_NORMAL);
		Ghost_SetFlag(GHF_NO_FALL);
		Ghost_SetFlag(GHF_MOVE_OFFSCREEN);
		
		int OrigTile = ghost->OriginalTile;
		int State = THWOMP_STATE_DEFAULT;
		int haltcounter = -1;
		int OrigY = ghost->Y;
		int OrigDamage = ghost->Damage;
		
		
		while(true){
			if (State==THWOMP_STATE_DEFAULT){
				int distance = Abs((CenterLinkX() - CenterX(ghost)));
				if (distance<=proximity){
				if (Link->Y > Ghost_Y){
					Ghost_UnsetFlag(GHF_NO_FALL);
					Game->PlaySound(SFX_DROP);
					State = THWOMP_STATE_FALLING;
				}
			}
			}
			if (State==THWOMP_STATE_FALLING){
				if(KineticDamage>0){
					int velocity = Abs(Ghost_Jump);
					ghost->Damage = OrigDamage + Floor((OrigDamage*velocity*velocity)/2);
				}
				if (Ghost_OnSideviewPlatform(ghost,2)){
					Game->PlaySound(SFX_CRASH);
					Screen->Quake=30;
					State = THWOMP_STATE_ON_GROUND;
					ghost->Damage = OrigDamage;
					haltcounter = 120;
					Ghost_SetFlag(GHF_NO_FALL);
					if (NumShards>0){
						float angle = -(PI/(NumShards))/2;
						float anglediff = (PI/(NumShards));
						for (int i=1; i<=NumShards; i++){
							eweapon shard = Screen->CreateEWeapon(EW_ROCK);
							shard->X = CenterX(ghost);
							shard->Y = CenterY(ghost);
							shard->Damage = ghost->WeaponDamage;
							shard->Angular = true;
							shard->Angle = angle;
							shard->Step=ShardSpeed;
							angle = angle - anglediff;
						}
						ghost->ItemSet=0;
						Ghost_HP = -1000;
					}
				}
			}
			if (State == THWOMP_STATE_ON_GROUND){
				haltcounter--;
				if (haltcounter==0){
					State = THWOMP_STATE_RISING;
				}
			}
			if(State == THWOMP_STATE_RISING){
				Ghost_Move(DIR_UP, SPD/100, 2);
				if (Ghost_Y<= OrigY){
					State = THWOMP_STATE_DEFAULT;
				}
			}
			ThwompAnimation(ghost, OrigTile, State, 2);
			debugValue (1, State);
			debugValue (2, Screen->Quake);
			debugValue (3, Ghost_Jump);
			Ghost_Waitframe(this, ghost);
		}
	}
}

//Thwomp animation routine. Uses two consecutive frames. Set animation to "None" in enemy editor.
void ThwompAnimation(npc ghost, int origtile, int state, int numframes){
	int offset = 0;
	if (state == THWOMP_STATE_FALLING) offset = ghost->TileWidth;
	else if (state == THWOMP_STATE_ON_GROUND) offset = ghost->TileWidth;
	ghost->OriginalTile = origtile + offset;
}

//Returns TRUE, if the enemy is currently on platform. Used in sideview areas.
//Imprecision used to ignore certain amount of pixels on the edges, so Enemy can drop trough gaps that 
//are as wide as enemy itself.
bool Ghost_OnSideviewPlatform(npc ghost, int imprecision){
	if (!IsSideview()) return ((ghost->Z)==0);
	int ghx = ghost->X;
	int ghy = ghost->Y;
	int ghOffX = ghost->HitXOffset;
	int ghOffY = ghost->HitYOffset;
	int ghwidth = ghost->HitWidth;
	int ghheight = ghost->HitHeight;
	int TghX = ghx+ghOffX;
	int TghY = ghy+ghOffY;
	bool OnGround = false; 
	if (Screen->isSolid((TghX+imprecision), (TghY+ghheight+1))) OnGround = true;
	if (Screen->isSolid((CenterX(ghost)), (TghY+ghheight+1))) OnGround = true;
	if (Screen->isSolid((TghX+ghwidth-imprecision), (TghY+ghheight+1))) OnGround = true;
	return OnGround;
} 

Simple autoghosted enemy that uses 2 consecutive tile for his animation. Check comments inside code for enemy properties.


Edited by Alucard648, 03 July 2015 - 01:37 PM.


#12 Astromeow

Astromeow

    RESPECT DA OBOE SOLO

  • Members

Posted 03 July 2015 - 09:55 PM

This thread is gold for me. You guys have thinking-outside-of-the-box going on, and I love it.

 

In whichever way the final compilation is released- Im looking forward as I can now spice up my work and give it life!



#13 Timelord

Timelord

    The Timelord

  • Banned
  • Location:Prydon Academy

Posted 03 July 2015 - 11:34 PM

Organising: I suggest making any common routines, and functions, into a header, and placing each enemy in its own file. Put the constants for all the enemies in the header, with commented-out copies in the individual files, with a cross-index pointing to where they run, and the purpose of each,

Essentially, make it so that non-scripters can easily figure it out. (Good luck, I know.)

In fact, if you want me to split it up when complete, arrange it, and put in the comments, and document the thing, just ask.

#14 Moosh

Moosh

    The Mush

  • Moderators

Posted 10 July 2015 - 04:21 PM

So the sideview enemies pack is more or less usable now. I'm working with Zoria to hopefully make it more organized and better documented as well as a second pair of eyes for bugcatching, but for now it'll do. Here's a video of the pack in action:

 

And you can download the pack here. It comes with some visual aid images, a test quest, and a text file with some hastily written explanations of enemy arguments. Enjoy!


  • Avaro likes this

#15 accela2me

accela2me

    Illustrious

  • Members
  • Real Name:Juliano
  • Location:Minas Gerais, Brazil

Posted 10 July 2015 - 05:09 PM

excellent work, guys!

these enemies will be perfect in my sideview quest :)




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users