User Tag List

Page 2 of 4 FirstFirst 1 2 3 4 LastLast
Results 11 to 20 of 37

Thread: ZC [2.future] Feature Requests

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Gel
    Join Date
    Mar 2016
    Location
    U.S.A.
    Posts
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    305
    Level
    6
    vBActivity - Bars
    Lv. Percent
    40%
    Please clarify 'global values'.
    I'm certain this is doable by scripting already- counters and flags that are stored upon completing objectives, to tell the game what to do next. I.E., the triforce pieces, but much expanded.

    The remainder of this is already possible with scripts; so I presume that you mean that you want timing options without scripts? Note that other editors that allow this, typically use default scripts, or some similar mechanism, and then set values via a GUI; or by direct code.
    Then I suppose what I'm wishing for is more functionality accessible by GUI. Especially of things related to cutscenes. New items, enemies, combo functions are fairly straight-forward, create one script, set your FFC, flags and such per screen, and you're good to go. In contrast, each individual cutscene requires its own script, a tedious process, and made even worse if it's supposed to be interactive.

  2. #2
    Gel
    Join Date
    Mar 2016
    Location
    U.S.A.
    Posts
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    305
    Level
    6
    vBActivity - Bars
    Lv. Percent
    40%
    I like Screen->Secrets(false), and I can;t believe that I forgot about this. Really, I'd like to make it possible to individually set/unset screen secrets.
    Have you ever used the Age of Kings scenario editor? In particular, the trigger editor? If Zquest could do anything remotely like that, that would streamline an enormous amount of design and script work.

    I was actually thinking of doing something different: Making pre-packaged quest templates, for quest styles, that have pre-included and compiled items, and engine effects. I've already been working on one that emulates the Gameboy style games, and we could include things like that to allow expandeditem lists, without needing to hardcode them.
    This sounds FANTASTIC. Would love to hear more/update status.

    For my own needs:
    More utility in using secrets/flags.
    Talking NPCs hardcoded.
    FFC's movement behavior that can be manipulated by secrets.
    In sum: the ability to make a basic cutscene without using scripts, with NPCs having a conversation, moving around, and performing actions.
    I think these have been requested already, just adding them as my own wishlist:
    Sideview ladders
    Enemy type editor
    Map sizes increased (16x16?)
    View menu: Ability to set palette per map in addition to per screen.
    Subscreen editor: ability to place/move elements with a mouse.
    Pie-in-the-sky, prolly 3.0 feature instead: all layers compounded into a single map screen, with a toggle to work on different layers.

  3. #3
    Octorok Lelouche Vi Britannia's Avatar
    Join Date
    Oct 2015
    Location
    Britannia - Area 11
    Posts
    173
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    1,112
    Level
    11
    vBActivity - Bars
    Lv. Percent
    46.41%
    So here's a thing. Not sure if anyone mentioned this one.

    The ability to directly copy an item class to a blank item class allowing you to create a variant line of the same type of item. For example. We have the wand in the game and its class wand. How about a wand that shoots something other than magic waves. How about one that shoots a fireball that can pierce? Doing so without affecting the same item requires quite a bit of time coding in ZScript but as its a relatively simple function that can be applied based on a "base item type" that already exists why not just have the ability to clone the family and provide a few more options in the editor. This would save a lot of headaches for people who want multiple types of an existing weapon (like wands or arrows).

    Speaking of arrows; how about more item counters. The current method of creating a proper item counter was mentioned by someone as being hard/impossible to work with. More counters would allow a few useful things like multiple ammo types for your bow, or even a supply of low recovery level potions, or other special items scripted by modders that have trackable limited uses.

    And along with those counters, I've run into this situation twice now; Keys that are unkeyed (ie normal keys) will currently work in dungeons where level specific keys are used even if the item is disabled. What I've been trying to do is make it so normal keys work only on chests in the overworld while level keys are required to get though dungeons.... so... why not have options set for key items on where they can be used. Options could include "doors only", "doors and armos/chest combos", "lock blocks", "doors and chests", "doors and lock blocks", "all locks". If you felt so inclined, perhaps an option to have more than one type of door lock available which would require more complex key-finding. Also, how about an option where finding the "master key" ie. boss key would allow you to use the key to open all dungeon locks?

    Also, on the subject, an option to eliminate knock-back on certain damage combos. Currently if you hit a damage combo you get thrown backwards as if hit by an enemy. I wanted to make a poisoned swamp in an area on my last project but scrapped the idea as moving around became much too annoying since Link would touch the water then instantly throw himself back like he just realized the water was made of spiders or something.
    Lost my wings and grew 8 tentacles... I've seen enough Hentai to know where this is going....

  4. #4
    The Timelord
    QDB Manager
    ZC Developer

    Join Date
    Oct 2006
    Location
    Prydon Academy
    Posts
    1,396
    Mentioned
    112 Post(s)
    Tagged
    1 Thread(s)
    vBActivity - Stats
    Points
    4,765
    Level
    21
    vBActivity - Bars
    Lv. Percent
    69.72%
    Quote Originally Posted by Lelouche Vi Britannia View Post
    So here's a thing. Not sure if anyone mentioned this one.

    The ability to directly copy an item class to a blank item class allowing you to create a variant line of the same type of item. For example. We have the wand in the game and its class wand. How about a wand that shoots something other than magic waves. How about one that shoots a fireball that can pierce? Doing so without affecting the same item requires quite a bit of time coding in ZScript but as its a relatively simple function that can be applied based on a "base item type" that already exists why not just have the ability to clone the family and provide a few more options in the editor. This would save a lot of headaches for people who want multiple types of an existing weapon (like wands or arrows).
    Hah!I recently put together a very basic model (on paper) for defining Script Itemclass types. This would use the z* itemclasses, and allow a user to define them directly, then apply them to an item and have that item do whatever they set up for that itemclass.

    We also need to fix the Magic Book, as setting its power doesn't affect the flame damage.

    Speaking of arrows; how about more item counters. The current method of creating a proper item counter was mentioned by someone as being hard/impossible to work with. More counters would allow a few useful things like multiple ammo types for your bow, or even a supply of low recovery level potions, or other special items scripted by modders that have trackable limited uses.
    (emphasis, mine)

    Do you happen to have a reference for that comment? I'm not sure what you mean by a 'proper counter'; nor do I know if this is intended to imply that it is difficult to accomplish this in ZScript, or difficult to modify the source to expand the number of available counters; else something entirely different.

    If you are scripting things, and need many counters, you can just store the values in an array, or variable. I suppose we can add more, but I don't know how much of a pain that would be. I don't think it would be too difficult, but I've no idea yet; and depending on how the values are stored, it could either be easy-peasy, or a true nightmare.

    I want to change the way counters work, in general, to use signed longs, instead of (supposedly unsigned) ints. I say 'supposedly' there, because they roll over at a signed int value, but Tamamo claimed they were unsigned. Negative counters do have practical applications, and should be a thing in the future.

    And along with those counters, I've run into this situation twice now; Keys that are unkeyed (ie normal keys) will currently work in dungeons where level specific keys are used even if the item is disabled. What I've been trying to do is make it so normal keys work only on chests in the overworld while level keys are required to get though dungeons.... so... why not have options set for key items on where they can be used. Options could include "doors only", "doors and armos/chest combos", "lock blocks", "doors and chests", "doors and lock blocks", "all locks". If you felt so inclined, perhaps an option to have more than one type of door lock available which would require more complex key-finding. Also, how about an option where finding the "master key" ie. boss key would allow you to use the key to open all dungeon locks?
    I do like the idea of custom key types, and matching combos; or additional key types. You can fix the level keys issue with a tiny global function:

    Spoiler: show
    Code:
    int BackupKeys[214747];
    
    const int KEYS_BACKUP_CTR = 0;
    const int KEYS_ACHIVED = 1;
    
    
    void LevelKeysOnly_ByDMap(){
        int levelKeyDMaps[]={1,2,3,4,5,6,7,8,9}; //Populate with the DMap numbers.
        bool disable_keys;
        for ( int q = 0; q <= SizeofArray(levelKeyDMaps); q++ ){
            if ( Game->GetCurDMap == levelKeyDMaps[q] ) disable_keys = true;
            
        }
        if ( disable_keys && !BackupKeys[KEYS_ARCHIVED] && Game->Counter[CR_KEYS] ) {
            BackupKeys[KEYS_BACKUP_CTR] = Game->Counter[CR_KEYS];
            BackupKeys[KEYS_ACHIVED] = 1;
            Game->Counter[CR_KEYS] = 0;
        }
        if ( !disable_keys && BackupKeys[KEYS_ARCHIVED] && BackupKeys[KEYS_BACKUP_CTR] ){
            Game->Counter[CR_KEYS] = BackupKeys[KEYS_BACKUP_CTR];
            BackupKeys[KEYS_BACKUP_CTR] = 0;
            BackupKeys[KEYS_ACHIVED] =  0;
        }
    }
    
    void LevelKeysOnly(int min_lvl, int max_lvl){
        if ( Game->GetCurlevel() >= min_lvl && Game->GetCurlevel() <= max_lvl && !BackupKeys[KEYS_ARCHIVED] && Game->Counter[CR_KEYS] ) {
            BackupKeys[KEYS_BACKUP_CTR] = Game->Counter[CR_KEYS];
            BackupKeys[KEYS_ACHIVED] = 1;
            Game->Counter[CR_KEYS] = 0;
        }
        if ( ( Game->GetCurlevel() <= min_lvl || Game->GetCurlevel() >= max_lvl ) && BackupKeys[KEYS_ARCHIVED] && BackupKeys[KEYS_BACKUP_CTR] ){
            Game->Counter[CR_KEYS] = BackupKeys[KEYS_BACKUP_CTR];
            BackupKeys[KEYS_BACKUP_CTR] = 0;
            BackupKeys[KEYS_ACHIVED] =  0;
        }
    }




    Also, on the subject, an option to eliminate knock-back on certain damage combos. Currently if you hit a damage combo you get thrown backwards as if hit by an enemy. I wanted to make a poisoned swamp in an area on my last project but scrapped the idea as moving around became much too annoying since Link would touch the water then instantly throw himself back like he just realized the water was made of spiders or something.
    We'd need to add a flag for that. I already planned to turn most of Link's conditions into vars, including knockback.

    This is also very easy to do, by script...something like this as a global function:

    Spoiler: show
    Code:
    void NoKnockbackCombos(){
        int combo_d[]={32000, 32001, 32002}; //Populate with IDs of combos that prevent knockback.
        int c[5];
        c[0] = Link->X+Link->HitXOffset+Link->DrawXOffset;
        c[1] = Link->Y+Link->HitYOffset+Link->DrawYOffset;
        c[2] = c[0]+(Link->HitWidth);
        c[3] = c[1]+(Link->HitHeight);
        for ( int q = 0; q <= 6; q+ ) {
            for ( int w = 0; w < 176; w++ ) {
                for ( int e = 0; e <= SizeOfArray(combo_d); e++ ) {
                    if ( GetLayerComboD(q,w) == combo_d[e] && ComboAt(w) 
                    &&
                    RectCollision( ComboX(w), ComboY(w), (ComboX(w)+16), (ComboY(w)+16), c[0], c[1], c[2], c[3]) 
                    &&
                    ( Link->Action == LA_GOTHURTLAND || Link->Action == LA_GOTHURTWATER ) ){
                    
                        Link->HitDir = -1;
                    }
                }
            }
        }
    }

  5. #5
    Octorok Lelouche Vi Britannia's Avatar
    Join Date
    Oct 2015
    Location
    Britannia - Area 11
    Posts
    173
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    1,112
    Level
    11
    vBActivity - Bars
    Lv. Percent
    46.41%
    Quote Originally Posted by ZoriaRPG View Post
    Do you happen to have a reference for that comment? I'm not sure what you mean by a 'proper counter'; nor do I know if this is intended to imply that it is difficult to accomplish this in ZScript, or difficult to modify the source to expand the number of available counters; else something entirely different.

    If you are scripting things, and need many counters, you can just store the values in an array, or variable. I suppose we can add more, but I don't know how much of a pain that would be. I don't think it would be too difficult, but I've no idea yet; and depending on how the values are stored, it could either be easy-peasy, or a true nightmare.

    I want to change the way counters work, in general, to use signed longs, instead of (supposedly unsigned) ints. I say 'supposedly' there, because they roll over at a signed int value, but Tamamo claimed they were unsigned. Negative counters do have practical applications, and should be a thing in the future.
    http://armageddongames.net/showthrea...he-Item-Editor

    I may have misinterpreted what was here but I don't think so. It made it sound like customized counters were simply not possible. If you know how to script this out, I would love to know how. I researched it but I guess the math functions required are over my head right now. I'm still getting used to tweeking scripts already made to do what I want them to do (which has become pretty easy now). But other than some really basic stuff, I'm not a guru yet.
    Lost my wings and grew 8 tentacles... I've seen enough Hentai to know where this is going....

  6. #6
    The Timelord
    QDB Manager
    ZC Developer

    Join Date
    Oct 2006
    Location
    Prydon Academy
    Posts
    1,396
    Mentioned
    112 Post(s)
    Tagged
    1 Thread(s)
    vBActivity - Stats
    Points
    4,765
    Level
    21
    vBActivity - Bars
    Lv. Percent
    69.72%
    Quote Originally Posted by Lelouche Vi Britannia View Post
    http://armageddongames.net/showthrea...he-Item-Editor

    I may have misinterpreted what was here but I don't think so. It made it sound like customized counters were simply not possible. If you know how to script this out, I would love to know how. I researched it but I guess the math functions required are over my head right now. I'm still getting used to tweeking scripts already made to do what I want them to do (which has become pretty easy now). But other than some really basic stuff, I'm not a guru yet.

    Here is an example:

    Spoiler: show
    Code:
    ///////////////////////////////
    /// Custom Counters Example ///
    ///////////////////////////////
    
    //Counters array.
    int Counters[214747];
    
    //Counter Array Indices
    const int CTR_ARROW_4 = 1001;
    const int CTR_MAX_ARROW_4 = 1002;
        
    //Item vconstants
    const int IT_ARROW_4 = 200;
    
    //Drawing Arrow 4 COunters Settings:
    const int DRAW_ARROW_4_X = -30;
    const int DRAW_ARROW_4_Y = 100;
    const int DRAW_ARROW_4_FONT = 16;
    const int DRAW_ARROW_4_WIDTH = 8;
    const itn DRAW_ARROW_4_HEIGHT = 8;
    const int DRAW_ARROW_4_COLOUR = 1;
    
    //Initial Set-Up Values
    const int INIT_ARROW_4_MAX = 20;
    
    //Script for 'Arrow 4' quiver.
    item script Arrow_4_Quiver{
        void run(int increase, int set_exact){
            if ( increase && !set_exact ) IncreaseCounterMax(CTR_MAX_ARROW_4, increase);
            if ( !increase && set_exact ) SetCounterMax(CTR_MAX_ARROW_4, set_exact);
        }
    }
    
    //Script for Arrow 4 ammo.
    item script PickupCustomArrowAmmo4{
        void run(int amount, int sound){
            Game->PlaySound(sound);
            if ( Counters[CTR_ARROW_4] - amount < Counters[CTR_MAX_ARROW_4] ) Counters[CTR_ARROW_4]+=amount;
            if ( Counters[CTR_ARROW_4] - amount > Counters[CTR_MAX_ARROW_4] ) Counters[CTR_ARROW_4] = Counters[CTR_MAX_ARROW_4];
        }
    }
            
    //Example bow item that uses 'IT_ARROW_4' and a custom counter.
    //Assign to an item, with the item class 'Custom itemclass', or one of the 'zz###' item classes
    //as the 'Action; script.
    
    //Arguments:
    //Arguments:
    // D0: The sound to play for firing an arrow.. 
    // D1: The number of ammo to use.
    // D2: The sound effect to play for an error, including too many arrows on screen, or out of arrows in the counter.
    // D3: The maximum number of arrows that the player may have on-screen at any one time. 
    // --> You want to set this argument, as not setting it, will allow the player to fire up to 255 arrows, providing 
    // --> that they have sufficient ammunition. Normal values are between '1' and '4'. 
    // D4: Set to a value of '1' to allow Link to fire arrows while jumping. 
    // D5: The ID of the arrow type to generate.
    // D6: The sprite of the arrow when fired.
    // D7: The distance from Link to place it. 
    
    item script Arrow_CustomCounter{
    	void run(int sound, int errorSFX, int maxOnscreen, int allowLinkZ, int arrowID, int sprite, int dist){
    		int numArrows;
    		if ( Floor(Link->Z) !=0 && !allowLinkZ ) Quit();
    
    			if ( Counters[CTR_ARROW_4] && !maxOnscreen ){
    				( if cost > 1 ) {
                        if ( cost > Counters[CTR_ARROW_4] ) {
                            Game->PlaySound(SFX_ERROR);
                            Quit();
                        }
                        else Counters[CTR_ARROW_4]-=cost;
                    }
                    if ( !cost ) Counters[CTR_ARROW_4]--;
    				if ( sound ) Game->PlaySound(sound);
    				lweapon arrow = NextToLink(LW_ARROW, dist);
    				itemdata normalArrow = Game->LoadItemData(arrowID);
    				arrow->UseSprite(sprite);
    				this->Power = normalArrow->Power;
    			}
    			else if ( Counters[CTR_ARROW_4] && maxOnscreen ){
    				for ( int q = 1; q <= Screen->NumLWeapons(); q++ ) {
    					lweapon l = Screen->LoadLWeapon(q);
    					if ( l->ID == LW_ARROW ) numArrows++;
    				}
    				if ( numArrows < maxOnscreen ) {
                        if ( cost > 1 ) {
                            if ( cost > Counters[CTR_ARROW_4] ) {
                                Game->PlaySound(SFX_ERROR);
                                Quit();
                            else Counters[CTR_ARROW_4]--;
                        }
    					if ( !cost ) Counters[CTR_ARROW_4]--;
    					if ( sound ) Game->PlaySound(sound);
    					lweapon arrow = NextToLink(LW_ARROW, dist);
    					itemdata normalArrow = Game->LoadItemData(arrowOD);
    					arrow->UseSprite(sprite);
    					this->Power = normalArrow->Power;
    				}
    				else Game->PlaySound(errorSFX);
    			}
    			if ( !Counters[CTR_ARROW_4] ) Game->PlaySound(errorSFX);
    		
    	}
    }
    
    //Example Global Scripts
    
    //Active
    global script DrawCounters{
        void run(){
            while(true){
                DrawArrow_4_Counter(true);
                WaitDraw();
                Waitframe();
            }
        }
    }
        
    global script Init{
        void run(){
            Counters[COUNTER_MAX_ARROW_4] = INIT_ARROW_4_MAX;
        }
    }
    
    //Global functions
    
    //Draws custom counter from array[index] using settings passed to the remainder of the params.
    void DrawCounter(int arr, int index, int x, int y, int font, int width, int height, int colour){
        Screen->Drawinteger(7,x,y,colour,0,sizeX,arr[index],0,128);
    }
    
    //Draws the counter for 'Arrow 4'. Set 'only_equipped 'true' if you wish ti display only if equipped.
    void DrawArrow_4_Counter(bool only_equipped){
        if ( only_equipped && ( GetEquipmentA() == IT_ARROW_4 || GetEquipmentB() == IT_ARROW_4 ) )
                    DrawCounter(Counters, CTR_ARROW_4, DRAW_ARROW_4_X, DRAW_ARROW_4_Y, DRAW_ARROW_4_FONT, DRAW_ARROW_4_WIDTH, DRAW_ARROW_4_HEIGHT, DRAW_ARROW_4_COLOUR)'
        if ( !only_equipped ) DrawCounter(Counters, CTR_ARROW_4, DRAW_ARROW_4_X, DRAW_ARROW_4_Y, DRAW_ARROW_4_FONT, DRAW_ARROW_4_WIDTH, DRAW_ARROW_4_HEIGHT, DRAW_ARROW_4_COLOUR)'
    }
    
    //Increases a custom counter max to a specified amount.
    void SetCounterMax(int counter, int amount){
        Counters[counter] = amount;
    }
    
    //Increases a ccustom ounter max by a specified amount.
    void IncreaseCounterMax(int counter, int amount){
        Counters[counter] += amount;
    }


    I made this purely out of me head, in about ten minutes at most. As can see, it's not terribly difficult to do this, and it allows you to display the counter on the screen, wherever you bloody well please. I hope this it sans-error...

    If you want to know how to store, and modify an internal Game->Counter[ctr] by shifting weapons,I can give you an example of that, too. Doing this involves little more than storing one state, (CTR_ARCHIVED_*), and if the weapon is selected, store the previous ammo into a backup array index, read a backup array index for the ammo to load, and transpose their values if the condition test evaluates for the specified state.

  7. #7
    The Timelord
    QDB Manager
    ZC Developer

    Join Date
    Oct 2006
    Location
    Prydon Academy
    Posts
    1,396
    Mentioned
    112 Post(s)
    Tagged
    1 Thread(s)
    vBActivity - Stats
    Points
    4,765
    Level
    21
    vBActivity - Bars
    Lv. Percent
    69.72%
    [ unintentional double post ]

  8. #8
    Gibdo Shoelace's Avatar
    Join Date
    Feb 2005
    Age
    38
    Posts
    777
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    2,635
    Level
    16
    vBActivity - Bars
    Lv. Percent
    76.25%
    My Request is to up the Tile Page Limit. In my new Tileset I am making it is all 8-bit color. Well, I have been making tiles and then erasing some, making tiles and erasing some, and I am finally to the post where I am almost at max capacity for my Tileset for my games I am making. It would be amazing if we can get the Tile Page Limit to be doubled from 256 to 512.

  9. #9
    Here lies mero. Died by his own dumbassitude.
    Join Date
    May 2011
    Posts
    929
    Mentioned
    102 Post(s)
    Tagged
    2 Thread(s)
    vBActivity - Stats
    Points
    5,527
    Level
    23
    vBActivity - Bars
    Lv. Percent
    13.96%
    I'm pretty sure Saffith already fixed magic book damage in the 3.0 source, but I've been wrong before. So yeah.

  10. #10
    Octorok Lelouche Vi Britannia's Avatar
    Join Date
    Oct 2015
    Location
    Britannia - Area 11
    Posts
    173
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)
    vBActivity - Stats
    Points
    1,112
    Level
    11
    vBActivity - Bars
    Lv. Percent
    46.41%
    So then is there a way to have a visual counter show up that changes depending on which item is currently set to B?

    Nevermind, figured it out and found the script fix for showing counters for both buttons.
    Last edited by Lelouche Vi Britannia; 03-15-2016 at 06:24 PM. Reason: Found answer
    Lost my wings and grew 8 tentacles... I've seen enough Hentai to know where this is going....

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