Awesome, right?
Well, here is a skeleton for a "Sunburst" or "Flower" menu. Basically, whenever you click it, options come out of the center, and you can select an item. Currently, instead of Sims-style mouse-based control (which used to frustrate the heck out of me when the collision boxes decided to be sensitive), you control the actual menu using the arrow keys. Any number of items are accepted, but bear in mind that max_distance and max_radius should probably change for larger array indices. It's quite plausible to use this system dynamically, as the Sims did, to call different menus on the fly based on what is clicked.
#CONSTANT col_red RGB(255,0,0)
#CONSTANT col_white RGB(255,255,255)
TYPE burst_menu
sel_text AS STRING
angle AS FLOAT
radius AS WORD
distance AS WORD
ENDTYPE
TYPE draw_point
x AS INTEGER
y AS INTEGER
ENDTYPE
GLOBAL max_radius AS WORD
GLOBAL max_distance AS WORD
GLOBAL pos_menu AS draw_point
GLOBAL menu_selected
GLOBAL disp_sel_text AS STRING
n# AS FLOAT
max_radius=8
max_distance=20
DIM main(6) AS burst_menu
//Main (0) is not used due to the automatically calculated angles.
FOR n=1 TO ARRAY COUNT(main())
t#=ARRAY COUNT(main())
n#=n
main(n).angle=WRAPVALUE(270+(360*(n#/t#))) //270+ Causes 1 to be the top.
NEXT n
main(1).sel_text="Attack"
main(2).sel_text="Defend"
main(3).sel_text="Special"
main(4).sel_text="Item"
main(5).sel_text="Run"
main(6).sel_text="Back"
SYNC ON
SYNC RATE 40
DO
CLS
FOR n=1 TO ARRAY COUNT(main())
IF menu_press=1
main(n).radius=num_regulate(main(n).radius,max_radius,2)
main(n).distance=num_regulate(main(n).distance,max_distance,2)
ELSE
main(n).radius=num_regulate(main(n).radius,0,2)
main(n).distance=num_regulate(main(n).distance,0,2)
ENDIF
//Menu Draw
bx=pos_menu.x+(main(n).distance*COS(main(n).angle))
by=pos_menu.y+(main(n).distance*SIN(main(n).angle))
IF menu_selected=n
FILL CIRCLE bx,by,main(n).radius,col_red
disp_sel_text=main(n).sel_text
ELSE
FILL CIRCLE bx,by,main(n).radius,col_white
ENDIF
NEXT n
//Selected Draw
IF menu_press=1
CENTER TEXT pos_menu.x,pos_menu.y+max_distance+8,disp_sel_text
ENDIF
//Menu Checks
//Makes sure valid item is selected if menu is on
IF menu_press=1 AND menu_selected=0 THEN menu_selected=1
IF menu_press=0 AND MOUSECLICK()=1 THEN menu_press=1
IF menu_press=0 THEN pos_menu.x=MOUSEX() : pos_menu.y=MOUSEY()
//Menu Select
IF RIGHTKEY()=1 AND hold=0 THEN menu_selected=WRAP(menu_selected+1,1,ARRAY COUNT(main())) : hold=1
IF LEFTKEY()=1 AND hold=0 THEN menu_selected=WRAP(menu_selected-1,1,ARRAY COUNT(main())) : hold=1
IF RIGHTKEY()+LEFTKEY()=0 THEN hold=0
//Menu Functions
IF KEYSTATE(28)=1
SELECT main(menu_selected).sel_text
CASE "Back"
menu_press=0
ENDCASE
ENDSELECT
ENDIF
SYNC
LOOP
FUNCTION num_regulate(a,b,spd)
FOR c=1 TO spd
IF b>a THEN INC a
IF b<a THEN DEC a
NEXT c
ENDFUNCTION a