AssetTypeMusicScript.xsd 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="uri:ea.com:eala:asset" xmlns:at="uri:ea.com:eala:asset:type" xmlns:xas="uri:ea.com:eala:asset:schema" targetNamespace="uri:ea.com:eala:asset" elementFormDefault="qualified" xmlns:XmlEdit="http://tempuri.org/XmlEdit.xsd">
  3. <!-- Base of all the music script condition nuggets -->
  4. <xs:complexType name="MusicScriptConditionNuggetBase" abstract="true" >
  5. <xs:complexContent>
  6. <xs:extension base="BaseAssetType" />
  7. </xs:complexContent>
  8. </xs:complexType>
  9. <xs:simpleType name="MusicScriptConditionRef"
  10. xas:isRef="true"
  11. xas:refType="MusicScriptConditionNuggetBase">
  12. <xs:restriction base="AssetReference" />
  13. </xs:simpleType>
  14. <xs:simpleType name="MusicScriptTrackRef"
  15. xas:isRef="true"
  16. xas:refType="MusicScriptTrack">
  17. <xs:restriction base="AssetReference" />
  18. </xs:simpleType>
  19. <xs:simpleType name="MusicScriptTrackWeakRef"
  20. xas:isRef="true"
  21. xas:refType="MusicScriptTrack">
  22. <xs:restriction base="WeakReference" />
  23. </xs:simpleType>
  24. <!-- For the nuggets whose conditions are expensive to compute, this nugget says "recompute the
  25. conditions truth only once every n seconds. Between checks, just return the previous value" -->
  26. <xs:complexType name="MusicScriptConditionExpensiveNuggetBase" abstract="true" >
  27. <xs:complexContent>
  28. <xs:extension base="MusicScriptConditionNuggetBase" >
  29. <xs:sequence />
  30. <xs:attribute name="TimeBetweenConditionChecks" type="Time" default="5s" />
  31. </xs:extension>
  32. </xs:complexContent>
  33. </xs:complexType>
  34. <!-- All the condition nuggets -->
  35. <!-- True if the local player is an observer, post-commentator, etc -->
  36. <xs:complexType name="MusicScriptConditionNugget_LocalPlayerIsObserver" >
  37. <xs:complexContent>
  38. <xs:extension base="MusicScriptConditionNuggetBase" >
  39. <xs:sequence />
  40. <xs:attribute name="CountDeadPlayersAsObservers" type="SageBool" use="required" />
  41. </xs:extension>
  42. </xs:complexContent>
  43. </xs:complexType>
  44. <!-- True if enough units are far enough away from some player's home base-->
  45. <xs:complexType name="MusicScriptConditionNugget_UnitsFarFromBase" >
  46. <xs:complexContent>
  47. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  48. <xs:sequence />
  49. <xs:attribute name="MinUnitsToPass" type="SageInt" use="required" />
  50. <xs:attribute name="MinDistanceFromBase" type="SageReal" use="required" />
  51. <xs:attribute name="Relationship" type="ObjectFilterRelationshipBitMask" use="required" />
  52. </xs:extension>
  53. </xs:complexContent>
  54. </xs:complexType>
  55. <!-- True if enough time has passed-->
  56. <xs:complexType name="MusicScriptConditionNugget_TimeFromStartOfLevel" >
  57. <xs:complexContent>
  58. <xs:extension base="MusicScriptConditionNuggetBase" >
  59. <xs:sequence />
  60. <xs:attribute name="Timeout" type="Time" use="required" />
  61. </xs:extension>
  62. </xs:complexContent>
  63. </xs:complexType>
  64. <!-- True if a track has played enough times -->
  65. <xs:complexType name="MusicScriptConditionNugget_TrackPlayedCount" >
  66. <xs:complexContent>
  67. <xs:extension base="MusicScriptConditionNuggetBase" >
  68. <xs:sequence />
  69. <xs:attribute name="Track" type="MusicScriptTrackWeakRef" use="required" />
  70. <xs:attribute name="Count" type="SageInt" use="required" />
  71. </xs:extension>
  72. </xs:complexContent>
  73. </xs:complexType>
  74. <!-- True if a specific track is playing -->
  75. <xs:complexType name="MusicScriptConditionNugget_SpecificTrackTypePlaying" >
  76. <xs:complexContent>
  77. <xs:extension base="MusicScriptConditionNuggetBase" >
  78. <xs:sequence />
  79. <xs:attribute name="TrackType" type="StringHash" use="required" />
  80. </xs:extension>
  81. </xs:complexContent>
  82. </xs:complexType>
  83. <!-- True if any track is playing -->
  84. <xs:complexType name="MusicScriptConditionNugget_AnyTrackPlaying" >
  85. <xs:complexContent>
  86. <xs:extension base="MusicScriptConditionNuggetBase" >
  87. <xs:sequence />
  88. </xs:extension>
  89. </xs:complexContent>
  90. </xs:complexType>
  91. <!-- True if at least some number of objects which pass the given filter and have the given model conditions exist on the map.
  92. (Filter's players are relative to the local player) -->
  93. <xs:complexType name="MusicScriptConditionNugget_ObjectsOfTypeExist" >
  94. <xs:complexContent>
  95. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  96. <xs:sequence >
  97. <xs:element name="Filter" type="ObjectFilter" minOccurs="0" maxOccurs="1" />
  98. </xs:sequence>
  99. <xs:attribute name="Count" type="SageInt" default="1" />
  100. <xs:attribute name="RequiredModelConditions" type="ModelConditionBitFlags" default="" />
  101. <xs:attribute name="ExcludedModelConditions" type="ModelConditionBitFlags" default="" />
  102. </xs:extension>
  103. </xs:complexContent>
  104. </xs:complexType>
  105. <!-- True if a certain Eva event has played within the last n seconds -->
  106. <xs:complexType name="MusicScriptConditionNugget_EvaEventPlayedRecently" >
  107. <xs:complexContent>
  108. <xs:extension base="MusicScriptConditionNuggetBase" >
  109. <xs:sequence />
  110. <xs:attribute name="EvaEvent" type="EvaEventIDType" use="required" />
  111. <xs:attribute name="Timeout" type="Time" default="1s" />
  112. </xs:extension>
  113. </xs:complexContent>
  114. </xs:complexType>
  115. <!-- True if at least some number of objects which pass the given filter are within some distance of an Eva event's
  116. last-played location -->
  117. <xs:complexType name="MusicScriptConditionNugget_ObjectsNearEvaEvent" >
  118. <xs:complexContent>
  119. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  120. <xs:sequence >
  121. <xs:element name="Filter" type="ObjectFilter" minOccurs="0" maxOccurs="1" />
  122. </xs:sequence>
  123. <xs:attribute name="EvaEvent" type="EvaEventIDType" use="required" />
  124. <xs:attribute name="Count" type="SageInt" default="1" />
  125. <xs:attribute name="Distance" type="SageReal" use="required" />
  126. </xs:extension>
  127. </xs:complexContent>
  128. </xs:complexType>
  129. <!-- True if the given number of objects which pass the filter were killed by the player within the given period of time -->
  130. <xs:complexType name="MusicScriptConditionNugget_ScoredKillCount" >
  131. <xs:complexContent>
  132. <xs:extension base="MusicScriptConditionNuggetBase" >
  133. <xs:sequence />
  134. <xs:attribute name="Count" type="SageInt" use="required" />
  135. <xs:attribute name="Time" type="Time" use="required" />
  136. <xs:attribute name="CountOnlyKillsAgainstTheLocalPlayer" type="SageBool" use="required" />
  137. <xs:attribute name="CountOnlyKillsByTheLocalPlayer" type="SageBool" use="required" />
  138. <xs:attribute name="Filter" type="ObjectFilterAssetRef" use="optional" />
  139. </xs:extension>
  140. </xs:complexContent>
  141. </xs:complexType>
  142. <!-- True if its subcondition is false -->
  143. <xs:complexType name="MusicScriptConditionNugget_Not" >
  144. <xs:complexContent>
  145. <xs:extension base="MusicScriptConditionNuggetBase" >
  146. <xs:sequence >
  147. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="1" maxOccurs="1" />
  148. </xs:sequence>
  149. </xs:extension>
  150. </xs:complexContent>
  151. </xs:complexType>
  152. <!-- True if one or more subconditions is true. Ordering is important - put cheapest / most likely to return true
  153. conditions first for optimization -->
  154. <xs:complexType name="MusicScriptConditionNugget_Or" >
  155. <xs:complexContent>
  156. <xs:extension base="MusicScriptConditionNuggetBase" >
  157. <xs:sequence >
  158. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="2" maxOccurs="unbounded" />
  159. </xs:sequence>
  160. </xs:extension>
  161. </xs:complexContent>
  162. </xs:complexType>
  163. <!-- True if all the subconditions are true. Ordering is important - put cheapest / most likely to return false
  164. conditions first for optimization -->
  165. <xs:complexType name="MusicScriptConditionNugget_And" >
  166. <xs:complexContent>
  167. <xs:extension base="MusicScriptConditionNuggetBase" >
  168. <xs:sequence >
  169. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="2" maxOccurs="unbounded" />
  170. </xs:sequence>
  171. </xs:extension>
  172. </xs:complexContent>
  173. </xs:complexType>
  174. <xs:complexType name="MusicScriptTimeoutSpecifier" >
  175. <xs:sequence/>
  176. <xs:attribute name="Weight" type="SageInt" default="1000" />
  177. <xs:attribute name="Duration" type="Time" use="required" />
  178. </xs:complexType>
  179. <!-- A music track that can play, and all the data about when & how it plays-->
  180. <xs:complexType name="MusicScriptTrack" >
  181. <xs:complexContent>
  182. <xs:extension base="BaseAssetType">
  183. <xs:sequence>
  184. <xs:element name="Timeout" type="MusicScriptTimeoutSpecifier" minOccurs="0" maxOccurs="unbounded" />
  185. </xs:sequence>
  186. <xs:attribute name="TrackTypeKey" type="StringHash" default="" />
  187. <xs:attribute name="Level" type="SageInt" use="required" />
  188. <xs:attribute name="Priority" type="SageInt" use="required" />
  189. <xs:attribute name="Condition" type="MusicScriptConditionRef" use="optional" />
  190. <!-- If ConditionsAreLatch is true, the conditions are only checked until they become true, at which point the
  191. music tracks plays every time the timeout expires. If false, conditions are checked before each playback -->
  192. <xs:attribute name="ConditionsAreLatch" type="SageBool" default="false" />
  193. <xs:attribute name="Track" type="AudioEventInfoRef" use="required" />
  194. <xs:attribute name="FadeInTrack" type="SageBool" default="false" />
  195. <xs:attribute name="FadeOutLowerLevelTrack" type="SageBool" default="true" />
  196. </xs:extension>
  197. </xs:complexContent>
  198. </xs:complexType>
  199. <!-- Top-level type. We are running exactly one of these at a time. Normally, only one is linked to a map.
  200. Selecting one of these selects all the lower-level music controls under it -->
  201. <xs:complexType name="MusicPalette" >
  202. <xs:complexContent>
  203. <xs:extension base="BaseAssetType">
  204. <xs:sequence>
  205. <xs:element name="Track" type="MusicScriptTrackRef" minOccurs="0" maxOccurs="unbounded" />
  206. </xs:sequence>
  207. <xs:attribute name="IsDefaultForNewMap" type="SageBool" default="false" />
  208. </xs:extension>
  209. </xs:complexContent>
  210. </xs:complexType>
  211. </xs:schema>