Σε τι μεταφράζεται (assemble) ο παραπάνω κώδικας; Ορίστε ένα απόσπασμα.
; ============================================================
; NTC program - generated by NTC BASIC (VB style BASIC to NTC)
; platform: cpc (Amstrad CPC - direct hardware, no firmware), starts in turbo mode
; ============================================================
DEVICE AMSTRADCPC6128 ; for SAVEAMSDOS at the end
org #4000
NTC_TERM equ 0 ; Option Terminal: 0 none, 1 VT52, 2 ANSI (CP/M)
NTC_STRMAX equ 40 ; the longest string (library buffers, temps)
NTC_MEMBANKS equ 64 ; Option Memory: the most 64K banks the Memory class looks for
NTC_ROMENABLE equ 0 ; Option RomEnable (cpcfw, cpcmin): the start code starts the ROMs
NTC_ROMLIB equ 0 ; 1 = the library is the keyword ROM (Library: ROM; ntcRomAsm builds it)
NTC_WINHOLE equ 0 ; 1 = the program is built round an Option Reserve range over the window #4000-#7FFF
NTC_BUFSIZE equ 2048 ; the library's buffer (ntc_buf: FileSystem, Memory.Copy): Option Buffer
NTC_CPMGFX equ 0 ; 1 = CP/M: Graphics draws on an Amstrad CPC's screen (2.2: #C000, Plus: block 1 from common memory)
ntc_start:
di
ld (ntc_csp), sp
ld sp, main_thread
ret
; ============================================================
; Main Thread
; ============================================================
main_thread:
dw kw_bssinit, ntc_bss, ntc_bss_size ; the arrays: do they fit, clear them
; Main.bas 1975: Mode 0
dw kw_model, 0
; Main.bas 1976: CpcData.Data ' (the tables: never runs, keeps them in the program)
dw fn_cpcdata_data
; Main.bas 1977: Cpc.Init
dw fn_cpc_init
; Main.bas 1978: Sfx.Init
dw p_sfx_init_c
; Main.bas 1979: Border 0
dw p_border_c, lit_0
; Main.bas 1980: Pen 15
dw p_pen_c, lit_15
; Main.bas 1981: ClsAll
dw p_clsall_c
; Main.bas 1982: MakeLand
dw p_makeland_c
; Main.bas 1983: Heights
dw p_heights_c
; Main.bas 1985: Do
do1_t:
; Main.bas 1986: TitleScreen
dw p_titlescreen_c
; Main.bas 1988: score = 0 : nextBonus = 10000
dw kw_l_mov, llit_0, var_score
dw kw_l_mov, llit_10000, var_nextbonus
; Main.bas 1989: lives = 3
dw kw_ltov, 3, var_lives
; Main.bas 1990: bombs = 3
dw kw_ltov, 3, var_bombs
; Main.bas 1991: wave = 1
dw kw_ltov, 1, var_wave
; Main.bas 1992: game_over = False
dw kw_ztov, var_game_over
; Main.bas 1993: InitWave()
dw p_initwave_c
; Main.bas 1995: Do While Not game_over
do2_t:
dw kw_notv, var_game_over, tmp0
dw kw_goto_ifzero, tmp0, do2_e
; Main.bas 1996: Vsync
dw p_vsync_c
; Main.bas 1997: frames = frames + 1
dw kw_inc, var_frames
; Main.bas 1998: f2 = frames And 1 : f3 = f3 + 1 ' <--- CHANGED (was f3 = frames Mod 3: a division)
dw kw_andvl, var_frames, 1, var_f2
dw kw_inc, var_f3
; Main.bas 1999: If f3 = 3 Then f3 = 0 ' <--- NEW (frames Mod 3 as a counter)
dw kw_cpeqvl, var_f3, 3
dw kw_goto_iffalse, if3_1
dw kw_ztov, var_f3
if3_1:
; Main.bas 2000: f4 = Cpc.Shr(frames, 2) And 1 : f12 = Cpc.Div(frames, 6) And 1
dw fn_cpc_shr, var_frames, lit_2, var_cpc_shr_shr
dw kw_vtov, var_cpc_shr_shr, tmp0
dw kw_andvl, tmp0, 1, var_f4
dw fn_cpc_div, var_frames, lit_6, var_cpc_div_div
dw kw_vtov, var_cpc_div_div, tmp0
dw kw_andvl, tmp0, 1, var_f12
; Main.bas 2001: If flash_bg > 0 Then
dw kw_scpgtvl, var_flash_bg, 0
dw kw_goto_iffalse, if4_1
; Main.bas 2002: flash_bg = flash_bg - 1
dw kw_dec, var_flash_bg
; Main.bas 2003: If flash_bg = 0 Then
dw kw_cpeqvl, var_flash_bg, 0
dw kw_goto_iffalse, if5_1
; Main.bas 2004: Border 0
dw p_border_c, lit_0
; Main.bas 2005: Cpc.Ink 0, 0
dw fn_cpc_ink, lit_0, lit_0
; Main.bas 2006: End If
if5_1:
; Main.bas 2007: End If
if4_1:
; Main.bas 2008: If msgT > 0 Then
dw kw_scpgtvl, var_msgt, 0
dw kw_goto_iffalse, if6_1
; Main.bas 2009: msgT = msgT - 1
dw kw_dec, var_msgt
; Main.bas 2010: If msgT = 0 Then
dw kw_cpeqvl, var_msgt, 0
dw kw_goto_iffalse, if7_1
; Main.bas 2011: At 17 - Cpc.Shr(Len(msg), 1), 11 : PrintS Space$(Len(msg)) ' <--- CHANGED (only where the message is: was At 1, 11 : PrintS Space$(32), 64 letters drawn)
dw kw_strlen, var_msg, tmp1
dw fn_cpc_shr, tmp1, lit_1, var_cpc_shr_shr
dw kw_vtov, var_cpc_shr_shr, tmp1
dw kw_sublv, 17, tmp1, tmp0
dw p_at_c, tmp0, lit_11
dw kw_strlen, var_msg, tmp0
dw kw_strspace, stmp0, tmp0
dw p_prints_c, stmp0
; Main.bas 2012: ElseIf Cpc.Touched() Then
dw if7_e_go
if7_1:
dw fn_cpc_touched, var_cpc_touched_touched
dw kw_goto_ifzero, var_cpc_touched_touched, if7_2
; Main.bas 2013: Pen 14 : At 17 - Cpc.Shr(Len(msg), 1), 11 : PrintS msg ' <--- CHANGED (a sprite took some of it with it: again; was Message msg, msgT: two copies of the string)
dw p_pen_c, lit_14
dw kw_strlen, var_msg, tmp1
dw fn_cpc_shr, tmp1, lit_1, var_cpc_shr_shr
dw kw_vtov, var_cpc_shr_shr, tmp1
dw kw_sublv, 17, tmp1, tmp0
dw p_at_c, tmp0, lit_11
dw p_prints_c, var_msg
; Main.bas 2014: End If
if7_2:
if7_e:
; Main.bas 2015: End If
if6_1:
; Main.bas 2017: Controls
dw p_controls_c
; Main.bas 2018: DrawPlayer
dw p_drawplayer_c
; Main.bas 2019: Lasers
dw fn_lasers
; Main.bas 2020: Humans
dw p_humans_c
; Main.bas 2021: Enemies
dw p_enemies_c
; Main.bas 2022: If Not game_over Then Shots
dw kw_notv, var_game_over, tmp0
dw kw_goto_ifzero, tmp0, if8_1
dw p_shots_c
if8_1:
; Main.bas 2023: Booms
dw fn_booms
; Main.bas 2024: Terrain cam_x
dw p_terrain_c, var_cam_x
; Main.bas 2025: ViewMarks
dw p_viewmarks_c
; Main.bas 2026: If hudDirty Then UpdateHUD()
dw kw_goto_ifzero, var_huddirty, if9_1
dw p_updatehud_c
if9_1:
; Main.bas 2029: If enemies_alive <= 0 And enemies_to_spawn <= 0 And Not game_over Then
dw kw_scplevl, var_enemies_alive, 0
dw kw_ftov, tmp0
dw kw_scplevl, var_enemies_to_spawn, 0
dw kw_ftov, tmp1
dw kw_andvv, tmp0, tmp1, tmp0
dw kw_notv, var_game_over, tmp1
dw kw_andvv, tmp0, tmp1, tmp0
dw kw_goto_ifzero, tmp0, do2_t
; Main.bas 2030: WaveDone
dw p_wavedone_c
; Main.bas 2031: End If
if10_1:
; Main.bas 2032: Loop
dw do2_t_go
do2_e:
; Main.bas 2035: Cpc.HideAll
dw fn_cpc_hideall
; Main.bas 2036: ClsAll
dw p_clsall_c
; Main.bas 2037: Cpc.Ground 0
dw fn_cpc_ground, lit_0
; Main.bas 2038: Pen 10
dw p_pen_c, lit_10
; Main.bas 2039: At 8, 9
dw p_at_c, lit_8, lit_9
; Main.bas 2040: PrintS "G A M E O V E R"
dw p_prints_c, str0
; Main.bas 2041: Pen 15
dw p_pen_c, lit_15
; Main.bas 2042: At 8, 12
dw p_at_c, lit_8, lit_12
; Main.bas 2043: PrintS "FINAL SCORE: " & Mid$(Str$(score), 2)
dw kw_l_str, stmp1, var_score
dw kw_strmid, stmp1, stmp1, lit_2, lit_255
dw kw_strcpy, stmp0, str1
dw kw_strcat, stmp0, stmp1
dw p_prints_c, stmp0
; Main.bas 2044: Pen 14
dw p_pen_c, lit_14
; Main.bas 2045: At 8, 15
dw p_at_c, lit_8, lit_15
; Main.bas 2046: PrintS "REACHED WAVE: " & Mid$(Str$(wave), 2)
dw kw_strstr, stmp1, var_wave
dw kw_strmid, stmp1, stmp1, lit_2, lit_255
dw kw_strcpy, stmp0, str2
dw kw_strcat, stmp0, stmp1
dw p_prints_c, stmp0
; Main.bas 2047: For i = 1 To 75
dw kw_ltov, 1, var_i
for11_t:
; Main.bas 2048: Vsync
dw p_vsync_c
; Main.bas 2049: Next i
dw kw_next1l, var_i, 75, for11_t
for11_e:
; Main.bas 2050: Loop
dw do1_t_go
do1_e:
dw kw_stop
; ============================================================
; sub makeland (turbo mode)
; ============================================================
p_makeland:
; Main.bas 172: Dim h As Integer, t As Integer
; Main.bas 173: rs = 12345 : h = 14 : t = 14
dw kw_ltov, 12345, var_rs
dw kw_ltov, 14, var_makeland_h
dw kw_ltov, 14, var_makeland_t
; Main.bas 174: For k = 0 To 255
dw kw_ztov, var_k
for12_t:
; Main.bas 175: If k Mod 16 = 0 Then t = 8 + Rand(23)
dw kw_modvl, var_k, 16, tmp0
dw kw_cpeqvl, tmp0, 0
dw kw_goto_iffalse, if13_1
dw p_rand_c, lit_23
dw kw_vtov, var_rand_rand, tmp1
dw kw_addl, tmp1, 8, var_makeland_t
if13_1:
; Main.bas 176: If h < t Then h = h + 1 + Rand(3)
dw kw_scpltvv, var_makeland_h, var_makeland_t
dw kw_goto_iffalse, if14_1
dw kw_addl, var_makeland_h, 1, tmp0
dw p_rand_c, lit_3
dw kw_vtov, var_rand_rand, tmp1
dw kw_add, tmp0, tmp1, var_makeland_h
if14_1:
; Main.bas 177: If h > t Then h = h - 1 - Rand(3)
dw kw_scpgtvv, var_makeland_h, var_makeland_t
dw kw_goto_iffalse, if15_1
dw kw_addl, var_makeland_h, -1, tmp0
dw p_rand_c, lit_3
dw kw_vtov, var_rand_rand, tmp1
dw kw_subvv, tmp0, tmp1, var_makeland_h
if15_1:
; Main.bas 178: If h < 8 Then h = 8
dw kw_scpltvl, var_makeland_h, 8
dw kw_goto_iffalse, if16_1
dw kw_ltov, 8, var_makeland_h
if16_1:
; Main.bas 179: If h > 32 Then h = 32
dw kw_scpgtvl, var_makeland_h, 32
dw kw_goto_iffalse, if17_1
dw kw_ltov, 32, var_makeland_h
if17_1:
; Main.bas 180: land(k) = h
dw kw_aset8, arr_land, var_k, var_makeland_h
; Main.bas 181: Next k
dw kw_next1l, var_k, 255, for12_t
for12_e:
; Main.bas 183: For k = 248 To 255
dw kw_ltov, 248, var_k
for18_t:
; Main.bas 184: land(k) = land(247) + (land(0) - land(247)) * (k - 247) \ 9
dw kw_lptrtov8, arr_land+247, tmp1
dw kw_lptrtov8, arr_land, tmp2
dw kw_lptrtov8, arr_land+247, tmp3
dw kw_subvv, tmp2, tmp3, tmp2
dw kw_addl, var_k, -247, tmp3
dw kw_mulvv, tmp2, tmp3, tmp2
dw kw_divvl, tmp2, 9, tmp2
dw kw_add, tmp1, tmp2, tmp1
dw kw_aset8, arr_land, var_k, tmp1
; Main.bas 185: Next k
dw kw_next1l, var_k, 255, for18_t
for18_e:
dw p_makeland_r
; ============================================================
; function rand (turbo mode)
; ============================================================
p_rand:
; Main.bas 191: rs = (rs * 2053 + 13849) And &H7FFF
dw kw_mulvl, var_rs, 2053, tmp1
dw kw_addl, tmp1, 13849, tmp1
dw kw_andvl, tmp1, 32767, var_rs
; Main.bas 192: Rand = (rs \ 32) Mod n
dw kw_divvl, var_rs, 32, tmp1
dw kw_modvv, tmp1, var_rand_n, var_rand_rand
dw p_rand_r
; ============================================================
; function getterrainy (turbo mode)
; ============================================================
p_getterrainy:
; Main.bas 196: If planet_dead Then GetTerrainY = 6 Else GetTerrainY = land(Cpc.Shr(wx, 2) And 255)
dw kw_goto_ifzero, var_planet_dead, if19_1
dw kw_ltov, 6, var_getterrainy_getterrainy
dw if19_e_go
if19_1:
dw fn_cpc_shr, var_getterrainy_wx, lit_2, var_cpc_shr_shr
dw kw_vtov, var_cpc_shr_shr, tmp1
dw kw_andvl, tmp1, 255, tmp1
dw kw_aget8, arr_land, tmp1, var_getterrainy_getterrainy
if19_e:
dw p_getterrainy_r
; ============================================================
; function worldtoradarx (turbo mode)
; ============================================================
p_worldtoradarx:
; Main.bas 203: WorldToRadarX = 64 + Cpc.Shr((wx - px + 512) And WORLD_MASK, 3)
dw kw_subvv, var_worldtoradarx_wx, var_px, tmp1
dw kw_addl, tmp1, 512, tmp1
dw kw_andvl, tmp1, 1023, tmp1
dw fn_cpc_shr, tmp1, lit_3, var_cpc_shr_shr
dw kw_vtov, var_cpc_shr_shr, tmp1
dw kw_addl, tmp1, 64, var_worldtoradarx_worldtoradarx
dw p_worldtoradarx_r
; ============================================================
; sub updatehud (turbo mode)
; ============================================================
p_updatehud:
; Main.bas 208: If score <> hudScore Then ' <--- NEW
dw kw_l_cpne, var_score, var_hudscore
dw kw_goto_iffalse, if20_1
; Main.bas 209: Pen 15
dw p_pen_c, lit_15
; Main.bas 210: At 1, 1
dw p_at_c, lit_1, lit_1
; Main.bas 211: PrintS Right$("000000" & Mid$(Str$(score), 2), 7)
dw kw_l_str, stmp1, var_score
dw kw_strmid, stmp1, stmp1, lit_2, lit_255
dw kw_strcpy, stmp0, str3
dw kw_strcat, stmp0, stmp1
dw kw_strright, stmp0, stmp0, lit_7
dw p_prints_c, stmp0
; Main.bas 212: hudScore = score ' <--- NEW
dw kw_l_mov, var_score, var_hudscore
; Main.bas 213: End If ' <--- NEW
if20_1:
; Main.bas 214: If lives <> hudLives Then ' <--- NEW
dw kw_cpnevv, var_lives, var_hudlives
dw kw_goto_iffalse, if21_1
; Main.bas 215: Pen 14
dw p_pen_c, lit_14
; Main.bas 216: At 10, 1
dw p_at_c, lit_10, lit_1
; Main.bas 217: PrintS "SHIPS" & Str$(lives) & " "
dw kw_strstr, stmp1, var_lives
dw kw_strcpy, stmp0, str4
dw kw_strcat, stmp0, stmp1
dw kw_strcat, stmp0, str5
dw p_prints_c, stmp0
; Main.bas 218: hudLives = lives ' <--- NEW
dw kw_vtov, var_lives, var_hudlives
; Main.bas 219: End If ' <--- NEW
if21_1:
; Main.bas 220: If bombs <> hudBombs Then ' <--- NEW
dw kw_cpnevv, var_bombs, var_hudbombs
dw kw_goto_iffalse, if22_1
; Main.bas 221: Pen 12
dw p_pen_c, lit_12
; Main.bas 222: At 19, 1
dw p_at_c, lit_19, lit_1
; Main.bas 223: PrintS "BOMBS" & Str$(bombs) & " "
dw kw_strstr, stmp1, var_bombs
dw kw_strcpy, stmp0, str6
dw kw_strcat, stmp0, stmp1
dw kw_strcat, stmp0, str5
dw p_prints_c, stmp0
; Main.bas 224: hudBombs = bombs ' <--- NEW
dw kw_vtov, var_bombs, var_hudbombs
; Main.bas 225: End If ' <--- NEW
if22_1:
; Main.bas 226: If wave <> hudWave Then ' <--- NEW
dw kw_cpnevv, var_wave, var_hudwave
dw kw_goto_iffalse, if23_1
; Main.bas 227: Pen 11
dw p_pen_c, lit_11
; Main.bas 228: At 27, 1
dw p_at_c, lit_27, lit_1
; Main.bas 229: PrintS "WAVE" & Str$(wave) & " "
dw kw_strstr, stmp1, var_wave
dw kw_strcpy, stmp0, str7
dw kw_strcat, stmp0, stmp1
dw kw_strcat, stmp0, str5
dw p_prints_c, stmp0
; Main.bas 230: hudWave = wave ' <--- NEW
dw kw_vtov, var_wave, var_hudwave
; Main.bas 231: End If ' <--- NEW
if23_1:
; Main.bas 232: hudDirty = 0
dw kw_ztov, var_huddirty
dw p_updatehud_r
; ============================================================
; sub drawstaticframe (turbo mode)
; ============================================================
p_drawstaticframe:
; Main.bas 236: ClsAll
dw p_clsall_c
; Main.bas 237: hudScore = -1 : hudLives = -1 : hudBombs = -1 : hudWave = -1 ' <--- NEW (the screen is clear: all of the HUD printed)
dw kw_l_mov, llit_m1, var_hudscore
dw kw_ltov, -1, var_hudlives
dw kw_ltov, -1, var_hudbombs
dw kw_ltov, -1, var_hudwave
; Main.bas 240: Cpc.HLine 0, 43, 160, PEN_DIVIDER
dw fn_cpc_hline, lit_0, lit_43, lit_160, lit_13
; Main.bas 241: Cpc.HLine 31, 9, 66, PEN_SCANNER
dw fn_cpc_hline, lit_31, lit_9, lit_66, lit_10
; Main.bas 242: Cpc.HLine 31, 39, 66, PEN_SCANNER
dw fn_cpc_hline, lit_31, lit_39, lit_66, lit_10
; Main.bas 243: For k = 10 To 38
dw kw_ltov, 10, var_k
for24_t:
; Main.bas 244: Cpc.HLine 31, k, 1, PEN_SCANNER : Cpc.HLine 96, k, 1, PEN_SCANNER
dw fn_cpc_hline, lit_31, var_k, lit_1, lit_10
dw fn_cpc_hline, lit_96, var_k, lit_1, lit_10
; Main.bas 245: Next k
dw kw_next1l, var_k, 38, for24_t
for24_e:
; Main.bas 246: Stars
dw p_stars_c
; Main.bas 247: Cpc.Ground 7
dw fn_cpc_ground, lit_7
; Main.bas 248: UpdateHUD()
dw p_updatehud_c
dw p_drawstaticframe_r
; ============================================================
; sub stars (turbo mode)
; ============================================================
p_stars:
; Main.bas 254: Dim x As Integer, y As Integer
; Main.bas 255: rs = 777
dw kw_ltov, 777, var_rs
; Main.bas 256: For k = 0 To 31
dw kw_ztov, var_k
for25_t:
; Main.bas 257: x = Rand(320) : y = 46 + Rand(110)
dw p_rand_c, lit_320
dw kw_vtov, var_rand_rand, var_stars_x
dw p_rand_c, lit_110
dw kw_vtov, var_rand_rand, tmp1
dw kw_addl, tmp1, 46, var_stars_y
; Main.bas 258: Cpc.Star k, x, y, Val(Mid$("2211", (k Mod 4) + 1, 1))
dw kw_modvl, var_k, 4, tmp4
dw kw_inc, tmp4
dw kw_strmid, stmp3, str8, tmp4, lit_1
dw kw_strval, stmp3, tmp3
dw fn_cpc_star, var_k, var_stars_x, var_stars_y, tmp3
; Main.bas 259: Next k
dw kw_next1l, var_k, 31, for25_t
for25_e:
dw p_stars_r
; ============================================================
; sub initwave (turbo mode)
; ============================================================
p_initwave:
; Main.bas 267: Cpc.HideAll
dw fn_cpc_hideall
; Main.bas 268: DrawStaticFrame()
dw p_drawstaticframe_c
; Main.bas 270: px = 512 : py = 96 : pvx = 0 : pvy = 0 : pdir = 1 : psx = 110
dw kw_ltov, 512, var_px
dw kw_ltov, 96, var_py
dw kw_ztov, var_pvx
dw kw_ztov, var_pvy
dw kw_ltov, 1, var_pdir
dw kw_ltov, 110, var_psx
; Main.bas 271: safeT = 25
dw kw_ltov, 25, var_safet
; Main.bas 273: For i = 0 To MAX_LASERS - 1
dw kw_ztov, var_i
for26_t:
; Main.bas 274: llife(i) = 0
dw kw_asetl, arr_llife, var_i, 0
; Main.bas 275: Next i
dw kw_next1l, var_i, 3, for26_t
for26_e:
; Main.bas 276: For i = 0 To MAX_SHOTS - 1
dw kw_ztov, var_i
for27_t:
; Main.bas 277: slife(i) = 0
dw kw_asetl, arr_slife, var_i, 0
; Main.bas 278: Next i
dw kw_next1l, var_i, 5, for27_t
for27_e:
; Main.bas 279: For i = 0 To MAX_BOOMS - 1
dw kw_ztov, var_i
for28_t:
; Main.bas 280: bt(i) = 0
dw kw_asetl, arr_bt, var_i, 0
; Main.bas 281: Next i
dw kw_next1l, var_i, 3, for28_t
for28_e:
; Main.bas 284: If wave = 1 Or (wave - 1) Mod 5 = 0 Then
dw kw_cpeqvl, var_wave, 1
dw kw_ftov, tmp0
dw kw_addl, var_wave, -1, tmp1
dw kw_modvl, tmp1, 5, tmp1
dw kw_cpeqvl, tmp1, 0
dw kw_ftov, tmp1
dw kw_orvv, tmp0, tmp1, tmp0
dw kw_goto_ifzero, tmp0, if29_1
; Main.bas 285: planet_dead = False
dw kw_ztov, var_planet_dead
; Main.bas 286: humans_alive = MAX_HUMANS
dw kw_ltov, 8, var_humans_alive
; Main.bas 287: For i = 0 To MAX_HUMANS - 1
dw kw_ztov, var_i
for30_t:
; Main.bas 288: hx(i) = (i * 128 + 48) And WORLD_MASK
dw kw_mulvl, var_i, 128, tmp1
dw kw_addl, tmp1, 48, tmp1
dw kw_andvl, tmp1, 1023, tmp1
dw kw_aset, arr_hx, var_i, tmp1
; Main.bas 289: hstate(i) = H_GROUND
dw kw_asetl, arr_hstate, var_i, 1
; Main.bas 290: Next i
dw kw_next1l, var_i, 7, for30_t
for30_e:
; Main.bas 291: End If
if29_1:
; Main.bas 292: For i = 0 To MAX_HUMANS - 1
dw kw_ztov, var_i
for31_t:
; Main.bas 293: hcarrier(i) = -1
dw kw_asetl, arr_hcarrier, var_i, -1
; Main.bas 294: If hstate(i) <> H_DEAD Then
dw kw_aget, arr_hstate, var_i, tmp0
dw kw_cpnevl, tmp0, 0
dw kw_goto_iffalse, if32_1
; Main.bas 295: hstate(i) = H_GROUND
dw kw_asetl, arr_hstate, var_i, 1
; Main.bas 296: hy(i) = GetTerrainY(hx(i)) + 6
dw kw_aget, arr_hx, var_i, tmp1
dw p_getterrainy_c, tmp1
dw kw_vtov, var_getterrainy_getterrainy, tmp1
dw kw_addl, tmp1, 6, tmp1
dw kw_aset, arr_hy, var_i, tmp1
; Main.bas 297: End If
if32_1:
; Main.bas 298: If Rand(2) Then hdir(i) = 1 Else hdir(i) = -1
dw p_rand_c, lit_2
dw kw_goto_ifzero, var_rand_rand, if33_1
dw kw_asetl, arr_hdir, var_i, 1
dw if33_e_go
if33_1:
dw kw_asetl, arr_hdir, var_i, -1
if33_e:
; Main.bas 299: Next i
dw kw_next1l, var_i, 7, for31_t
for31_e:
; Main.bas 301: For i = 0 To MAX_ENEMIES - 1
dw kw_ztov, var_i
for34_t:
; Main.bas 302: estate(i) = ST_DEAD
dw kw_asetl, arr_estate, var_i, 0
; Main.bas 303: Next i
dw kw_next1l, var_i, 9, for34_t
for34_e:
; Main.bas 305: enemies_to_spawn = 10 + wave * 2
dw kw_2x, var_wave, tmp1
dw kw_addl, tmp1, 10, var_enemies_to_spawn
; Main.bas 306: If enemies_to_spawn > 24 Then enemies_to_spawn = 24
dw kw_scpgtvl, var_enemies_to_spawn, 24
dw kw_goto_iffalse, if35_1
dw kw_ltov, 24, var_enemies_to_spawn
if35_1:
; Main.bas 307: enemies_alive = 0
dw kw_ztov, var_enemies_alive
; Main.bas 308: spawn_timer = 5
dw kw_ltov, 5, var_spawn_timer
; Main.bas 309: waveT = 0 : baiterT = 0
dw kw_ztov, var_wavet
dw kw_ztov, var_baitert
; Main.bas 311: For i = 0 To 4
dw kw_ztov, var_i
for36_t:
; Main.bas 312: SpawnEnemy()
dw p_spawnenemy_c
; Main.bas 313: Next i
dw kw_next1l, var_i, 4, for36_t
for36_e:
; Main.bas 314: UpdateHUD()
dw p_updatehud_c
; Main.bas 315: Message "WAVE" & Str$(wave), 30
dw kw_strstr, stmp1, var_wave
dw kw_strcpy, stmp0, str7
dw kw_strcat, stmp0, stmp1
dw p_message_c, stmp0, lit_30
dw p_initwave_r
; ============================================================
; sub spawnenemy (turbo mode)
; ============================================================
p_spawnenemy:
; Main.bas 319: If enemies_to_spawn <= 0 Then Exit Sub
dw kw_scplevl, var_enemies_to_spawn, 0
dw kw_goto_iffalse, if37_1
dw p_spawnenemy_r
if37_1:
; Main.bas 320: For i = 0 To MAX_ENEMIES - 1
dw kw_ztov, var_i
for38_t:
; Main.bas 321: If estate(i) = ST_DEAD Then
dw kw_aget, arr_estate, var_i, tmp0
dw kw_cpeqvl, tmp0, 0
dw kw_goto_iffalse, if39_1
; Main.bas 322: ex(i) = (px + 250 + Rnd(500)) And WORLD_MASK
dw kw_addl, var_px, 250, tmp1
dw kw_rndl, 500, tmp2
dw kw_add, tmp1, tmp2, tmp1
dw kw_andvl, tmp1, 1023, tmp1
dw kw_aset, arr_ex, var_i, tmp1
; Main.bas 323: ey(i) = 110 + Rnd(30)
dw kw_rndl, 30, tmp2
dw kw_addl, tmp2, 110, tmp1
dw kw_aset, arr_ey, var_i, tmp1
; Main.bas 324: If Rnd(2) = 0 Then evx(i) = 1 Else evx(i) = -1
dw kw_rndl, 2, tmp0
dw kw_cpeqvl, tmp0, 0
dw kw_goto_iffalse, if40_1
dw kw_asetl, arr_evx, var_i, 1
dw if40_e_go
if40_1:
dw kw_asetl, arr_evx, var_i, -1
if40_e:
; Main.bas 325: evy(i) = -1
dw kw_asetl, arr_evy, var_i, -1
; Main.bas 326: If planet_dead Then estate(i) = ST_MUTANT Else estate(i) = ST_WANDER
dw kw_goto_ifzero, var_planet_dead, if41_1
dw kw_asetl, arr_estate, var_i, 4
dw if41_e_go
if41_1:
dw kw_asetl, arr_estate, var_i, 1
if41_e:
; Main.bas 327: etarget(i) = -1
dw kw_asetl, arr_etarget, var_i, -1
; Main.bas 328: enemies_alive = enemies_alive + 1
dw kw_inc, var_enemies_alive
; Main.bas 329: enemies_to_spawn = enemies_to_spawn - 1
dw kw_dec, var_enemies_to_spawn
; Main.bas 330: Exit Sub
dw p_spawnenemy_r
; Main.bas 331: End If
if39_1:
; Main.bas 332: Next i
dw kw_next1l, var_i, 9, for38_t
for38_e:
dw p_spawnenemy_r
; ============================================================
; sub spawnbaiter (turbo mode)
; ============================================================
p_spawnbaiter:
; Main.bas 337: For i = 0 To MAX_ENEMIES - 1
dw kw_ztov, var_i
for42_t:
; Main.bas 338: If estate(i) = ST_DEAD Then
dw kw_aget, arr_estate, var_i, tmp0
dw kw_cpeqvl, tmp0, 0
dw kw_goto_iffalse, if43_1
; Main.bas 339: ex(i) = (px + 300) And WORLD_MASK
dw kw_addl, var_px, 300, tmp1
dw kw_andvl, tmp1, 1023, tmp1
dw kw_aset, arr_ex, var_i, tmp1
; Main.bas 340: ey(i) = py
dw kw_aset, arr_ey, var_i, var_py
; Main.bas 341: estate(i) = ST_BAITER
dw kw_asetl, arr_estate, var_i, 5
; Main.bas 342: evx(i) = 0 : evy(i) = 0
dw kw_asetl, arr_evx, var_i, 0
dw kw_asetl, arr_evy, var_i, 0
; Main.bas 343: etarget(i) = -1
dw kw_asetl, arr_etarget, var_i, -1
; Main.bas 344: Sfx.Play 1, 40, 2, 13, 25, 0
dw p_sfx_play_c, lit_1, lit_40, lit_2, lit_13, lit_25, lit_0
; Main.bas 345: Exit Sub
dw p_spawnbaiter_r
; Main.bas 346: End If
if43_1:
; Main.bas 347: Next i
dw kw_next1l, var_i, 9, for42_t
for42_e:
dw p_spawnbaiter_r