the cutting room mirror

Rise of the Robots (SNES)

This article has a talk page!
view on tcrf.net

This page details one or more prototype versions of Rise of the Robots (SNES).

This prototype is documented on Hidden Palace.

A prototype of the Japanese version has been released into the wild and contains additional source code not present in the European version.

General Differences#

  • AI is set to its hardest level, no matter what difficulty option is selected. This makes it hard to progress through the game.

Text Differences#

  • The prototype has the text "JAMES (J) 1994 RISE OF THE ROBOTS", which is not in the final version.

Visual Differences#

  • Only the Mirage logo is shown when booting up the game, and even that is missing "Created and Designed by" and the trademark.
  • The player robot character on the title screen has the hip glitched.
  • The opening and ending cinematics are not present. The robot analysis and arrival cinematics take place on the main menu rather than on unique screens.
  • Health bars are split into sections.

Proto

Final

Unlike the final version, the title screen image is static.

Proto

Final

The results graphics are more arcade game-like than the final version, which combines the results into one monitor.

Uncompiled Source Code#

0x578A:

lr_pal incbin data\dat_back\finalr.pal

final   incbin data\dat_back\finala.dat
final_pal incbin data\dat_back\finala.pal

round1  incbin data\dat_bso

0x61F0:

5
ds_sp_074   incbin  data\dat_back\ds_sp074.dat  ;1550
ds_jp_023   incbin  data\dat_back\ds_jp023.dat  ;2779
ds_ml_003   incbin  data\dat_back\ds_ml003.dat  ;3001
ds_ml_004   incbin  data\dat_back\ds_ml004.dat  ;2871
ds_ml_005   incbin  data\dat_back\ds_ml005.dat  ;2959
ds_ml_006   incbin  data\dat_back\ds_ml006.dat  ;2891
ds_ml_007   incbin  data\dat_back\ds_ml007.dat  ;2873
ds_ml_008   incbin  data\dat_back\ds_ml008.dat  ;2796
ds_ml_009   incbin  data\dat_back\ds_ml009.dat  ;2852
ds_ml_010   incbin  data\dat_back\ds_ml010.dat  ;2804
ds_ml_011   incbin  data\dat_back\ds_ml011.dat  ;2808
ds_cb_004   incbin  data\dat_back\ds_cb004.dat  ;2767
ds_cb_005   incbin  data\dat_back\ds_cb005.dat  ;2857
ds_cb_012   incbin  data\dat_back\ds_cb012.dat  ;2943
ds_cb_015   incbin  data\dat_back\ds_cb015.dat  ;3127
ds_cb_016   incbin  data\dat_back\ds_cb016.dat  ;3129
ds_cb_017   incbin  data\dat_back\ds_cb017.dat  ;3033
ds_cb_018   incbin  data\dat_back\ds_cb018.dat  ;3012
ds_cb_021   incbin  data\dat_back\ds_cb021.dat  ;2801

    SECTION m59,m_59  ;65479

ds_sp_013   incbin  data\dat_back\ds_sp013.dat  ;2685
ds_sp_034   incbin  data\dat_back\ds_sp034.dat  ;2727
ds_sp_036   incbin  data\dat_back\ds_sp036.dat  ;2620
ds_sp_037   incbin  data\dat_back\ds_sp037.dat  ;2624
ds_sp_039   incbin  data\dat_back\ds_sp039.dat  ;2318
ds_sp_042   incbin  data\dat_back\ds_sp042.dat  ;2207
ds_ld_010   incbin  data\dat_back\ds_ld010.dat  ;144
ds_ml_012   incbin  data\dat_back\ds_ml012.dat  ;2765
ds_ml_013   incbin  data\dat_back\ds_ml013.dat  ;2720
ds_ml_014   incbin  data\dat_back\ds_ml014.dat  ;2746
ds_ml_015   incbin  data\dat_back\ds_ml015.dat  ;2682
ds_ml_016   incbin  data\dat_back\ds_ml016.dat  ;2696
ds_ml_017   incbin  data\dat_back\ds_ml017.dat  ;2621
ds_ml_018   incbin  data\dat_back\ds_ml018.dat  ;2622
ds_ml_019   incbin  data\dat_back\ds_ml019.dat  ;2617
ds_ml_020   incbin  data\dat_back\ds_ml020.dat  ;2754
ds_cb_002   incbin  data\dat_back\ds_cb002.dat  ;2643
ds_cb_003   incbin  data\dat_back\ds_cb003.dat  ;2696
ds_cb_006   incbin  data\dat_back\ds_cb006.dat  ;2419
ds_cb_007   incbin  data\dat_back\ds_cb007.dat  ;2741
ds_cb_008   incbin  data\dat_back\ds_cb008.dat  ;2604
ds_cb_009   incbin  data\dat_back\ds_cb009.dat  ;2643
ds_cb_010   incbin  data\dat_back\ds_cb010.dat  ;2694
ds_cb_011   incbin  data\dat_back\ds_cb011.dat  ;2186
ds_cb_013   incbin  data\dat_back\ds_cb013.dat  ;2651
ds_cb_020   incbin  data\dat_back\ds_cb020.dat  ;2654

    SECTION m60,m_60  ;65528

ds_sp_012   incbin  data\dat_back\ds_sp012.dat  ;2163
ds_sp_040   incbin  data\dat_back\ds_sp040.dat  ;2125
ds_sp_041   incbin  data\dat_back\ds_sp041.dat  ;2113
ds_sp_043   incbin  data\dat_back\ds_sp043.dat  ;2165
ds_sp_044   incbin  data\dat_back\ds_sp044.dat  ;2023
ds_sp_045   incbin  data\dat_back\ds_sp045.dat  ;2088
ds_sp_046   incbin  data\dat_back\ds_sp046.dat  ;2065
ds_sp_047   incbin  data\dat_back\ds_sp047.dat  ;2006
ds_sp_048   incbin  data\dat_back\ds_sp048.dat  ;1975
ds_sp_049   incbin  data\dat_back\ds_sp049.dat  ;2001
ds_sp_050   incbin  data\dat_back\ds_sp050.dat  ;1966
ds_sp_051   incbin  data\dat_back\ds_sp051.dat  ;2055
ds_sp_052   incbin  data\dat_back\ds_sp052.dat  ;1930
ds_sp_053   incbin  data\dat_back\ds_sp053.dat  ;1865
ds_sp_054   incbin  data\dat_back\ds_sp054.dat  ;1906
ds_sp_055   incbin  data\dat_back\ds_sp055.dat  ;1876
ds_sp_056   incbin  data\dat_back\ds_sp056.dat  ;1872
ds_sp_057   incbin  data\dat_back\ds_sp057.dat  ;1749
ds_sp_058   incbin  data\dat_back\ds_sp058.dat  ;1817
ds_sp_059   incbin  data\dat_back\ds_sp059.dat  ;1727
ds_sp_060   incbin  data\dat_back\ds_sp060.dat  ;1796
ds_sp_061   incbin  data\dat_back\ds_sp061.dat  ;1781
ds_sp_063   incbin  data\dat_back\ds_sp063.dat  ;1737
ds_sp_064   incbin  data\dat_back\ds_sp064.dat  ;1799
ds_sp_065   incbin  data\dat_back\ds_sp065.dat  ;1766
ds_sp_066   incbin  data\dat_back\ds_sp066.dat  ;1735
ds_sp_067   incbin  data\dat_back\ds_sp067.dat  ;1696
ds_sp_068   incbin  data\dat_back\ds_sp068.dat  ;1754
ds_sp_070   incbin  data\dat_back\ds_sp070.dat  ;1620
ds_ld_002   incbin  data\dat_back\ds_ld002.dat  ;1768
ds_ld_003   incbin  data\dat_back\ds_ld003.dat  ;1648
ds_ld_006   incbin  data\dat_back\ds_ld006.dat  ;1670
ds_ld_007   incbin  data\dat_back\ds_ld007.dat  ;1731
ds_cr_004   incbin  data\dat_back\ds_cr004.dat  ;886
ds_cr_007   incbin  data\dat_back\ds_cr007.dat  ;531
ds_cb_019   incbin  data\dat_back\ds_cb019.dat  ;2123

    SECTION m61,m_61  ;33144

ds_cb_mc    include data\dat_back\ds_cb.mac  ;791
ds_ld_mc    include data\dat_back\ds_ld.mac  ;506
ds_ap_mc    include data\dat_back\ds_ap.mac  ;411
ds_cr_mc    include data\dat_back\ds_cr.mac  ;525
ds_ml_mc    include data\dat_back\ds_ml.mac  ;392
ds_jp_mc    include data\dat_back\ds_jp.mac  ;449
ds_sp_mc    include data\dat_back\ds_sp.mac  ;1494
ds_sp_069   incbin  data\dat_back\ds_sp069.dat  ;1595
ds_sp_071   incbin  data\dat_back\ds_sp071.dat  ;1525
ds_sp_072   incbin  data\dat_back\ds_sp072.dat  ;1596
ds_sp_073   incbin  data\dat_back\ds_sp073.dat  ;1472
ds_sp_075   incbin  data\dat_back\ds_sp075.dat  ;1546
ds_sp_076   incbin  data\dat_back\ds_sp076.dat  ;1532
ds_sp_077   incbin  data\dat_back\ds_sp077.dat  ;1521
ds_sp_078   incbin  data\dat_back\ds_sp078.dat  ;1440
ds_ld_005   incbin  data\dat_back\ds_ld005.dat  ;1510
ds_ld_008   incbin  data\dat_back\ds_ld008.dat  ;220
ds_ld_011   incbin  data\dat_back\ds_ld011.dat  ;226
ds_ld_012   incbin  data\dat_back\ds_ld012.dat  ;303
ds_ld_013   incbin  data\dat_back\ds_ld013.dat  ;309
ds_ld_014   incbin  data\dat_back\ds_ld014.dat  ;343
ds_ld_015   incbin  data\dat_back\ds_ld015.dat  ;442
ds_ld_017   incbin  data\dat_back\ds_ld017.dat  ;564
ds_ld_018   incbin  data\dat_back\ds_ld018.dat  ;440
ds_ld_019   incbin  data\dat_back\ds_ld019.dat  ;472
ds_ld_020   incbin  data\dat_back\ds_ld020.dat  ;457
ds_ld_021   incbin  data\dat_back\ds_ld021.dat  ;339
ds_ld_022   incbin  data\dat_back\ds_ld022.dat  ;345
ds_ld_023   incbin  data\dat_back\ds_ld023.dat  ;340
ds_ld_024   incbin  data\dat_back\ds_ld024.dat  ;316
ds_ld_025   incbin  data\dat_back\ds_ld025.dat  ;219
ds_cr_002   incbin  data\dat_back\ds_cr002.dat  ;850
ds_cr_005   incbin  data\dat_back\ds_cr005.dat  ;859
ds_cr_008   incbin  data\dat_back\ds_cr008.dat  ;490
ds_cr_009   incbin  data\dat_back\ds_cr009.dat  ;492
ds_cr_010   incbin  data\dat_back\ds_cr010.dat  ;458
ds_cr_011   incb

0xF400:

                            1sc
        lda #(sc_2n_scrn/2)>>8
        sta w_bg2sc
        stz w_bg1hofs
        stz w_bg1hofs   ;two writes required/upper byte zero
        lda #3      ;sc1 (256 color) , sc2 (16 color)
        sta w_bgmode
        lda #bg12nme    ;effective global nme offset for each sc
        sta w_bg12nba   ;
        lda #$13
        sta |w_tm
        lda #$01
        sta |w_ts
        lda #%01010010
        sta |w_cgadsub
        lda #$02
        sta |w_cgswsel
        lda #-1
        sta |w_bg1vofs
        lda #0
        sta |w_bg1vofs

        lda #-1
        sta |w_bg2vofs
        lda #0
        sta |w_bg2vofs

        a16
        rts

init_vars:
        stz |time_count
        stz |spr_blit_flag
        stz |playback
        stz |play_mode  ;return from demo to play a game
        stz |stop
        stz |spr_frame
        stz |sjoy0
        stz |ljoy0
        stz |sjoy1
        stz |ljoy1
        stz |overflow
        stz |game_over
        stz |v_offset
        lda #0
        sta scroll_h

        stz bout_number
        stz num_frames

        stz nrg_dsp_flg
        stz nrg_dsp_flg+2

        stz message_1+ms_ptr
        stz message_1+ms_cnt
        lda #mess_init_spd
        sta message_1+ms_tim
        stz message_1+ms_delcount

        stz message_2+ms_ptr
        stz message_2+ms_cnt
        lda #mess_init_spd
        sta message_2+ms_tim
        stz message_2+ms_delcount

        lda #mess_cue_1
        sta message_1+ms_cue_head
        sta message_1+ms_cue_tail

        lda #mess_cue_2
        sta message_2+ms_cue_head
        sta message_2+ms_cue_tail

        if  en_inimess
;       lda #mess1
;       jsr message1
        lda robot_opponent
        asl
        tax
;       lda >ms_tbl,x
;       jsr message2
        endif


        ldy #(no_shards*shard_parm_size)/2
        ldx #shard_buff
        lda #0
!lp:        sta 0,x
        inx
        inx
        dey
        bne !lp

        stz rest        
        rts


message1    phx
        ldx message_1+ms_cue_tail
        sta 0,x
        inx
        inx
        cpx #mess_cue_1+mess_cue_len
        bne !ok1
        ldx #mess_cue_1
!ok1        stx message_1+ms_cue_tail
        plx
        stz robot_1+robot_state
        rts

message2    phx
        ldx message_2+ms_cue_tail
        sta 0,x
        inx
        inx
        cpx #mess_cue_2+mess_cue_len
        bne !ok2
        ldx #mess_cue_2
!ok2        stx message_2+ms_cue_tail
        plx
        stz robot_2+robot_state
        rts



tog_spr_bank:
        lda #fsn
        sta |sprite_bank
        rts

        lda |sprite_bank
        cmp #fsn
        beq !bnk0
        lda #fsn
!cont:
        clc
        adc #$08
        and #$f0
        sta |sprite_bank
        rts
!bnk0:
        lda #127    ;|dec_start
        sec
        sbc #10
        clc
        adc #fsn
        lsr
        bra !cont


csp:
        ldx |time_count
        cpx #-1
        beq !nit
        inx
!nit:       stx |time_count
        cpx #4
        bcc !exit


        lda #robot_sp
        sta sprite_number

        if  en_sp1

        lea robot1_sprite,<a0
        ldx #robot_1_sc
        jsr cn_spr

        endif

        if  en_sp2

        lea robot2_sprite,<a0
        ldx #robot_2_sc
        jsr cn_spr

        endif

0x29F16B:

                        a1      ; <d4+2 - xOfs
        and #$ff
        eor #-1
        sec         ; inc a : clc
        adc <d4
        a08
        sta sprite_buffer,x
        xba
        beq !no_x
        a16
        lda >spt,x
        tay
        a08
        lda >spt+2,x
        ora 0,y
        sta 0,y
!no_x:
        lda [a1]
        clc
        adc <d5
        sta sprite_buffer+1,x
        a16
        lda <d3
        inc a
        inc a
        bit #$0010
        beq !not_adjust
        clc
        adc #$0010
!not_adjust:
        sta <d3
        inc <a1
        inx
        inx
        inx
        inx
        dec <d0
        bne !loop
!exit:
        rts


;###############################################################################
sh_spr:
        sty <a0
        stz <a0+2
        sta <d6

        lda spr_mult_disp,y
        bne !exit
        stx <d3
        lda sprite_number
        asl a
        asl a
        tax
        lda spr_mult_add,y
        sta <a1
        lda spr_mult_add+2,y
        sta <a1+2
        lda spr_mult_x,y
        clc
        adc scroll_h
        sta <d4
        lda [a1]        ; # of sprites
        sta <d0
        clc
        adc sprite_number
        sta sprite_number
        lda <a1
        clc
        adc #spr_off
        sta <a1
        lda >shadow_floor
        sec
        sbc v_offset
        adc <d5
        sta <d5
        lda spr_mult_height,y
        dec a
        asl a
        asl a
        asl a
        clc
        adc <d5
        sta <d5
        lda spr_mult_xflip,y
        bit #1<<6
        beq sh_spr_forwards
        jmp sh_spr_back
!exit:
        rts

sh_spr_forwards:
!loop:
        cpx #128*4      ;point to x,y etc
        bcs !exit
        a08
        lda <d3
        sta sprite_buffer+2,x
        lda <d3+1       ;now high + vflip/hflip/priority/color
        and #1
        ora #%10110000
        ora <d6
        sta sprite_buffer+3,x
        a16         ; set up x
        inc <a1
        lda [a1]
        inc <a1
        and #$ff
        clc
        adc <d4
        a08
        sta sprite_buffer,x
        xba
        beq !no_x
        a16
        lda >spt,x
        tay
        a08
        lda >spt+2,x
        ora 0,y
        sta 0,y
!no_x:
        a16
        lda [a1]
        and #$ff
        lsr a
        eor #-1
        sec         ; inc a : clc
        adc <d5
        cmp #230
        bcs !skip
        a08
        sta sprite_buffer+1,x
        a16
        inx
        inx
        inx
        inx
!skip:
        inc <a1
        lda <d3
        inc a
        inc a
        bit #$0010
        beq !not_adjust
        clc
        adc #$0010
!not_adjust:
        sta <d3
        dec <d0
        bne !loop
!exit:
        rts


sh_spr_back:
        lda spr_mult_width,y    ; adjust x position
        dec a
        asl a
        asl a
        asl a
        asl a
        clc
        adc <d4
        sta <d4
!loop:
        cpx #128*4      ;point to x,y etc
        bcs !exit
        a08
        lda <d3
        sta sprite_buffer+2,x
        lda <d3+1       ;now high + vflip/hflip/priority/color
        and #1
        ora #%11110000
        ora <d6
        sta sprite_buffer+3,x
        a16         ; set up x
        inc <a1
        lda [a1]
        inc <a1
        and #$ff
        eor #-1
        sec         ; inc a : clc
        adc <d4
        a08
        sta sprite_buffer,x
        xba
        beq !no_x
        a16
        lda >spt,x
        tay
        a08
        lda >spt+2,x
        ora 0,y
        sta 0,y
!no_x:
        a16
        lda [a1]
        and #$ff
        lsr a
        eor #-1
        sec         ; inc a : clc
        adc <d5
        cmp #230
        bcs !skip
        a08
        sta sprite_buffer+1,x
        a16
        inx
        inx
        inx
        inx
!skip:
        a16
        inc <a1
        lda <d3
        inc a
        inc a
        bit #$0010
        beq !not_adjust
        clc
        adc #$0010
!not_adjust:
        sta <d3
        dec <d0
        bne !loop
!exit:
        rts



        endif


********************************************************
*   enable the NMI interrupts       *
********************************************************
v_blank_on  a08
        lda #%10000001
        sta |w_nmitimen
        a16
        rts



vbl_vect_off:
        sei
        cli
        rts


update_frame:
        lda |frame_blit_frm
        sta |frame_blit_frm+2
        lda |frame_blit_size
        cmp |frame_blit_size+2
        bcc !nok
        sta |frame_blit_size+2
        lda |frame_blit_count
        sta |frame_blit_count+2
!nok:       rts


zero_frame: lda #0
        sta |frame_blit_size
        sta |frame_blit_count
        sta |frame_blit_frm
        rts

vbl_vect_on:
        sei
        ldx #0
        txa
!1:
        sta |dma_tab+log_lenth,x
        inx
        inx
        cpx #max_dma_logs*log_blk_size
        bcc !1

        stz |log_offset_in
        stz |log_offset_out

        cli
        rts



process_nmi:

(Source: evilhamwizard)