"so in this instance the building shape would be either narrow or wide and it would be nested under Cellar and 1st floor if statement. I can get the first one to work but not the 2nd. It never gets down to the 2nd part. How do i get it to differentiate between a narrow or wide selection under the cellaronefloor umbrella?"
Perhaps you can clarify the above statement.
So your BUILDING TYPE has the following radio button selections:

Now when the dialog first appears for user selection with radio buttons one of them should be automatically selected and not none. So for Cellar And First Floor to be selected your dcl file would add this line:
: radio_button {
label = "Cellar And First Floor";
key = "cellaroneflr";
value = "1";
}
But your lisp code contains this section that overrides this:
(set_tile "cellaroneflr"
(if cellaroneflr
;; Check Flag
"1"
;; If non-nil, Set toggle to on
"0"
;; else set toggle to off
)
)
I would make the following change in your lisp code so that Cellar And First Floor first appears selected under BUILDING TYPE:
(setq buildingtype "cellaroneflr") ; set this value
(set_tile buildingtype "1") ; select radio button
Then like the BUILDING TYPE, the BUILDING SHAPE section needs to have an initial selection:

So again you can either include the value = "1"; line in the dcl or in your lisp code so that at least one of the shapes in this case Narrow Building is selected under BUILDING SHAPE:
(setq buildingshape "narrow") ; set this value
(set_tile buildingshape "1") ; select radio button
Currently you have the following call back action statements on the radio buttons:
(action_tile "cellaroneflr" "(setq cellaroneflr (not cellaroneflr))")
(action_tile "cellartwoflr" "(setq cellartwoflr (not cellartwoflr))")
(action_tile "oneflr" "(setq oneflr (not oneflr))")
(action_tile "twoflr" "(setq twoflr (not twoflr))")
(action_tile "wide" "(setq wide (not wide))")
(action_tile "narrow" "(setq narrow (not narrow))")
I would change them to this method:
; for building type:
(foreach tile '("cellaroneflr" "cellartwoflr" "oneflr" "twoflr")(action_tile tile "(setq buildingtype $key)")
; for building shape
(foreach tile '("wide" "narrow")(action_tile tile "(setq buildingshape $key)")
So the remainder of your code would check which dcl key value is stored in the buildingtype and buildingshape variables to proceed like this:
; for building type:
(cond
((eq buildingtype "cellaroneflr")
;;; do code here
)
((eq buildingtype "cellartwoflr")
;;; do code here
)
((eq buildingtype "oneflr")
;;; do code here
)
((eq buildingtype "twoflr")
;;; do code here
)
)
; for building shape
(cond
((eq buildingshape "wide")
;;; do code here
)
((eq buildingshape "narrow")
;;; do code here
)
)