blob: 585a71a3453694447d30c77611a8e74c0433d93a [file] [log] [blame]
//SPDX-FileCopyrightText: 2021 Ethan Polcyn & Anish Singhani
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
`default_nettype none
// Calculate X-position for cactus and floor
module rendering (
output wire pixel,
output wire collision,
output reg [2:0] cactus_select,
input wire game_over,
input wire game_start_blink,
input wire score_pixel,
input wire dinosprite_num,
input wire [2:0] cactus_type,
input wire [6:0] jump_pos,
input wire [9:0] vaddr,
input wire [9:0] haddr,
input wire [10:0] scrolladdr,
input wire clk,
input wire sys_rst
);
// Load sprites
reg [22:0] dinosprite1[46:0];
reg [22:0] dinosprite2[46:0];
reg [22:0] dinospritedead[46:0];
reg [255:0] floor[5:0];
reg [26:0] cactussprite1[46:0];
reg [26:0] cactussprite2[46:0];
reg [12:0] cactussprite3[48:0];
reg [4:0] layers;
assign pixel = |{score_pixel, layers};
assign collision = layers[0] & (layers[1] | layers[3] | layers[4]);
wire [7:0] flooraddr = haddr+scrolladdr;
always @(posedge clk) begin
if (sys_rst) begin
layers <= 0;
cactus_select <= 0;
end
else begin
layers <= 0;
if (vaddr < 480 && haddr < 640) begin
if (haddr > 30 && haddr < 75 && (vaddr + jump_pos) > 155 && (vaddr + jump_pos) < 248 && game_start_blink) begin
if (game_over) begin
layers[0] <= dinospritedead[(vaddr-155+jump_pos) >> 1][(haddr-30) >> 1];
end
else begin
if (dinosprite_num) begin
layers[0] <= dinosprite1[(vaddr-155+jump_pos) >> 1][(haddr-30) >> 1];
end
else begin
layers[0] <= dinosprite2[(vaddr-155+jump_pos) >> 1][(haddr-30) >> 1];
end
end
end
if (vaddr > 244 && vaddr < 251) begin
layers[2] <= floor[vaddr-245][flooraddr];
end
if (vaddr > 203 && vaddr < 250) begin
if (cactus_select[0]) begin
if (cactus_type[0]) begin
if ((haddr + scrolladdr[9:0]) > 640 && (haddr + scrolladdr[9:0]) < 667) begin
layers[1] <= cactussprite1[vaddr-203][haddr-640+scrolladdr[9:0]];
end
end
else begin
if ((haddr + scrolladdr[9:0]) > 640 && (haddr + scrolladdr[9:0]) < 667) begin
layers[1] <= cactussprite2[vaddr-203][haddr-640+scrolladdr[9:0]];
end
end
end
if (cactus_select[1]) begin
if (cactus_type[1]) begin
if ((haddr + scrolladdr[9:0]-250) > 640 && (haddr + scrolladdr[9:0]-250) < 667) begin
layers[3] <= cactussprite2[vaddr-203][haddr-640+scrolladdr[9:0]-250];
end
end
end
if (cactus_select[2]) begin
if (cactus_type[2]) begin
if ((haddr + scrolladdr[10:0]-450) > 640 && (haddr + scrolladdr[10:0]-450) < 667) begin
layers[4] <= cactussprite1[vaddr-203][haddr-640+scrolladdr[10:0]-450];
end
end
else begin
if ((haddr + scrolladdr[10:0]-450) > 640 && (haddr + scrolladdr[10:0]-450) < 667) begin
layers[4] <= cactussprite3[vaddr-203][haddr-640+scrolladdr[10:0]-450];
end
end
end
end
if (scrolladdr[9:0] >= 0 && scrolladdr[9:0] < 10) begin
cactus_select[0] <= 1;
end
else if (scrolladdr[9:0] > 667) begin
cactus_select[0] <= 0;
end
if (scrolladdr[9:0] >= 250 && scrolladdr[9:0] < 260) begin
cactus_select[1] <= 1;
end
else if (scrolladdr[9:0] > 917) begin
cactus_select[1] <= 0;
end
if (scrolladdr[9:0] >= 450 && scrolladdr[9:0] < 460) begin
cactus_select[2] <= 1;
end
else if (scrolladdr[10:0] > 1117) begin
cactus_select[2] <= 0;
end
end
end
end
initial begin
dinosprite1[0] = 22'b0000000000000000000000;
dinosprite1[1] = 22'b0000000000000000000000;
dinosprite1[2] = 22'b0000000000000000000000;
dinosprite1[3] = 22'b0000000000000000000000;
dinosprite1[4] = 22'b0000000000000000000000;
dinosprite1[5] = 22'b0000000000000000000000;
dinosprite1[6] = 22'b0000000000000000000000;
dinosprite1[7] = 22'b0000000000000000000000;
dinosprite1[8] = 22'b0000000000000000000000;
dinosprite1[9] = 22'b0000000000000000000000;
dinosprite1[10] = 22'b0000000000000000000000;
dinosprite1[11] = 22'b0000000000000000000000;
dinosprite1[12] = 22'b0000000000000000000000;
dinosprite1[13] = 22'b0000000000000000000000;
dinosprite1[14] = 22'b0000000000000000000000;
dinosprite1[15] = 22'b0000000000000000000000;
dinosprite1[16] = 22'b0000000000000000000000;
dinosprite1[17] = 22'b0000000000000000000000;
dinosprite1[18] = 22'b0000000000000000000000;
dinosprite1[19] = 22'b0000000000000000000000;
dinosprite1[20] = 22'b0000000000000000000000;
dinosprite1[21] = 22'b0000000000000000000000;
dinosprite1[22] = 22'b0000000000000000000000;
dinosprite1[23] = 22'b0011111111000000000000;
dinosprite1[24] = 22'b0111111111100000000000;
dinosprite1[25] = 22'b0111111101100000000000;
dinosprite1[26] = 22'b0111111111100000000000;
dinosprite1[27] = 22'b0111111111100000000000;
dinosprite1[28] = 22'b0111111111100000000000;
dinosprite1[29] = 22'b0000001111100000000000;
dinosprite1[30] = 22'b0001111111100000000000;
dinosprite1[31] = 22'b0000000111110000000010;
dinosprite1[32] = 22'b0000000111111100000010;
dinosprite1[33] = 22'b0000011111111110000110;
dinosprite1[34] = 22'b0000010111111111001110;
dinosprite1[35] = 22'b0000000111111111111110;
dinosprite1[36] = 22'b0000000111111111111110;
dinosprite1[37] = 22'b0000000011111111111100;
dinosprite1[38] = 22'b0000000011111111111000;
dinosprite1[39] = 22'b0000000001111111110000;
dinosprite1[40] = 22'b0000000000111111100000;
dinosprite1[41] = 22'b0000000000110011000000;
dinosprite1[42] = 22'b0000000000100110000000;
dinosprite1[43] = 22'b0000000000100000000000;
dinosprite1[44] = 22'b0000000001100000000000;
dinosprite1[45] = 22'b0000000000000000000000;
dinosprite1[46] = 22'b0000000000000000000000;
end
initial begin
dinosprite2[0] = 22'b0000000000000000000000;
dinosprite2[1] = 22'b0000000000000000000000;
dinosprite2[2] = 22'b0000000000000000000000;
dinosprite2[3] = 22'b0000000000000000000000;
dinosprite2[4] = 22'b0000000000000000000000;
dinosprite2[5] = 22'b0000000000000000000000;
dinosprite2[6] = 22'b0000000000000000000000;
dinosprite2[7] = 22'b0000000000000000000000;
dinosprite2[8] = 22'b0000000000000000000000;
dinosprite2[9] = 22'b0000000000000000000000;
dinosprite2[10] = 22'b0000000000000000000000;
dinosprite2[11] = 22'b0000000000000000000000;
dinosprite2[12] = 22'b0000000000000000000000;
dinosprite2[13] = 22'b0000000000000000000000;
dinosprite2[14] = 22'b0000000000000000000000;
dinosprite2[15] = 22'b0000000000000000000000;
dinosprite2[16] = 22'b0000000000000000000000;
dinosprite2[17] = 22'b0000000000000000000000;
dinosprite2[18] = 22'b0000000000000000000000;
dinosprite2[19] = 22'b0000000000000000000000;
dinosprite2[20] = 22'b0000000000000000000000;
dinosprite2[21] = 22'b0000000000000000000000;
dinosprite2[22] = 22'b0000000000000000000000;
dinosprite2[23] = 22'b0011111111000000000000;
dinosprite2[24] = 22'b0111111111100000000000;
dinosprite2[25] = 22'b0111111101100000000000;
dinosprite2[26] = 22'b0111111111100000000000;
dinosprite2[27] = 22'b0111111111100000000000;
dinosprite2[28] = 22'b0111111111100000000000;
dinosprite2[29] = 22'b0000001111100000000000;
dinosprite2[30] = 22'b0001111111100000000000;
dinosprite2[31] = 22'b0000000111110000000010;
dinosprite2[32] = 22'b0000000111111100000010;
dinosprite2[33] = 22'b0000011111111110000110;
dinosprite2[34] = 22'b0000010111111111001110;
dinosprite2[35] = 22'b0000000111111111111110;
dinosprite2[36] = 22'b0000000111111111111110;
dinosprite2[37] = 22'b0000000011111111111100;
dinosprite2[38] = 22'b0000000011111111111000;
dinosprite2[39] = 22'b0000000001111111110000;
dinosprite2[40] = 22'b0000000000111111100000;
dinosprite2[41] = 22'b0000000001100111000000;
dinosprite2[42] = 22'b0000000000000011000000;
dinosprite2[43] = 22'b0000000000000011000000;
dinosprite2[44] = 22'b0000000000000011000000;
dinosprite2[45] = 22'b0000000000000000000000;
dinosprite2[46] = 22'b0000000000000000000000;
end
initial begin
dinospritedead[0] = 22'b0000000000000000000000;
dinospritedead[1] = 22'b0000000000000000000000;
dinospritedead[2] = 22'b0000000000000000000000;
dinospritedead[3] = 22'b0000000000000000000000;
dinospritedead[4] = 22'b0000000000000000000000;
dinospritedead[5] = 22'b0000000000000000000000;
dinospritedead[6] = 22'b0000000000000000000000;
dinospritedead[7] = 22'b0000000000000000000000;
dinospritedead[8] = 22'b0000000000000000000000;
dinospritedead[9] = 22'b0000000000000000000000;
dinospritedead[10] = 22'b0000000000000000000000;
dinospritedead[11] = 22'b0000000000000000000000;
dinospritedead[12] = 22'b0000000000000000000000;
dinospritedead[13] = 22'b0000000000000000000000;
dinospritedead[14] = 22'b0000000000000000000000;
dinospritedead[15] = 22'b0000000000000000000000;
dinospritedead[16] = 22'b0000000000000000000000;
dinospritedead[17] = 22'b0000000000000000000000;
dinospritedead[18] = 22'b0000000000000000000000;
dinospritedead[19] = 22'b0000000000000000000000;
dinospritedead[20] = 22'b0000000000000000000000;
dinospritedead[21] = 22'b0000000000000000000000;
dinospritedead[22] = 22'b0000000000000000000000;
dinospritedead[23] = 22'b0011111111000000000000;
dinospritedead[24] = 22'b0111111111100000000000;
dinospritedead[25] = 22'b0111111101100000000000;
dinospritedead[26] = 22'b0111111111100000000000;
dinospritedead[27] = 22'b0111111111100000000000;
dinospritedead[28] = 22'b0111111111100000000000;
dinospritedead[29] = 22'b0111111111100000000000;
dinospritedead[30] = 22'b0001111111100000000000;
dinospritedead[31] = 22'b0000000111110000000010;
dinospritedead[32] = 22'b0000000111111100000010;
dinospritedead[33] = 22'b0000011111111110000110;
dinospritedead[34] = 22'b0000010111111111001110;
dinospritedead[35] = 22'b0000000111111111111110;
dinospritedead[36] = 22'b0000000111111111111110;
dinospritedead[37] = 22'b0000000011111111111100;
dinospritedead[38] = 22'b0000000011111111111000;
dinospritedead[39] = 22'b0000000001111111110000;
dinospritedead[40] = 22'b0000000000111111100000;
dinospritedead[41] = 22'b0000000000110111000000;
dinospritedead[42] = 22'b0000000000100011000000;
dinospritedead[43] = 22'b0000000000100001000000;
dinospritedead[44] = 22'b0000000001100011000000;
dinospritedead[45] = 22'b0000000000000000000000;
dinospritedead[46] = 22'b0000000000000000000000;
end
initial begin
cactussprite1[0] = 26'b00000000000000000011000000;
cactussprite1[1] = 26'b00000000000000000011100000;
cactussprite1[2] = 26'b00001000000000000011100000;
cactussprite1[3] = 26'b00001100000000000011100000;
cactussprite1[4] = 26'b00001100000000000011100000;
cactussprite1[5] = 26'b00001100000000000011100000;
cactussprite1[6] = 26'b00001100000000100011100000;
cactussprite1[7] = 26'b00001100000000110011100000;
cactussprite1[8] = 26'b00001100100000110011100000;
cactussprite1[9] = 26'b00001100100000110011100000;
cactussprite1[10] = 26'b00001100100000110011100000;
cactussprite1[11] = 26'b00001100100000110011100100;
cactussprite1[12] = 26'b00001100100000110011100110;
cactussprite1[13] = 26'b00001100100000110011100110;
cactussprite1[14] = 26'b00001100100000110011100110;
cactussprite1[15] = 26'b00001100100000110011100110;
cactussprite1[16] = 26'b01001100100000110011100110;
cactussprite1[17] = 26'b01001111100000110011100110;
cactussprite1[18] = 26'b01001111000000110011100110;
cactussprite1[19] = 26'b01001111000000110011100110;
cactussprite1[20] = 26'b01001100001000111111100110;
cactussprite1[21] = 26'b01001100001000111111100110;
cactussprite1[22] = 26'b01001100001000111111100110;
cactussprite1[23] = 26'b01001100001000011111100110;
cactussprite1[24] = 26'b01001100001000011111100110;
cactussprite1[25] = 26'b01001100101001000011100110;
cactussprite1[26] = 26'b01001100101001000011100100;
cactussprite1[27] = 26'b01001100101001000011111100;
cactussprite1[28] = 26'b01001100101001000011111000;
cactussprite1[29] = 26'b01111100101001000011111000;
cactussprite1[30] = 26'b01111100101001000011100000;
cactussprite1[31] = 26'b00111100101001000011100000;
cactussprite1[32] = 26'b00111100101001000011100000;
cactussprite1[33] = 26'b00001100101001000011100000;
cactussprite1[34] = 26'b00001100111110000011100000;
cactussprite1[35] = 26'b00001100011110000011100000;
cactussprite1[36] = 26'b00001100011000000011100000;
cactussprite1[37] = 26'b00001100001000000011100000;
cactussprite1[38] = 26'b00001100001000000011100000;
cactussprite1[39] = 26'b00001100001000000011100000;
cactussprite1[40] = 26'b00001100001000000011100000;
cactussprite1[41] = 26'b00001100001000000011100000;
cactussprite1[42] = 26'b00001100001000000011100000;
cactussprite1[43] = 26'b00001100001000000011100000;
cactussprite1[44] = 26'b00001100001000000011100000;
cactussprite1[45] = 26'b00001100001000000011100000;
cactussprite1[46] = 26'b00001100001000000111100000;
end
initial begin
cactussprite2[0] = 13'b0000000000000;
cactussprite2[1] = 13'b0000001000000;
cactussprite2[2] = 13'b0000011100000;
cactussprite2[3] = 13'b0000011100000;
cactussprite2[4] = 13'b0000011100000;
cactussprite2[5] = 13'b0000011100000;
cactussprite2[6] = 13'b0100011100000;
cactussprite2[7] = 13'b0110011100000;
cactussprite2[8] = 13'b0110011100000;
cactussprite2[9] = 13'b0110011100000;
cactussprite2[10] = 13'b0110011100000;
cactussprite2[11] = 13'b0110011100100;
cactussprite2[12] = 13'b0110011100110;
cactussprite2[13] = 13'b0110011100110;
cactussprite2[14] = 13'b0110011100110;
cactussprite2[15] = 13'b0110011100110;
cactussprite2[16] = 13'b0110011100110;
cactussprite2[17] = 13'b0110011100110;
cactussprite2[18] = 13'b0110011100110;
cactussprite2[19] = 13'b0110011100110;
cactussprite2[20] = 13'b0110011100110;
cactussprite2[21] = 13'b0111111100110;
cactussprite2[22] = 13'b0111111100110;
cactussprite2[23] = 13'b0011111100110;
cactussprite2[24] = 13'b0011111100110;
cactussprite2[25] = 13'b0001111100110;
cactussprite2[26] = 13'b0000011100110;
cactussprite2[27] = 13'b0000011111100;
cactussprite2[28] = 13'b0000011111100;
cactussprite2[29] = 13'b0000011111000;
cactussprite2[30] = 13'b0000011111000;
cactussprite2[31] = 13'b0000011100000;
cactussprite2[32] = 13'b0000011100000;
cactussprite2[33] = 13'b0000011100000;
cactussprite2[34] = 13'b0000011100000;
cactussprite2[35] = 13'b0000011100000;
cactussprite2[36] = 13'b0000011100000;
cactussprite2[37] = 13'b0000011100000;
cactussprite2[38] = 13'b0000011100000;
cactussprite2[39] = 13'b0000011100000;
cactussprite2[40] = 13'b0000011100000;
cactussprite2[41] = 13'b0000011100000;
cactussprite2[42] = 13'b0000011100000;
cactussprite2[43] = 13'b0000011100000;
cactussprite2[44] = 13'b0000011100000;
cactussprite2[45] = 13'b0000011100000;
cactussprite2[46] = 13'b0000111100000;
end
initial begin
cactussprite3[0] = 13'b0000000000000;
cactussprite3[1] = 13'b0000001100000;
cactussprite3[2] = 13'b0000011100000;
cactussprite3[3] = 13'b0000011100000;
cactussprite3[4] = 13'b0000011100000;
cactussprite3[5] = 13'b0000011100000;
cactussprite3[6] = 13'b0000011100000;
cactussprite3[7] = 13'b0000011100000;
cactussprite3[8] = 13'b0000011100000;
cactussprite3[9] = 13'b0000011100000;
cactussprite3[10] = 13'b0000011100000;
cactussprite3[11] = 13'b0000011100110;
cactussprite3[12] = 13'b0000011100110;
cactussprite3[13] = 13'b0110011100110;
cactussprite3[14] = 13'b0110011100110;
cactussprite3[15] = 13'b0110011100110;
cactussprite3[16] = 13'b0110011100110;
cactussprite3[17] = 13'b0110011100110;
cactussprite3[18] = 13'b0110011100110;
cactussprite3[19] = 13'b0110011100110;
cactussprite3[20] = 13'b0110011100110;
cactussprite3[21] = 13'b0110011100110;
cactussprite3[22] = 13'b0110011100110;
cactussprite3[23] = 13'b0110011100110;
cactussprite3[24] = 13'b0110011100110;
cactussprite3[25] = 13'b0110011100110;
cactussprite3[26] = 13'b0110011100110;
cactussprite3[27] = 13'b0111111111110;
cactussprite3[28] = 13'b0111111111100;
cactussprite3[29] = 13'b0111111111100;
cactussprite3[30] = 13'b0011111111000;
cactussprite3[31] = 13'b0011111100000;
cactussprite3[32] = 13'b0000011100000;
cactussprite3[33] = 13'b0000011100000;
cactussprite3[34] = 13'b0000011100000;
cactussprite3[35] = 13'b0000011100000;
cactussprite3[36] = 13'b0000011100000;
cactussprite3[37] = 13'b0000011100000;
cactussprite3[38] = 13'b0000011100000;
cactussprite3[39] = 13'b0000011100000;
cactussprite3[40] = 13'b0000011100000;
cactussprite3[41] = 13'b0000011100000;
cactussprite3[42] = 13'b0000011100000;
cactussprite3[43] = 13'b0000011100000;
cactussprite3[44] = 13'b0000011100000;
cactussprite3[45] = 13'b0000011100000;
cactussprite3[46] = 13'b0000111100000;
cactussprite3[47] = 13'b0000000000000;
cactussprite3[48] = 13'b0000000010000;
end
initial begin
floor[0] = 255'b000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000;
floor[1] = 255'b111111111111111111111111111111111111111111111111111111111111111111111111111111110011111000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111110001111111111111111111111111111111111111;
floor[2] = 255'b000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000;
floor[3] = 255'b000000001000000000000010000000000000001101100000010000000000010000000000000000000000010000001000000000010000000000000000000000100000000010000000000000100000000000000011011000000100000000000100000000000000000000000100000010000000000100000000000000000000001;
floor[4] = 255'b010000000000001000000000000100000000000000000000000000000000000001000010000000000100000000000010000000001000000001000100010000000100000000000010000000000001000000000000000000000000000000000000010000100000000001000000000000100000000010000000010001000100000;
floor[5] = 255'b001100000000000000000000000001000000000000000000100100000001100000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000010000000000000000001001000000011000000000000000000000000000000000000000000000000000000000000000000;
end
endmodule