no more bitmap loading
This commit is contained in:
parent
dd52b6da67
commit
dd4fdad4be
|
@ -60,11 +60,18 @@ ASM_TEMPLATE = <<~ASM
|
||||||
end
|
end
|
||||||
ASM
|
ASM
|
||||||
|
|
||||||
C_TEMPLATE = <<~C
|
H_TEMPLATE = <<~H
|
||||||
#ifndef __SPRITES_H__
|
#ifndef __SPRITES_H__
|
||||||
#define __SPRITES_H__
|
#define __SPRITES_H__
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "system/vga.h"
|
||||||
|
|
||||||
|
#define PALETTE_COLOR_COUNT (<%= palette.length %>)
|
||||||
|
|
||||||
|
struct VGAColor palette[<%= palette.length %>] = {
|
||||||
|
<%= palette.map(&:to_struct).join(",\n") %>
|
||||||
|
};
|
||||||
|
|
||||||
<% sprites.each do |sprite| %>
|
<% sprites.each do |sprite| %>
|
||||||
extern void <%= sprite.function_name %>(byte *);
|
extern void <%= sprite.function_name %>(byte *);
|
||||||
|
@ -74,7 +81,7 @@ C_TEMPLATE = <<~C
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
C
|
H
|
||||||
|
|
||||||
class AssemblerSprite
|
class AssemblerSprite
|
||||||
def initialize(
|
def initialize(
|
||||||
|
@ -144,9 +151,29 @@ screen = Screen.new(
|
||||||
|
|
||||||
sprite_data = []
|
sprite_data = []
|
||||||
|
|
||||||
|
palette = nil
|
||||||
|
|
||||||
|
VGAColor = Data.define(:red, :green, :blue) do
|
||||||
|
def to_struct
|
||||||
|
"{ #{red}, #{green}, #{blue} }"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
data["files"].each do |spritesheet|
|
data["files"].each do |spritesheet|
|
||||||
image = Magick::Image.read(spritesheet["file"]).first
|
image = Magick::Image.read(spritesheet["file"]).first
|
||||||
|
|
||||||
|
unless palette
|
||||||
|
palette = image.colors.times.map do |i|
|
||||||
|
pixel = Magick::Pixel.from_color(image.colormap(i))
|
||||||
|
|
||||||
|
VGAColor.new(
|
||||||
|
red: pixel.red >> 10,
|
||||||
|
green: pixel.green >> 10,
|
||||||
|
blue: pixel.blue >> 10
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
spritesheet["sprites"].each do |name, details|
|
spritesheet["sprites"].each do |name, details|
|
||||||
sprite_data << SpriteData.new(
|
sprite_data << SpriteData.new(
|
||||||
image:,
|
image:,
|
||||||
|
@ -179,12 +206,13 @@ sprites = sprite_data.map do |sd|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
File.open('sprites.asm', 'w') do |fh|
|
File.open('sprites.asm', 'w') do |fh|
|
||||||
fh.puts ERB.new(ASM_TEMPLATE).result_with_hash(sprites:)
|
fh.puts ERB.new(ASM_TEMPLATE).result_with_hash(sprites:)
|
||||||
end
|
end
|
||||||
|
|
||||||
File.open('sprites.h', 'w') do |fh|
|
File.open('sprites.h', 'w') do |fh|
|
||||||
fh.puts ERB.new(C_TEMPLATE).result_with_hash(sprites:)
|
fh.puts ERB.new(H_TEMPLATE).result_with_hash(sprites:, palette:)
|
||||||
end
|
end
|
||||||
|
|
||||||
puts "sprites.{asm,h} written"
|
puts "sprites.{asm,h} written"
|
||||||
|
|
10
game.c
10
game.c
|
@ -368,12 +368,6 @@ int setupGame() {
|
||||||
installKeyboardHandler();
|
installKeyboardHandler();
|
||||||
initializeDrawBuffer();
|
initializeDrawBuffer();
|
||||||
|
|
||||||
fh = fopen("sprtsht.bmp", "rb");
|
|
||||||
if (readBMPIntoNewMemory(fh, &spritesheetImage)) return 1;
|
|
||||||
fclose(fh);
|
|
||||||
|
|
||||||
spritesheetImage.transparentColor = 0;
|
|
||||||
|
|
||||||
setupWallSprites();
|
setupWallSprites();
|
||||||
setupRabbitSprites();
|
setupRabbitSprites();
|
||||||
setupRabbitBullets();
|
setupRabbitBullets();
|
||||||
|
@ -384,8 +378,8 @@ int setupGame() {
|
||||||
setupPowerupSprites();
|
setupPowerupSprites();
|
||||||
|
|
||||||
setVideoMode(VIDEO_MODE_VGA_256);
|
setVideoMode(VIDEO_MODE_VGA_256);
|
||||||
bmp256ColorPaletteToVGAColorPalette(&spritesheetImage, vgaColors);
|
|
||||||
setVGAColors(vgaColors, 256);
|
setVGAColors(palette, PALETTE_COLOR_COUNT);
|
||||||
|
|
||||||
activateMouse(&mouseStatus);
|
activateMouse(&mouseStatus);
|
||||||
|
|
||||||
|
|
23
sprites.h
23
sprites.h
|
@ -2,6 +2,29 @@
|
||||||
#define __SPRITES_H__
|
#define __SPRITES_H__
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "system/vga.h"
|
||||||
|
|
||||||
|
#define PALETTE_COLOR_COUNT (17)
|
||||||
|
|
||||||
|
struct VGAColor palette[17] = {
|
||||||
|
{ 63, 0, 63 },
|
||||||
|
{ 0, 0, 0 },
|
||||||
|
{ 15, 16, 49 },
|
||||||
|
{ 16, 16, 33 },
|
||||||
|
{ 16, 16, 16 },
|
||||||
|
{ 63, 63, 63 },
|
||||||
|
{ 38, 31, 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 }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
extern void sprite_arenaWallTop(byte *);
|
extern void sprite_arenaWallTop(byte *);
|
||||||
|
|
Loading…
Reference in New Issue