project is complete and playable

This commit is contained in:
2025-04-10 21:10:05 -04:00
parent ac6f6afa09
commit 74ddd7975c
+219 -34
View File
@@ -39,13 +39,18 @@
.data
newline: .asciiz "\n"
resetting: .asciiz "Starting Main\n"
# Store the offsets from the ship position. First 2 are pod, second 4 are service module, last 2 are legs. 8 pixels total
S: .word 4 8 516 520 1028 1032 1536 1548
bSpawn: .word 0
# Store the screen behind the ship
BH: .word 0:8
# Store the screen behind the plume
BHP: .word 0:8
PLMPOS: .word 0 # psoition of the plume
EPLM: .word 0 # should erase the plume?
DESTROYED: .word 0 # keeps track of if the enemy is destoryed
@@ -53,9 +58,6 @@ BH: .word 0:8
.text
main:
la $a0, resetting
li $v0, 4
syscall
li $s0, BASE_ADDRESS # $s0 stores the base address for display
addi $s1, $s0, 28188 # initial spawn location
@@ -85,27 +87,103 @@ main1: # Apply gravity to velocity if not landed
li $a0, 2
j dsc # yer done - no fuel
main2: # Draw changes
jal mship
main2:
# Sleep, 25ms, 40Hz
li $a0, 25
li $v0, 32
syscall
# Erase plume if instructed
la $t0 EPLM
lw $t1 0($t0)
beqz $t1 main3
li $t1 0 # Reset instruction
sw $t1, 0($t0)
# Redraw the bakcground
lw $t1, PLMPOS
lw $t0 BHP # Layer 1
sw $t0 1540($t1)
lw $t0 BHP+4
sw $t0 1544($t1)
addi $t2, $s0, 31220
bgt $t1, $t2, main3
lw $t0 BHP+8 # Layer 2
sw $t0 2052($t1)
lw $t0 BHP+12
sw $t0 2056($t1)
addi $t2, $t2, -512
bgt $t1, $t2, main3
lw $t0 BHP+16 # Layer 3
sw $t0 2564($t1)
lw $t0 BHP+20
sw $t0 2568($t1)
addi $t2, $t2, -512
bgt $t1, $t2, main3
lw $t0 BHP+24 # Layer 4
sw $t0 3076($t1)
lw $t0 BHP+28
sw $t0 3080($t1)
# Check if turret is destroyed
li $t9, 0xa4a4a4 # t9 stores light grey for detecting turret
li $t0 0
maindl: lw $t1 BHP($t0)
beq $t1 $t9 turd
addi $t0 $t0 4
bne $t0 32 maindl
j main3
turd: # "Turret detected"
li $t0 1
sw $t0 DESTROYED
addi $a0 $s0 21400
beq $s4 0 ktur
addi $a0 $s0 14276
beq $s4 1 ktur
addi $a0 $s0 19204
beq $s4 2 ktur
j main3 # this line should never be reached
main3: # Draw changes
jal dbul
jal mship
j mainlo
winp: # Wait for input restart or quit
li $a0 1
li $v0 1
syscall
li $a0, 100
li $v0, 32
syscall
li $t0, 0xffff0000
lw $t1, 0($t0)
beqz $t1, winp # Apply input
lw $t0, 4($t0) # t0 = Ascii
beq $t0, 114, inpr
beq $t0, 113, inpq
beqz $t1, winp # Apply input
li $a0 2
li $v0 1
syscall
lw $t0, 4($t0) # t0 = Ascii
beq $t0, 114, winpr
beq $t0, 113, winpq
j winp
winpr:# reset if r if pressed
j main
winpq:# Exit if q if pressed
li $v0, 10 # terminate the program gracefully
syscall
inp: # Handle input
@@ -129,6 +207,13 @@ inpw: # increase thrust is pushed
addi $s5, $s5, -32
addi $s6, $s6, -8
jal ubar
blez $s6 mainlo # skip plume if no fuel
jal dplm # notify mainloop to clear plume
li $t0 1
sw $t0, EPLM
sw $s1, PLMPOS
j mainlo
inpd: # accelerate right is pushed
@@ -145,6 +230,7 @@ inpq:# Exit if q if pressed
syscall
lev0: # Prepare level 0
sw $zero DESTROYED
la $a0, ($s0)
jal ss # Clear the screen
@@ -163,9 +249,12 @@ lev0: # Prepare level 0
jal dtur
addi $a0, $s0, 30220 # Draw medium platform
jal dmp
addi $s7, $s0, 21908 # Set the bullets positon and spawn
sw $s7, bSpawn
j mainlo
lev1: # Prepare level 1
sw $zero DESTROYED
la $a0, ($s0)
jal ss # Clear the screen
@@ -181,6 +270,8 @@ lev1: # Prepare level 1
jal dsp
addi $a0, $s0, 14276 # Draw turret
jal dtur
addi $s7, $s0, 14784 # Set the bullets positon and spawn
sw $s7, bSpawn
addi $a0, $s0, 15800 # Draw medium platform
jal dmp
addi $a0, $s0, 23072 # Draw fuel
@@ -191,6 +282,7 @@ lev1: # Prepare level 1
j mainlo
lev2: # Prepare level 2
sw $zero DESTROYED
la $a0, ($s0)
jal ss # Clear the screen
@@ -208,10 +300,12 @@ lev2: # Prepare level 2
addi $a0, $s0, 5600 # Draw small platform
#jal dsp
addi $a0, $s0, 4348 # Draw turret
#jal dtur
addi $a0, $s0, 20720 # Draw medium platform
jal dmp
addi $a0, $s0, 19204 # Draw turret
jal dtur
addi $s7, $s0, 19712 # Set the bullets positon and spawn
sw $s7, bSpawn
addi $a0, $s0, 2300 # Draw fuel
jal dfuel
#jal dland
@@ -422,23 +516,61 @@ dship3: lw $t1, 0($t0) # t1 = S[i]
jr $ra
dplm: # Draw the ships thrust plume. Topleft is address of ships drawn address. $a0 is not modified
li $t7 0xfd2f2e # t7 stores red
dplm: # Draw the ships thrust plume. Topleft is address of ships drawn address.
li $t7 0xff0000 # t7 stores red
li $t8 0xff8800 # t8 stores orange
li $t9 0xffe100 # t9 stores yellow
la $t6, BHP
sw $s1 PLMPOS
# Save whats possible
# Draw whats possible
# Overwrite later
lw $t0, 1540($s1) # Layer 1
sw $t0, 0($t6)
lw $t0, 1544($s1)
sw $t0, 4($t6)
addi $t1, $s0, 31220 # Layer 2
bgt $s1, $t1, dplm1
lw $t0 2052($s1)
sw $t0, 8($t6)
lw $t0 2056($s1)
sw $t0, 12($t6)
sw $t7, 2564($a0) # Layer 1
sw $t8, 2568($a0)
sw $t8, 2572($a0)
sw $t7, 2576($a0)
sw $t7, 3076($a0) # Layer 2
sw $t8, 3080($a0)
sw $t8, 3084($a0)
sw $t7, 3088($a0)
sw $t9, 3592($a0) # Layer 3
sw $t9, 3596($a0)
sw $t9, 4104($a0) # Layer 4
sw $t9, 4108($a0)
addi $t1, $t1, -512 # Layer 3
bgt $s1, $t1, dplm1
lw $t0 2564($s1)
sw $t0, 16($t6)
lw $t0 2568($s1)
sw $t0, 20($t6)
addi $t1, $t1, -512 # Layer 4
bgt $s1, $t1, dplm1
lw $t0 3076($s1)
sw $t0, 24($t6)
lw $t0 3080($s1)
sw $t0, 28($t6)
dplm1:
sw $t7 1540($s1) # Layer 1
sw $t7 1544($s1)
addi $t0, $s0, 31220
bgt $s1, $t0, dplm5
sw $t8 2052($s1) # Layer 2
sw $t8 2056($s1)
addi $t0, $t0, -512
bgt $s1, $t0, dplm5
sw $t9 2564($s1) # Layer 3
sw $t9 2568($s1)
addi $t0, $t0, -512
bgt $s1, $t0, dplm5
sw $t9 3076($s1) # Layer 4
sw $t9 3080($s1)
dplm5:
jr $ra
@@ -467,16 +599,69 @@ dtur: # Draw a turret. Topleft address is stored in $a0. $a0 is not modified
sw $t8, 1060($a0)
jr $ra
ktur: # Draw a killed turret
li $t7, 0x0 # t7 stores black
li $t8, 0x828282 # t8 stores dark grey
li $t9, 0xa4a4a4 # t9 stores light grey
dbul: # Draw a bullet. Topleft address is stored in $a0. $a0 is not modified
li $t8 0xfd2f2e # t8 stores red
li $t9 0xffe100 # t9 stores yellow
sw $t8, 20($a0) # Layer 1
sw $t8, 24($a0)
sw $t7, 28($a0)
sw $t7, 512($a0) # Layer 2
sw $t7, 516($a0)
sw $t7, 520($a0)
sw $t7, 524($a0)
sw $t8, 528($a0)
sw $t8, 532($a0)
sw $t9, 536($a0)
sw $t8, 540($a0)
sw $t8, 544($a0)
sw $t8, 1032($a0) # Layer 3
sw $t8, 1036($a0)
sw $t7, 1040($a0)
sw $t8, 1044($a0)
sw $t8, 1048($a0)
sw $t9, 1052($a0)
sw $t9, 1056($a0)
sw $t8, 1060($a0)
sw $t8, 0($a0)
sw $t9, 4($a0)
sw $t9, 8($a0)
j main3
dbul: # Draw a bullet. Topleft address is stored in $s7. $s7 is modified left.
jr $ra
li $t8 0xff0000 # t8 stores red
li $t9 0x0 # t9 = black
lw $t0, 0($s7)
lw $t1, 4($s7)
#bnez $t0, dbul1
sw $t8, 0($s7)
dbul1: bne $t1, $t8, dbul2
sw $t9, 4($s7)
dbul2: beqz $t0, dbul3
li $a0, 1
beq $t0, 0x828282, dsc # dark grey
beq $t0, 0xa4a4a4, dsc # light grey
beq $t0, 0xdf9213, dsc # gold-bronze
dbul3: sub $t0, $s7, $s0 # t0 = screen pos
andi $t0, $t0, 511 # t0 = screen x pos
bne $t0, 508, dbul4
sw $t9 0($s7)
lw $t5 DESTROYED
beq $t5 1 dbul5
lw $s7 bSpawn
sw $t8 0($s7)
dbul4: addi $s7, $s7, -4
dbul5: jr $ra
dfuel: # Draw a fuel barrel. Topleft address is stored in $a0. $a0 is not modified
li $t8 0xfd2f2e # t8 stores red
@@ -579,7 +764,7 @@ dsc2: jal dscrow
beq $a0, 2, dscm
dsc3: beqz $a0, dsc4
dsc3: beqz $a0, dsc4
j winp # return back to reset if anything but a win
dsc4: addi $s4, $s4, 1 # draw next level if passed
beq $s4, 1 lev1