|
|
View previous topic - View next topic |
Author |
Message |
DeveloperX 202192397
Joined: 04 May 2003 Posts: 1626 Location: Decatur, IL, USA
|
Posted: Tue Oct 28, 2003 10:39 pm Post subject: Using SCREEN 13 BSAVEd images in SCREEN 12 |
[quote] |
|
Do you use Pixel Plus 256 or any other SCREEN 13
Program for making graphics for QB games?
Wanted that 640x480 SCREEN 12 resolution, but couldn't
find a tool for drawing graphics in screen 12?
Well, I'm about to show you how to use PP256 for SCREEN 12
graphics! :)
NOTE: this only works with single-image .PUT files,
not the multi/animated frame .PUT files.
Just go draw something in PP256, save it.
Now fire up QB, and type this little program in:
Code: |
CLS
SCREEN 12
W = 15 ' 15 cause we start counting at 0
H = 15 ' 15 cause we start counting at 0
' for square images, the formula for array bytes is:
' bytes& = width * height \ 2 + 2
' 16*16\2+2 = 256\2+2 = 128+2 = 130
BYTES& = 130
DIM IMG%(BYTES&)
Filename$ = "TEST.PUT"
'set the default memory segment to the begining of the array:
DEF SEG = VARSEG(IMG%(0))
'use BLOAD to load the file:
BLOAD Filename$, VARPTR(IMG%(0))
'loop through the width of the image
FOR x = 0 TO W
' loop through the height of the image
FOR y = 0 TO H
' grab the pixel color from the array:
' NOTE the W+1 because we want the actual size, not the zero-based size.
PixelColor = PEEK(4& + x + y * W&+1)
'draw the pixels
PSET (x, y), PixelColor
NEXT
NEXT
'restore default segment:
DEF SEG
' use GET to grab the image back into the array
' using the SCREEN 12 format:
GET (0, 0)-(W, H), IMG%
'draw it to be sure it worked:
PUT (320, 240), IMG%, PSET
|
I've placed the code into an easy to use SUB for you:
Code: |
CLS: SCREEN 12:DIM BALL%(130)
BLOAD12 "ball.put", BALL%()
PUT(50, 50), BALL%, PSET
SUB BLOADS12 (Filename$, IMG%())
DEF SEG = VARSEG(IMG%(0))
BLOAD Filename$, VARPTR(IMG%(0))
FOR x = 0 TO 15
FOR y = 0 TO 15
PixelColor = PEEK(4& + x + y * 16)
PSET (x, y), PixelColor
NEXT
NEXT
DEF SEG
GET (0, 0)-(15, 15), IMG%
END SUB
|
Questions? Email me. _________________ Principal Software Architect
Rambling Indie Games, LLC
See my professional portfolio
Last edited by DeveloperX on Thu Nov 18, 2004 11:24 pm; edited 1 time in total
|
|
Back to top |
|
|
Ninkazu Demon Hunter
Joined: 08 Aug 2002 Posts: 945 Location: Location:
|
|
Back to top |
|
|
DeveloperX 202192397
Joined: 04 May 2003 Posts: 1626 Location: Decatur, IL, USA
|
|
Back to top |
|
|
Ninkazu Demon Hunter
Joined: 08 Aug 2002 Posts: 945 Location: Location:
|
Posted: Wed Oct 29, 2003 2:47 am Post subject: |
[quote] |
|
Oh wait, yours are in screen 12, aren't they?
Neeeeeeeeeeeeeeeeeeeevermind.
|
|
Back to top |
|
|
akOOma Wandering Minstrel
Joined: 20 Jun 2002 Posts: 113 Location: Germany
|
Posted: Wed Oct 29, 2003 11:31 am Post subject: |
[quote] |
|
There's a little problem. PP256 pics are stored in Screen 13 format (8 Bit colors = 256 colors). But Screen 12 only features 4 Bite Colors (16 colors). So you can only use 16 colors in PP256 and must change the saved file to another format. _________________ Keep on codin'
-----------------
-----------------
Just another post to increase my rank...
|
|
Back to top |
|
|
DeveloperX 202192397
Joined: 04 May 2003 Posts: 1626 Location: Decatur, IL, USA
|
Posted: Thu Oct 30, 2003 5:40 am Post subject: |
[quote] |
|
akOOma wrote: | There's a little problem. PP256 pics are stored in Screen 13 format (8 Bit colors = 256 colors). But Screen 12 only features 4 Bite Colors (16 colors). So you can only use 16 colors in PP256 and must change the saved file to another format. |
true, well.. somewhat.
It IS true that mode12h only supports 16 colors..at one time.
I use some little tricks to get all 256 colors, but I only use 16 at a time on each screen, and from the looks of FFIV.. 16 colors isn't anything to shake a stick at.
Final Fantasy 5 only used 16 colors at a time, there were 256 unique colors in the virtual palette, but only 16 could be displayed at one time.
anyway...
I'm trying to devise a way to get into modeX using only qb and the out,inp,poke,peek commands.
no asm.
..anyway... _________________ Principal Software Architect
Rambling Indie Games, LLC
See my professional portfolio
|
|
Back to top |
|
|
DeveloperX 202192397
Joined: 04 May 2003 Posts: 1626 Location: Decatur, IL, USA
|
|
Back to top |
|
|
akOOma Wandering Minstrel
Joined: 20 Jun 2002 Posts: 113 Location: Germany
|
Posted: Fri Oct 31, 2003 5:03 pm Post subject: |
[quote] |
|
Try this:
(It's a ModeX scroller)
Code: |
'===========================================================================
' Subject: MODE-X SCROLL Date: Unknown Date
' Author: Jason Plackey Code: QB, QBasic, PDS
' Origin: Prodigy Packet: GRAPHICS.ABC
'===========================================================================
' Regarding the example code... Change the delay% value to
'accommodate your CPU's speed. The TIMER function is
'relatively inaccurate when dealing with fractions of a
'second, and I had insufficient space to include my own timer
'routine.
'
' If you have any questions, feel free to ask.
'Happy coding! Jason Plackey
DECLARE SUB ModeX ()
DECLARE SUB OutPort (PortAddr&, vh%, vl%)
DECLARE SUB Standard ()
DECLARE SUB SetVOffset (Offset&)
SCREEN 13: DEF SEG = &HA000: CALL ModeX
FOR count% = 0 TO 63
redval& = count%
greenval& = 256 * count%
blueval& = 65536 * count%
rgbval& = blueval& + greenval& + redval&
PALETTE count%, redval&
PALETTE count% + 64, greenval&
PALETTE count% + 128, blueval&
PALETTE count% + 192, rgbval&
NEXT count%
FOR Offset& = 0 TO 15999
rgbbase% = Offset& MOD 64
POKE Offset&, rgbbase%
POKE Offset& + 16000, rgbbase% + 64
POKE Offset& + 32000, rgbbase% + 128
POKE Offset& + 48000, rgbbase% + 192
NEXT Offset&
Offset& = 0: OffsetInc% = 80: Frame% = 0
DO
Offset& = Offset& + OffsetInc%
CALL SetVOffset(Offset&): WAIT &H3DA, 8
Frame% = Frame% + 1
IF Frame% = 99 THEN OffsetInc% = 81
IF Frame% = 199 THEN OffsetInc% = 79
IF Frame% = 299 THEN OffsetInc% = 80
IF Frame% = 499 THEN OffsetInc% = -80
IF Frame% = 599 THEN OffsetInc% = -79
IF Frame% = 699 THEN OffsetInc% = -81
IF Frame% = 799 THEN OffsetInc% = -80
IF Frame% = 899 THEN
CLS : PALETTE
CALL SetVOffset(0): CALL Standard
END
END IF
FOR delay% = 1 TO 1000: NEXT delay%
LOOP
SUB ModeX
CALL OutPort(&H3C4, 6, 4): CLS
CALL OutPort(&H3D4, 227, 23)
CALL OutPort(&H3D4, 0, 20)
CALL OutPort(&H3C4, 15, 2)
END SUB
SUB OutPort (PortAddr&, vh%, vl%)
OUT PortAddr&, vl%: OUT PortAddr& + 1, vh%
END SUB
SUB SetVOffset (Offset&)
V& = Offset&
CALL OutPort(&H3D4, V& \ 256, 12)
CALL OutPort(&H3D4, V& AND 255, 13)
END SUB
SUB Standard
CALL OutPort(&H3C4, 14, 4)
CALL OutPort(&H3D4, 163, &H17)
CALL OutPort(&H3D4, 64, &H14)
CALL OutPort(&H3C4, 15, &H2)
END SUB
|
_________________ Keep on codin'
-----------------
-----------------
Just another post to increase my rank...
|
|
Back to top |
|
|
|
Page 1 of 1 |
All times are GMT
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|