majorjam-4/cart.wren

228 lines
5.5 KiB
Plaintext

// title: game title
// author: Fabien Freling
// desc: (Major Jam 8)
// script: wren
import "random" for Random
var W = 240
var H = 136
var R = Random.new()
class Star {
construct new(x, y, size, scrollSpeed, color) {
_x = x
_y = y
_size = size
_scrollSpeed = scrollSpeed
_color = color
}
update() {
_x = _x - _scrollSpeed
}
draw() {
TIC.circ(_x, _y, _size, _color)
}
expired {
_x + _size < 0
}
}
class Bullet {
construct new(x, y) {
_x = x
_y = y
_speed = 5
}
update() {
_x = _x + _speed
}
draw() {
TIC.rect(_x, _y, 3, 1, 4)
}
expired {
_x > W
}
}
class Ship {
construct new(x, y) {
_x = x
_y = y
_speed = 1
_bullets = []
}
update() {
if (TIC.btn(0)) {
_y = _y - _speed
}
if (TIC.btn(1)) {
_y = _y + _speed
}
if (TIC.btn(2)) {
_x = _x - _speed
}
if (TIC.btn(3)) {
_x = _x + _speed
}
_x.clamp(0, W)
_y.clamp(0, H)
if (TIC.btnp(4, 5, 10)) {
shoot()
}
for (b in _bullets) {
b.update()
}
while (_bullets.count > 0 && _bullets[0].expired) {
_bullets.removeAt(0)
}
}
draw() {
TIC.spr(256, _x, _y, 0, 1, 0, 0, 2, 2)
for (b in _bullets) {
b.draw()
}
}
shoot() {
_bullets.add(Bullet.new(_x + 8, _y + 8))
}
}
class World {
construct new() {
_t = 0
_stars = []
_player = Ship.new(W / 2, H / 2)
_world_x = 0
_world_y = 0
_world_scroll_speed = 60 / 2
// init background
for (i in 0..W) {
update()
}
}
update() {
_player.update()
for (s in _stars) {
s.update()
}
// collect passed stars
while (_stars.count > 0 && _stars[0].expired) {
_stars.removeAt(0)
}
// small stars
if (_t % 30 == 0) {
_stars.add(Star.new(W, R.int(0,H), 1, 1, 12))
}
// medium stars
var width = 10
var spaceBetween = width * 10
var speed = 0.1
var mediumTick = (spaceBetween + width) / speed
if (_t % mediumTick == 0) {
_stars.add(Star.new(W, R.int(0,H), width, speed, 13))
}
_t = _t + 1
if (_t % _world_scroll_speed == 0) {
_world_x = _world_x + 1
}
}
draw() {
var sx = (_t % _world_scroll_speed) / (_world_scroll_speed / 8)
TIC.map(_world_x, _world_y, 30 + 1, 17 + 1, -sx, 0)
for (s in _stars) {
s.draw()
}
_player.draw()
}
}
class Game is TIC{
state { _state }
static start { "start" }
static game { "game" }
construct new() {
_t=0
_x=96
_y=24
_state = Game.start
_world = World.new()
}
TIC() {
update()
draw()
_t=_t+1
}
update() {
_world.update()
}
draw() {
TIC.cls(0)
_world.draw()
//TIC.spr(1+((_t%60)/30|0)*2,_x,_y,14,3,0,0,2,2)
//TIC.print("HELLO WORLD!",84,84)
}
}
// <TILES>
// 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc
// 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c
// 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc
// 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c
// 005:2222222223312331231123112111211122222222233123312311231121112111
// 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec
// 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee
// 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec
// 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee
// 033:0000000000000000000000000002200000022000000000000000000000000000
// 034:0000000000000000000000000003300000033000000000000000000000000000
// </TILES>
// <SPRITES>
// 000:00000000000000000ccc000000eccccc00eeeeee4ddddddd4cccccdd43ddddcc
// 001:00000000000000000000000000000000ee990000ddaa9900ddaaaa90ccaaaaa9
// 016:43dddddd4ddddddd4eeeeeee0ccccccc00000000000000000000000000000000
// 017:ddccccccddddddd0eeeeee000000000000000000000000000000000000000000
// </SPRITES>
// <MAP>
// 014:000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000500000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
// 015:000000000000000000000000000000000000000000000000000000000000000000000000505050000000000050505000000000005050500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
// 016:000000000000000000000000000000000000000000000000000000000000505050505050505050505050505050505050505050505050505050505050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
// </MAP>
// <WAVES>
// 000:00000000ffffffff00000000ffffffff
// 001:0123456789abcdeffedcba9876543210
// 002:0123456789abcdef0123456789abcdef
// </WAVES>
// <SFX>
// 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000
// </SFX>
// <PALETTE>
// 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57
// </PALETTE>