Status Colour Indicators:
Pending
Done, Not Perfected
Done, Perfected
Not Happening
@Gleeok : There are many things in here that are ultimately up to you to decide upon. Yiou may want to scan this slowly, and digest it segment by segment, with some whiskey to hand. I find that helps.
A while back, the concern that Saffith's planned weapons rewrite and my weapons and guys modifications would be mutually exclusive, were a kibosh to further discussion on the matter, but seeing as Saffith is out of this, I would like to bring this up.
Here is what I've done, plan to do, and have considered.
Working
Script Weapons
I have already implemented individual defences for script weapon types in the editor, for the existing ten. These work precisely as intended.They are located in a new array, for these ten weapon types.
Dimentio, meanwhile, has defined an itembased on the wand, that can create lweapons of most types; including script types. Clearly, some types are prohibited.
->Range
I had added a ScriptRange property to the weapons class, so that scripts may set the range or duration of weapons that are appropriate. I would like to add this to the item editor as a fixed value (not Attributes, but a new JWIN_TEXT_PROC) so that items that can have a range use a unified entry point for it from the user, rather than an Attributes[] point that might shift about based on the item class.
Diagonal Hookshot
I have partially implemented diagonal movement, which can be toggled with an item editor flag.
Planned
Weapon Types
Ideally, I would like to expand the list of weapon types to include wFlame (fire, but with a step property, instead of distance), wIce, wLightning, wSound, and a few others. I would further, like to increase the number of user-defined types, and allow renaming them in ZQuest.
Weapon and Item Classes
I'm hoping to add the fire rod, ice rod, trowel, cape, and possibly the cane of somaria. I also wish to add an invincible flag to the cane of byrna, and I want to add an option to the item editor 'Magic Cost is in Seconds', as opposed to frames.
I want to add a UseDefence property to items, so that the user can set a global defence outcome, that is applied to all npcs. This would be a default, if the npc defence is 'None'. In essence, the weapon would always have one of the effects of the standard npc editor defence outcomes (stun, block, and so forth; but bear in mind that this list is scheduled for expansion), but if the enemy is set to a defence other than 'None' the engine will use the npc setting instead.
I further want to add some additional Attribute indices, and flags, to items, so that the item editor has more fields to use.
Other per-item improvements, such as a swim speed setting for flippers (press button to go faster, as in Z3), or other small enhancements.
I would also like to add some generic items, that produce a weapon, with the following properties set by the item editor attributes: Weapon type, ranged, distance-based, returning, diagonal. This would allow creating fully user-defined items without needing scripts, and using the planned item editor defence settings to define how these work; and the planned flag editor trigger flags, to allow triggers from them.
It would greatly simplify the process of adding new and unusual, or even unique, items to a quest, that at present requires heavy scripting to accomplish, making these effects easily accessible tot he end-user.
Animations
I would like to add an in-built set of animations, that can be called by items, via the item itself, or via the planned flag editor, or as a defence outcome. For example, an explosion animation, a fire animation, bombos, ether, quake, and similar, could be included, called by the user when the item is used, when it hits a trigger, or when it hits an enemy. With the default enemy defence outcome, this animation could be set as the default outcome of the defence, and an animation ta in the item editor could determine its mechanical effects (e.g., damage).
Obviously, scripts will also need to be able to generate animations, just as you would generate an lweapon. This can be something as simple as Screen->CreateAnimation(type, sprites[], damage, x, y), or more fancy, as its own object type. I might prefer the latter as a type, sprite , but I'm not particularly rigid on this.
Guys
I want to add a set of arrays to guys, for future defences, and for defences on a per-item basis. It would be interesting to implement a defence outcome, for each item i n he editor, eventually; without stripping the class outcomes. Essentially, this would have a default of 'off', and if off, the npc would use the class defence outcome. if this setting is enabled, the npc would check against the parentitem, and apply this result, instead of the class-based result.
I re-wrote the npc defence checking system. It now uses a series fo checks that can be used to check the weapon level, and other object properties, and simplifies weapon damage handling.
I would also like to expand the defence and scriptdefence arrays, reserving space for future expansion, so that we can add defences without needing a filepack change, and this introduce them whenever we wish. The 'scriptdefence' array is now obsolete. The main npc 'defense' array is now a size of 41.
Editors
I would like to add some pull-down lists to the item editor, and npc editor. The item editor pull-downs would set item->Properties[], a new array, with special properties inherent to the classes. The wand that @Dimentio made, as an example, uses a selectable weapon type. Other examples include a pulldown (JWIN_SELECT_PROC) to select a single item for item-specific defence, with a second pull-down next to it, for the outcome. This would be better IMO, than multiple tabs for 256 items. :)
Obviously, the editor panels will need to include any other new features, involved.
Link Class Objects
I would like to add a Z3 sword, with a 180-degree slash to the standard inventory. his could be an overlay on slash, but I think it would be just as wide to make it a clean, new item.
At the same time, I would like to add a system of creating what are now Link class objects by script. Clearly, creating them would require new functions, and not merely CreateLWeapon(), but it could be done. CreateLWeaponDx() is only the first tiny step toward this, and CreateMeleeWeapon() could be done.
Other, Script
Similarly, a script-only ->Defence property on lweapons, could change what type to which they are compared by Enemy::TakeHit/Hit. (This can be done with the new UseDefence member of weapons.
I also wrote a preliminary function for ZScript to attempt to hit an npc with an arbitrrary, or dummy weapon. This allows setting a weapon type, parent item ID (-1 for none), weapon direction, and coordinates, and mimicing a collision. For example, ikf you fired a laser that was drawn with drawtile, instead fo spawning lweapons along its path, you could just check for intersection with an npc, and then if it intersects, call CollisionDx(L_WLASER, n->X, n->Y,laserdamage, laserdir, -1) and then allow the internal engine collision to check for shield blockage, enemy defences, apply damage, and set the npc invincibility frames.
Anyway, what does everyone think of this? I think that all of this could work without a weapons rewrite, and that none of it ultimately spoils a rewrite if you wanted to do one in a few years down the line.