Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Starting a fighting game
#84
I was only fearing that sprites of that size wouldn't fit in memory. Anyways, here's the tut on masking:

As you may have noticed, the PUT function has those parameters:

Code:
PUT (x%, y%), array%(index%)[, mode]

where mode can be either PSET, AND, XOR among others. That final parameters especifies a logical operation between the pixel data in the array and the pixel data on screen.

What is a logical operation? Well, I guess you have heard of AND and OR, and that:

Code:
1 OR x = 1
0 OR 0 = 0
0 AND x = 0
1 AND 1 = 1

where x can be either 1 or 0. You also have XOR:

Code:
x XOR x = 0
x XOR y = 1 if x<>y

Those binary operations can be applied to byte numbers, for example, 127 AND 255 will compare each bit of 127 with its correspondent bit in 255, and will build a new byte with the results:

Code:
127 = 0 1 1 1 1 1 1 1
AND
    255 = 1 1 1 1 1 1 1 1
______________________
          0 1 1 1 1 1 1 1 = 127

This is very useful when trying to avoid the ugly black bounding box around our GFX. With masking techniques, you can get rid of it.

First we need to create a mask. Imagine we want a ball. We think on which pixels will be transparent and draw it with colour #ZERO:

Code:
00 00 01 02 02 01 00 00
00 01 02 03 03 02 01 00
01 02 03 03 03 03 02 01
01 02 03 03 03 03 02 01
01 02 03 03 03 03 02 01
01 02 03 03 03 03 02 01
00 01 02 03 03 02 01 00
00 00 01 02 02 01 00 00

Now, we create the mask. We need a similar drawing, but the transparent zones have to be drawn with colour #FFh (255, the last colour, in binary 11111111b). The non-transparent zones have to be drawn with colour #00h, that is:

Code:
FF FF 00 00 00 00 FF FF
FF 00 00 00 00 00 00 FF
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
FF 00 00 00 00 00 00 FF
FF FF 00 00 00 00 FF FF

what for? well, let me explain:

To do masking, we first need to prepare screen. If we PUT the mask using "AND", the blitter will AND each pixel in our mask with its correspondent on screen. That will make that every pixel on screen that corresponds with a FF in our mask (transparent zone) will remain as it is, 'cause x AND FF = x. It will also make that every pixel on screen that corresponds with a 00 in our mask (solid zones) will be cleared to ZERO, 'cause x AND 0 = 0.

Note that this will create a black zone with the shape of our sprite on screen.

Now we PUT the sprite using "XOR". Note that x XOR 0 = x and 0 XOR x = x, so the pixels in your sprite that equal 0 (transparent zones) won't have no effect on screen (and those pixels on screen will still have the background, after the AND operation), and the pixels in your sprite different from 0 will be XORed with pixels on screen that equal zero (after the AND operation, if your mask was correctly done).

Code:
' Transparent blit using masks:
PUT (x%, y%), myMask%(0), AND
PUT (x%, y%), mySprite%(0), XOR

I can't post examples 'cause my webspace can not be accessed tonight, so I can't upload pics to show you Sad.

LATER:

I've written this piece of code as an example:

Code:
' Masking demo by Na Than Assh Antti 2003

'$DYNAMIC
DIM MySprite%(33)
DIM MyMask%(33)

SCREEN 13

' Colour #255 is by default BLACK. Let's turn it into WHITE so we can
' see the mask (for educational purposes):

OUT &H3C8, 255: OUT &H3C9, 63: OUT &H3C9, 63: OUT &H3C9, 63

' Get the sprites: [I am using ugly and stupid DATA sprites :P]

RESTORE
FOR i% = 0 TO 1

   FOR y% = 0 TO 7
      FOR x% = 0 TO 7
         READ a$
         PSET (i% * 8 + x%, y%), VAL("&H" + a$)
      NEXT x%
   NEXT y%

NEXT i%
GET (0, 0)-(7, 7), MySprite%(0)
GET (8, 0)-(15, 7), MyMask%(0)

CLS
PAINT (0, 0), 34

LOCATE 3, 5: PRINT "THIS IS THE SPRITE:"
PUT (220, 16), MySprite%(0), PSET
LOCATE 5, 5: PRINT "THIS IS THE MASK:"
PUT (220, 32), MyMask%(0), PSET
LOCATE 7, 5: PRINT "Let's see what happens if we PUT"
LOCATE 8, 5: PRINT "our mask using AND:"
PUT (156, 72), MyMask%(0), AND
LOCATE 12, 5: PRINT "Now we PUT the mask with AND and "
LOCATE 13, 5: PRINT "then the sprite with XOR:"

' Transparency:
PUT (156, 112), MyMask%(0), AND
PUT (156, 112), MySprite%(0), XOR

' DONE :D

END

' Sprite:
DATA 00,00,01,01,01,01,00,00
DATA 00,01,02,02,02,02,01,00
DATA 01,02,02,03,03,02,02,01
DATA 01,02,02,03,03,02,02,01
DATA 01,02,02,03,03,02,02,01
DATA 01,02,02,03,03,02,02,01
DATA 00,01,02,02,02,02,01,00
DATA 00,00,01,01,01,01,00,00

' Mask:
DATA FF,FF,00,00,00,00,FF,FF
DATA FF,00,00,00,00,00,00,FF
DATA 00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00
DATA FF,00,00,00,00,00,00,FF
DATA FF,FF,00,00,00,00,FF,FF
SCUMM (the band) on Myspace!
ComputerEmuzone Games Studio
underBASIC, homegrown musicians
[img]http://www.ojodepez-fanzine.net/almacen/yoghourtslover.png[/i
Reply


Messages In This Thread
Starting a fighting game - by Kofman - 04-21-2003, 06:00 AM
Starting a fighting game - by LooseCaboose - 04-21-2003, 07:54 AM
Starting a fighting game - by Kofman - 04-21-2003, 07:35 PM
Starting a fighting game - by na_th_an - 04-21-2003, 10:37 PM
Starting a fighting game - by wizardlife - 04-22-2003, 01:39 AM
Starting a fighting game - by na_th_an - 04-22-2003, 02:28 AM
Starting a fighting game - by Kofman - 04-22-2003, 02:29 AM
Starting a fighting game - by na_th_an - 04-22-2003, 02:45 AM
Starting a fighting game - by Kofman - 04-22-2003, 02:52 AM
Starting a fighting game - by na_th_an - 04-22-2003, 02:55 AM
Starting a fighting game - by Kofman - 04-22-2003, 03:01 AM
Starting a fighting game - by wizardlife - 04-22-2003, 03:30 AM
Starting a fighting game - by Kofman - 04-22-2003, 03:33 AM
Starting a fighting game - by na_th_an - 04-22-2003, 05:40 AM
Starting a fighting game - by Kofman - 04-22-2003, 06:57 AM
Starting a fighting game - by wizardlife - 04-22-2003, 08:05 AM
Starting a fighting game - by Kofman - 04-23-2003, 03:56 AM
Starting a fighting game - by Kofman - 04-23-2003, 04:17 AM
Starting a fighting game - by Kofman - 04-23-2003, 04:23 AM
Starting a fighting game - by wizardlife - 04-23-2003, 06:11 AM
Starting a fighting game - by Kofman - 04-23-2003, 06:27 AM
Starting a fighting game - by wizardlife - 04-23-2003, 06:38 AM
Starting a fighting game - by wizardlife - 04-23-2003, 06:39 AM
Starting a fighting game - by Kofman - 04-23-2003, 07:32 AM
Starting a fighting game - by wizardlife - 04-23-2003, 08:16 AM
Starting a fighting game - by Rokkuman - 04-23-2003, 08:07 PM
Starting a fighting game - by wizardlife - 04-23-2003, 09:00 PM
Starting a fighting game - by Kofman - 04-26-2003, 09:05 AM
Starting a fighting game - by Kofman - 04-26-2003, 09:06 AM
Starting a fighting game - by wizardlife - 04-26-2003, 09:51 AM
Starting a fighting game - by Kofman - 04-26-2003, 07:41 PM
Starting a fighting game - by wizardlife - 04-26-2003, 09:33 PM
Starting a fighting game - by Kofman - 04-26-2003, 09:52 PM
Starting a fighting game - by Kofman - 05-08-2003, 10:11 PM
Starting a fighting game - by Kofman - 05-09-2003, 12:26 AM
Starting a fighting game - by wizardlife - 05-09-2003, 04:20 AM
Starting a fighting game - by Kofman - 05-09-2003, 04:37 AM
Starting a fighting game - by Kofman - 05-09-2003, 05:27 AM
Starting a fighting game - by na_th_an - 05-09-2003, 06:11 AM
Starting a fighting game - by Kofman - 05-09-2003, 06:44 AM
Starting a fighting game - by Kofman - 05-09-2003, 06:48 AM
Starting a fighting game - by wizardlife - 05-09-2003, 06:56 AM
Starting a fighting game - by Kofman - 05-09-2003, 09:10 AM
Starting a fighting game - by wizardlife - 05-10-2003, 12:01 AM
Starting a fighting game - by wizardlife - 05-10-2003, 12:20 AM
Starting a fighting game - by Kofman - 05-10-2003, 06:29 AM
Fascinating... - by Glenn - 05-10-2003, 06:53 AM
Re: Fascinating... - by wizardlife - 05-10-2003, 06:36 PM
Starting a fighting game - by Kofman - 05-11-2003, 12:17 AM
Starting a fighting game - by Kofman - 05-11-2003, 12:30 AM
Starting a fighting game - by wizardlife - 05-11-2003, 01:32 AM
Starting a fighting game - by Kofman - 05-11-2003, 02:52 AM
Starting a fighting game - by wizardlife - 05-11-2003, 03:52 AM
Starting a fighting game - by Kofman - 05-11-2003, 04:15 AM
Starting a fighting game - by Kofman - 05-11-2003, 04:24 AM
Starting a fighting game - by Kofman - 05-11-2003, 04:36 AM
How do I begin an animation engine - by Kofman - 05-11-2003, 04:41 AM
Starting a fighting game - by Kofman - 05-13-2003, 03:32 AM
Starting a fighting game - by na_th_an - 05-13-2003, 03:43 AM
Starting a fighting game - by Kofman - 05-13-2003, 04:57 AM
Possible answer... - by Glenn - 05-13-2003, 06:52 AM
Starting a fighting game - by na_th_an - 05-13-2003, 07:25 AM
Starting a fighting game - by wizardlife - 05-13-2003, 07:54 AM
Starting a fighting game - by na_th_an - 05-13-2003, 08:02 AM
Starting a fighting game - by wizardlife - 05-13-2003, 08:16 AM
Starting a fighting game - by Kofman - 05-14-2003, 05:35 AM
Did you see where... - by Glenn - 05-14-2003, 05:39 AM
Starting a fighting game - by na_th_an - 05-14-2003, 06:26 AM
I didn't see your other question... - by Glenn - 05-14-2003, 08:21 AM
Starting a fighting game - by Kofman - 05-19-2003, 02:05 AM
Starting a fighting game - by na_th_an - 05-19-2003, 04:53 AM
Starting a fighting game - by Kofman - 05-19-2003, 05:45 AM
Starting a fighting game - by na_th_an - 05-19-2003, 06:24 AM
Starting a fighting game - by toonski84 - 05-19-2003, 09:43 AM
Starting a fighting game - by na_th_an - 05-19-2003, 04:36 PM
Starting a fighting game - by Kofman - 05-19-2003, 05:10 PM
Starting a fighting game - by wizardlife - 05-20-2003, 04:05 AM
Starting a fighting game - by na_th_an - 05-20-2003, 06:17 AM
Starting a fighting game - by Kofman - 05-22-2003, 01:47 AM
Starting a fighting game - by Kofman - 05-22-2003, 03:35 AM
Starting a fighting game - by Kofman - 05-22-2003, 05:13 AM
Starting a fighting game - by Kofman - 05-22-2003, 06:07 AM
Starting a fighting game - by wizardlife - 05-22-2003, 06:41 AM
Starting a fighting game - by na_th_an - 05-22-2003, 07:06 AM
Starting a fighting game - by Kofman - 05-23-2003, 02:37 AM
Starting a fighting game - by Ninkazu - 05-23-2003, 02:40 AM
Starting a fighting game - by Kofman - 05-23-2003, 05:38 AM
Starting a fighting game - by Kofman - 05-25-2003, 12:27 AM
Starting a fighting game - by Kofman - 05-25-2003, 12:30 AM
Starting a fighting game - by na_th_an - 05-25-2003, 12:37 AM
Starting a fighting game - by Kofman - 05-25-2003, 12:57 AM
Starting a fighting game - by Kofman - 05-25-2003, 12:59 AM
Memory in real mode is accessed... - by Glenn - 05-25-2003, 03:48 AM
Starting a fighting game - by na_th_an - 05-25-2003, 04:59 AM
Starting a fighting game - by Kofman - 05-25-2003, 05:34 AM
Starting a fighting game - by na_th_an - 05-25-2003, 05:46 AM
No, Na_th_an,.. - by Glenn - 05-25-2003, 05:51 AM
Re: No, Na_th_an,.. - by na_th_an - 05-25-2003, 05:55 AM
Starting a fighting game - by na_th_an - 05-25-2003, 06:35 AM
Starting a fighting game - by na_th_an - 05-25-2003, 07:27 AM
Read what you just... - by Glenn - 05-25-2003, 07:57 AM
Starting a fighting game - by na_th_an - 05-25-2003, 06:29 PM
Starting a fighting game - by toonski84 - 05-25-2003, 08:47 PM
Starting a fighting game - by Kofman - 05-26-2003, 01:10 AM
Starting a fighting game - by na_th_an - 05-26-2003, 01:42 AM
Starting a fighting game - by Kofman - 05-27-2003, 05:43 AM
Starting a fighting game - by Ninkazu - 05-27-2003, 06:39 AM
Starting a fighting game - by na_th_an - 05-27-2003, 08:33 AM
Starting a fighting game - by LooseCaboose - 05-27-2003, 02:47 PM
Yes, we've been over that... :) - by Glenn - 05-27-2003, 10:20 PM
Starting a fighting game - by LooseCaboose - 05-28-2003, 03:27 AM
Starting a fighting game - by Rokkuman - 05-28-2003, 07:01 AM
Starting a fighting game - by Kofman - 05-28-2003, 07:15 AM
Starting a fighting game - by Kofman - 05-30-2003, 03:14 PM
Starting a fighting game - by Ninkazu - 05-30-2003, 04:29 PM
You only multiply by 8 in mode 13... - by Glenn - 05-30-2003, 06:44 PM
Starting a fighting game - by na_th_an - 05-30-2003, 07:57 PM
Starting a fighting game - by Kofman - 05-31-2003, 11:51 PM
Starting a fighting game - by Kofman - 06-03-2003, 06:18 AM
Starting a fighting game - by Kofman - 06-03-2003, 06:52 AM
Starting a fighting game - by na_th_an - 06-03-2003, 07:11 PM
Starting a fighting game - by Kofman - 06-04-2003, 04:11 AM
Starting a fighting game - by relsoft - 06-04-2003, 08:09 AM
Starting a fighting game - by na_th_an - 06-04-2003, 09:08 AM
Starting a fighting game - by Kofman - 06-04-2003, 03:27 PM
Neopaint loads PCX pictures just fine. - by Glenn - 06-04-2003, 03:34 PM
Starting a fighting game - by wizardlife - 06-04-2003, 09:22 PM
Starting a fighting game - by toonski84 - 06-05-2003, 12:26 AM
Starting a fighting game - by Kofman - 06-05-2003, 03:18 AM
Starting a fighting game - by Kofman - 06-05-2003, 04:16 AM
Starting a fighting game - by na_th_an - 06-05-2003, 09:21 AM
Starting a fighting game - by wizardlife - 06-08-2003, 06:19 AM
Starting a fighting game - by Kofman - 06-10-2003, 04:39 AM
Starting a fighting game - by ak00ma - 06-10-2003, 12:04 PM
Starting a fighting game - by na_th_an - 06-10-2003, 05:11 PM
Starting a fighting game - by Ninkazu - 06-10-2003, 05:11 PM
Starting a fighting game - by wizardlife - 06-10-2003, 08:26 PM
Starting a fighting game - by Piptol - 06-10-2003, 10:44 PM
Starting a fighting game - by Kofman - 06-11-2003, 01:05 AM
Starting a fighting game - by Rokkuman - 06-11-2003, 02:59 AM

Forum Jump:


Users browsing this thread: 2 Guest(s)