AssetTypeMusicScript.xsd 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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" xas:typeGroup="Xml" >
  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. <xs:simpleType name="ScreenStatus">
  25. <xs:restriction base="xs:string">
  26. <xs:enumeration value="ON_SCREEN" />
  27. <xs:enumeration value="OFF_SCREEN" />
  28. <xs:enumeration value="ON_OR_OFF_SCREEN" />
  29. </xs:restriction>
  30. </xs:simpleType>
  31. <!-- For the nuggets whose conditions are expensive to compute, this nugget says "recompute the
  32. conditions truth only once every n seconds. Between checks, just return the previous value" -->
  33. <xs:complexType name="MusicScriptConditionExpensiveNuggetBase" abstract="true" xas:typeGroup="Xml">
  34. <xs:complexContent>
  35. <xs:extension base="MusicScriptConditionNuggetBase" >
  36. <xs:sequence />
  37. <xs:attribute name="TimeBetweenConditionChecks" type="Time" default="5s" />
  38. </xs:extension>
  39. </xs:complexContent>
  40. </xs:complexType>
  41. <!-- All the condition nuggets -->
  42. <!-- True if the local player is an observer, post-commentator, etc -->
  43. <xs:complexType name="MusicScriptConditionNugget_LocalPlayerIsObserver" xas:typeGroup="Xml">
  44. <xs:complexContent>
  45. <xs:extension base="MusicScriptConditionNuggetBase" >
  46. <xs:sequence />
  47. <xs:attribute name="CountDeadPlayersAsObservers" type="SageBool" use="required" />
  48. </xs:extension>
  49. </xs:complexContent>
  50. </xs:complexType>
  51. <!-- True if enough units are far enough away from some player's home base-->
  52. <xs:complexType name="MusicScriptConditionNugget_UnitsFarFromBase" xas:typeGroup="Xml">
  53. <xs:complexContent>
  54. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  55. <xs:sequence />
  56. <xs:attribute name="MinUnitsToPass" type="SageInt" use="required" />
  57. <xs:attribute name="MinDistanceFromBase" type="SageReal" use="required" />
  58. <xs:attribute name="Relationship" type="ObjectFilterRelationshipBitMask" use="required" />
  59. </xs:extension>
  60. </xs:complexContent>
  61. </xs:complexType>
  62. <!-- true if enough time has passed-->
  63. <xs:complexType name="MusicScriptConditionNugget_TimeFromStartOfLevel" xas:typeGroup="Xml">
  64. <xs:complexContent>
  65. <xs:extension base="MusicScriptConditionNuggetBase" >
  66. <xs:sequence />
  67. <xs:attribute name="Timeout" type="Time" use="required" />
  68. </xs:extension>
  69. </xs:complexContent>
  70. </xs:complexType>
  71. <!-- true if a track has played enough times -->
  72. <xs:complexType name="MusicScriptConditionNugget_TrackPlayedCount" xas:typeGroup="Xml">
  73. <xs:complexContent>
  74. <xs:extension base="MusicScriptConditionNuggetBase" >
  75. <xs:sequence />
  76. <xs:attribute name="Track" type="MusicScriptTrackWeakRef" use="required" />
  77. <xs:attribute name="Count" type="SageInt" use="required" />
  78. </xs:extension>
  79. </xs:complexContent>
  80. </xs:complexType>
  81. <!-- true if a specific track is playing -->
  82. <xs:complexType name="MusicScriptConditionNugget_SpecificTrackTypePlaying" xas:typeGroup="Xml">
  83. <xs:complexContent>
  84. <xs:extension base="MusicScriptConditionNuggetBase" >
  85. <xs:sequence />
  86. <xs:attribute name="TrackType" type="StringHash" use="required" />
  87. </xs:extension>
  88. </xs:complexContent>
  89. </xs:complexType>
  90. <!-- true if any track is playing -->
  91. <xs:complexType name="MusicScriptConditionNugget_AnyTrackPlaying" xas:typeGroup="Xml">
  92. <xs:complexContent>
  93. <xs:extension base="MusicScriptConditionNuggetBase" >
  94. <xs:sequence />
  95. </xs:extension>
  96. </xs:complexContent>
  97. </xs:complexType>
  98. <!-- true if at least some number of objects which pass the given filter and have the given model conditions exist on the map.
  99. (Filter's players are relative to the local player) -->
  100. <xs:complexType name="MusicScriptConditionNugget_ObjectsOfTypeExist" xas:typeGroup="Xml">
  101. <xs:complexContent>
  102. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  103. <xs:sequence >
  104. <xs:element name="Filter" type="ObjectFilter" minOccurs="0" maxOccurs="1" />
  105. </xs:sequence>
  106. <xs:attribute name="Count" type="SageInt" default="1" />
  107. <xs:attribute name="RequiredModelConditions" type="ModelConditionBitFlags" default="" />
  108. <xs:attribute name="ExcludedModelConditions" type="ModelConditionBitFlags" default="" />
  109. </xs:extension>
  110. </xs:complexContent>
  111. </xs:complexType>
  112. <!-- true if at least n Objects of Type A are near at least m Objects of Type B. -->
  113. <xs:complexType name="MusicScriptConditionNugget_ObjectTypesInProximity" xas:typeGroup="Xml">
  114. <xs:complexContent>
  115. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  116. <xs:attribute name="TypeAFilter" type="ObjectFilterAssetRef" use="required" />
  117. <xs:attribute name="TypeACount" type="SageInt" default="1" />
  118. <xs:attribute name="TypeBFilter" type="ObjectFilterAssetRef" use="required" />
  119. <xs:attribute name="TypeBCount" type="SageInt" default="1" />
  120. <xs:attribute name="Distance" type="SageReal" use="required" />
  121. </xs:extension>
  122. </xs:complexContent>
  123. </xs:complexType>
  124. <!-- true if a certain Eva event has played within the last n seconds -->
  125. <xs:complexType name="MusicScriptConditionNugget_EvaEventPlayedRecently" xas:typeGroup="Xml">
  126. <xs:complexContent>
  127. <xs:extension base="MusicScriptConditionNuggetBase" >
  128. <xs:sequence />
  129. <xs:attribute name="EvaEvent" type="EvaEventRef" use="required" />
  130. <xs:attribute name="Timeout" type="Time" default="1s" />
  131. </xs:extension>
  132. </xs:complexContent>
  133. </xs:complexType>
  134. <!-- true if at least some number of objects which pass the given filter are within some distance of an Eva event's
  135. last-played location -->
  136. <xs:complexType name="MusicScriptConditionNugget_ObjectsNearEvaEvent" xas:typeGroup="Xml">
  137. <xs:complexContent>
  138. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  139. <xs:sequence >
  140. <xs:element name="Filter" type="ObjectFilter" minOccurs="0" maxOccurs="1" />
  141. </xs:sequence>
  142. <xs:attribute name="EvaEvent" type="EvaEventRef" use="required" />
  143. <xs:attribute name="Count" type="SageInt" default="1" />
  144. <xs:attribute name="Distance" type="SageReal" use="required" />
  145. </xs:extension>
  146. </xs:complexContent>
  147. </xs:complexType>
  148. <!-- true if the given number of objects which pass the filter were killed by the player within the given period of time -->
  149. <xs:complexType name="MusicScriptConditionNugget_ScoredKillCount" xas:typeGroup="Xml">
  150. <xs:complexContent>
  151. <xs:extension base="MusicScriptConditionNuggetBase" >
  152. <xs:sequence />
  153. <xs:attribute name="Count" type="SageInt" use="required" />
  154. <xs:attribute name="Time" type="Time" use="required" />
  155. <xs:attribute name="CountOnlyKillsAgainstTheLocalPlayer" type="SageBool" use="required" />
  156. <xs:attribute name="CountOnlyKillsByTheLocalPlayer" type="SageBool" use="required" />
  157. <xs:attribute name="Filter" type="ObjectFilterAssetRef" use="optional" />
  158. </xs:extension>
  159. </xs:complexContent>
  160. </xs:complexType>
  161. <!-- true if its subcondition is false -->
  162. <xs:complexType name="MusicScriptConditionNugget_Not" xas:typeGroup="Xml">
  163. <xs:complexContent>
  164. <xs:extension base="MusicScriptConditionNuggetBase" >
  165. <xs:sequence >
  166. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="1" maxOccurs="1" />
  167. </xs:sequence>
  168. </xs:extension>
  169. </xs:complexContent>
  170. </xs:complexType>
  171. <!-- true if one or more subconditions is true. Ordering is important - put cheapest / most likely to return true
  172. conditions first for optimization -->
  173. <xs:complexType name="MusicScriptConditionNugget_Or" xas:typeGroup="Xml">
  174. <xs:complexContent>
  175. <xs:extension base="MusicScriptConditionNuggetBase" >
  176. <xs:sequence >
  177. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="2" maxOccurs="unbounded" />
  178. </xs:sequence>
  179. </xs:extension>
  180. </xs:complexContent>
  181. </xs:complexType>
  182. <!-- true if all the subconditions are true. Ordering is important - put cheapest / most likely to return false
  183. conditions first for optimization -->
  184. <xs:complexType name="MusicScriptConditionNugget_And" xas:typeGroup="Xml">
  185. <xs:complexContent>
  186. <xs:extension base="MusicScriptConditionNuggetBase" >
  187. <xs:sequence >
  188. <xs:element name="Condition" type="MusicScriptConditionRef" minOccurs="2" maxOccurs="unbounded" />
  189. </xs:sequence>
  190. </xs:extension>
  191. </xs:complexContent>
  192. </xs:complexType>
  193. <!-- Condition that tracks the time since a State was last active -->
  194. <xs:complexType name="MusicScriptConditionNugget_PathMusicStateLastActive" xas:typeGroup="Xml">
  195. <xs:complexContent>
  196. <xs:extension base="MusicScriptConditionNuggetBase" >
  197. <xs:attribute name="TrackedState" type="PathMusicGameDynamicStateWeakRef" use="required"/>
  198. <xs:attribute name="TrackedStateChange" type="StateChangeType" use="required"/>
  199. <xs:attribute name="TimeSinceLastActive" type="Time" use="required"/>
  200. <xs:attribute name="TimeSicneLastActiveOp" type="ComparisonOperator" use="required"/>
  201. </xs:extension>
  202. </xs:complexContent>
  203. </xs:complexType>
  204. <!-- Condition that determines whether or not a State is currently active -->
  205. <xs:complexType name="MusicScriptConditionNugget_PathMusicStateCurrentlyActive" xas:typeGroup="Xml">
  206. <xs:complexContent>
  207. <xs:extension base="MusicScriptConditionNuggetBase" >
  208. <xs:attribute name="TrackedState" type="PathMusicGameDynamicStateWeakRef" use="required"/>
  209. </xs:extension>
  210. </xs:complexContent>
  211. </xs:complexType>
  212. <!-- Condition that tracks "Engagements", or combat between two units, over time. The units must
  213. pass the filters specified here-->
  214. <xs:complexType name="MusicScriptConditionNugget_EngagementCount" xas:typeGroup="Xml">
  215. <xs:complexContent>
  216. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  217. <xs:sequence />
  218. <xs:attribute name="Count" type="SageInt" use="required" />
  219. <xs:attribute name="Time" type="Time" use="required" />
  220. <xs:attribute name="CountOnlyEngagementsAgainstTheLocalPlayer" type="SageBool" use="required" />
  221. <xs:attribute name="CountOnlyEngagementsByTheLocalPlayer" type="SageBool" use="required" />
  222. <xs:attribute name="RequiredScreenStatus" type="ScreenStatus" use="required" />
  223. <xs:attribute name="TargetFilter" type="ObjectFilterAssetRef" use="optional" />
  224. </xs:extension>
  225. </xs:complexContent>
  226. </xs:complexType>
  227. <!-- Condition that tracks Kills made by the Player vs. Kills made against them, over time. It
  228. then computes the ratio of these Kills -->
  229. <xs:complexType name="MusicScriptConditionNugget_LocalPlayerKillRatio" xas:typeGroup="Xml">
  230. <xs:complexContent>
  231. <xs:extension base="MusicScriptConditionExpensiveNuggetBase" >
  232. <xs:sequence />
  233. <xs:attribute name="Time" type="Time" use="required" />
  234. <xs:attribute name="Ratio" type="SageReal" use="required" />
  235. <xs:attribute name="RatioOp" type="ComparisonOperator" use="required"/>
  236. </xs:extension>
  237. </xs:complexContent>
  238. </xs:complexType>
  239. <!-- Condition that detects when a number of objects have been hit by a super weapon -->
  240. <xs:complexType name="MusicScriptConditionNugget_HitBySuperWeapon" xas:typeGroup="Xml">
  241. <xs:complexContent>
  242. <xs:extension base="MusicScriptConditionNuggetBase" >
  243. <xs:sequence />
  244. <xs:attribute name="TrackedWeapon" type="WeaponWeakRef" use="required" />
  245. <xs:attribute name="Time" type="Time" use="required" />
  246. <xs:attribute name="Count" type="SageInt" use="required" />
  247. <xs:attribute name="CountOnlyHitsAgainstTheLocalPlayer" type="SageBool" use="required" />
  248. <xs:attribute name="TargetFilter" type="ObjectFilterAssetRef" use="optional" />
  249. </xs:extension>
  250. </xs:complexContent>
  251. </xs:complexType>
  252. <!-- Condition that detects when the LocalPlayer has hit the Red Alert Button -->
  253. <xs:complexType name="MusicScriptConditionNugget_LocalPlayerHitRedAlertButton" xas:typeGroup="Xml">
  254. <xs:complexContent>
  255. <xs:extension base="MusicScriptConditionNuggetBase">
  256. <xs:attribute name="DurationToReturnTrueAfterButtonHit" type="Time" use="required"/>
  257. </xs:extension>
  258. </xs:complexContent>
  259. </xs:complexType>
  260. <xs:complexType name="MusicScriptTimeoutSpecifier" >
  261. <xs:sequence/>
  262. <xs:attribute name="Weight" type="SageInt" default="1000" />
  263. <xs:attribute name="Duration" type="Time" use="required" />
  264. </xs:complexType>
  265. <!-- A music track that can play, and all the data about when & how it plays-->
  266. <xs:complexType name="MusicScriptTrack" xas:typeGroup="Xml">
  267. <xs:complexContent>
  268. <xs:extension base="BaseAssetType">
  269. <xs:sequence>
  270. <xs:element name="Timeout" type="MusicScriptTimeoutSpecifier" minOccurs="0" maxOccurs="unbounded" />
  271. </xs:sequence>
  272. <xs:attribute name="TrackTypeKey" type="StringHash" default="" />
  273. <xs:attribute name="Level" type="SageInt" use="required" />
  274. <xs:attribute name="Priority" type="SageInt" use="required" />
  275. <xs:attribute name="Condition" type="MusicScriptConditionRef" use="optional" />
  276. <!-- If ConditionsAreLatch is true, the conditions are only checked until they become true, at which point the
  277. music tracks plays every time the timeout expires. If false, conditions are checked before each playback -->
  278. <xs:attribute name="ConditionsAreLatch" type="SageBool" default="false" />
  279. <xs:attribute name="Track" type="AudioEventInfoRef" use="required" />
  280. <xs:attribute name="FadeInTrack" type="SageBool" default="false" />
  281. <xs:attribute name="FadeOutLowerLevelTrack" type="SageBool" default="true" />
  282. </xs:extension>
  283. </xs:complexContent>
  284. </xs:complexType>
  285. <!-- Top-level type. We are running exactly one of these at a time. Normally, only one is linked to a map.
  286. Selecting one of these selects all the lower-level music controls under it -->
  287. <xs:complexType name="MusicPalette" xas:typeGroup="Xml">
  288. <xs:complexContent>
  289. <xs:extension base="BaseAssetType">
  290. <xs:sequence>
  291. <xs:element name="Track" type="MusicScriptTrackRef" minOccurs="0" maxOccurs="unbounded" />
  292. </xs:sequence>
  293. <xs:attribute name="IsDefaultForNewMap" type="SageBool" default="false" />
  294. </xs:extension>
  295. </xs:complexContent>
  296. </xs:complexType>
  297. </xs:schema>