📧 Message Board Archive

Damn "bad pics"
I ran the following script (attached to a misc. sprite) and the image (285) just flickered on the screen and disappeared:



void main(void)

{

 if (&snow == 1)

 {

   int &direct

   int &speed

   int &asnow = create_sprite(-180, -110, 9, 285, 1);

   int &bsnow = create_sprite(420, -110, 9, 285, 1);

   int &csnow = create_sprite(1020, -110, 9, 285, 1);

   int &dsnow = create_sprite(-180, 290, 9, 285, 1);

   int &esnow = create_sprite(420, 290, 9, 285, 1);

   int &fsnow = create_sprite(1020, 290, 9, 285, 1);

   sp_que(&asnow, 500);

   sp_que(&bsnow, 500);

   sp_que(&csnow, 500);

   sp_que(&dsnow, 500);

   sp_que(&esnow, 500);

   sp_que(&fsnow, 500);

   freeze(&asnow);

   freeze(&bsnow);

   freeze(&csnow);

   freeze(&dsnow);

   freeze(&esnow);

   freeze(&fsnow);

   &speed = random(4,2);

   sp_speed(&asnow, &speed);

   sp_speed(&bsnow, &speed);

   sp_speed(&csnow, &speed);

   sp_speed(&dsnow, &speed);

   sp_speed(&esnow, &speed);

   sp_speed(&fsnow, &speed);

   loop:

     move(&asnow, 1, 420, 1);

     move(&bsnow, 1, 1020, 1);

     move(&csnow, 1, 1620, 1);

     move(&dsnow, 1, 420, 1);

     move(&esnow, 1, 1020, 1);

     move_stop(&fsnow, 1, 1620, 1);

     sp_x(&esnow, -180);

     sp_y(&esnow, -110);

     sp_x(&fsnow, 420);

     sp_y(&fsnow, -110);

     sp_x(&csnow, 1020);

     sp_y(&csnow, -110);

     sp_x(&dsnow, -180);

     sp_y(&dsnow, 290);

     move(&asnow, 1, 1020, 1);

     move(&bsnow, 1, 1620, 1);

     move(&csnow, 1, 1620, 1);

     move(&dsnow, 1, 420, 1);

     move(&esnow, 1, 420, 1);

     move_stop(&fsnow, 1, 1020, 1);

     sp_x(&asnow, -180);

     sp_y(&asnow, -110);

     sp_x(&bsnow, 420);

     sp_y(&bsnow, -110);

     sp_x(&csnow, 1020);

     sp_y(&csnow, -110);

     sp_x(&dsnow, -180);

     sp_y(&dsnow, 290);

   goto loop;

 }

}



I ran debug mode and the following came up when this script began to run:



Dink:Screendraw: running main of script snow..

Dink:Script snow is entered at offset 345.

Dink:Compared 1 to 1

Dink:If returned true

Dink:Moving: Sprite 19, dir 1, num 420

Dink:Moving: Sprite 20, dir 1, num 1020

Dink:Moving: Sprite 21, dir 1, num 1620

Dink:Moving: Sprite 22, dir 1, num 420

Dink:Moving: Sprite 23, dir 1, num 1020

Dink:Move_stop: Sprite 24, dir 1, num 1620

Dink:giving script the boot

Dink:Yo, sprite 19 has a bad pic. (Map 699) Seq 285, Frame 1

Dink:Yo, sprite 20 has a bad pic. (Map 699) Seq 285, Frame 1

Dink:Yo, sprite 21 has a bad pic. (Map 699) Seq 285, Frame 1

Dink:Yo, sprite 22 has a bad pic. (Map 699) Seq 285, Frame 1

Dink:Yo, sprite 23 has a bad pic. (Map 699) Seq 285, Frame 1

Dink:DDERR_INVALIDOBJECT

Dink:



Dink:MainSpriteDraw(): Could not draw sprite 23, pic 0.

Dink:Box_crap: 400 257 400 257, Box_real: 0 0 0 0

Dink:Script snow is entered at offset 1443.

Dink:Moving: Sprite 19, dir 1, num 1020

Dink:Moving: Sprite 20, dir 1, num 1620

Dink:Moving: Sprite 21, dir 1, num 1620

Dink:Moving: Sprite 22, dir 1, num 420

Dink:Moving: Sprite 23, dir 1, num 420

Dink:Move_stop: Sprite 24, dir 1, num 1020

Dink:giving script the boot

Dink:Script snow is entered at offset 1858.

Dink:Found goto : Line is loop:

, word is loop:.

Dink:Moving: Sprite 19, dir 1, num 420

Dink:Moving: Sprite 20, dir 1, num 1020

Dink:Moving: Sprite 21, dir 1, num 1620

Dink:Moving: Sprite 22, dir 1, num 420

Dink:Moving: Sprite 23, dir 1, num 1020

Dink:Move_stop: Sprite 24, dir 1, num 1620

Dink:giving script the boot



and the last 17 lines of above keep repeating.



the real reason this is odd is because the following script works beautifully without changing a thing:



void main(void)

{

 if (&snow == 1)

 {

   int &direct

   int &speed

   int &asnow = create_sprite(420, -110, 9, 285, 1);

   int &bsnow = create_sprite(420, 290, 9, 285, 1);

   sp_que(&asnow, 500);

   sp_que(&bsnow, 500);

   freeze(&asnow);

   freeze(&bsnow);

   &speed = random(4,2);

   sp_speed(&asnow, &speed);

   sp_speed(&bsnow, &speed);

   loop:

     move(&asnow, 2, 290, 1);

     move_stop(&bsnow, 2, 690, 1);

     sp_y(&bsnow, -110);

     move(&bsnow, 2, 290, 1);

     move_stop(&asnow, 2, 690, 1);

     sp_y(&asnow, -110);

   goto loop;

 }

}



I can't work out what is wrong. Any help would be greatly appreciated.

Re: Damn "bad pics"
lots of times preload(285) works. dont know what the deal is, its just stupid like that.



: I ran the following script (attached to a misc. sprite) and the image (285) just flickered on the screen and disappeared:

: void main(void)

: {

:  if (&snow == 1)

:  {

:   int &direct

:   int &speed

:   int &asnow = create_sprite(-180, -110, 9, 285, 1);

:   int &bsnow = create_sprite(420, -110, 9, 285, 1);

:   int &csnow = create_sprite(1020, -110, 9, 285, 1);

:   int &dsnow = create_sprite(-180, 290, 9, 285, 1);

:   int &esnow = create_sprite(420, 290, 9, 285, 1);

:   int &fsnow = create_sprite(1020, 290, 9, 285, 1);

:   sp_que(&asnow, 500);

:   sp_que(&bsnow, 500);

:   sp_que(&csnow, 500);

:   sp_que(&dsnow, 500);

:   sp_que(&esnow, 500);

:   sp_que(&fsnow, 500);

:   freeze(&asnow);

:   freeze(&bsnow);

:   freeze(&csnow);

:   freeze(&dsnow);

:   freeze(&esnow);

:   freeze(&fsnow);

:   &speed = random(4,2);

:   sp_speed(&asnow, &speed);

:   sp_speed(&bsnow, &speed);

:   sp_speed(&csnow, &speed);

:   sp_speed(&dsnow, &speed);

:   sp_speed(&esnow, &speed);

:   sp_speed(&fsnow, &speed);

:   loop:

:   move(&asnow, 1, 420, 1);

:   move(&bsnow, 1, 1020, 1);

:   move(&csnow, 1, 1620, 1);

:   move(&dsnow, 1, 420, 1);

:   move(&esnow, 1, 1020, 1);

:   move_stop(&fsnow, 1, 1620, 1);

:   sp_x(&esnow, -180);

:   sp_y(&esnow, -110);

:   sp_x(&fsnow, 420);

:   sp_y(&fsnow, -110);

:   sp_x(&csnow, 1020);

:   sp_y(&csnow, -110);

:   sp_x(&dsnow, -180);

:   sp_y(&dsnow, 290);

:   move(&asnow, 1, 1020, 1);

:   move(&bsnow, 1, 1620, 1);

:   move(&csnow, 1, 1620, 1);

:   move(&dsnow, 1, 420, 1);

:   move(&esnow, 1, 420, 1);

:   move_stop(&fsnow, 1, 1020, 1);

:   sp_x(&asnow, -180);

:   sp_y(&asnow, -110);

:   sp_x(&bsnow, 420);

:   sp_y(&bsnow, -110);

:   sp_x(&csnow, 1020);

:   sp_y(&csnow, -110);

:   sp_x(&dsnow, -180);

:   sp_y(&dsnow, 290);

:   goto loop;

:  }

: }

: I ran debug mode and the following came up when this script began to run:

: Dink:Screendraw: running main of script snow..

: Dink:Script snow is entered at offset 345.

: Dink:Compared 1 to 1

: Dink:If returned true

: Dink:Moving: Sprite 19, dir 1, num 420

: Dink:Moving: Sprite 20, dir 1, num 1020

: Dink:Moving: Sprite 21, dir 1, num 1620

: Dink:Moving: Sprite 22, dir 1, num 420

: Dink:Moving: Sprite 23, dir 1, num 1020

: Dink:Move_stop: Sprite 24, dir 1, num 1620

: Dink:giving script the boot

: Dink:Yo, sprite 19 has a bad pic. (Map 699) Seq 285, Frame 1

: Dink:Yo, sprite 20 has a bad pic. (Map 699) Seq 285, Frame 1

: Dink:Yo, sprite 21 has a bad pic. (Map 699) Seq 285, Frame 1

: Dink:Yo, sprite 22 has a bad pic. (Map 699) Seq 285, Frame 1

: Dink:Yo, sprite 23 has a bad pic. (Map 699) Seq 285, Frame 1

: Dink:DDERR_INVALIDOBJECT

: Dink:

: Dink:MainSpriteDraw(): Could not draw sprite 23, pic 0.

: Dink:Box_crap: 400 257 400 257, Box_real: 0 0 0 0

: Dink:Script snow is entered at offset 1443.

: Dink:Moving: Sprite 19, dir 1, num 1020

: Dink:Moving: Sprite 20, dir 1, num 1620

: Dink:Moving: Sprite 21, dir 1, num 1620

: Dink:Moving: Sprite 22, dir 1, num 420

: Dink:Moving: Sprite 23, dir 1, num 420

: Dink:Move_stop: Sprite 24, dir 1, num 1020

: Dink:giving script the boot

: Dink:Script snow is entered at offset 1858.

: Dink:Found goto : Line is loop:

: , word is loop:.

: Dink:Moving: Sprite 19, dir 1, num 420

: Dink:Moving: Sprite 20, dir 1, num 1020

: Dink:Moving: Sprite 21, dir 1, num 1620

: Dink:Moving: Sprite 22, dir 1, num 420

: Dink:Moving: Sprite 23, dir 1, num 1020

: Dink:Move_stop: Sprite 24, dir 1, num 1620

: Dink:giving script the boot

: and the last 17 lines of above keep repeating.

: the real reason this is odd is because the following script works beautifully without changing a thing:

: void main(void)

: {

:  if (&snow == 1)

:  {

:   int &direct

:   int &speed

:   int &asnow = create_sprite(420, -110, 9, 285, 1);

:   int &bsnow = create_sprite(420, 290, 9, 285, 1);

:   sp_que(&asnow, 500);

:   sp_que(&bsnow, 500);

:   freeze(&asnow);

:   freeze(&bsnow);

:   &speed = random(4,2);

:   sp_speed(&asnow, &speed);

:   sp_speed(&bsnow, &speed);

:   loop:

:   move(&asnow, 2, 290, 1);

:   move_stop(&bsnow, 2, 690, 1);

:   sp_y(&bsnow, -110);

:   move(&bsnow, 2, 290, 1);

:   move_stop(&asnow, 2, 690, 1);

:   sp_y(&asnow, -110);

:   goto loop;

:  }

: }

: I can't work out what is wrong. Any help would be greatly appreciated.

Re: Damn "bad pics"
I don't know why the other one worked. To me it shouldn't, either. Here are a few problems. I put them in bold. I assume &snow is a global variable. I don't know how the setup of your sequence #285 in Dink.ini. I assume they will show up.



: void main(void)

: {

:  if (&snow == 1)

:  {

:   int &direct;

:   int &junkspeed;

// &speed is a global variable. It is for Dink's speed only!

:   int &asnow = create_sprite(-180, -110, 9, 285, 1);

:   int &bsnow = create_sprite(420, -110, 9, 285, 1);

:   int &csnow = create_sprite(1020, -110, 9, 285, 1);

:   int &dsnow = create_sprite(-180, 290, 9, 285, 1);

:   int &esnow = create_sprite(420, 290, 9, 285, 1);

:   int &fsnow = create_sprite(1020, 290, 9, 285, 1);

:   sp_que(&asnow, 500);

:   sp_que(&bsnow, 500);

:   sp_que(&csnow, 500);

:   sp_que(&dsnow, 500);

:   sp_que(&esnow, 500);

:   sp_que(&fsnow, 500);

:   freeze(&asnow);

:   freeze(&bsnow);

:   freeze(&csnow);

:   freeze(&dsnow);

:   freeze(&esnow);

:   freeze(&fsnow);

:   &junkspeed = random(4,2);

:   sp_speed(&asnow, &junkspeed);

:     &junkspeed = random(4,2);

// You want each one has different speed, right?

:   sp_speed(&bsnow, &junkspeed);

:     &junkspeed = random(4,2);

:   sp_speed(&csnow, &junkspeed);

:     &junkspeed = random(4,2);

:   sp_speed(&dsnow, &junkspeed);

:     &junkspeed = random(4,2);

:   sp_speed(&esnow, &junkspeed);

:     &junkspeed = random(4,2);

:   sp_speed(&fsnow, &junkspeed);

:   loop:

// I'm not sure you can assign 1 for move. Maybe I was wrong. But if I were you, I would use move(*, 2, *, 1) and move(*, 4, *, 1) altogether to make a diagonal move.

:   move(&asnow, 2, 420, 1);

:   move(&bsnow, 2, 1020, 1);

:   move(&csnow, 2, 1620, 1);

:   move(&dsnow, 2, 420, 1);

:   move(&esnow, 2, 1020, 1);

:   move_stop(&fsnow, 2, 1620, 1);

// This looks suspicious. Most likely 4 of the other 5 move might have stopped before &fsnow reach its destination. And 1620 seems too large. I don't even know if that destination can even be achieved.

:   sp_x(&esnow, -180);

:   sp_y(&esnow, -110);

:   sp_x(&fsnow, 420);

:   sp_y(&fsnow, -110);

:   sp_x(&csnow, 1020);

:   sp_y(&csnow, -110);

:   sp_x(&dsnow, -180);

:   sp_y(&dsnow, 290);

:   move(&asnow, 1, 1020, 1);

:   move(&bsnow, 1, 1620, 1);

:   move(&csnow, 1, 1620, 1);

:   move(&dsnow, 1, 420, 1);

:   move(&esnow, 1, 420, 1);

:   move_stop(&fsnow, 1, 1020, 1);

:   sp_x(&asnow, -180);

:   sp_y(&asnow, -110);

:   sp_x(&bsnow, 420);

:   sp_y(&bsnow, -110);

:   sp_x(&csnow, 1020);

:   sp_y(&csnow, -110);

:   sp_x(&dsnow, -180);

:   sp_y(&dsnow, 290);

:   goto loop;

:  }

: }



Also from the debug log, the "bad pics" is quite annoying. Since you said the shorter somehow worked, I might think that you might have too many local variables or sprites used in that particular screen. You are sure you did everything necessary in Dink.ini to have your snow work. If you want, you can look at my "The Other World trailor". I have a pretty decent snowing scene there.