mirror of
https://github.com/luksamuk/engine-psx.git
synced 2025-04-28 13:28:02 +03:00
Add level rendering
This commit is contained in:
parent
b44cbe5006
commit
8c36d08617
12 changed files with 409 additions and 34 deletions
9
assets/FRAMEBUFFER.psx
Normal file
9
assets/FRAMEBUFFER.psx
Normal file
|
@ -0,0 +1,9 @@
|
|||
[TIM Files]
|
||||
File_0=Z:\home\alchemist\git\engine-psx\assets\levels\R0\TILES.TIM
|
||||
File_1=Z:\home\alchemist\git\engine-psx\assets\sprites\SONIC.TIM
|
||||
[Locked Images]
|
||||
File_0=Z:\home\alchemist\git\engine-psx\assets\sprites\SONIC.TIM
|
||||
File_1=Z:\home\alchemist\git\engine-psx\assets\levels\R0\TILES.TIM
|
||||
[Graphics Mode]
|
||||
Width=320
|
||||
Height=256
|
Binary file not shown.
File diff suppressed because one or more lines are too long
|
@ -6,17 +6,17 @@
|
|||
<tileset firstgid="1" source="tiles128.tsx"/>
|
||||
<layer id="1" name="LAYER0" width="255" height="31">
|
||||
<data encoding="csv">
|
||||
12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,3,0,0,0,6,2,2,2,2,2,2,2,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,8,1,1,7,12,11,0,0,10,12,12,12,12,12,3,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,1,1,1,1,12,0,0,0,0,12,8,0,7,12,12,3,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,1,1,1,1,12,0,0,0,0,12,0,0,0,12,12,12,3,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,1,1,1,1,12,0,0,0,0,12,0,0,0,10,9,9,9,9,3,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,1,1,1,1,12,0,0,0,0,12,0,0,0,0,0,0,0,0,10,12,12,12,2,1,1,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,3,1,1,4,12,5,0,0,6,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,0,0,0,7,12,12,12,12,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,0,0,0,0,0,7,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
7,12,12,12,12,3,0,0,0,6,2,2,2,2,2,2,2,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,7,12,12,12,12,12,8,1,1,0,0,0,0,0,7,12,12,12,2,5,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,4,8,0,0,7,12,1,1,1,1,0,0,0,0,0,0,0,0,7,12,2,5,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,4,12,12,12,3,0,0,0,12,1,1,1,1,0,0,0,0,0,0,0,0,0,12,12,12,2,5,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,12,8,0,7,12,0,0,0,12,1,1,1,1,0,0,0,0,0,0,0,0,0,7,12,12,12,12,3,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,12,0,0,0,12,0,0,0,12,1,1,1,1,0,0,0,0,0,12,0,0,0,0,0,0,0,0,7,12,12,12,2,1,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,12,3,0,4,12,0,0,0,12,3,1,1,0,0,0,0,0,6,12,3,0,0,0,0,0,0,0,0,0,0,0,0,0,4,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,7,12,12,12,8,0,0,0,7,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
@ -43,8 +43,8 @@
|
|||
<data encoding="csv">
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
<tim_project>
|
||||
<properties buffer_res="2" buffer_order="0"/>
|
||||
<tim_group name="global">
|
||||
<tim file="SONIC.TIM"/>
|
||||
</tim_group>
|
||||
</tim_project>
|
45
include/level.h
Normal file
45
include/level.h
Normal file
|
@ -0,0 +1,45 @@
|
|||
#ifndef LEVEL_H
|
||||
#define LEVEL_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <psxgpu.h>
|
||||
|
||||
/* TODO: ALL LEVEL DATA SHOULD PROBABLY BE USING A LEVEL-WIDE ARENA ALLOCATOR. */
|
||||
|
||||
typedef struct {
|
||||
uint16_t tile_width;
|
||||
uint16_t num_tiles;
|
||||
uint16_t frame_side;
|
||||
uint16_t *frames;
|
||||
} TileMapping;
|
||||
|
||||
typedef TileMapping TileMap16;
|
||||
typedef TileMapping TileMap128;
|
||||
|
||||
typedef struct {
|
||||
uint8_t width;
|
||||
uint8_t height;
|
||||
uint16_t *tiles;
|
||||
} LevelLayerData;
|
||||
|
||||
typedef struct {
|
||||
uint8_t num_layers;
|
||||
uint8_t _unused0;
|
||||
LevelLayerData *layers;
|
||||
|
||||
uint16_t crectx, crecty;
|
||||
uint16_t prectx, precty;
|
||||
uint16_t clutmode, _unused1;
|
||||
} LevelData;
|
||||
|
||||
void load_map(TileMapping *mapping, const char *filename);
|
||||
void free_map(TileMapping *mapping);
|
||||
|
||||
void load_lvl(LevelData *lvl, const char *filename);
|
||||
void free_lvl(LevelData *lvl);
|
||||
|
||||
void render_lvl(
|
||||
LevelData *lvl, TileMap128 *map128, TileMap16 *map16,
|
||||
int32_t cam_x, int32_t cam_y);
|
||||
|
||||
#endif
|
|
@ -16,7 +16,9 @@
|
|||
|
||||
// Size of the buffer GPU commands and primitives are written to. If the program
|
||||
// crashes due to too many primitives being drawn, increase this value.
|
||||
#define BUFFER_LENGTH 8192
|
||||
//#define BUFFER_LENGTH 8192
|
||||
#define BUFFER_LENGTH 40960
|
||||
//#define BUFFER_LENGTH 65532
|
||||
|
||||
/* Framebuffer/display list class */
|
||||
|
||||
|
@ -38,7 +40,7 @@ void set_clear_color(uint8_t r, uint8_t g, uint8_t b);
|
|||
void swap_buffers();
|
||||
void *get_next_prim();
|
||||
uint32_t *get_ot_at(uint32_t otz);
|
||||
void increment_prim(size_t size);
|
||||
void increment_prim(uint32_t size);
|
||||
void sort_prim(void *prim, uint32_t otz);
|
||||
|
||||
void draw_text(int x, int y, int z, const char *text);
|
||||
|
|
|
@ -19,6 +19,5 @@ uint16_t get_short_be(uint8_t *bytes, uint32_t *b);
|
|||
uint16_t get_short_le(uint8_t *bytes, uint32_t *b);
|
||||
|
||||
uint32_t adler32(const char *s);
|
||||
uint32_t cityhash32_sub24(const char *s);
|
||||
|
||||
#endif
|
||||
|
|
19
src/chara.c
19
src/chara.c
|
@ -63,11 +63,18 @@ load_chara(Chara *chara, const char *filename, TIM_IMAGE *tim)
|
|||
chara->anims[i].start, chara->anims[i].end);
|
||||
}
|
||||
|
||||
/*chara->crectx = tim->crect->x;
|
||||
chara->crecty = tim->crect->y;
|
||||
chara->prectx = tim->prect->x;
|
||||
chara->precty = tim->prect->y;*/
|
||||
printf("%d %d\n", tim->prect->x, tim->prect->y);
|
||||
/* chara->crectx = tim->crect->x; */
|
||||
/* chara->crecty = tim->crect->y; */
|
||||
/* chara->prectx = tim->prect->x; */
|
||||
/* chara->precty = tim->prect->y; */
|
||||
/* printf("prect: %d %d %d %d, %x\n", */
|
||||
/* tim->prect->x, tim->prect->y, */
|
||||
/* tim->prect->w, tim->prect->h, */
|
||||
/* getTPage(tim->mode & 0x3, 1, tim->prect->x, tim->prect->y)); */
|
||||
/* printf("crect: %d %d %d %d, %x\n", */
|
||||
/* tim->crect->x, tim->crect->y, */
|
||||
/* tim->crect->w, tim->crect->h, */
|
||||
/* getClut(tim->crect->x, tim->crect->y)); */
|
||||
chara->crectx = 320;
|
||||
chara->crecty = 256;
|
||||
chara->prectx = 320;
|
||||
|
@ -148,7 +155,7 @@ chara_render_frame(Chara *chara, int16_t framenum, int16_t vx, int16_t vy, uint8
|
|||
} else {
|
||||
setUVWH(poly, u0, v0, tw, th);
|
||||
}
|
||||
sort_prim(poly, 1);
|
||||
sort_prim(poly, 3); // 3 = sprite and background layer
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
265
src/level.c
Normal file
265
src/level.c
Normal file
|
@ -0,0 +1,265 @@
|
|||
#include "level.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include "util.h"
|
||||
#include "render.h"
|
||||
|
||||
void
|
||||
load_map(TileMapping *mapping, const char *filename)
|
||||
{
|
||||
uint8_t *bytes;
|
||||
uint32_t b, length;
|
||||
|
||||
bytes = file_read(filename, &length);
|
||||
if(bytes == NULL) {
|
||||
printf("Error reading MAP file %s from the CD.\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
b = 0;
|
||||
|
||||
mapping->tile_width = get_short_be(bytes, &b);
|
||||
mapping->num_tiles = get_short_be(bytes, &b);
|
||||
mapping->frame_side = get_short_be(bytes, &b);
|
||||
|
||||
uint32_t frames_per_tile = mapping->frame_side * mapping->frame_side;
|
||||
uint32_t total_frames = frames_per_tile * mapping->num_tiles;
|
||||
|
||||
mapping->frames = malloc(total_frames * sizeof(uint16_t));
|
||||
printf("Total allocated frames: %lu B\n", total_frames * sizeof(uint16_t));
|
||||
for(uint32_t i = 0; i < total_frames; i++) {
|
||||
mapping->frames[i] = get_short_be(bytes, &b);
|
||||
}
|
||||
|
||||
free(bytes);
|
||||
}
|
||||
|
||||
void
|
||||
free_map(TileMapping *mapping)
|
||||
{
|
||||
free(mapping->frames);
|
||||
}
|
||||
|
||||
void
|
||||
load_lvl(LevelData *lvl, const char *filename)
|
||||
{
|
||||
uint8_t *bytes;
|
||||
uint32_t b, length;
|
||||
|
||||
bytes = file_read(filename, &length);
|
||||
if(bytes == NULL) {
|
||||
printf("Error reading LVL file %s from the CD.\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
b = 0;
|
||||
|
||||
lvl->num_layers = get_byte(bytes, &b);
|
||||
lvl->_unused0 = 0; b += 1;
|
||||
|
||||
lvl->layers = malloc(lvl->num_layers * sizeof(LevelLayerData));
|
||||
printf("Allocated layers table: %lu B\n", lvl->num_layers * sizeof(LevelLayerData));
|
||||
for(uint8_t n_layer = 0; n_layer < lvl->num_layers; n_layer++) {
|
||||
LevelLayerData *layer = &lvl->layers[n_layer];
|
||||
layer->width = get_byte(bytes, &b);
|
||||
layer->height = get_byte(bytes, &b);
|
||||
uint16_t num_tiles = (uint16_t)layer->width * (uint16_t)layer->height;
|
||||
layer->tiles = malloc(num_tiles * sizeof(uint16_t));
|
||||
printf("Allocated tiles for layer: %lu B\n", num_tiles * sizeof(uint16_t));
|
||||
for(uint16_t i = 0; i < num_tiles; i++) {
|
||||
layer->tiles[i] = get_short_be(bytes, &b);
|
||||
}
|
||||
}
|
||||
|
||||
lvl->prectx = 448;
|
||||
lvl->precty = 0;
|
||||
lvl->crectx = 448;
|
||||
lvl->crecty = 256;
|
||||
lvl->clutmode = 0; // 4-bit CLUT
|
||||
lvl->_unused1 = 0;
|
||||
|
||||
free(bytes);
|
||||
}
|
||||
|
||||
void
|
||||
free_lvl(LevelData *lvl)
|
||||
{
|
||||
for(uint8_t i = 0; i < lvl->num_layers; i++) {
|
||||
free(lvl->layers[i].tiles);
|
||||
}
|
||||
free(lvl->layers);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_render_8(
|
||||
LevelData *lvl,
|
||||
int16_t vx, int16_t vy, int16_t otz,
|
||||
uint16_t frame)
|
||||
{
|
||||
uint16_t
|
||||
v0_idx = frame >> 5,
|
||||
u0_idx = frame - (v0_idx << 5);
|
||||
uint8_t
|
||||
u0 = (u0_idx << 3),
|
||||
v0 = (v0_idx << 3);
|
||||
|
||||
SPRT_8 *sprt = get_next_prim();
|
||||
increment_prim(sizeof(SPRT_8));
|
||||
setSprt8(sprt);
|
||||
setXY0(sprt, vx, vy);
|
||||
setRGB0(sprt, 128, 128, 128);
|
||||
setUV0(sprt, u0, v0);
|
||||
setClut(sprt, lvl->crectx, lvl->crecty);
|
||||
sort_prim(sprt, otz);
|
||||
}
|
||||
|
||||
void
|
||||
_render_16(
|
||||
LevelData *lvl, TileMap16 *map16,
|
||||
int16_t vx, int16_t vy, int16_t otz,
|
||||
uint16_t frame)
|
||||
{
|
||||
// Frames per tile: 2 * 2 = 4
|
||||
uint16_t *tileframes = &map16->frames[frame << 2];
|
||||
for(int16_t idx = 0; idx < 4; idx++) {
|
||||
|
||||
if(tileframes[idx] == 0) continue;
|
||||
|
||||
|
||||
int16_t
|
||||
deltax = (idx % 2),
|
||||
deltay = (idx >> 1);
|
||||
|
||||
_render_8(
|
||||
lvl,
|
||||
vx + (deltax << 3),
|
||||
vy + (deltay << 3),
|
||||
otz,
|
||||
tileframes[idx]);
|
||||
}
|
||||
|
||||
// Draw debug lines
|
||||
/* LINE_F2 line; */
|
||||
/* setLineF2(&line); */
|
||||
/* setXY2(&line, vx, vy, vx, vy + 16); */
|
||||
/* setRGB0(&line, 255, 255, 0); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx, vy, vx + 16, vy); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx + 16, vy, vx + 16, vy + 16); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx, vy + 16, vx + 16, vy + 16); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
}
|
||||
|
||||
void
|
||||
_render_128(
|
||||
LevelData *lvl, TileMap128 *map128, TileMap16 *map16,
|
||||
int16_t vx, int16_t vy, int16_t otz,
|
||||
uint16_t frame)
|
||||
{
|
||||
// 128x128 has 8x8 tiles of 16x16.
|
||||
// Since this is a constant, we will then write the optimized code
|
||||
// just like _render_16.
|
||||
// Frames per tile: 8 * 8 = 64 => rshift << 6
|
||||
uint16_t *tileframes = &map128->frames[frame << 6];
|
||||
for(int16_t idx = 0; idx < 64; idx++) {
|
||||
if(tileframes[idx] == 0) continue;
|
||||
|
||||
int16_t
|
||||
deltax = (idx % 8),
|
||||
deltay = (idx >> 3);
|
||||
_render_16(lvl, map16,
|
||||
vx + (deltax << 4),
|
||||
vy + (deltay << 4),
|
||||
otz,
|
||||
tileframes[idx]);
|
||||
}
|
||||
|
||||
// Draw debug lines
|
||||
/* LINE_F2 line; */
|
||||
/* setLineF2(&line); */
|
||||
/* setRGB0(&line, 0, 255, 255); */
|
||||
/* setXY2(&line, vx, vy, vx, vy + 128); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx, vy, vx + 128, vy); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx + 128, vy, vx + 128, vy + 128); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
/* setXY2(&line, vx, vy + 128, vx + 128, vy + 128); */
|
||||
/* DrawPrim((void *)&line); */
|
||||
}
|
||||
|
||||
#define CLAMP_SUM(X, N, MAX) ((X + N) > MAX ? MAX : (X + N))
|
||||
|
||||
void
|
||||
_render_layer(
|
||||
LevelData *lvl, TileMap128 *map128, TileMap16 *map16,
|
||||
int16_t vx, int16_t vy, int16_t otz,
|
||||
uint8_t layer)
|
||||
{
|
||||
LevelLayerData *l = &lvl->layers[layer];
|
||||
// vx and vy are the camera center.
|
||||
// We need to use these values to calculate:
|
||||
// - what are the coordinates for top left corner;
|
||||
// - what is the tile (x, y) containing this top-left corner point;
|
||||
// - the deltas that we should apply relative to the own tile's top-left
|
||||
// corner.
|
||||
|
||||
// Correct vx / vy to the top left corner
|
||||
vx -= CENTERX; vy -= CENTERY;
|
||||
|
||||
// Find tile X and Y indices. Integer division by 128
|
||||
int16_t tilex, tiley;
|
||||
tilex = vx >> 7; tiley = vy >> 7;
|
||||
|
||||
// Find pixel deltas for X and Y coordinates that are figuratively
|
||||
// subtracted from each tile's top left corner
|
||||
int16_t deltax, deltay;
|
||||
deltax = vx - (tilex << 7);
|
||||
deltay = vy - (tiley << 7);
|
||||
|
||||
// We need to figure out the number of tiles we need to draw on X
|
||||
// and Y coordinates. This is because we may well be extrapolating
|
||||
// those tiles!
|
||||
int16_t num_tiles_x, num_tiles_y;
|
||||
num_tiles_x = (SCREEN_XRES >> 7) + 1;
|
||||
num_tiles_y = (SCREEN_YRES >> 7) + 1;
|
||||
|
||||
// Clamp number of tiles
|
||||
int16_t max_tile_x, max_tile_y;
|
||||
max_tile_x = CLAMP_SUM(tilex, num_tiles_x, (int16_t)l->width);
|
||||
max_tile_y = CLAMP_SUM(tiley, num_tiles_y, (int16_t)l->height);
|
||||
|
||||
// Now iterate over tiles and render them.
|
||||
uint16_t a = 0;
|
||||
for(int16_t iy = tiley; iy <= max_tile_y; iy++) {
|
||||
for(int16_t ix = tilex; ix <= max_tile_x; ix++) {
|
||||
a++;
|
||||
int16_t frame_idx = (iy * l->width) + ix;
|
||||
//printf("Chunk: %d @ %u (%u)\n", a, frame_idx, l->tiles[frame_idx]);
|
||||
_render_128(lvl, map128, map16,
|
||||
((ix - tilex) << 7) - deltax,
|
||||
((iy - tiley) << 7) - deltay,
|
||||
otz,
|
||||
l->tiles[frame_idx]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
render_lvl(
|
||||
LevelData *lvl, TileMap128 *map128, TileMap16 *map16,
|
||||
int32_t cam_x, int32_t cam_y)
|
||||
{
|
||||
int16_t cx = (cam_x >> 12),
|
||||
cy = (cam_y >> 12);
|
||||
_render_layer(lvl, map128, map16, cx, cy, 3, 0);
|
||||
_render_layer(lvl, map128, map16, cx, cy, 2, 1);
|
||||
|
||||
DR_TPAGE *tpage = get_next_prim();
|
||||
increment_prim(sizeof(DR_TPAGE));
|
||||
setDrawTPage(tpage, 0, 1, getTPage(0, 1, lvl->prectx, lvl->precty));
|
||||
sort_prim(tpage, OT_LENGTH - 1);
|
||||
}
|
62
src/main.c
62
src/main.c
|
@ -6,6 +6,7 @@
|
|||
#include <psxgte.h>
|
||||
#include <psxcd.h>
|
||||
#include <inline_c.h>
|
||||
#include <hwregs_c.h>
|
||||
|
||||
#include "render.h"
|
||||
#include "util.h"
|
||||
|
@ -13,6 +14,17 @@
|
|||
#include "sound.h"
|
||||
#include "input.h"
|
||||
#include "player.h"
|
||||
#include "level.h"
|
||||
|
||||
/* typedef struct { */
|
||||
/* int irq_count, last_irq_count, irqs_per_sec; */
|
||||
/* } TimerState; */
|
||||
|
||||
/* static volatile TimerState timer_state; */
|
||||
|
||||
/* static void timer0_handler(void) { */
|
||||
/* timer_state.irq_count++; */
|
||||
/* } */
|
||||
|
||||
/* #define SPRTSZ 56 */
|
||||
|
||||
|
@ -44,7 +56,10 @@ static VECTOR pos = { 0, 0, 450 };
|
|||
static VECTOR scale = { ONE, ONE, ONE };
|
||||
static MATRIX world = { 0 };
|
||||
|
||||
static Player player;
|
||||
static Player player;
|
||||
static TileMap16 map16;
|
||||
static TileMap128 map128;
|
||||
static LevelData leveldata;
|
||||
|
||||
#define BGM001_NUM_CHANNELS 2
|
||||
#define BGM001_LOOP_SECTOR 7100
|
||||
|
@ -55,6 +70,8 @@ static uint8_t cur_bgm = 0;
|
|||
static uint8_t music_num_channels = BGM001_NUM_CHANNELS;
|
||||
static uint8_t music_channel = 0;
|
||||
|
||||
static VECTOR cam_pos = { 0 };
|
||||
|
||||
void
|
||||
engine_init()
|
||||
{
|
||||
|
@ -79,6 +96,21 @@ engine_init()
|
|||
0
|
||||
};
|
||||
|
||||
// Load level data
|
||||
timfile = file_read("\\LEVELS\\R0\\TILES.TIM;1", &filelength);
|
||||
if(timfile) {
|
||||
load_texture(timfile, &tim);
|
||||
free(timfile);
|
||||
}
|
||||
|
||||
load_map(&map16, "\\LEVELS\\R0\\MAP16.MAP;1");
|
||||
load_map(&map128, "\\LEVELS\\R0\\MAP128.MAP;1");
|
||||
load_lvl(&leveldata, "\\LEVELS\\R0\\Z1.LVL;1");
|
||||
//cam_pos.vx = 1216 * ONE;
|
||||
//cam_pos.vy = 448 * ONE;
|
||||
cam_pos.vx = CENTERX * ONE;
|
||||
cam_pos.vy = CENTERY * ONE;
|
||||
|
||||
// Start playback after we don't need the CD anymore.
|
||||
sound_stop_xa();
|
||||
music_num_channels = BGM001_NUM_CHANNELS;
|
||||
|
@ -129,7 +161,25 @@ engine_update()
|
|||
sound_xa_set_channel(music_channel);
|
||||
}
|
||||
|
||||
player_update(&player);
|
||||
#define SPD (8 * ONE)
|
||||
|
||||
if(pad_pressing(PAD_RIGHT)) {
|
||||
cam_pos.vx += SPD;
|
||||
}
|
||||
|
||||
if(pad_pressing(PAD_LEFT)) {
|
||||
cam_pos.vx -= SPD;
|
||||
}
|
||||
|
||||
if(pad_pressing(PAD_UP)) {
|
||||
cam_pos.vy -= SPD;
|
||||
}
|
||||
|
||||
if(pad_pressing(PAD_DOWN)) {
|
||||
cam_pos.vy += SPD;
|
||||
}
|
||||
|
||||
//player_update(&player);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -137,7 +187,9 @@ engine_draw()
|
|||
{
|
||||
//chara_render_test(&player.chara);
|
||||
player_draw(&player);
|
||||
|
||||
|
||||
render_lvl(&leveldata, &map128, &map16, cam_pos.vx, cam_pos.vy);
|
||||
|
||||
// Gouraud-shaded SQUARE
|
||||
/* POLY_G4 *poly = (POLY_G4 *) get_next_prim(); */
|
||||
/* setPolyG4(poly); */
|
||||
|
@ -192,14 +244,16 @@ engine_draw()
|
|||
// Sound debug
|
||||
char buffer[255] = { 0 };
|
||||
snprintf(buffer, 255,
|
||||
"VMD %4s\n"
|
||||
"MUS %2u/2\n"
|
||||
"CHN %1u/%1u\n"
|
||||
"%08u",
|
||||
GetVideoMode() == MODE_PAL ? "PAL" : "NTSC",
|
||||
cur_bgm + 1,
|
||||
music_channel + 1,
|
||||
music_num_channels,
|
||||
elapsed_sectors);
|
||||
draw_text(240, 12, 0, buffer);
|
||||
draw_text(240, 12, 0, buffer);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -76,7 +76,7 @@ get_next_prim()
|
|||
}
|
||||
|
||||
void
|
||||
increment_prim(size_t size)
|
||||
increment_prim(uint32_t size)
|
||||
{
|
||||
ctx.next_packet += size;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue