User Tag List

Results 1 to 10 of 10

Thread: [Winter 08] Epona

  1. #1
    &&
    ZC Developer
    Joe123's Avatar
    Join Date
    Sep 2006
    Age
    33
    Posts
    3,061
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    7,323
    Level
    26
    vBActivity - Bars
    Lv. Percent
    11.69%

    [Winter 08] Epona

    Let's get this started! ^_^

    This is already posted in the Script Showcase, but to show it's on-going (and attract attention), I'm putting here.
    There are updates, and one BIG bugfix.

    Video by Plissken (PureZC):
    http://youtube.com/watch?v=NrRn8IgNMGY

    Code:
    import "std.zh"
    
    //==============//
    //Epona;		//
    //	 By Joe123//
    //==============//
    
    //These are utility variables. Don't mess with them (unless you know what you're doing;) )
    bool epona; bool wrdg;
    bool ep1; bool ep2;
    bool runoff; bool chring;
    
    //This boolean, by Saffith, checks for the solidity of combos, and is used for walkability detection
    bool isSolid(int x, int y) {
    	if(x<0 || x>255 || y<0 || y>175)
    					return false;
    	int mask=1111b;
    	if(x%16<8)
    		mask&=0011b;
    	else
    		mask&=1100b;
    	if(y%16<8)
    		mask&=0101b;
    	else
    		mask&=1010b;
    	return (!(Screen->ComboS[ComboAt(x, y)]&mask)==0);
    }
    
    //These are for disabling items
    bool hshot; bool hammr; bool fethr;
    
    //These variables are to be user-set, and are specific to each quest
    //SFX Constants
    const int essfx = 68; // Epona's Song
    const int gsfx = 66; // noise made whilst Epona gallops
    const int offsfx = 67; // noise made by Epona when Link dismounts
    
    //Utility Constants
    const int sfxcap = 35; // Time delay, in frames, between looping the 'Galloping' SFX
    const int eslng = 180; // Length, in frames, of your 'Epona's Song' SFX
    const int spd = 1; // Epona's speed. 0 is fastest (twice Link's speed), increase the number to reduce Epona's walking speed
    const int flg = 98; // Number of the Flag used for 'No Epona' zones
    const int ecset = 5; // The CSet your Epona ffc will use
    
    
    //Combo Reference Constants
    const int ecmb = 23980; // Combo ID number of the first combo of the 8 Epona combos
    const int lcmb = 23964; // Combo ID number of the first combo of the 13 Link Riding combos
    
    //Item Constant
    const int I_INVIS = 124; // Item ID number of an item with LTM that will make Link invisible
    
    
    
    //This script basically runs all of (almost) the functions that make Epona. Load it into Global Script slot 2.
    global script slot2{
    	void run(){
    	//Load the ffcs for Link and Epona. You'll have to make sure you're not using ffc 32 or 31 anywhere else.
    	ffc lnk = Screen->LoadFFC(31);
    	ffc epa = Screen->LoadFFC(32);
    	//Just some utility integers and booleans here, dealing with various different things
    	int fdly; int sfxfdly;
    	int i; int schk;
    	int hp;
    	bool solid;		
    		while(true){
    
    			//The next if statement deals with making sure that Epona can't be called on flag 98, but makes sure
    			//that the animation with Link playing the whistle still occurs
    			if(Screen->ComboF[ComboAt(Link->X+8,Link->Y+8)] == flg || Screen->ComboI[ComboAt(Link->X+8,Link->Y+8)] == flg){
    				if(epona){
    					Link->Item[I_INVIS] = true;
    					lnk->Data = lcmb+12; lnk->CSet = 6;
    					lnk->X = Link->X; lnk->Y = Link->Y;
    					Link->Action = LA_FROZEN; Link->Dir = 1;
    					hp = Link->HP;
    					for(i=0; i<eslng; i++){
    						Link->HP = hp;
    						Waitframe();
    					}
    					Link->Action = 0;
    					Link->Item[I_INVIS] = false;
    					lnk->Data = 0;
    				}
    				ep2 = true;
    				epona = false;
    				wrdg = false;
    				runoff = false;
    			}
    			//This if checks whether the main body of the Epona script has been activated via the item script
    			if(epona && !ep2){
    				//This one is for parts of the script that only happen once, such as making Link invicible,
    				//and calling Epona over
    				if(ep1){
    					Link->Item[I_INVIS] = true;
    					ep1 = false;
    					wrdg = true;
    					
    					//These next few lines can be used to remove Link's items whilst he is riding on Epona
    					//this will require some user-setup though.
    					//You'll have to find the item ID of what you want to disable, and copy one of the
    					//lines below, and then put that item ID in the [] instead.
    					if(hshot) Link->Item[52] = false;
    					if(hammr) Link->Item[54] = false;
    					if(fethr) Link->Item[91] = false;
    					if(Link->Item[94]){chring = true; Link->Item[94] = false;}
    
    					//Here, Link's ffc is moved over, and the whistle animation is played.
    					lnk->Data = lcmb+12; lnk->CSet = 6;
    					lnk->X = Link->X; lnk->Y = Link->Y;
    					lnk->Flags[3] = true;
    					Link->Action = LA_FROZEN; Link->Dir = 3;
    					hp = Link->HP;
    					for(i=0; i<eslng; i++){
    						Link->InputStart = false;
    						Link->HP = hp;
    						Waitframe();
    					}
    			
    					//The next few lines check to make sure Link is far enough away from a solid object,
    					//move the Epona ffc over to him, and make it 2x2 instead of 1x1.
    					epa->TileWidth = 2;
    					epa->TileHeight = 2;
    					epa->CSet = ecset; epa->Data = ecmb+7;
    					epa->Flags[3] = true; epa->Flags[0] = true;
    					epa->X = 0; epa->Vx = 1;
    					if(Link->Y > 20) epa->Y = Link->Y-16;
    					else epa->Y = Link->Y;
    					sfxfdly = sfxcap;
    					for(i=0; i<Link->X-16; i++){
    						Link->InputStart = false;
    						Link->HP = hp;
    						if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    						else sfxfdly ++;
    						Waitframe();
    					}
    					Game->PlaySound(offsfx);
    					
    					//These next lines make Link jump up onto Epona (provided he isn't at the top of
    					//the screen)
    					for(i=0; i<16; i++){
    						if(!isSolid(Link->X, Link->Y-i) == true) schk = i;
    					}
    					if(schk > 0 && Link->Y > 20){Link->Y -= schk; schk = 0;}
    					epa->X = Link->X-8; epa->Y = Link->Y;
    					lnk->X = epa->X+8; lnk->Y = epa->Y; 
    					Link->Action = 0;
    					epa->Flags[0] = false;
    				}
    
    				//These ifs are what actually attach Epona's ffc to Link, and change her graphics and whatnot
    				solid = false;
    				if(Link->Dir == 0){
    					if(epa->TileWidth != 1) epa->TileWidth = 1;
    					if(Link->InputUp){
    						for(i = 0; i<16; i+=2){
    						if(isSolid(epa->X+i,epa->Y+14) || Screen->ComboF[ComboAt(epa->X+i,epa->Y)] == flg || Screen->ComboI[ComboAt(epa->X+i,epa->Y)] == flg) solid = true;	
    						}
    						if(!solid){
    							epa->Data = ecmb+4; lnk->Data = lcmb+4;
    							Link->Y -= 1;
    							if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    							else sfxfdly ++;
    							if(fdly == spd){Link->Y -= 1; fdly = 0;}
    							else fdly++;
    						}else{epa->Data = ecmb; lnk->Data = lcmb;}
    					}else{epa->Data = ecmb; lnk->Data = lcmb;}
    					if(Link->Action == LA_ATTACKING) lnk->Data = lcmb+8;
    					epa->X = Link->X; epa->Y = Link->Y;
    					lnk->X = epa->X; lnk->Y = epa->Y;
    				}
    				if(Link->Dir == 1){
    					if(epa->TileWidth != 1) epa->TileWidth = 1;
    					if(Link->InputDown){
    						for(i = 0; i<16; i+=2){
    						if(isSolid(epa->X+i,epa->Y+28) || Screen->ComboF[ComboAt(epa->X+i,epa->Y+32)] == flg || Screen->ComboI[ComboAt(epa->X+i,epa->Y+32)] == flg) solid = true;	
    						}
    						if(!solid){
    							epa->Data = ecmb+5; lnk->Data = lcmb+5;
    							Link->Y += 1;
    							if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    							else sfxfdly ++;
    							if(fdly == spd){Link->Y += 1; fdly = 0;}
    							else fdly++;
    						}else{epa->Data = ecmb+1; lnk->Data = lcmb+1;}
    					}else{epa->Data = ecmb+1; lnk->Data = lcmb+1;}
    					if(Link->Action == LA_ATTACKING) lnk->Data = lcmb+9;
    					epa->X = Link->X; epa->Y = Link->Y;
    					lnk->X = epa->X; lnk->Y = epa->Y;
    				}
    				if(Link->Dir == 2){
    					if(epa->TileWidth != 2) epa->TileWidth = 2;
    					if(Link->InputLeft){
    						for(i = 0; i<32; i+=2){
    						if(epa->Y >= 160 && isSolid(epa->X+2,160+i)) solid = true;
    						if(i<12 && isSolid(epa->X+2,epa->Y+16+i)) solid = true;
    						if(Screen->ComboF[ComboAt(epa->X,epa->Y+i)] == flg || Screen->ComboI[ComboAt(epa->X,epa->Y+i)] == flg) solid = true;	
    						}
    						if(!solid){
    							epa->Data = ecmb+6; lnk->Data = lcmb+6;
    							Link->X -= 1;
    							if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    							else sfxfdly ++;
    							if(fdly == spd){Link->X -= 1; fdly = 0;}
    							else fdly++;
    						}else{epa->Data = ecmb+2; lnk->Data = lcmb+2;}
    					}else{epa->Data = ecmb+2; lnk->Data = lcmb+2;}
    					if(Link->Action == LA_ATTACKING) lnk->Data = lcmb+10;
    					epa->X = Link->X-9; epa->Y = Link->Y;
    					lnk->X = epa->X+9; lnk->Y = epa->Y+1;
    				}
    				if(Link->Dir == 3){
    					if(epa->TileWidth != 2) epa->TileWidth = 2;
    					if(Link->InputRight){
    						for(i = 0; i<32; i+=2){
    						if(epa->Y >= 160 && isSolid(epa->X+30,160+i)) solid = true;
    						if(i<12 && isSolid(epa->X+30,epa->Y+16+i)) solid = true;
    						if(Screen->ComboF[ComboAt(epa->X+32,epa->Y+i)] == flg || Screen->ComboI[ComboAt(epa->X+32,epa->Y+i)] == flg) solid = true;	
    						}						
    						if(!solid){
    							epa->Data = ecmb+7; lnk->Data = lcmb+7;
    							Link->X += 1;
    							if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    							else sfxfdly ++;
    							if(fdly == spd){Link->X += 1; fdly = 0;}
    							else fdly++;
    						}else{epa->Data = ecmb+3; lnk->Data = lcmb+3;}
    					}else{epa->Data = ecmb+3; lnk->Data = lcmb+3;}
    					if(Link->Action == LA_ATTACKING) lnk->Data = lcmb+11;
    					epa->X = Link->X-7; epa->Y = Link->Y;
    					lnk->X = epa->X+7; lnk->Y = epa->Y+1;
    				}
    				if(Link->InputUp){Link->Dir = 0; Link->InputUp = false;}
    				if(Link->InputDown){Link->Dir = 1; Link->InputDown = false;}
    				if(Link->InputLeft){Link->Dir = 2; Link->InputLeft = false;}
    				if(Link->InputRight){Link->Dir = 3; Link->InputRight = false;}
    			}	
    			//this part of the script runs every frame that Epona is not activated
    			if(!epona){
    				//however this boolean, ep2, makes sure that the effects of dismounting Epona happen only
    				//once
    				if(!Link->Item[94] && chring) Link->Item[94] = true;	
    				if(ep2){
    					Link->Item[I_INVIS] = false;
    					ep2 = false;
    					//This part makes Link dismount, and the wrdg (wasriding) boolean makes sure he only
    					//hops down if he was actually on Epona (ep2 can be accessed even if Link wasn't on
    					//Epona)
    					if(wrdg){
    						for(i=0; i<16; i++){
    							if(!isSolid(Link->X, Link->Y+16+i) == true) schk = i;
    						}
    						if(schk > 0 && Link->Y < 148){Link->Y += schk; schk = 0;}
    						Link->Dir = 1;
    						epa->Vx = 2.25; epa->Data = ecmb+7;
    						epa->TileWidth = 2;
    						wrdg = false; runoff = true;
    						sfxfdly = sfxcap;		
    					}
    					//This if deals with the SFX loop while Epona runs away
    					if(runoff){
    						if(sfxfdly == sfxcap){Game->PlaySound(gsfx); sfxfdly = 0;}
    						else sfxfdly ++;
    						if(epa->X >256) runoff = false;
    					}
    					
    					//To re-enable the items when Link gets off of Epona, you'll have to put an if
    					//statement here that has each level of the item (as you've set them with the item
    					//scripts) and then have that set the appropriate item ID to true.
    					if(hshot) Link->Item[52] = true;
    					if(hammr) Link->Item[54] = true;
    					if(fethr) Link->Item[91] = true;				
    					
    					lnk->Data = 0;
    					if(epa->X > 256) epa->Data = 0; 
    				}
    			}
    		Waitframe();
    		}
    	}
    }
    
    //This script just makes sure Link gets off Epona when you save and reload the file. Add it to script slot 3.
    //And DON'T think to yourself 'oh, it's ok, I'll just have the game reload with Link on Epona', that's bad. Very bad.
    global script slot3{
    	void run(){
    		epona = false;
    		wrdg = false;
    		ep2 = true;
    	}
    }
    
    
    //For disabling the items, you'll have to make item scripts like this for each item you want removed, and have them reference
    //the itemclass numbers you typed above.
    //Have it set the level of the item here (the first script sets the integer hshot to 1)
    item script hshot{
    	void run(){
    		hshot = true;
    	}
    }
    
    item script hammr{
    	void run(){
    		hammr = true;
    	}
    }
    
    item script fethr{
    	void run(){
    		fethr = true;
    	}
    }
    
    
    //This is the activation script for Epona. I've made it into an item that plays a SFX, so the idea is really that it's
    //Epona's song on the ocarina, but that's up to you =)
    //A different sound effect plays when Link dismounts.
    item script eponassong{
    	void run(){
    		if(Link->Z == 0){
    			if(!ep2){
    				epona = !epona;
    				if(epona) ep1 = true;
    				if(!epona) ep2 = true;
    			}
    			if(epona) Game->PlaySound(essfx);
    			if(!epona) Game->PlaySound(offsfx);
    		}
    	}
    }
    
    //Just a little script for use in areas where the Ocarina is disabled
    item script eponassongdisabled{
    	void run(int m){
    		Screen->Message(m);
    	}
    }
    
    
    //This script should make sure that Link can't get on Epona on screens that you don't want him to. He should also get off
    //instantly upon entering a screen with this script applied.
    ffc script gerroffthathorse{
    	void run(){
    	int play; int hp;
    	ffc lnk = Screen->LoadFFC(30);
    		epona = false;
    		while(true){
    			if(epona){
    				Link->Item[I_INVIS] = true;
    				Link->Action = LA_FROZEN;
    				Link->Dir = 1;
    				lnk->Data = lcmb+12; lnk->CSet = 6;
    				hp = Link->HP;
    				play = eslng;
    			}
    			ep2 = true;
    			epona = false;
    			wrdg = false;
    			runoff = false;
    			while(play > 0){	
    				if(play == eslng){	
    				lnk->X = Link->X; lnk->Y = Link->Y;
    				Link->HP = hp;
    				}
    				if(play == 1){
    					Link->Action = 0;
    					Link->Item[I_INVIS] = false;
    					lnk->Data = 0;
    				}
    				play--;
    			Waitframe();
    			}
    		Waitframe();
    		}
    	}
    }
    How to use the Epona script
    By Joe123

    1) Setting up the tiles
    Firstly, find what Epona and Link Riding tiles you will use.

    Here are the ones I am using; the Epona uses it's own CSet, and obviously they will only fit with DoR Link.

    This picture also serves to show the layout on the tilepage.
    It is not necessary to have the tiles laid out exactly like this (they're not in my tilesheet), because all the script references is Combo ID numbers, however this picture shows what tiles you will need for Epona as it is set up at present.

    The Epona tiles are organised as follows (just incase you can't work out what they're meant to be or something ):
    Code:
    First row, left to right:
    *1 tileblock for Epona facing north, standing still.
    *4 tileblocks for Epona facing north, galloping.
    *1 tileblock for Epona facing south, standing still.
    *4 tileblocks for Epona facing south, galloping.
    Second row, left to right:
    *1 tileblock for Epona facing left, standing still.
    *4 tileblocks for Epona facing left, galloping.
    Third row, left to right:
    *1 tileblock for Epona facing right, standing still.
    *4 tileblocks for Epona facing right, galloping.
    The Link tiles are organised as follows:
    Code:
    First row, left to right:
    *Link facing up, still.
    *Link facing down, still.
    *4 tile animation for Link riding, up.
    *4 tile animation for Link riding, down.
    Second row, left to right:
    *Link facing left, still.
    *Link facing right, still.
    *4 tile animation for Link riding, left.
    *4 tile animation for Link riding, right.
    Third row, left to right:
    *Link attacking, up.
    *Link attacking, down.
    *Link attacking, left.
    *Link attacking, right.
    *4 tile animation for Link playing the Ocarina.
    2) Setting up the combos
    Once you have found and ripped in your Epona and Link Riding sprites, you need to set them up on the combopage.
    This Grid shows how your Epona and Link Riding combos must be set up on the combopage. I'd direct link to it, but it's a little large so I've just put up the URL.


    Please note that there is no necessity for them to be next to each other (Link's combos can be as far away from Epona's as you like), however Epona's combos must all be in that order, one after the other, as must Link's, because the script only takes note of the number of the first combo, then adds the correct amount to the Combo ID number to get the other combos.

    Obviously the A.Speed values can be set to anything you like, but take heed of the 'A.SkipX' values, as the script will not function if you do not set them up as shown (well, it will, but your Epona's movement animations will look rather unusual).
    The A.SkipX is necessary to make large (well, with width greater than one) ffcs animation properly.

    Once you have organised your combos as shown, take a note of the Combo ID number of the top-left Epona combo, and the top-left Link combo.
    3) Sound Effects
    The Epona script uses three custom Sound Effects;
    • Epona's Song, played by Link to call Epona
    • Galloping, used when Epona is moving
    • Neighing, used when Link mounts and dismounts Epona


    I have always found This Website to be good when dealing with Sound Effects, although you won't find Epona's Song there.

    Once you have found those three Sound Effects, you will need to add them using the Sound Effect Editor.
    Hehe, gotta love my Wiki pages ^_^

    Take a note of the slot numbers you have assigned the Sound Effects to, and time the length in frames (there are 60 frames in one second) of your Epona's Song sound effect, taking a note of this also.
    4) Making Link Invisible
    For the Epona Script to function, it is required that Link be made invisible.
    This isn't great fun, but it is necessary.
    The only way to access doing this in Zelda Classic, is to make a gap after where your Link Sprites are located, and make an item with a Link Tile Modifier that will move his sprites along so he is no longer seen.

    Firstly, go to the Item Editor.
    Press 'Z', and you will arrive at a list of currently un-used items.
    Select the first one, and press 'Edit'.
    In the 'Data' tab, set the itemclass to 'Non-Gameplay Items', the Level to 1, and check the 'Equipment Item' box.
    In the 'GFX' tab, set the graphic to be a non-0 tile (what it is is irrelevant; it will never be seen), and in the box labelled 'Link Tile Modification', enter a value that, when added to Link's tiles, would move them down to an area of completely empty combos.

    In the tab at the top of the editor, it will say 'Item ##:'. Make a note of the number shown here.
    5) Quest Rules
    The following Quest Rules are required:
    • FFCs Are Visible When The Screen Is Scrolling

    (well, you could go without it but it'd look a bit silly)

    The following Quest Rules are advised:
    • Expanded Link Tile Modifiers
      If this rule is checked, you will have to re-organise your Link Sprites, and set them up again to take into account the fact that they will now all be modified, instead of just the walking sprites, using the Link Sprite Editor. (Come to think of it, other people might not like this rule, but I think it's silly to use the old system anyway. I have all my Link spites on page 39 in neat rows)
    • Flip Right-Facing Slash
      Although this may seem undesirable, if it is not checked, Link cannot attack underneath Epona whilst riding left or right.

    6) The Script
    Select the entire script in the previous thread, and copy it all into a 'Notepad' document.
    If you already have scripts in your quest, make sure to keep them in the same file.
    If you already have a global script, send me a PM and I'll fix it up with Epona in it too.
    You can only have one.

    If you do not, press 'Save As'.
    Write in the name you want to save your script file as, and put at the end '.z' (so '####.z')
    On the menu that says 'Save As Type:', change the type from '.txt' to 'All Files'.
    Press Save.

    Now you must update the constants located at the top of the script, in reference to your quest.
    Code:
    //These variables are to be user-set, and are specific to each quest
    //SFX Constants
    const int essfx = 68; // Epona's Song
    const int gsfx = 66; // noise made whilst Epona gallops
    const int offsfx = 67; // noise made by Epona when Link dismounts
    
    //Utility Constants
    const int sfxcap = 35; // Time delay, in frames, between looping the 'Galloping' SFX
    const int eslng = 180; // Length, in frames, of your 'Epona's Song' SFX
    const int spd = 1; // Epona's speed. 0 is fastest (twice Link's speed), increase the number to reduce Epona's walking speed
    const int flg = 98; // Number of the Flag used for 'No Epona' zones.
    //Combo Reference Constants
    const int ecmb = 23980; // Combo ID number of the first combo of the 8 Epona combos
    const int lcmb = 23964; // Combo ID number of the first combo of the 13 Link Riding combos
    
    //Item Constant
    const int I_INVIS = 124; // Item ID number of an item with LTM that will make Link invisible
    This section should appear in your file.
    To change the numbers to your specific needs, just erase the current value (values are located between '=' and ';'), and write in your value for the appropriate number.

    Now press 'Save' again, and return to ZQuest.
    Go to Tools->Scripts->Compile ZScript.

    Click 'Load', and find the file you just made.

    Press 'Compile'.

    The names of the scripts included in the Epona Script file should appear on the right hand side of each tab.

    Select a script and press the '<<' button to copy it over into the applicable slot. Make sure to assign all types of scripts, and make a note of the numbers you have your item scripts applied to.
    Press 'OK'.

    6) Epona's Song and other Item Scripts
    Contained within the Epona Script file are 5 item scripts, which must be applied for usage. If you don't apply them, it won't be too bad, but they are there for a reason.

    Go to the Item Editor.
    Select the 'Hammer' item.
    Go to the 'Pickup' tab, and in the box labelled 'Script', write in the number of the scipt labelled 'hammr' that you made a note of earlier.
    Select the 'Hookshot' item.
    Go to the 'Pickup' tab, and in the box labelled 'Script', write in the number of the scipt labelled 'hshot' that you made a note of earlier.
    Select the 'Roc's Feather' item.
    Go to the 'Pickup' tab, and in the box labelled 'Script', write in the number of the scipt labelled 'fethr' that you made a note of earlier.
    Now make a new item, by pressing 'Z' and then 'Edit'.
    Name the item 'Epona's Ocarina' (or simmilar).
    In the 'Data' tab:
    • Give the item an item class that is not currently used (ie. z089).
    • Give the item a level of '2'.
    • Check the 'Equipment Item' box.


    In the 'GFX' tab:
    • Select the tile and set up any animation you want the subscreen entry for the item to have.


    In the 'Pickup' tab:
    • Check the 'Gain All Lower Level Items' box.


    In the 'Action' tab:
    • Write in the number of the script labelled 'eponassong' that you made a note of earlier.


    Now go to the String Editor, and write a new string that says something along the lines of 'You can't call Epona here', and make a note of what number string it is.
    Now make another item.
    Name the item 'Epona's Ocarina (Disabled)' (or simmilar).
    In the 'Data' tab:
    • Give the item the same item class you gave the previous item.
    • Give the item a level of '1'.
    • Check the 'Equipment Item' box.


    In the 'GFX' tab:
    • Select the tile and set up any animation you want the subscreen entry for the item to have.


    In the 'Action' tab:
    • Write in the number of the script labelled 'eponassongdisabled' that you made a note of earlier.


    In the 'Arguments' tab:
    • Write in the number of the string you just wrote down


    7) The Subscreen
    Go to Quest->Misc. Data->Subscreens.

    Select your active subscreen.

    If you wish to replace another item with Epona's Ocarina, right-click on the item, and select 'Properties'.
    In the 'Attributes' tab, replace the 'Item Class' with the one you assigned Epona's Ocarina to previously.

    If you wish to create a new item, press 'Ins' on your keyboard, and assign that itemclass to the item. The other boxes in the 'Attributes' tab must also be set up correctly to be able to select the item.
    8 ) Other Notes
    • By default, Epona cannot enter any combos with flag '98' layed onto them. If you want to change this to another flag, go to the user-set integers section at the start of your script, and change the value of the integer, 'flg'.
    • If you wish for Epona not to enter a certain screen, then apply the FFC Script 'gerrofthathorse' to the room. Epona cannot be summoned in rooms with this script applied, and Link will dismount upon entering the room.
    • If you wish for Epona not to enter an entire DMap, in the DMap options, go to the 'Disable' tab. Select 'Epona's Ocarina', and press '<-'.
    • Link can use his weapons whilst on Epona, but not the Hammer, Hookshot, Feather or Scroll: Spin Attack, because they do not work well with Epona.
    • The bugfix that I said about earlier was to do with Epona near the bottom of the screen.
      If Epona's Y coordinate is equal to 160, she could run over unwalkable combos to the left/right in the old script.
      Obviously this is very bad, and is now fixed.
    • Solidity detection is now again improved over the past version.



    Yay for Expo :)
    Thankyou Pineconn!

  2. #2
    Wizrobe Pineconn's Avatar
    Join Date
    Jun 2005
    Location
    Columbus, OH
    Age
    33
    Posts
    4,350
    Mentioned
    6 Post(s)
    Tagged
    1 Thread(s)
    vBActivity - Stats
    Points
    10,500
    Level
    30
    vBActivity - Bars
    Lv. Percent
    44.36%

    Re: Epona

    It's Epona, pure and simple. Amazing. Great job. :)

    I must ask though, what would happen if you called Epona on a screen enclosed on the west side? Would she be smart enough to enter the screen from a different side?
    My quests:
    End of Time - First quest, uses classic graphics (Help/discussion thread)
    Link to the Heavens - Second quest, uses Pure tileset (YouTube LP | Help/discussion thread)
    End of Time DX - Remake of my first quest (YouTube LP | Help/discussion thread)

  3. #3
    &&
    ZC Developer
    Joe123's Avatar
    Join Date
    Sep 2006
    Age
    33
    Posts
    3,061
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    7,323
    Level
    26
    vBActivity - Bars
    Lv. Percent
    11.69%

    Re: Epona

    No, she'd appear at Link's feet.

    This is, however, due to my laziness rather than her intelligence =P
    I didn't really think it worth the extra coding, I mean, the whistle whirlwind only ever comes from the left.

  4. #4
    Gibdo bluedeath's Avatar
    Join Date
    Jul 2006
    Location
    New Brunswick, Canada
    Age
    31
    Posts
    720
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    2,795
    Level
    17
    vBActivity - Bars
    Lv. Percent
    19.95%

    Re: Epona

    Would these epona tiles work for pure, or would I have to recolor them?

  5. #5
    Wizrobe
    Join Date
    Dec 2006
    Age
    30
    Posts
    3,693
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    8,955
    Level
    28
    vBActivity - Bars
    Lv. Percent
    45.63%

    Re: Epona

    Quote Originally Posted by bluedeath View Post
    Would these epona tiles work for pure, or would I have to recolor them?
    You would have to recolor them.
    Quote Originally Posted by rock_nog View Post
    Well of course eveything's closed for Easter - don't you know of the great Easter tradition of people barricading themselves up to protect themselves from the return of Zombie Christ?


  6. #6
    &&
    ZC Developer
    Joe123's Avatar
    Join Date
    Sep 2006
    Age
    33
    Posts
    3,061
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    7,323
    Level
    26
    vBActivity - Bars
    Lv. Percent
    11.69%

    Re: Epona

    They don't work for DoR either, they need their own CSet.

    Just rip in on top of CSet 5, I mean, who really uses CSet 5 anyway?

  7. #7
    Wizrobe
    Join Date
    Dec 2006
    Age
    30
    Posts
    3,693
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    8,955
    Level
    28
    vBActivity - Bars
    Lv. Percent
    45.63%

    Re: Epona

    Quote Originally Posted by Joe123 View Post
    Just rip in on top of CSet 5, I mean, who really uses CSet 5 anyway?
    I do. I just use the old horse tiles that used cset 5.
    Quote Originally Posted by rock_nog View Post
    Well of course eveything's closed for Easter - don't you know of the great Easter tradition of people barricading themselves up to protect themselves from the return of Zombie Christ?


  8. #8
    &&
    ZC Developer
    Joe123's Avatar
    Join Date
    Sep 2006
    Age
    33
    Posts
    3,061
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    7,323
    Level
    26
    vBActivity - Bars
    Lv. Percent
    11.69%

    Re: Epona

    You use CSet 5?
    For what?

    You don't need it for aKttH do you?
    I copied over it with Epona's CSet >_<

  9. #9
    Wizrobe
    Join Date
    Dec 2006
    Age
    30
    Posts
    3,693
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    8,955
    Level
    28
    vBActivity - Bars
    Lv. Percent
    45.63%

    Re: Epona

    Quote Originally Posted by Joe123 View Post
    You use CSet 5?
    For what?

    You don't need it for aKttH do you?
    I copied over it with Epona's CSet >_<
    Okay, then I guess I can do without it. I just use it for random stuff sometimes, like getting certain combos to really strange colors to make the area look neater.
    Quote Originally Posted by rock_nog View Post
    Well of course eveything's closed for Easter - don't you know of the great Easter tradition of people barricading themselves up to protect themselves from the return of Zombie Christ?


  10. #10
    &&
    ZC Developer
    Joe123's Avatar
    Join Date
    Sep 2006
    Age
    33
    Posts
    3,061
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    7,323
    Level
    26
    vBActivity - Bars
    Lv. Percent
    11.69%

    Re: Epona

    Sorry.
    You can some screen-specific level palettes (or I will if you want) if needs be I'm sure.
    The colours in that generic overworld palette look really bad in my opinion anyway.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
About us
Armageddon Games is a game development group founded in 1997. We are extremely passionate about our work and our inspirations are mostly drawn from games of the 8-bit and 16-bit era.
Social