PDA

View Full Version : Started Writing New Script Types



ZoriaRPG
11-26-2018, 09:40 AM
Gleeok Grayswandir venrob

I started to code in the following script types:

npc script
lweapon script
eweapon script
screen script
link script --why didn't I do this as PLAYER script?!
dmap script

Of these, npc, lweapon, eweapon, and dmap all have a 'this'.

I also added a QR to permit item scripts to run for more than one frame. This is now working, as of 2.55 Alpha 2 (http://timelord.insomnia247.nl/zc-dev/2.55/2.55_Win_Alpha_2.zip).

If the QR is enabled, then item scripts run until they run out of scope. You can find it under Quest->Rules->Scripts

In the process of retooling this stuff, I expanded script registers from 256, to 1024. I might at some point see if I can make global--and only global--vars go higher. I don't want to try converting stacks from fixed-sized arrays, to vectors, because that'll be a nightmare with script-changes mid-stream.

Sprites now have stacks, and for similar reasons, I don't want to delete them when they aren't in use, because if the user assigns a script externally, that'll break.

(I do need to delete script stacks from particles, and engine phantom weapons.)

This is the current WIP repo (https://github.com/ArmageddonGames/ZeldaClassic/tree/2.55-scripttypes-parser).

The working/tested bits are in brancg 2.55.

Tamamo
11-26-2018, 10:17 AM
Dude lweapon and eweapons are the same damn thing, only difference is what vector they are stored in. They only require one script. Not two.

ZoriaRPG
11-27-2018, 08:10 AM
Dude lweapon and eweapons are the same damn thing, only difference is what vector they are stored in. They only require one script. Not two.

We had this conversation on Discord. I want them separate for my own purposes, not limited to keeping their refInfo segregated, and to ensure that there are an equal number of slots for creating enemy and player weapon scripts.

NPC scripts are hovering near 90%.

Alpha 3 (http://timelord.insomnia247.nl/zc-dev/2.55/2.55_Win_Alpha_3.zip)


http://timelord.insomnia247.nl/zc-dev/2.55/npc_script_slots.png


Script



npc script N
{
void run(){TraceToBase(64,10,2); this->X = 16;}

}



Assembly



N
SETV d2,0
SETR d3,REFNPC
PUSHR d3
SETR d4,SP
PUSHR d4
SETV d2,0.0015
PUSHR d2
SETV d2,64
PUSHR d2
SETV d2,10
PUSHR d2
SETV d2,2
PUSHR d2
GOTO 32
POP d4
SETV d2,16
PUSHR d4
SETV d3,0.0028
PUSHR d3
PUSHR d2
SETR d6,d4
ADDV d6,0
LOADI d2,d6
POP d3
PUSHR d2
PUSHR d3
GOTO 37
POP d4
SETV d3,0
POP d3
QUIT
TRACE5
POP d3
POP d3
POP d3
RETURN
POP d2
POP d3
SETR REFNPC,d3
SETR NPCX,d2
RETURN



Remains to Do


Save the slot code int he quest file.
Allow npcs to access it and set the script slot (Enemy Editor)
Call the script in the ZC game loop.
Hope that it works.

Tamamo
11-27-2018, 10:00 AM
their can be separate slots thats not the issue i have, the issue i have is that your taking a entity which is the same for both vectors and defining two script definitions. you dont do that. it's bad design.

And why are you posting this when we discussed this on discord already? hahaha, god i love you man.

ZoriaRPG
11-27-2018, 10:00 AM
Dude lweapon and eweapons are the same damn thing, only difference is what vector they are stored in. They only require one script. Not two.


Some Clarification on Why They Are Separate
Amongst other reasons for which lweapon script, and eweapon script are separated, here are some others that, because of how ZASM and ZScript work internally, effectively mandate segregation:

1. The tables lweapon and eweapon have some different variables/functions. If there was only one weapon script type, then this->function() or this->var or this->arr[] might cause bugs, crashes, or so forth because there would be no ZASM to run them if assigned to a different type

2. Beyond that, this-> stuff is determined by script type during compilation The parser would have no clue what ZASM instructions to use without segregating the script types so that it pulls functions using the correct refvar IDs. Coimbining them would preclude using the this-> pointer, which would be awful.

Basically, the script type tells the parser what tables to use to match strings in a script to ZASM instructions, or to Opcode constructors. If there was only one weapon script type, we'd need to incent a wholly new parser just to make it work! That's pretty far from 'simplification'.

3. Last, because lweapon and eweapon are segregated internally, calling RunScript(SCRIPT_TYPE, ID, CONST) would present some technical issues if we don't know if the script is functioning for an lweapon, or an eweapon. Segregation eases this, and makes integration into the extant editors simpler.. This notwithstanding, is the most trivial of the reasons that they need to be exclusively typed.

Tamamo
11-27-2018, 10:20 AM
1) no they dont

2) you shouldn't segregrate script type period. its terrible design

3) yep... but dummyweapons are the freaks that swing bothways.

you can have two different slots. but the script definitions for both need to be the same yo.