'''Game Oriented Assembly Lisp''' (or '''GOAL''') is a computer game programming language developed by [[Andy Gavin]] and the [[Jak and Daxter]] team at [[Naughty Dog]]. It was written using [[Allegro Common Lisp]] and used in the development of the entire [[Jak and Daxter]] series of games.
A '''floristic province''' is a geographic area with a relatively uniform composition of plant species. Adjacent floristic provinces do not usually have a sharp boundary, but rather a soft one, a transitional area in which many species from both regions overlap. The region of overlap is called a '''vegetation tension zone'''.
Syntactically GOAL resembles [[Scheme (programming language)|Scheme]], though with many idiosyncratic features inspired by other languages such as classes, inheritance, and virtual functions. An example of what GOAL code looks like can be found at [http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html]. GOAL encourages an [[imperative programming]] style: programs tend to be comprised of sequence of events to be executed rather than the [[functional programming]] style of functions to be evaluated recursively. This is a diversion from [[Scheme (programming language)|Scheme]], which allows such [[side-effect (computer science)|side-effects]] but does not encourage imperative style.
Several systems of floristic provinces have been devised. Most systems are organized hierarchically, with the largest units subdivided into smaller geographic areas, which are made up of smaller floristic communities, and so on. Systems of floristic provinces have both significant similarities and differences with [[zoogeographic provinces]], which follow the composition of mammal families, and with biogeographical provinces or terrestrial [[ecozones]], which take into account both plant and animal species.
Like many modern implementations of Common [[Lisp programming language|Lisp]], GOAL does not run in an interpreter, but instead is compiled directly into [[PlayStation 2]] machine code for execution. It offers limited facilities for [[Garbage collection (computer science)|garbage collection]], relying extensively on runtime support. It offers dynamic memory allocation primitives designed to make it well-suited to running in constant memory on a video game console. GOAL has extensive support for [[Inline expansion|inlined]] assembly code using a special <code>rlet</code> form[http://lists.midnightryder.com/pipermail/sweng-gamedev-midnightryder.com/2005-August/003804.html], allowing programmers to freely mix assembly and higher-level constructs within the same function.
Botanist [[Ronald Good]] identified six floristic kingdoms (Boreal, [[Neotropic|Neotropical]], Paleotropical, South African, Australian, and Antarctic), the largest natural units he determined for flowering plants. Good's six kingdoms are subdivided into smaller units, called provinces. The Paleotropical kingdom is divided into three subkingdoms, which are each subdivided into floristic provinces. Each of the other five kingdoms are subdivided directly into provinces. There is a total of 37 floristic provinces. Almost all provinces are further subdivided into floristic regions.
The GOAL compiler is implemented in [[Allegro Common Lisp]]. It supports a long term compiling listener session which gives the compiler knowledge about the state of the compiled and therefore running program, including the symbol table. This, in addition to dynamic linking, allows a function to be edited, recompiled, uploaded, and inserted into a running game without having to restart. The process is similar to the "edit and continue" feature offered by some [[C++]] compilers, but allows the programmer to replace arbitrary amounts of code (even up to entire object files), and does not interrupt the running game with the debugger. This feature was used to implement code as well as level streaming in the [[Jak and Daxter]] games.
[[Armen Takhtajan]], in a widely used scheme that builds on Good's work, identified thirty-five floristic regions, each of which is subdivided into floristic provinces, of which there are 152 in all.
GOAL's first use was for the original [[Jak and Daxter]] PS2 game; the predecessor language, GOOL, was also developed by Andy Gavin for [[Crash Bandicoot (video game)|Crash Bandicoot]].
==Taktajan's floristic provinces==
===HolarcticExternal Kingdom=links==
* http://www.franz.com/success/customer_apps/animation_graphics/naughtydog.lhtml — Franz Inc. success story
====I. Circumboreal Region====
* http://bc.tech.coop/blog/060118.html — Page about LISP developments by [[Paul Graham]] and [[Naughty Dog]]
:1 Arctic
* http://www.gamasutra.com/features/gdcarchive/2003/White_Stephen.ppt — (Powerpoint) ''Jak & Daxter: The Precursor Legacy'', development overview, lessons learned, very interesting
:2 Atlantic Europe
* http://www.gamasutra.com/features/gdcarchive/2003/Denman_Stu.ppt — (Powerpoint) ''Highly detalied continuous worlds'', about the streaming world loader
:3 Central Europe
:4 Illyria or Balkan
:5 Pontus Euxinus
:6 [[Caucasus]]
:7 Eastern Europe
:8 Northern Europe
:9 Western Siberia
:10 Altai-Sayan
:11 Central Siberia
:12 Transbaikalia
:13 Northeastern Siberia
:14 Okhotsk-Kamchatka
:15 Canada incl. Great Lakes
[[Category:Lisp programming language family]]
====II. Eastern Asiatic Region====
[[Category:Functional languages]]
:16 [[Manchuria]]
[[Category:Object-oriented programming languages]]
:17 Sakhalin-Hokkaido
:18 Japan-Korea
:19 Volcano-Bonin
:20 Ryukyu or Tokara-Okinawa
:21 [[Taiwan]]
:22 Northern China
:23 Central China
:24 Southeastern China
:25 Sikang-Yuennan
:26 Northern Burma
:27 Eastern Himalaya
:28 Khasi-Manipur
{{videogame-software-stub}}
====III. North American Atlantic Region====
:29 [[Appalachians]]
:30 Atlantic and Gulf Coastal Plain
:31 North American Prairies
====IV. Rocky Mountain Region====
:32 Vancouver
:33 [[Rocky Mountains]]
====V. [[Macaronesia|Macaronesian Region]]====
:34 [[Azores]]
:35 [[Madeira]]
:36 [[Canary Islands|Canaries]]
:37 [[Cape Verde]]
====VI. Mediterranean Region====
:38 Southern Morocco
:39 Southwestern Mediterranean
:40 South Mediterranean
:41 [[Iberia]]
:42 [[Baleares]]
:43 Liguria-Tyrrhenia
:44 Adriatic
:45 East Mediterranean
:46 Crimea-Novorossijsk
====VII. Saharo-Arabian Region====
:47 [[Sahara]]
:48 Egypt-Arabia
====VIII. Irano-Turanian Region====
:49 Mesopotamia
:50 Central Anatolia
:51 Armenia-Iran
:52 Hyrcania
:53 Turania or Aralo-Caspia
:54 Turkestan
:55 Northern Baluchistan
:56 Western Himalaya
:57 Central Tien Shan
:58 Dzungaria-Tien Shan
:59 [[Mongolia]]
:60 [[Tibet]]
====IX. Madrean Region====
:61 [[Great Basin]]
:62 [[California]]
:63 [[Sonoran Desert|Sonora]]
:64 Mexican Highlands
===Paleotropical Kingdom===
====X. Guineo-Congolian Region====
:65 Upper Guinea
:66 Nigeria-Cameroon
:67 Congo
====XI. Usambara-Zululand Region====
:68 Zanzibar-Inhambane
:69 Tongoland-Pondoland
====XII. Sudano-Zambezian Region====
:70 Zambezi
:71 Sahel
:72 Sudan
:73 Somalia-Ethiopia
:74 South Arabia
:75 Socotra
:76 Oman
:77 South Iran
:78 Sindia
====XIII. Karoo-Namib Region====
:79 Namibia
:80 Namaland
:81 Western Cape
:82 Karoo
====XIV. St.Helena and Ascension Region====
:83 St. Helena and Ascension
====XV. [[Madagascan Region]]====
:84 [[Ecoregions of Madagascar|Eastern Madagascar]]
:85 [[Ecoregions of Madagascar|Western Madagascar]]
:86 [[Ecoregions of Madagascar|Southern and Southwestern Madagascar]]
:87 [[Comoros|Comoro]]
:88 [[Mascarene Islands|Mascarenes]]
:89 [[Seychelles]]
====XVI. Indian Region====
:90 Ceylon (Sri Lanka)
:91 Malabar
:92 Deccan
:93 Upper Gangetic Plain
:94 Bengal
====XVII. Indochinese Region====
:95 South Burma
:96 Andamans
:97 South China
:98 Thailand
:99 North Indochina
:100 Annam
:101 South Indochina
====XVIII. [[Malesia|Malesian Region]]====
:102 [[Malaya]]
:103 [[Borneo]]
:104 [[Ecoregions of the Philippines|Philippines]]
:105 [[Sumatra]]
:106 South Malesia
:107 [[Sulawesi|Celebes]]
:108 Moluccas and West New Guinea
:109 Papua
:110 [[Bismarck Archipelago]]
====XIX. Fijian Region====
:111 New Hebrides
:112 Fiji
====XX. Polynesian Region====
:113 Micronesia
:114 Polynesia
====XXI. Hawaiian Region====
:115 [[Hawaii]]
====XXII. Neocaledonian Region====
:116 [[New Caledonia]]
===[[Neotropic|Neotropical Kingdom]]===
====XXIII. Caribbean Region====
:117 Central America
:118 West Indies
:119 Galapagos
====XXIV. Region of the Guayana Highlands====
:120 Guayana
====XXV. Amazonian Region====
:121 Amazonia
:122 Llanos
====XXVI. Brazilian Region====
:123 Caatingas
:124 Central Brazilian Uplands
:125 Chaco
:126 Atlantic Brazil
:127 Parana
====XXVII. Andean Region====
:128 Northern Andes
:129 Central Andes
===South African Kingdom===
====XXVIII. Cape Region====
:130 Cape
===Australian Kingdom===
====XXIX. Northeast Australian Region====
:131 North Australia
:132 Queensland
:133 Southeast Australia
:134 [[Tasmania]]
====XXX. Southwest Australian Region====
:135 Southwest Australia
====XXXI. Central Australian or Eremaean Region====
:136 Eremaea
===Antarctic Kingdom===
====XXXII. Fernandezian Region====
:137 [[Juan Fernandez]]
====XXXIII. Chile-Patagonian Region====
:138 Northern Chile
:139 Central Chile
:140 [[Pampas]]
:141 [[Patagonia]]
:142 Tierra del Fuego
====XXXIV. Region of the South Subantarctic Islands====
:143 Tristan-Gough
:144 Kerguelen
====XXXV. Neozeylandic Region====
:145 [[Lord Howe Island|Lord Howe]]
:146 [[Norfolk Island|Norfolk]]
:147 [[Kermadec Islands|Kermadec]]
:148 Northern New Zealand
:149 Central New Zealand
:150 Southern New Zealand
:151 [[Chatham Islands|Chatham]]
:152 New Zealand Subantarctic Islands
==External References==
* Good, Ronald, 1947. ''The Geography of Flowering Plants''. Longmans, Green and Co, New York
* Takhtajan, Armen, 1986. ''Floristic Regions of the World''. (translated by T.J. Crovello & A. Cronquist). University of California Press, Berkeley.
[[Category: Ecoregions]]
[[Category: Botany]]
|