Berbicara soal game selalu menyenangkan. Sebuah game, selain dari sisi pemrograman harus bagus, juga harus didukung dengan design world ato character yang bagus, supaya user yang main jadi seneng… apalagi kita yang bikin, wah puas deh. bermain game ama ngebuat game, emang lebih asyik ngebuatnya ok, trus kadang2 kita kan susah juga kalo musti gambar2 sendiri? apalagi pake sprite editor… untuk program Quest of Rosetta yang saya bikin, saya gambar spritenya langsung dengan sprite editor, makanya hasilnya kurang maksimal deh…
Nah, ada satu cara gimana kita bisa dapet sprite yang bagus2, kita bisa capture dari beberapa game lawas yang pernah ada. Yang kita perlukan hanyalah shapenya dan komposisi warnanya, yang nantinya akan kita konversi ke format gambar QBasic.
Apa aja yang kita butuhkan???
Tentunya butuh game yang akan dicapture yah… ada beberapa game yang lumayan grafiknya dan tentunya sesuai dengan kebutuhan yang akan kita pakai, mode 13 heksa… dan yang pasti bukan game yang jalan di windows. contohnya, kita bisa pake game2 dari SNES, salah satunya adalah game
Chrono Trigger yang terkenal itu. Nah untuk menjalankan SNES, kita butuh program emulatornya. Saya menggunakan program ZSNES untuk mengemulasi ROM SNES.
Kemudian, kita butuh suatu TSR program (Terminate and Stay Resident) yang bisa capture screen. Untuk program ini, saya menggunakan program GRAB, keluaran WordPerfect yang bisa residen di memory, trus hot-keynya pake Shift+Alt+F9, dan ENTER untuk proses capturenya
Keempat, proses capture akan disimpan di file berformat WPG (WordPerfect Graphic), jadi kita butuh file converter lagi untuk mengubah format gambar WPG ke format gambar BMP 256 warna, saya memakai file WPG2BMP, menghasilkan output file yang akurat…
Kelima, setelah jadi BMP, kita perlu convert lagi file ini ke SHP / file format gambar QBasic. Saya membuat file BMP2SHP untuk keperluan ini. Algoritmanya gampang sja… Kita akan meload file BMP-nya dulu, trus kita GET gambarnya dan save langsung ke format SHP.
Programnya seperti ini…

TYPE BMPHeaderType
id AS STRING * 2 ‘Should be “BM”
size AS LONG ‘Size of the data
rr1 AS INTEGER ‘
rr2 AS INTEGER ‘
offset AS LONG ‘Position of start of pixel data
horz AS LONG ‘
wid AS LONG ‘Image width
hei AS LONG ‘Image height
planes AS INTEGER ‘
bpp AS INTEGER ‘Should read 8 for a 256 colour image
pakbyte AS LONG ‘
imagebytes AS LONG ‘Width*Height
xres AS LONG ‘
yres AS LONG ‘
colch AS LONG ‘
ic AS LONG ‘
pal AS STRING * 1024 ‘Stored as
END TYPE

INPUT “Enter File name : “, file.name$

DIM BmpHeader AS BMPHeaderType

OPEN “marlex.bmp” FOR BINARY AS #1

GET #1, , BmpHeader

SCREEN 13 ‘ Set graphics mode

a$ = BmpHeader.pal ‘ Pal is stored in a 1024 character string

OUT &H3C8, 0 ‘ Start writing from Colour 0
FOR I% = 1 TO 1024 STEP 4
b% = ASC(MID$(a$, I%, 1)) \ 4 ‘blue
g% = ASC(MID$(a$, I% + 1, 1)) \ 4 ‘green
r% = ASC(MID$(a$, I% + 2, 1)) \ 4 ‘red
‘ I% + 3 is set to zero.
OUT &H3C9, r% ‘ Set the colour.
OUT &H3C9, g%
OUT &H3C9, b%
NEXT

DIM Pixel AS STRING * 1 ‘ Our pixel “byte”.

iHeight% = BmpHeader.hei – 1 ‘ Subtract 1 for actual screen position
iWidth% = BmpHeader.wid – 1 ‘

‘Check Bytes
Byte.Remind = BmpHeader.imagebytes – (BmpHeader.wid * BmpHeader.hei)
IF Byte.Remind > 0 THEN
‘This will applied if the image size = 640 bytes
iHeight% = 31
iWidth% = 15
END IF

key$ = INPUT$(1)

FOR y% = iHeight% TO 0 STEP -1 ‘ Countdown for upsidedown image
FOR x% = 0 TO iWidth%

GET #1, , Pixel ‘ read pixel ‘ Read one pixel (byte)
PSET (x%, y%), ASC(Pixel) ‘ Pixel is actually a string so we get the pixel
‘ number by requesting the “ASC” value
NEXT x%, y%

CLOSE #1

key$ = INPUT$(1)

‘Conversion Begin Here…
total.bytes = 4 + INT(((BmpHeader.wid + 1) * 8 + 7) / 8) * (BmpHeader.hei + 1)
ima.dim = INT(total.bytes / 2)
DIM main.ima(ima.dim) AS INTEGER
GET (0, 0)-(BmpHeader.wid – 1, BmpHeader.hei – 1), main.ima
file.shp$ = file.name$ + “.SHP”
OPEN file.shp$ FOR OUTPUT AS #1
FOR init = 0 TO ima.dim
WRITE #1, main.ima(init)
NEXT
CLOSE #1
PRINT “Conversion to .SHP has been applied successfully”

walaupun sudah jadi file SHP dan siap kita gunakan dalam program game ato animasi kita di QBasic, tapi kita mesti cek dulu apa gambar spritenya sesuai dengan yang kita harapkan? Untuk gambar BMPnya sudah cocok dan bagus… trus bagaimana dengan hasil konversinya? wowww kok ancur2an gitu? apa ada yang salah ya dari proses konversinya?
sebelum melangkah lebih jauh, kiat mestinya belajar dulu apa yang disebut dengan Palette…