wormy 0.925.1225: new menu
authorMischa Poslawsky <wormy@shiar.org>
Sun, 25 Feb 2001 00:39:12 +0000 (01:39 +0100)
committerMischa Poslawsky <wormy@shiar.org>
Sun, 22 Feb 2009 15:41:55 +0000 (16:41 +0100)
- menu completely redone, so it is much easier to use and more pretty
  - current selection is inverted instead of marked with *

title.bmp [deleted file]
title.gif [new file with mode: 0644]
wormy.z80

diff --git a/title.bmp b/title.bmp
deleted file mode 100644 (file)
index 62fd899..0000000
Binary files a/title.bmp and /dev/null differ
diff --git a/title.gif b/title.gif
new file mode 100644 (file)
index 0000000..b07abb2
Binary files /dev/null and b/title.gif differ
index 386a5bcbd32a1b630ee7c134ebea9a5790023edb..22711b9a9c9cb7a2e239815d967fc04d5499d7a0 100644 (file)
--- a/wormy.z80
+++ b/wormy.z80
@@ -1,6 +1,6 @@
 ; Title                      : Wormy
-; Version                    : 92%
-; Release Date               : june 2000
+; Version                    : 92.5%
+; Release Date               : february 2001
 ; Filename                   : wormy.86p (5kb)
 ; Author(s)                  : Shiar
 ; Email Address              : shiar0@hotmail.com
 
 ; 92% = DONE
 
-;     * customizable keys
+;     * implement circle-routine!
+;  1% * customizable keys
 ;     * internal levels
 ;       * check levels/gametype
 ;       * enough hiscore saves!
 ;     * complete readme
-;  2% * misc (pollish, bugs, &&&)
+;  1% * misc (pollish, bugs, &&&)
 ;   * LINK
 ;  2% * fix deaths linkplay and transmit game/level data
 ;  2% * make linkplay available for all gametypes (not just deathmatch)
@@ -131,11 +132,11 @@ start:
   nop
   jp Start
   .dw 1
-  .dw WormMsg
+  .dw WormTxt
   .dw WormIcon
 
-WormMsg:
-  .db "WORMY by SHIAR -- alpha 92%",0
+WormTxt:
+  .db "WORMY by SHIAR -- alpha 92.5%",0
 WormIcon:
   .db 9,2
   .db %10010110,%01101111
@@ -398,12 +399,7 @@ NegativeSineWave:
 ;---------- menu -------------
 ;-----------------------------
 
-  ld  a,1
-  ld  (curlevel),a
-
-;--- draw menu ---
-
-DisplayMenu:
+DisplayMenu: ;---draw menu---
   cal _clrWindow
   ld  de,$FC42 ;(10,2)
   ld  hl,wtPicture
@@ -417,42 +413,39 @@ disptitleloop:
   ex  de,hl
   dec a
   jr  nz,disptitleloop
+
   ld  hl,txtMenu
-  ld  de,$0D5A
+  ld  ix,posMenu
+  ld  b,5
+dispmenuloop:
+  ld  d,(ix)
+  inc ix
+  ld  e,(ix)
+  inc ix
   ld  (_penCol),de
-  cal _vputs ;by Shiar
+  cal _vputs ;by Shiar \ Mode \ Level \ Limit \ Worms
+  dnz dispmenuloop
 
-  ld  de,$0207
-  ld  (_curRow),de
-  cal _puts ;Level <00>
-  dec e ;$0206
-  ld  (_curRow),de
-  cal _puts ;Limit <00>
-  dec e ;$0205
-  ld  (_curRow),de
-  cal _puts ;Worms <2>
-  dec e ;$0204
-  ld  (_curRow),de
-  ld  hl,(CURtxtGame)
-  cal _puts ;Singleplayer
-
-  xor a
-  cal menudraw
-  jr  howmanyworms
+  ld  b,0 ;b=menu#
+  jr  setgame ;> dispmenusets > mainMenu
 
 ;--- menu loop ---
 
 mainMenu:
+  cal menupos
   cal menucall
   jr  nz,notselect
 select:   ;2nd/enter
   ld  a,b
-  dec a   ;2nd item
+  dec a ;2nd item?
   jp  z,changeworms
   jp  LetsGetThisPartyOn ;1/3/4
 notselect
   cp  K_EXIT
   jp  z,ExitNoStats
+  psh af
+  cal menupos
+  pop af
   cp  K_LEFT
   jr  z,selleft
   cp  K_RIGHT
@@ -463,141 +456,168 @@ selright:
   or  a
   jr  z,changegame
   dec a
-  jr  z,changenrworms
+  jr  z,changelevel
   dec a
-  jp  z,changelives
+  jr  z,changelives
+; dec a
+; jr  z,changenrworms
 
-changelevel:
-  ld  hl,Gametype
-  ld  d,0
-  ld  e,(hl)
-  ld  hl,nrlevels
-  add hl,de
-  ld  d,(hl) ;max level for sel.game
-curlevel =$+1
-  ld  a,1
+changenrworms:
+  ld  a,(Gametype)
+  cp  2
+  jr  c,mainMenu ;type 0/1
+  ld  hl,nrworms
+  ld  a,(hl)
   inc a
-  cp  d
-  jr  c,changedlevel
-  ld  a,d
-changedlevel:
-  ld  (curlevel),a
-_dispcurlevel:
-  ld  hl,$0807
-  ld  (_curRow),hl
-  cal showA
-  jp  displives ;mainMenu
+  cp  5
+  jr  nc,mainMenu ;may not be >4
+changednrworms:
+  ld  (hl),a
+  jr  dispmenusets ;mainMenu
+
 
 selleft:
   ld  a,b
+  or  a
+  jr  z,bchangegame
   dec a
-  jr  z,bchangenrworms
-  dec a
-  jp  z,bchangelives
+  jr  z,bchangelevel
   dec a
-  jr  nz,mainMenu
+  jr  z,bchangelives
+; dec a
+; jr  z,bchangenrworms
 
-bchangelevel:
-  ld  a,(curlevel)
-  dec a
-  jr  nz,changedlevel
+bchangenrworms:
+  ld  hl,nrworms
+  ld  a,(hl)
+  dec a ;0-3
+  jr  nz,changednrworms ;save >0
 _mainMenu:
   jr  mainMenu
 
 changegame:
-  ld  a,1
-  ld  (curlevel),a
   ld  a,0
 Gametype =$-1
-  ld  hl,txtGame2
-NEXTtxtGame =$-2
   inc a
+changedgame:
   and 7 ;mod 8
-  jr  nz,okilydokily
-  ld  hl,txtGame
-okilydokily:
   ld  (Gametype),a
-  ld  de,$0204
-  ld  (_curRow),de
-  ld  (CURtxtGame),hl
-  cal _puts
-  ld  (NEXTtxtGame),hl
-howmanyworms:
-  ld  hl,nrworms
+setgame:
+  ld  a,1
+  ld  (curlevel),a ;reset level#
+  ld  hl,nrworms ;reset #worms
   ld  a,(Gametype)
   cp  2
   ld  (hl),1
-  jr  c,dispnrworms
+  jr  c,dispmenusets ;<2=singleplayer
   inc (hl) ;2
-  jr  dispnrworms ;mainMenu
-
-changenrworms:
+  jr  dispmenusets ;mainMenu
+bchangegame:
   ld  a,(Gametype)
-  cp  2 ;&&
-  jr  c,_mainMenu ;type 0/1
-
-  ld  hl,nrworms
-  ld  a,(hl)
-  inc a
-  cp  5
-  jr  nc,dispcurlevel
-changednrworms:
-  ld  (hl),a
-dispnrworms:
-  ld  a,(hl) ;hl=nrworms
-  ld  hl,$0805
-  ld  (_curRow),hl
-  add a,'0'
-  cal _putc
-dispcurlevel:
-  ld  a,(curlevel)
-  jr  _dispcurlevel ;mainMenu
-
-bchangenrworms:
-  ld  hl,nrworms
-  ld  a,(hl)
-  dec a ;1-3
-  jr  nz,changednrworms
-  jr  dispcurlevel
-
+  dec a
+  jr  changedgame
 
 changelives:
   cal changelivesInit
   inc a
   cp  100
-  jr  nc,displives
+  jr  nc,mainMenu
 changedlives:
   ld  (hl),a
-displives:
-  cal loadgamecar
-  ld  hl,$0806
-  ld  (_curRow),hl
-  cal showA ;liveslimit
-  sub '0' ;original A
-  ld  l,a
-  ld  a,c
-  and _datascore
-  ld  a,' '
-  jr  z,limitok
-  ld  a,'0'
-limitok:
-  cal _putc ;x10
-  jp  mainMenu
+  jr  dispmenusets ;mainMenu
 bchangelives:
   cal changelivesInit
   dec a
-  jr  z,displives
+  jr  z,_mainMenu
   jr  changedlives
-
 changelivesInit:
-  cal loadgamecar  ;c=(gameCar)
+  cal loadgamecar ;c=(gameCar)
 ;a=(hl)=(Gametype+1)=(wormbeglives)
   ld  a,(Gametype) ;&&&
   cp  3
   ld  a,(hl)
-  ret nc           ;change lives
-  pop hl           ;restore stack
-  jr  displives
+  ret nc ;change lives
+  pop hl ;restore stack
+  jr  _mainMenu ;singleplayer (no limit)
+
+changelevel:
+  ld  hl,Gametype
+  ld  d,0
+  ld  e,(hl)
+  ld  hl,nrlevels
+  add hl,de
+  ld  d,(hl) ;max level for sel.game
+curlevel =$+1
+  ld  a,1
+  cp  d
+  jr  z,_mainMenu
+  inc a
+changedlevel:
+  ld  (curlevel),a
+  jr  dispmenusets ;mainMenu
+bchangelevel:
+  ld  a,(curlevel)
+  dec a
+  jr  nz,changedlevel
+__mainMenu:
+  jr  _mainMenu
+
+;---display current settings---
+
+dispmenusets:
+  ld  hl,$FD95
+  ld  de,5
+  ld  a,23
+clroldsettings:
+  ld  c,11
+clroldsetsloop:
+  ld  (hl),d ;=0
+  inc hl
+  dec c
+  jr  nz,clroldsetsloop
+  add hl,de
+  dec a
+  jr  nz,clroldsettings
+
+  ld  de,$182E
+  ld  (_penCol),de
+  ld  d,0
+  ld  a,(Gametype)
+  ld  e,a
+  ld  hl,posGame
+  add hl,de ;hl=posGame+(Gametype)
+  ld  a,(hl) ;str.offset
+  ld  e,a ;^d=0^
+  ld  hl,txtGame
+  add hl,de ;txtGameX
+  ld  (CURtxtGame),hl ;save for g/o
+  cal _vputs ;Singleplayer
+
+  ld  hl,$1E2E ;level
+  ld  (_penCol),hl
+  ld  a,(curlevel)
+  cal cshowA
+
+  ld  hl,$2A2E ;worms
+  ld  (_penCol),hl
+  ld  a,(nrworms)
+  add a,'0'
+  cal _vputmap
+
+  cal loadgamecar
+  ld  hl,$242E
+  ld  (_penCol),hl
+  cal cshowA ;liveslimit
+  sub '0' ;original A
+  ld  l,a
+  ld  a,c
+  and _datascore
+  ld  a,' '
+  jr  z,limitok
+  ld  a,'0'
+limitok:
+  cal _vputmap ;x10
+  jr  __mainMenu
 
 ;--- handle menukeys ---
 
@@ -608,7 +628,7 @@ menuwaitkey:
   cal GET_KEY
   or  a
   jr  z,menuwaitkey
-  pop bc ;pop a as b
+  pop bc ;GET_KEY destr. b
   cp  K_UP
   cal z,menuup
   cp  K_DOWN
@@ -617,32 +637,42 @@ menuwaitkey:
   ret z
   cp  K_SECOND
   ret ;z=select
-menupos:
+
+menupos: ;highlight #b
+  ld  c,b ;psh b
   ld  a,b
-  add a,4
-  ld  h,0
+  add a,3
+  add a,a
+  add a,a
+  sub b
+  add a,a
+  add a,a
+  add a,a ;*24
+  ld  h,$FC/4
   ld  l,a
-  ld  (_curRow),hl
-  ret
-menuclr:
-  cal menupos
-  ld  a,' '
-  jp  _putc
+  add hl,hl
+  add hl,hl ;$FD20+item*96
+  ld  b,16*7
+menuinvloop:
+  ld  a,(hl)
+  cpl
+  ld  (hl),a
+  inc hl
+  dnz menuinvloop
+  ld  b,c ;pop b
+  ret ;a=-1
 menudown:
-  cal menuclr
+  cal menupos
   inc b
   jr  menuupdown
 menuup:
-  cal menuclr
+  cal menupos
   dec b
 menuupdown:
   ld  a,b
   and %11 ;4=0;-1=3
-menudraw:
   ld  b,a
-  cal menupos
-  ld  a,'*'
-  jp  _putc ;a=K_STO
+  jr  menupos
 
 ;--- change name ---
 ; of worm#(nrworms)
@@ -2254,16 +2284,7 @@ showleft:
   ld  (_penCol),a
   ld  a,0
 Left =$-1
-  ld  l,a
-  ld  h,0
-  cal _divHLby10
-  psh af
-  ld  a,l
-  add a,'0'
-  cal __vputmap
-  pop af
-  add a,'0'
-  cal __vputmap
+  cal cshowA
 
   ld  hl,txtLeft
 __vputs:
@@ -2288,6 +2309,18 @@ showA:
   add a,'0'
   jp  _putc
 
+cshowA:
+  ld  l,a
+  ld  h,0
+  cal _divHLby10
+  psh af
+  ld  a,l
+  add a,'0'
+  cal __vputmap
+  pop af
+  add a,'0'
+  jp  __vputmap
+
 showHL:
   cal _D_HL_DECI
   jp  _puts
@@ -2899,10 +2932,10 @@ recvfinish:
 ;-----------------------------
 
 LevelDef:
-  .db 5,4,15,15,0,0 ;peas,speed,growth,begin_size,sprite,balls
-  .db 0,2,63        ;start d, y, x
-  .db 128,57        ;field width (128-255), height (57-255)
-  .db 0             ;no additional lines, boxes
+  .db 5,4,15,15,0,0    ;peas,speed,growth,begin_size,sprite,balls
+  .db 0,2,63           ;start d, y, x
+  .db 128,57           ;field width (128-255), height (57-255)
+  .db 0                ;no additional lines, boxes
 
   .db 255
    ret
@@ -2949,18 +2982,28 @@ wtPicture:
 .db %00001111,%10000011,%11100000,%00011111,%00000011,%00000001,%10000000,%00011000
 
 txtMenu:    .db "by Shiar",0
-            .db "Level 00",0      ;4th menu item
-            .db "Limit 00 ",0     ;3rd
-            .db "Worms 0",0       ;2nd
-txtGame:    .db "Singleplayer",0  ;0 (1st)
-txtGame2:   .db "Peaworm     ",0  ;1 (next 1st)
-            .db "Tron      ",0    ;2
-            .db "Deathmatch",0    ;3
-            .db "Foodmatch ",0    ;4
-            .db "LinkMatch",0     ;5
-            .db "Race     ",0     ;6
-            .db "CTF         ",0  ;7
+           .db "Mode",0
+            .db "Level",0      ;4th menu item
+            .db "Limit",0      ;3rd
+            .db "Worms",0      ;2nd
+posMenu:    .dw $0D5A,$1418,$131E,$1524,$0F2A
+txtGame:    .db "Singleplayer",0       ;0 (1st)
+txtGame1:   .db "Peaworm",0    ;1 (next 1st)
+txtGame2:   .db "Tron",0       ;2
+txtGame3:   .db "Deathmatch",0 ;3
+txtGame4:   .db "Foodmatch",0  ;4
+txtGame5:   .db "LinkMatch",0  ;5
+txtGame6:   .db "Race",0       ;6
+txtGame7:   .db "CTF",0        ;7
 ;            .db "Domination",0    ;8
+posGame:    .db 0,txtGame1-txtGame
+           .db txtGame2-txtGame
+           .db txtGame3-txtGame
+           .db txtGame4-txtGame
+           .db txtGame5-txtGame
+           .db txtGame6-txtGame
+           .db txtGame7-txtGame
+
 txtLevsel:  .db $CF," Select levels: ",5,0
 txtName:    .db "Enter name player ",0
 txtWaiting: .db "Waiting...",0
@@ -3099,4 +3142,4 @@ templevels:
 
   .end
 
-.end
+.end
\ No newline at end of file