PDA

View Full Version : Scripted LWeapon items #1



Gleeok
03-17-2008, 07:26 PM
Three new lv3 items:


EDIT: Ok, bugfix. Use the CUSTOM ITEM CLASSES for the b_rang and the flamethrower. Also you probably need at least the lv1 boomerang for the sprites to display correctly.

I always use the custom item classes for all of these weapons sense that's what they were designed for.



The flamethrower candle,
The lv2 (or lv3) Wand,
The Multi_rang! (my personal favorite):D


Everything is basically already set up. If you want to change something then change it in the code. You'll see stuff like:
"// cset" or
"// speed"
for example. change it from there.

EXEPT the wand magic item. This one is meant to be used for NON Z3 MOVEMENT, and you'll have to slightly change it for animating the magic sprite. ...or if you like request what you want and i'll change it for you.

Wand lv2 item uses one D variable, Tile. Just set D0 argument to the tile you want to use.This should be arranged as 4 tiles in your tiles page! *Up,Down,Left,Right.*




int fire3;
int wand2;



global script global_2{

void run(){

int attack_delay;

while(true){

Waitframe();

int lx = Link->X; int ly = Link->Y;

if(attack_delay>0)attack_delay--;
if(Link->InputB && fire3>0){

if(attack_delay==0){
attack_delay = 6;

lweapon laser = Screen->CreateLWeapon(WPN_FIRE);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=2;
laser->Damage=2;
laser->CSet=8;
Game->PlaySound(13);
}
}
else fire3=0;
}
}
}

item script flamethrower_item{
void run(){
fire3=3;
}
}


item script wand_lv2{
void run(int tile){

int d = 2; // damage
int c = 7; // cset
int s = 3; // speed

int t = Link->Dir;

int lx = Link->X; int ly = Link->Y;

if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(WPN_WAND);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(WPN_WAND);

if(Link->Dir==0){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx+8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly+8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly+8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(WPN_WAND);

if(Link->Dir==0){laser->Dir=0;laser->X=lx-8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx-8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly-8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly-8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(WPN_WAND);

if(Link->Dir==0){laser->Dir=1;laser->X=lx;laser->Y=ly+16;laser->Tile=tile+1;}
else if(Link->Dir==1){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;laser->Tile=tile;}
else if(Link->Dir==2){laser->Dir=3;laser->X=lx+16;laser->Y=ly;laser->Tile=tile+3;}
else{ laser->Dir=2;laser->X=lx-16;laser->Y=ly;laser->Tile=tile+2;}
laser->Step=s;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
}
}


item script boomerang_multi{
void run(){

int s = 3; // b_rang speed
int c = 11;

lweapon fire1 = Screen->CreateLWeapon(WPN_BRANG);
fire1->Step=s;
fire1->Damage=0;
fire1->CSet=c; // cset
Game->PlaySound(4);


if(Link->InputLeft && Link->InputUp){
fire1->X = Link->X - 16;
fire1->Y = Link->Y - 16;
fire1->Dir=4;
}
else if(Link->InputRight && Link->InputUp){
fire1->X = Link->X + 16;
fire1->Y = Link->Y - 16;
fire1->Dir=5;
}
else if(Link->InputLeft && Link->InputDown){
fire1->X = Link->X - 16;
fire1->Y = Link->Y + 16;
fire1->Dir=6;
}
else if(Link->InputRight && Link->InputDown){
fire1->X = Link->X + 16;
fire1->Y = Link->Y + 16;
fire1->Dir=7;
}
else{
if(Link->Dir == 0) {
fire1->X = Link->X;
fire1->Y = Link->Y - 16;
fire1->Dir=0;
}
if(Link->Dir == 1) {
fire1->X = Link->X;
fire1->Y = Link->Y + 16;
fire1->Dir=1;
}
if(Link->Dir == 2) {
fire1->X = Link->X - 16;
fire1->Y = Link->Y;
fire1->Dir=2;
}
if(Link->Dir == 3) {
fire1->X = Link->X + 16;
fire1->Y = Link->Y;
fire1->Dir=3;
}
}
}
}




http://www.youtube.com/watch?v=1nqf3Gj4DCs
Thanks to bigjoe for making a video. I had no problems with the boomerang sprites though...Ah, I just figured it out.




Oh, and one more cool thing: The Multirang will shoot whatever type boomerangs you currently have! So if you have fire boomerangs for example, Now you have LOTS of fire boomerangs. :)


..Screenshots:

http://i235.photobucket.com/albums/ee138/Tiamat_AD/zelda007-2.jpg
Practice your accuracy by trying to stun multiple enemies!

http://i235.photobucket.com/albums/ee138/Tiamat_AD/zelda006-4.jpg
I think sweet fiery vengance speaks for itself. :odd:

http://i235.photobucket.com/albums/ee138/Tiamat_AD/zelda011-2.jpg
Maybe too powerful??? Hmm...OK got it, simply make the item use magic in the item editor. peice of cake.

Revfan9
03-17-2008, 07:38 PM
...You can spawn weapons now? :D

Gleeok
03-17-2008, 08:00 PM
Oops... I had a capitol L in there... :| It's fixed now!

bigjoe
03-17-2008, 09:41 PM
Heres you a video. You can link to it in your main post if you wish.

http://www.youtube.com/watch?v=1nqf3Gj4DCs

Gleeok
03-17-2008, 10:03 PM
Heres you a video. You can link to it in your main post if you wish.

http://www.youtube.com/watch?v=1nqf3Gj4DCs

Thank you bigjoe! I'll do that. By the way, you know you can hold down the B Button for the flamethrower right? Also was there a bug with the boomerang sprites? I think the problem may be that Link Needs the original boomerang item for the sprites to display correctly.

sps999
03-10-2009, 05:34 PM
Umm... there is no variable for the weapons (WPN_FIRE,WPN_WAND,WPN_BRANG) so it won't work for me.

pkmnfrk
03-10-2009, 05:42 PM
I bet there was at this time last year...

sps999
03-10-2009, 05:52 PM
my bad... I still keep thinking it's 2008...

Gleeok
03-10-2009, 11:31 PM
Should work fine now. I also updated the speed variables for the new step format.

PS: I still love the multi-rang and the flame *hold down the B button*thrower! :heart:




int fire3;
int wand2;



global script global_2{

void run(){

int attack_delay;

while(true){

Waitframe();

int lx = Link->X; int ly = Link->Y;

if(attack_delay>0)attack_delay--;
if(Link->InputB && fire3>0){

if(attack_delay==0){
attack_delay = 6;

lweapon laser = Screen->CreateLWeapon(LW_FIRE);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=200;
laser->Damage=2;
laser->CSet=8;
Game->PlaySound(13);
}
}
else fire3=0;
}
}
}

item script flamethrower_item{
void run(){
fire3=3;
}
}


item script wand_lv2{
void run(int tile){

int d = 2; // damage
int c = 7; // cset
int s = 300; // speed

int t = Link->Dir;

int lx = Link->X; int ly = Link->Y;

if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx+8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly+8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly+8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx-8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx-8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly-8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly-8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(WLW_MAGIC);

if(Link->Dir==0){laser->Dir=1;laser->X=lx;laser->Y=ly+16;laser->Tile=tile+1;}
else if(Link->Dir==1){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;laser->Tile=tile;}
else if(Link->Dir==2){laser->Dir=3;laser->X=lx+16;laser->Y=ly;laser->Tile=tile+3;}
else{ laser->Dir=2;laser->X=lx-16;laser->Y=ly;laser->Tile=tile+2;}
laser->Step=s;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
}
}


item script boomerang_multi{
void run(){

int s = 300; // b_rang speed
int c = 11;

lweapon fire1 = Screen->CreateLWeapon(LW_BRANG);
fire1->Step=s;
fire1->Damage=0;
fire1->CSet=c; // cset
Game->PlaySound(4);


if(Link->InputLeft && Link->InputUp){
fire1->X = Link->X - 16;
fire1->Y = Link->Y - 16;
fire1->Dir=4;
}
else if(Link->InputRight && Link->InputUp){
fire1->X = Link->X + 16;
fire1->Y = Link->Y - 16;
fire1->Dir=5;
}
else if(Link->InputLeft && Link->InputDown){
fire1->X = Link->X - 16;
fire1->Y = Link->Y + 16;
fire1->Dir=6;
}
else if(Link->InputRight && Link->InputDown){
fire1->X = Link->X + 16;
fire1->Y = Link->Y + 16;
fire1->Dir=7;
}
else{
if(Link->Dir == 0) {
fire1->X = Link->X;
fire1->Y = Link->Y - 16;
fire1->Dir=0;
}
if(Link->Dir == 1) {
fire1->X = Link->X;
fire1->Y = Link->Y + 16;
fire1->Dir=1;
}
if(Link->Dir == 2) {
fire1->X = Link->X - 16;
fire1->Y = Link->Y;
fire1->Dir=2;
}
if(Link->Dir == 3) {
fire1->X = Link->X + 16;
fire1->Y = Link->Y;
fire1->Dir=3;
}
}
}
}




Unfortunately there's alot of scripts that need to be updated. (basically every thread in the showcase forum from 2008 and prior) Best thing to do is bump them if the poster is still active and you want to use them.

sps999
03-11-2009, 04:15 PM
Pass 1: Parsing
Pass 2: Preprocessing
Pass 3: Building Symbol Tables
TMP, Line 117: Error S09: Variable LW_Brang is undeclared.
TMP, Line 60: Error S09: Variable LW_Magic is undeclared.
TMP, Line 72: Error S09: Variable LW_Magic is undeclared.
TMP, Line 84: Error S09: Variable LW_Magic is undeclared.
TMP, Line 96: Error S09: Variable WLW_Magic is undeclared. //Possibly a typo in the script?
TMP, Line 24: Error S09: Variable LW_Fire is undeclared.

-- Press a key --

------------------------------------------------------------------------

Still not working, pretty much same problem as the start.

---EDIT---EDIT---EDIT---EDIT---EDIT---EDIT---EDIT---EDIT---EDIT---
Well, turns out I just needed to import std.zh, all that typing of that error message was useless. Still, I suppse I did point out that typo, "WLW_Magic."

Gleeok
03-12-2009, 02:38 AM
Oopsie. fixed.

Also the wand magic was strewn together with no design at all really, and turned out kinda dumb as a result....I should fix that but what should it do? Spread shot like contra maybe?



int fire3;
int wand2;



global script global_2{

void run(){

int attack_delay;

while(true){

Waitframe();

int lx = Link->X; int ly = Link->Y;

if(attack_delay>0)attack_delay--;
if(Link->InputB && fire3>0){

if(attack_delay==0){
attack_delay = 6;

lweapon laser = Screen->CreateLWeapon(LW_FIRE);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=200;
laser->Damage=2;
laser->CSet=8;
Game->PlaySound(13);
}
}
else fire3=0;
}
}
}

item script flamethrower_item{
void run(){
fire3=3;
}
}


item script wand_lv2{
void run(int tile){

int d = 2; // damage
int c = 7; // cset
int s = 300; // speed

int t = Link->Dir;

int lx = Link->X; int ly = Link->Y;

if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx+8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly+8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly+8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=0;laser->X=lx-8;laser->Y=ly-16;}
else if(Link->Dir==1){laser->Dir=1;laser->X=lx-8;laser->Y=ly+16;}
else if(Link->Dir==2){laser->Dir=2;laser->X=lx-16;laser->Y=ly-8;}
else{ laser->Dir=3;laser->X=lx+16;laser->Y=ly-8;}
laser->Step=s;laser->Tile=tile+t;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
if(wand2>=0){
lweapon laser = Screen->CreateLWeapon(LW_MAGIC);

if(Link->Dir==0){laser->Dir=1;laser->X=lx;laser->Y=ly+16;laser->Tile=tile+1;}
else if(Link->Dir==1){laser->Dir=0;laser->X=lx+8;laser->Y=ly-16;laser->Tile=tile;}
else if(Link->Dir==2){laser->Dir=3;laser->X=lx+16;laser->Y=ly;laser->Tile=tile+3;}
else{ laser->Dir=2;laser->X=lx-16;laser->Y=ly;laser->Tile=tile+2;}
laser->Step=s;
laser->Damage=d;
laser->CSet=c;
Game->PlaySound(32);
}
}
}


item script boomerang_multi{
void run(){

int s = 300; // b_rang speed
int c = 11;

lweapon fire1 = Screen->CreateLWeapon(LW_BRANG);
fire1->Step=s;
fire1->Damage=0;
fire1->CSet=c; // cset
Game->PlaySound(4);


if(Link->InputLeft && Link->InputUp){
fire1->X = Link->X - 16;
fire1->Y = Link->Y - 16;
fire1->Dir=4;
}
else if(Link->InputRight && Link->InputUp){
fire1->X = Link->X + 16;
fire1->Y = Link->Y - 16;
fire1->Dir=5;
}
else if(Link->InputLeft && Link->InputDown){
fire1->X = Link->X - 16;
fire1->Y = Link->Y + 16;
fire1->Dir=6;
}
else if(Link->InputRight && Link->InputDown){
fire1->X = Link->X + 16;
fire1->Y = Link->Y + 16;
fire1->Dir=7;
}
else{
if(Link->Dir == 0) {
fire1->X = Link->X;
fire1->Y = Link->Y - 16;
fire1->Dir=0;
}
if(Link->Dir == 1) {
fire1->X = Link->X;
fire1->Y = Link->Y + 16;
fire1->Dir=1;
}
if(Link->Dir == 2) {
fire1->X = Link->X - 16;
fire1->Y = Link->Y;
fire1->Dir=2;
}
if(Link->Dir == 3) {
fire1->X = Link->X + 16;
fire1->Y = Link->Y;
fire1->Dir=3;
}
}
}
}

sps999
03-12-2009, 07:57 AM
Yeah, a spread shot would be cool.