Rollerball (NES)
Rollerball |
---|
Developer: HAL Laboratory
![]() |
Rollerball is a pinball game that was first released on the MSX in 1984.
Contents
Unused Screen Data
The remains of an unused screen are present at the end of the title screen data, below the point where the screen normally stops scrolling. It contains a duplicate copy of the final copyright text, two tiles from the top of the skyscraper (normally rendered as sprites), and unused border tiles on the left and right sides. The tilemap was not updated to match the reorganized CHR data in the international versions, causing the duplicate copyright string to be rendered as gibberish.
Source Code
The Japanese version has a large section of source code left in the ROM, some of which is commented. It covers various elements of the "Sky High" (or "Floor A") screen at the very top of the table, including the bumpers, arrows, and "SHOOT AGAIN" and "ADV. MULT." indicators. (NOTE: The value 0xFE was originally used as a new line character; this has been replaced with a proper new line here for readability.)
At 0x2810:
BLINK_RLOV##
CPX #$FF
BEQ SKYHIGH1
DEC BLINK_COUNT
BNE SKYHIGH1
LDY #30 ;消えている期間の長さ
LDA BLINK_FLAG
EOR #$FF
STA BLINK_FLAG
BEQ SKYHIGH0
LDY #30 ;光っている期間の長さ
SKYHIGH0::
STY BLINK_COUNT
SKYHIGH1::
ldx #7-1
stx @i
1$ ldx @i
CPX BLINK_RLOV##
BNE 2$
LDA BLINK_FLAG
BNE 3$
BEQ 9$
2$ lda skyhigh_stat##,x
; cmp #OFF
beq 9$
3$ ldy skyhigh_dat_y,x
lda skyhigh_dat_x,x
tax
lda #low.skyhigh_obj
sta @arg
lda #high.skyhigh_obj
sta @arg+1
call wobj##
9$ dec @i
bpl 1$
rts
endproc skyhigh
;--------------------------------------
; Data Table for displaying 'SKYHIGH'.
;--------------------------------------
data skyhigh_dat
skyhigh_dat_x::
db 9*8+4,16*8+0,22*8+4,8*8+4,13*8+4,18*8+4,23*8+4
skyhigh_dat_y::
db 12*8+4,11*8+4,12*8+4,19*8+4,16*8+4,16*8+4,19*8+4
enddata skyhigh_dat
data skyhigh_obj
db 1
db -5, $10, %00100010, -4
enddata skyhigh_obj
;・・・・・・・・・
;・A面:バンパー・
;・・・・・・・・・
;
; Screen Address of each Bumper in Floor A
SCRBUMP_S EQU $2000+$20*$B+8 ;What was 'S'
SCRBUMP_K EQU $2000+$20*$A+$E ;What was 'K'
SCRBUMP_Y EQU $2000+$20*$B+$15 ;What was 'Y'
SCRBUMP_H1 EQU $2000+$20*$12+7 ;What was left 'H'
SCRBUMP_I EQU $2000+$20*$F+$C ;What was 'I'
SCRBUMP_G EQU $2000+$20*$F+$11 ;What was 'G'
SCRBUMP_H2 EQU $2000+$20*$12+$16 ;What was right 'H'
;==========================================
; Initialize the workarea for the Bumpers.
;==========================================
proc INIT_BUMPER_A
LDX #7
STX REST_BUMP##
1$ LDA #10
STA BUMPER_STAT##-1,X
LDA #0
STA FLBUMP_CNT-1,X
DEX
BNE 1$
RTS
endproc INIT_BUMPER_A
;============================================
; Device Routine for the Bumpers in Floor A.
;============================================
proc FLASHBUMP_A
assign @I, @W5
JSR CHECK_FLOOR_A
BCC FLBUMP_A_EXIT
LDA @PHASE_A
CMP #PHASE_BUMP0
BEQ 1$
CMP #PHASE_BUMP1
BNE FLBUMP_A_EXIT
1$ LDA #6
STA @I
FLBUMP_A_LP::
LDX @I
LDA FLBUMP_CNT,X
BEQ FLBUMP_A_NXT
DEC FLBUMP_CNT,X
BNE FLBUMP_A_NXT
LDA BUMPE_a
sta @arg
lda #high.arch_data_a
sta @arg+1
ldx #$0E*8
ldy #29*8
call wobj##
9$ rts
endproc arch_a
data arch_data_a
db 4
db -1,$54,%00000000,0
db -1,$64,%00000000,8
db -1,$74,%00000000,16
db -1,$84,%00000000,24
enddata arch_data_a
;
; 変数 openandlocked を状態をみてチェック
;
proc check_openlock
lda
endproc check_openlock
;==================================
; Change the Phase of the Floor A.
;==================================
proc CHANGE_PHASE
LDA CHNGPHASECNT
BEQ 99$
DEC CHNGPHASECNT
BNE 99$
LDA @PHASE_A
CMP #PHASE_RLOV0
BNE 1$
LDA #PHASE_RLOV1
STA @PHASE_A
LDA #$FF
STA BLINK_RLOV## ;Disable the Rollover Blinking
RTS
1$ CMP #PHASE_RLOV1
BNE 2$
;Change Rollovers to Bumpers.
JSR WRITEALLBUMPER
LDA #PHASE_BUMP0
STA @PHASE_A
JSR INIT_BUMPER_A
LDA #BGM_FEVER##
JSR REQBGM## ;
RTS
2$ CMP #PHASE_BUMP0
BNE 3$
LDA #SND_YAKU1##
JSR REQSOUND##
LDA #PHASE_BUMP1
STA @PHASE_A
RTS
3$ CMP #PHASE_BUMP1
BNE 99$
JSR INIT_FLOOR_A1 ;Initialize the Floor A again.
JSR DISPSKYHIGH
lda @bstat+0
beq 4$
lda @bstat+1
beq 4$
lda #BGM_MULTI##
skip2
4$ LDA #BGM_DAY##
JSR REQBGM##
99$ RTS
endproc CHANGE_PHASE
;・・・・・・・・・・・・
;・A面:ロールオーバー・
;・・・・・・・・・・・・
;=====================================
; Initialize the Status of 'SKYHIGH'.
;=====================================
proc init_skyhigh
ldx #7-1
lda #OFF
1$ sta skyhigh_stat##,x
dex
bpl 1$
; JSR DISPSKYHIGH
rts
endproc init_skyhigh
;================================================
; Initialize the workarea for Rollover Blinking.
;================================================
proc init_blink
LDA #0
STA BLINK_FLAG
LDA #30
STA BLINK_COUNT
RTS
endproc init_blink
;=================================
; Display the Rollover 'SKYHIGH'.
;=================================
proc DISPSKYHIGH
JSR WRTVRM##
dw RLOV_S_FIG
JSR WRTVRM##
dw RLOV_K_FIG
JSR WRTVRM##
dw RLOV_Y_FIG
JSR WRTVRM##
dw RLOV_H1_FIG
JSR WRTVRM##
dw RLOV_I_FIG
JSR WRTVRM##
dw RLOV_G_FIG
JSRR_STAT##,X
BEQ FLBUMP_A_NXT
JSR WRITEBUMPER
FLBUMP_A_NXT::
DEC @I
BPL FLBUMP_A_LP
FLBUMP_A_EXIT::
RTS
endproc FLASHBUMP_A
;===================================================================
; Write a Bumper on the Screen.
; Entry - Xreg holds the Number of the Bumper to write(0-6).
;===================================================================
proc WRITEBUMPER
LDA WRTBUMPADRL,X
STA @P1
LDA WRTBUMPADRH,X
STA @P1+1
CPX #1 ;Bumper 'K' ?
BEQ 1$
CPX #3 ;Bumper left 'H' ?
BEQ 2$
CPX #6 ;Bumper right 'H' ?
BEQ 3$
JSR WVRMP1##
DW BUMP_A_FIG0
RTS
1$ JSR WVRMP1##
DW BUMP_A_FIG1
RTS
2$ JSR WVRMP1##
DW BUMP_A_FIG2 ;Left 'H'
RTS
3$ JSR WVRMP1##
DW BUMP_A_FIG3 ;Right 'H'
RTS
endproc WRITEBUMPER
proc WRITEALLBUMPER
assign @i, @w5
LDA #6
STA @I
1$ LDX @I
JSR WRITEBUMPER
DEC @I
BPL 1$
RTS
endproc WRITEALLBUMPER
;===================================================================
; Clear a Bumper on the Screen.
; Entry - Xreg holds the Number of the Bumper to clear(0
At 0x6410:
===============================
proc INIT_S_ARROW
LDA #OFF
STA S_ARROW_FLG
INIT_S_ARROW1::
LDA #10
STA S_ARROW_CNT
RTS
endproc INIT_S_ARROW
;=================================
; Device Routine for Shoot-Arrow.
;=================================
proc SHOOTARROW
JSR CHECK_FLOOR_A ;Current Floor is A ?
BCC SHOOTARW_EXIT
LDA @PHASE_A
CMP #PHASE_RLOV1
BEQ SHOOTARROW1
CMP #PHASE_BUMP1
BEQ SHOOTARROW1
RTS
SHOOTARROW1::
DEC S_ARROW_CNT
BNE SHOOTARROW2
LDA S_ARROW_FLG
EOR #$FF
STA S_ARROW_FLG
JSR INIT_S_ARROW1
SHOOTARROW2::
LDA CHNGPHASECNT ;0以外ならボールは打ち込まれた
BNE SHOOTARW_EXIT
LDA S_ARROW_FLG
CMP #OFF
BEQ SHOOTARW_EXIT
LDA #low.S_ARROWFIG
STA @ARG
LDA #high.S_ARROWFIG
STA @ARG+1
LDX #SHOOTARROW_X
LDY #SHOOTARROW_Y
JSR WOBJ##
SHOOTARW_EXIT::
RTS
endproc SHOOTARROW
data S_ARROWFIG
db 2
db 0,$04,%00000010,0
db 0,$04,%00000010,$4E
enddata S_ARROWFIG
;=========================================================
; Device Routine for the Shoot Again Lump in the Floor A.
;=========================================================
proc DispSHOOTAGAIN_A
LDA EXTRABLKCNT_A
BEQ 99$
DEC EXTRABLKCNT_A
JSR CHECK_FLOOR_A
BCC 99$
LDA EXTRABLKCNT_A
AND #8
Bne 1$
99$ rts
;
1$ lda advmultf
bne 10$
LDA #low. SHOOTAGAINFIG_A ;"shoot again"
STA @ARG
LDA #high.SHOOTAGAINFIG_A
jmp 11$
;
10$ LDA #low. advmultfig_a ;"adv. mult."
STA @ARG
LDA #high.advmultfig_a
11$ STA @ARG+1
LDX #$70
LDY #$A8
jmp WOBJ##
endproc DispSHOOTAGAIN_A
data SHOOTAGAINFIG_A
db 4
db -1,$48,%00000001,0
db -1,$58,%00000001,8
db -1,$E0,%00000001,16
db -1,$F0,%00000001,24
enddata SHOOTAGAINFIG_A
data advmultfig_a
db 5
db -1,$D6,%00000010,-4
db -1,$E6,%00000010,4
db -1,$F6,%00000010,12
db -1,$5A,%00000010,20
db -1,$6A,%00000010,28
enddata advmultfig_a
;**************************************************************************
;使用方法 *
; 花火セットルーチンはセットしたい時に花火onルーチンの前に *
; Aレジに花火の位置ナンバーを入れてコールする *
; 位置は爆発するバンパーに反映するため(0ー6)である *
; 初期かルーチンは1回のみコールすればいい *
; 花火onルーチンは毎回コールする *
; 最大3発まで表示できて7発までバッファ(スタック)にためられる *
;**************************************************************************
;************************
;マクロ命令の定義 *
;************************
upx macro jj
inx
cpx #jj+1
bcc $+4
ldx #0
endm
upy macro jj
iny
cpy #jj+1
bcc $+4
ldy #0
endm
;************************
;************
;花火の初期化
;************
hanabi_ini:: ;7バイト(haxybf)のバッファに$80を入れて
;hanapotとhanspotをクリアーする
ldx #0
lda #$80
100$ sta haxybf,x
inx
cpx #7
bne 100$
lda #0
sta hanapot
sta hanspot
sta hana_stat
rts
;************************
;表示する花火をセットする
;************************
hanabi_set::
ldx hanspot
sta haxybf,x
lda #0
sta hanobf,x
upx 6
stx hanspot
rts
;**************
;花火を表示する
;**************
hanabi_on::
dw $2000+$20*$18+$1C
db 2,2
db $34,$01,$0C,$1C
enddata CLOSEGATEFIG_A
;・・・・・・・・
;・A面:ポスト・
;・・・・・・・・
;=============================
; Initialize the Saving Post.
;=============================
proc INIT_POST
LDA #0
STA POST_CNT
RTS
endproc INIT_POST
;==========================================================
; Device Routine for the Saving Post.
; (Called not in dev_a but col_post and col_target0)
;==========================================================
proc WRTPOST
WRTPOST_OFF::
JSR WRTVRM##
DW CLRPOSTFIG
RTS
WRTPOST_ON1::
JSR WRTVRM##
DW WRTPOSTFIG1
RTS
WRTPOST_ON2::
JSR WRTVRM##
DW WRTPOSTFIG2
RTS
endproc WRTPOST
;----------------------------------------------
; BG data for the Saving Post in the Floor A.
;----------------------------------------------
data CLRPOSTFIG
DW $2000+$20*$12+2
DB 2,2
DB $11,$10
DB $11,$22
enddata CLRPOSTFIG
data CLRPOSTATR
DW $23C0+32
DB 1,1
DB %11001000
enddata CLRPOSTATR
data WRTPOSTFIG2
DW $2000+$20*$12+2
DB 2,2
DB $CF,$DF
DB $D5,$E5
enddata WRTPOSTFIG2
data WRTPOSTFIG1
DW $2000+$20*$12+2
DB 2,2
DB $DB,$EB
DB $D5,$E5
enddata WRTPOSTFIG1
data WRTPOSTATR1
DW $23C0+32
DB 1,1
DB %11001000
enddata WRTPOSTATR1
data WRTPOSTATR2
DW $23C0+32
DB 1,1
DB %11001000
enddata WRTPOSTATR2
;・・・・・・・・・・・・
;・A面:・Lock・表示・
;・・・・・・・・・・・・
LOCKARROW_X EQU $C8 ;The Position of the Arrow in the Screen.
LOCKARROW_Y EQU $79
;====================================================
; Initialize the Workarea for Displaying Lock-Arrow.
;====================================================
proc INIT_L_ARROW
LDA #ON
STA L_ARROW_FLG
INIT_L_ARROW1::
LDA #10
STA L_ARROW_CNT
RTS
endproc INIT_L_ARROW
;================================
; Device Routine for Lock-Arrow.
;================================
proc LOCKARROW
JSR CHECK_FLOOR_A ;Current Floor is A ?
BCC LOCKARW_EXIT
LDA @PHASE_A
CMP #PHASE_RLOV0
BEQ LOCKARROW1
CMP #PHASE_RLOV1
BEQ LOCKARROW1
RTS
LOCKARROW1
At 0xA010 and 0x14010:
echo off
if not exist %1\nx298.86 goto error4
cd %1
init s=72 f=%1\nx298.86 hi=0
if errorlevel 1 goto error2
isloaded
if errorlevel 1 goto error1
driver
:lab1
if not exist %1\net goto error5
drcntl -r
if errorlevel 1 goto error6
netload -p 2 -t 0 %1\net
if errorlevel 1 goto error3
echo EXOS :TCP/IP Up and Running:Release 3.2.3
echo EXOS :Excelan (C) 1985, 1986
goto ok
:error1
echo EXOS 8098: Driver がすでにロードされていますので,
echo EXOS 8098: 再ロードは行いません.
goto lab1
:error2
echo EXOS 8098: INIT に失敗しました. コンフィギュレーションファイルと
echo EXOS 8098: ボードの設定を確認してください.
goto notok
:error3
echo EXOS 8098: NETLOAD に失敗しました. "トラブルシューティング"
echo EXOS 8098: のセクションを参照してください
goto notok
:error6
echo EXOS 8098: DRCNTL に失敗しました. "トラブルシューティング"
echo EXOS 8098: のセクションを参照してください
goto notok
:error4
echo EXOS 8098: %1 に NX298.86 がありません !!!
goto notok
:error5
echo EXOS 8098: %1 に NET がありません !!!
:ok
:notok
cd \
Regional Differences
Title Screen
Japan | US/Australia |
---|---|
![]() |
![]() |
The title logo was modified to separate "Roller" and "Ball" into two words, and the capital "R" was made smaller. The scrolling text at the bottom of the screen was also changed to fix some grammatical errors.
Japan |
---|
WELCOME TO ROLLERBALL MAKE YOU FEEL EXCITED AND AMUSED WITH THIS SUPER REAL PINBALL GAME |
US |
WELCOME TO ROLLER BALL THE SUPER PINBALL GAME THAT WILL EXCITE AND AMUSE YOU |
Skyscraper
On the main pinball table, all instances of the "HAL" name were changed to "HAI" (HAL America, Inc.) for the US release.
Match Play
Japan | US/Australia |
---|---|
![]() |
![]() |
In the versus mode, the options for initial starting points for both players were reduced.
Japan | US/Australia |
---|---|
![]() |
![]() |
Player 2's avatar was changed from a giraffe to a donkey, likely to make the two characters a reference to the Republican and Democratic US political parties, respectively.
- Pages missing developer references
- Games developed by HAL Laboratory
- Pages missing publisher references
- Games published by HAL Laboratory
- Games published by HAL America
- NES games
- Pages missing date references
- Games released in 1988
- Games released in December
- Games released on December 12
- Games with uncompiled source code
- Games with unused graphics
- Games with regional differences
- Pages with a Data Crystal link
Cleanup > Pages missing date references
Cleanup > Pages missing developer references
Cleanup > Pages missing publisher references
Games > Games by content > Games with regional differences
Games > Games by content > Games with uncompiled source code
Games > Games by content > Games with unused graphics
Games > Games by content > Pages with a Data Crystal link
Games > Games by developer > Games developed by HAL Laboratory
Games > Games by platform
Games > Games by publisher > Games published by HAL Laboratory
Games > Games by publisher > Games published by HAL Laboratory > Games published by HAL America
Games > Games by release date > Games released in 1988
Games > Games by release date > Games released in December
Games > Games by release date > Games released in December > Games released on December 12
The Cutting Room Floor > Unimportant Awards > NES games