Guest User

Untitled

a guest
Dec 17th, 2019
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. .data
  2. dir: .space 20
  3.  
  4. dir_prompt: .asciiz "Choose a direction (N, S, E, W): "
  5. open_msg: .asciiz "Welcome to the Walking Grounds!\n"
  6. wall_msg: .asciiz "\nOuch! Your character ran directly into a wall. Please consider not doing that.\n"
  7. input_error_msg: .asciiz "That's not a valid input, friend\n"
  8. current_pos_msg: .asciiz "\nYour current position is "
  9. monster_msg: .asciiz "\nYou ran into a monster!!\n"
  10.  
  11. .text
  12.  
  13. # VARIABLES #
  14. # s0 = X position of player
  15. # s1 = Y position of player
  16. # s2 = X max
  17. # s3 = Y max
  18. # s4 = X position of monster
  19. # s5 = Y position of monster
  20.  
  21.  
  22. main:
  23.  
  24. la $a0, open_msg
  25. jal print_str
  26. li $s0, 1
  27. li $s1, 1
  28.  
  29. li $s2, 6
  30. li $s3, 6
  31.  
  32. li $s4, 3
  33. li $s5, 3
  34.  
  35. dir_loop:
  36.  
  37. jal move_monster
  38. jal print_pos
  39. la $a0, dir_prompt
  40. jal print_str
  41. li $v0, 8
  42. la $a0, dir
  43. li $a1, 20
  44. syscall
  45.  
  46. lb $a0, ($a0)
  47.  
  48. beq $a0, 'N', move_north
  49. beq $a0, 'S', move_south
  50. beq $a0, 'E', move_east
  51. beq $a0, 'W', move_west
  52.  
  53. la $a0, input_error_msg
  54. jal print_str
  55. j dir_loop
  56.  
  57. # PLAYER MOVEMENT #
  58. move_north:
  59.  
  60. addi $s1, $s1, 1
  61. jal check_player_pos
  62. j dir_loop
  63.  
  64. move_south:
  65.  
  66. addi $s1, $s1, -1
  67. jal check_player_pos
  68. j dir_loop
  69.  
  70. move_east:
  71.  
  72. addi $s0, $s0, 1
  73. jal check_player_pos
  74. j dir_loop
  75.  
  76. move_west:
  77.  
  78. addi $s0, $s0, -1
  79. jal check_player_pos
  80. j dir_loop
  81.  
  82. check_player_pos:
  83.  
  84. addi $sp, $sp, -4
  85. sw $ra, 0($sp)
  86.  
  87. slt $t0, $zero, $s0
  88. beq $t0, $zero, wall_x_low
  89. slt $t0, $zero, $s1
  90. beq $t0, $zero, wall_y_low
  91. slt $t0, $s0, $s2
  92. beq $t0, $zero, wall_x_high
  93. slt $t0, $s1, $s3
  94. beq $t0, $zero, wall_y_high
  95. j check_mons_x
  96.  
  97. wall_x_low:
  98. addi $s0, $s0, 1
  99. j check_wall_msg
  100.  
  101. wall_y_low:
  102. addi $s1, $s1, 1
  103. j check_wall_msg
  104.  
  105. wall_x_high:
  106. addi $s0, $s0, -1
  107. j check_wall_msg
  108.  
  109. wall_y_high:
  110. addi $s1, $s1, -1
  111. j check_wall_msg
  112.  
  113. check_wall_msg:
  114. la $a0, wall_msg
  115. jal print_str
  116.  
  117. check_mons_x:
  118. beq $s0, $s4, check_mons_y
  119. j check_pos_end
  120.  
  121. check_mons_y:
  122. beq $s1, $s5, print_mons_msg
  123. j check_pos_end
  124.  
  125. print_mons_msg:
  126. la $a0, monster_msg
  127. jal print_str
  128. li $v0, 31
  129. li $a0, 20
  130. li $a1, 1000
  131. li $a2, 0
  132. li $a3, 110
  133. syscall
  134.  
  135. check_pos_end:
  136. lw $ra, 0($sp)
  137. addi $sp, $sp, 4
  138. jr $ra
  139.  
  140. # MONSTER MOVEMENT #
  141.  
  142. move_monster:
  143. addi $sp, $sp, -4
  144. sw $ra, 0($sp)
  145.  
  146. li $v0, 42
  147. li $a1, 2
  148. syscall
  149.  
  150. beq $a0, 2, mons_x_neg
  151. beq $a0, 1, mons_x_pos
  152.  
  153. move_monster_2:
  154. li $v0, 42
  155. li $a1, 2
  156. syscall
  157.  
  158. beq $a0, 2, mons_y_neg
  159. beq $a0, 1, mons_y_pos
  160. j mons_end
  161.  
  162. mons_x_neg:
  163. addi $s4, $s4, -1
  164. j move_monster_2
  165.  
  166. mons_x_pos:
  167. addi $s4, $s4, 1
  168. j move_monster_2
  169.  
  170. mons_y_neg:
  171. addi $s5, $s5, -1
  172. j mons_end
  173.  
  174. mons_y_pos:
  175. addi $s5, $s5, 1
  176.  
  177. mons_end:
  178. jal check_mons_pos
  179. lw $ra, 0($sp)
  180. addi $sp, $sp, 4
  181. jr $ra
  182.  
  183. check_mons_pos:
  184. addi $sp, $sp, -4
  185. sw $ra, 0($sp)
  186.  
  187. slt $t0, $zero, $s4
  188. beq $t0, $zero, mons_x_low
  189. slt $t0, $zero, $s5
  190. beq $t0, $zero, mons_y_low
  191. slt $t0, $s4, $s2
  192. beq $t0, $zero, mons_x_high
  193. slt $t0, $s5, $s3
  194. beq $t0, $zero, mons_y_high
  195. j mons_check_end
  196.  
  197. mons_x_low:
  198. addi $s4, $s4, 1
  199. j mons_check_end
  200.  
  201. mons_y_low:
  202. addi $s5, $s5, 1
  203. j mons_check_end
  204.  
  205. mons_x_high:
  206. addi $s4, $s4, -1
  207. j mons_check_end
  208.  
  209. mons_y_high:
  210. addi $s5, $s5, -1
  211. j mons_check_end
  212.  
  213. mons_check_end:
  214. lw $ra, 0($sp)
  215. addi $sp, $sp, 4
  216. jr $ra
  217.  
  218. # FUNCTIONS #
  219. print_str:
  220.  
  221. addi $sp, $sp, -4
  222. sw $ra, 0($sp)
  223.  
  224. li $v0, 4
  225. syscall
  226.  
  227. lw $ra, 0($sp)
  228. addi $sp, $sp, 4
  229. jr $ra
  230.  
  231. print_pos:
  232.  
  233. li $v0, 4
  234. la $a0, current_pos_msg
  235. syscall
  236.  
  237. li $v0, 11
  238. la $a0, '('
  239. syscall
  240.  
  241. li $v0, 1
  242. move $a0, $s0
  243. syscall
  244.  
  245. li $v0, 11
  246. la $a0, ','
  247. syscall
  248.  
  249. li $v0, 1
  250. move $a0, $s1
  251. syscall
  252.  
  253. li $v0, 11
  254. la $a0, ')'
  255. syscall
  256.  
  257. li $v0, 11
  258. la $a0, '\n'
  259. syscall
  260.  
  261. jr $ra
Advertisement
Add Comment
Please, Sign In to add comment