PDA

View Full Version : need hore script and help with firebat script



theme4ajackal
02-18-2003, 06:22 AM
Hey yall, I need a script for a horse. I want some wildlife in my quest. I don't want it to attack or talk, just aimlessly wounder around. I got the sprite from the Open Zelda Source. Its a cool horse. I tryed to make draw a horse but it end up looking like a seal. Also I'm working on a firebat. I found a cool bat wavs to go with it. I just woundering if this script I have will make it work. I used the cavebat script and made some changes, I was trying to also make it resistent to fire. Here's the sprite.Thxs all I'm new at this>

/************************************************** ***********************
* _firebat1 Entity Script
*
* Author: Satanman
* Date: 18/02/02
*
* Desc: An Enemy Script for a firebat enemy.
*
* NOTE: This Script REQUIRES the enemy library entity: _enemylib
* to be included in the project.
*
* Usage:
*
* Sprites: _firebat.spt
*
************************************************** **********************/
#include <entity>
#include <general>
#include <animation>
#include <float>
#include <counter>
#include <core>

//==================================
// Global Data
//==================================
new walks[20];
new DeadAnim[20]; // String holds animation identifier of death animation
new FallAnim[20]; // String holds animation identifier of falling animation
new LastImage[20]; // holds sprite code of the last drawn image

new float: StunCount;
new float: HitCount; // Counter used when the enemy has been hit
new float: timer;
new adj = 3; // Collision rectangle adjustment value

//----------------------------------------
// Name: main()
//----------------------------------------
main()
{
if (FirstRun())
{
// Create the animations
CreateAnim(6, walks); // Walking animations

// Add Frames to the walking animations
AddAnimframe(walks, 0, 0, "_firebat"); // walking south
AddAnimframe(walks, -2, 0, "_firebata");
LastImage = "_firebat";

// Create the Death Animation using the enemy library - nmelib
CreateAnim(8, DeadAnim);
CallFunction("_enemylib", true, "CreateDeathAnim", "s", DeadAnim );

// Create the Falling Animation using the enemy library
CreateAnim(8, FallAnim);
CallFunction("_enemylib", true, "CreateFallAnim", "s", FallAnim );

// Set some general parameters
SetActiveDist("this", 320);
SetType("this", enemyType);
SetSpeed("this", 50);
SetDamage("this", 50);
SetHealth("this", 50);
}

if (!isActive("this") || isDead("this"))
return;

// Check for a collision with the player
CallFunction("_enemylib", true, "CheckForPlayer", "NULL");

// Call a function for the enemy depending on its state
switch( GetState("this") )
{
case standing:
Hang();
case walking:
Walk();
case hit:
Hit();
case dying:
Die();
case burning:
Walk();
case stunned:
Stunned();
case frozen:
Freeze();
}
}

//----------------------------------------
// Name: Walk()
//----------------------------------------
Walk()
{
SetState("this", walking);

// Get the width and height of the Current animation
new width = GetAnimWidth(walks);
new height = GetAnimHeight(walks);

// Move the enemy if the game is unpaused
if (GetPauseLevel() == 0)
{
// randomly change direction
if (random(30) == 1)
SetMoveAngle("this", random(8) * 45);

// Check for Collisions
if (AngleCollide("this", 5, 5, 240, true, width / 2, height / 2))
SetMoveAngle("this", random(8) * 45);

// Move the enemy
AngleMove("this");
}

new x = GetX("this");
new y = GetY("this");

// Draw the enemy and its shadow
if (isVisible("this"))
{
DrawAnim(walks, x, y, y + height);
PutSprite("shadow1", (x + width / 2) - 8, y + height + 4, 2);
}

// Set a collision rectangle around the Enemy
SetCollisionRect("this", 0, false, x + adj, y + adj, x + width - adj, y + height - adj);
timer += GetTimeDelta();
if (timer >= 1.50)
SetState("this", standing);
}

//----------------------------------------
// Name: Hang()
//----------------------------------------
Hang()
{
SetState("this", standing);
new x = GetX("this");
new y = GetY("this");
PutSprite("_cavebat1", x, y, 99999);
if (NearPoint(GetX("this"), GetY("this"), GetX("player1"), GetY("player1"), 50))
{
SetState("this", walking);
timer = 0.00;
PlaySound("bat2.wav", 240);
}
}
//----------------------------------------
// Name: Stand()
//----------------------------------------
Stand( justDraw )
{
// Get the width and height of the Current animation
new width = GetAnimWidth(walks);
new height = GetAnimHeight(walks);
new x = GetX("this");
new y = GetY("this");

// Draw the enemy and its shadow
if (isVisible("this"))
{
if (justDraw)
DrawAnimNoInc(walks, x, y, y + height);
else
DrawAnim(walks, x, y, y + height);
PutSprite("shadow1", (x + width / 2) - 8, y + height - 15, 2);
}

// Set a collision rectangle around the Enemy
SetCollisionRect("this", 0, false, x + adj, y + adj, x + width - adj, y + height - adj);
}


//----------------------------------------
// Name: HitByWeapon(wtype[], damage, x, y)
//----------------------------------------
public HitByWeapon(wtype[], damage, x, y)
{
new state = GetState("this");
if (state == hit || state == dying || state == burning)
return;

// Check if this enemy was hit by a weapon that can stun
if ( !strcmp( wtype, "stun" ) && state != stunned && state != frozen)
{
StunCount = float(damage);
SetState("this", stunned);
return;
}

// Check if this enemy was hit by a fire weapon
if ( !strcmp( "this", walks" ) )
{
// Set the enemy on fire
if (CallFunction("_enemylib", true, "SetOnFire", "s", LastImage))
StunCount = 0.00; // function succeded, walk
return;
}

// Check if this enemy was hit by an ice weapon
if ( !strcmp( wtype, "ice" ) )
{
// Put this enemy on ice
CallFunction("_enemylib", true, "BeginFreeze", "s", LastImage);
return;
}

HitCount = 0.00;
CallFunction("_enemylib", true, "BeginHit", "nnn", damage, x, y );
}


//----------------------------------------
// Name: Hit()
//----------------------------------------
Hit()
{
new colors[5][3] = { {19,125,19}, {253,211,65}, {225,88,5}, {32,211,238}, {238,32,32} };
new width = GetAnimWidth(walks);
new height = GetAnimHeight(walks);

// Move the enemy if the game is completely unpaused
if (GetPauseLevel() == 0)
{
AngleMove("this");
AngleCollide("this", 5, 5, 126, 0, width / 2, height / 2);
}

new x = GetX("this");
new y = GetY("this");

// Draw the enemy
if (isVisible("this"))
{
DrawAnim(walks, x, y, y + height, 0, colors[ floatround(HitCount * 20.0) % 5 ][0], \
colors[ floatround(HitCount * 20.0) % 5 ][1], \
colors[ floatround(HitCount * 20.0) % 5 ][2], 255, 0, 100);

PutSprite("shadow1", (x + width / 2) - 8, y + height - 15, 2);
}

// Check the hit counter
HitCount += GetTimeDelta();

if (HitCount >= 0.23)
{
// Leave the Hit state
SetState("this", walking);
SetSpeedMod("this", 0);
ChangeDirection("this"); // Pick a new Random direction
SetAngleFromDir("this");
}
}

//----------------------------------------
// Name: Die()
//----------------------------------------
Die()
{
// Draw the enemy standing still
if (GetAnimCount(DeadAnim) < 5)
Stand( true );

// Overlay the death animation over the enemy
CallFunction("_enemylib", true, "HandleDying", "ss", DeadAnim, LastImage);
SetHealth("this", 0);
}

//----------------------------------------
// Name: Stunned()
//----------------------------------------
Stunned()
{
// Display the enemy stood still
Stand( true );

// decrement the Stun counter
StunCount -= 10 * GetTimeDelta();
CallFunction("_enemylib", true, "Stunned", "n", floatround(StunCount));
}

//----------------------------------------
// Name: Burn()
//----------------------------------------
Burn()
{
// This function should be called when the enemy is the the burning state
// Use the walking state to make the enemy walk while they burn
Walk(true);


}

//----------------------------------------
// Name: Freeze()
//----------------------------------------
Freeze()
{
// Draw the enemy in a standing position, but draw them blue
new x = GetX("this");
new y = GetY("this");
new width = GetAnimWidth(walks);
new height = GetAnimHeight(walks);

if (isVisible("this"))
{
DrawAnimNoInc(walks, x, y, y + height, 0, 100, 100, 255);
PutSprite("shadow1", (x + width / 2) - 8, y + height - 15, 2);
}
}

TheGeepster
02-18-2003, 06:47 AM
Open Zelda supports scripting. It's the zelda project geared towards this sort of thing.

I highly doubt Zelda Classic ever will. Zelda Classic is geared towards non-programmers.