Skip to content

Commit 07b9880

Browse files
committed
Added support for Actionamics format.
1 parent 7a7366a commit 07b9880

27 files changed

+3372
-1
lines changed

Documentation/features.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<tr><td>
2626
<span>
2727
<ul>
28-
<li>Supports 204 different types of modules (and increasing).</li>
28+
<li>Supports 205 different types of modules (and increasing).</li>
2929
<li>One of the most accurate players in the world: plays modules like nature intended.</li>
3030
<li>Fast and optimized.</li>
3131
<li>Edit and save your favorite lists of modules.</li>
Lines changed: 3 additions & 0 deletions
Loading
Lines changed: 3 additions & 0 deletions
Loading

Documentation/moduletypes.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,20 @@
7979
</span>
8080
</td>
8181
</tr>
82+
<tr name="A" style="display:none;">
83+
<td>
84+
<a href="images/editors/actionamics.png" data-lightbox="image-actionamics"><img src="images/editors/Actionamics_t.png"/></a>
85+
</td>
86+
<td>
87+
<span>
88+
<p><b><i>Actionamics</i></b> - With this player, you can play the music from Dynablaster.</p>
89+
<p class="first"><b>File extension</b></p>
90+
<p>.ast</p>
91+
<p><b>Player</b></p>
92+
<p>Actionamics</p>
93+
</span>
94+
</td>
95+
</tr>
8296
<tr name="A" style="display:none;">
8397
<td>
8498
<a href="images/editors/activisionpro.png" data-lightbox="image-activisionpro"><img src="images/editors/activisionpro_t.png"/></a>
Lines changed: 240 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,240 @@
1+
0 2 BPM
2+
2 4 Length of signature
3+
6 4 Length of module info (MI)
4+
A 4 Length of track number lists (TNL)
5+
E 4 Length of note transpose lists (NTL)
6+
12 4 Length of instrument transpose lists (ITL)
7+
16 4 Length of instrument info (II)
8+
1A 4 Length of sample number lists (SNL)
9+
1E 4 Length of arpeggio lists (AL)
10+
22 4 Length of frequency list (FL)
11+
26 4 Length of ? (not used in player) (?1L)
12+
2A 4 Length of ? (not used in player) (?2L)
13+
2E 4 Length of subsong info (SSI)
14+
32 4 Length of ? (not used in player) (?3L)
15+
36 4 Length of sample info (SIL)
16+
3A 4 Length of track offset table (TOL)
17+
3E 1C Signature (ACTIONAMICS SOUND TOOL V0.1/)
18+
5A MI Module information
19+
20+
--- These 3 lists is a position list combined, but the information are stored in each list ---
21+
TNL Track number list for voice 1 (TNL/4 in length)
22+
Track number list for voice 2
23+
Track number list for voice 3
24+
Track number list for voice 4
25+
NTL Note transpose value list for voice 1 (NTL/4 in length)
26+
Note transpose value list for voice 2
27+
Note transpose value list for voice 3
28+
Note transpose value list for voice 4
29+
ITL Instrument transpose value list for voice 1 (ITL/4 in length)
30+
Instrument transpose value list for voice 2
31+
Instrument transpose value list for voice 3
32+
Instrument transpose value list for voice 4
33+
---
34+
II Instrument information
35+
SNL Sample number lists (16 bytes each)
36+
AL Arpeggio lists (16 bytes each)
37+
FL Frequency lists (16 bytes each)
38+
?1L ?
39+
?2L ?
40+
SSI Subsong information
41+
?3L ?
42+
SIL Sample information
43+
TOL 2 bytes per track holding the offset to the track data
44+
Track data
45+
Sample data (offset can be calculated by counting the sample lengths stored in sample information and subtract it from the value stored in module information)
46+
47+
48+
Module information:
49+
0 4 Total length of module
50+
51+
52+
Subsong information (4 bytes each):
53+
54+
0 1 Start position
55+
1 1 End position
56+
2 1 Loop position
57+
3 1 Speed
58+
59+
60+
Instrument information (20 bytes each):
61+
62+
0 1 Sample list number
63+
1 1 Number of values in sample number list
64+
2 1 Sample number list start counter delta value
65+
3 1 Sample number list counter end value
66+
4 1 Arpeggio list number
67+
5 1 Number of values in arpeggio list
68+
6 1 Arpeggio list start counter delta value
69+
7 1 Arpeggio list counter end value
70+
8 1 Freqency list number
71+
9 1 Number of values in frequency list
72+
A 1 Frequency list start counter delta value
73+
B 1 Frequency list counter end value
74+
C 1 Portamento increment value
75+
D 1 Portamento delay
76+
E 1 Note transpose
77+
F 1 Unknown
78+
10 1 Attack end volume
79+
11 1 Attack speed
80+
12 1 Decay end volume
81+
13 1 Decay speed
82+
14 1 Sustain delay
83+
15 1 Release end volume
84+
16 1 Release speed
85+
17 9 Unknown
86+
87+
88+
Sample information (40 bytes each):
89+
90+
0 4 Pointer to sample data (initialized by the player)
91+
4 2 Length of sample in words
92+
6 2 Loop start in words
93+
8 2 Loop length in words (1 if no loop)
94+
A 2 Effect start position in words
95+
C 1 Arpeggio list number
96+
C 2 Effect length in words (seems this overlap arpeggio list number. Bug in player?)
97+
E 2 Effect speed
98+
10 2 Effect mode (0 = Do nothing, 1 = Forward, 2 = Backwards, 3 = Ping-pong)
99+
12 2 Effect increment value
100+
14 4 Effect position
101+
18 2 Effect speed counter
102+
1A 2 Already taken flag
103+
1C
104+
20 20 Sample name
105+
106+
107+
Track data:
108+
109+
For each row, read until a negative number or effect is reached.
110+
111+
00-6F Note. Next byte is instrument number if positive, else rows to wait
112+
70-7F Effect. Next byte is the argument
113+
80-FF Number of rows to wait
114+
115+
116+
Effects:
117+
118+
70 - Arpeggio
119+
71 - Slide up
120+
72 - Slide down
121+
73 - Volume slide
122+
74 - Vibrato
123+
75 - Set track rows
124+
76 - Set sample offset
125+
77 - Retrig
126+
78 - Mute
127+
79 - Restart sample
128+
7A - Tremolo
129+
7B - Track break
130+
7C - Set volume
131+
7D - Volume slide with retrig
132+
7E - Volume slide + vibrato
133+
7F - Set speed
134+
135+
136+
Internal player structures:
137+
138+
139+
0310 1 Song has looped
140+
0311 1 Stop on loop
141+
0312 1 Disable playing
142+
143+
0466 4 Pointer to signature in module
144+
046A 4 Pointer to length of module
145+
046E 4 Pointer to track number lists
146+
0472 4 Pointer to note transpose lists
147+
0476 4 Pointer to instrument transpose lists
148+
047A 4 Pointer to instrument info
149+
047E 4 Pointer to sample number list
150+
0482 4 Pointer to arpeggio list
151+
0486 4 Pointer to frequency list
152+
048A 4 Pointer to ???
153+
048E 4 Pointer to ???
154+
0492 4 Pointer to subsong info
155+
0496 4 Pointer to ???
156+
049A 4 Pointer to sample info
157+
049E 4 Pointer to track offsets
158+
04A2 4 Pointer to track data
159+
160+
1036 4 Cache for note and sample number
161+
162+
1080 62 Voice 1 structure
163+
10E2 62 Voice 2 structure
164+
1144 62 Voice 3 structure
165+
11A6 62 Voice 4 structure
166+
167+
1208 4 Start of module
168+
120C
169+
170+
120E 1 End position
171+
120F 1 Current speed
172+
1210 1 Current position
173+
1211 1 Current row position
174+
1212 1 Speed counter
175+
1213 1 Number of rows per track
176+
1214 1 Measure counter
177+
1215 1 Loop position
178+
1216 2 BPM
179+
1218 1 Current subsong
180+
181+
12AC 4 Pointer to current sample information for voice 1
182+
12B0 4 Pointer to current sample information for voice 2
183+
12B4 4 Pointer to current sample information for voice 3
184+
12B8 4 Pointer to current sample information for voice 4
185+
186+
187+
Voice structure:
188+
189+
0 4 Offset to position lists
190+
4 4 Pointer to sample data
191+
8 2 Sample length in words
192+
A 2 Final period
193+
C 2 Final volume (0-FF)
194+
E 2 DMA bit
195+
10 2 Hardware start offset (A0, B0, C0, D0)
196+
12 2 Envelope state
197+
14 2 Sustain counter
198+
16 4 Pointer to instrument information
199+
1A 4 Pointer to loop point in sample data
200+
1E 2 Sample loop length in words
201+
20 2 Final note
202+
22
203+
23 1 Sample number list speed counter
204+
24 2 Sample number list position
205+
26
206+
27 1 Arpeggio list speed counter
207+
28 2 Arpeggio list position
208+
2A
209+
2B 1 Frequency list speed counter
210+
2C 2 Frequency list position
211+
2E 2 Note
212+
30 2 Instrument number
213+
32 2 Effect
214+
34 2 Effect argument
215+
36
216+
37 1 Portamento delay counter
217+
38
218+
39 1 Instrument transpose
219+
3A 2 Portamento value
220+
3C 2 Tone portamento end period
221+
3E 2 Tone portamento increment value
222+
40 4 Pointer to track data
223+
44
224+
45 1 Delay counter
225+
46
226+
47 1 Note transpose
227+
48 2 Sample number
228+
4A 1 Vibrato effect argument
229+
4B 1 Vibrato table index. Bit 7 indicate direction
230+
4C 2 Note period
231+
4E 2 Use cache
232+
50 1 Tremolo effect argument
233+
51 1 Tremolo table index. Bit 7 indicate direction
234+
52 2 Tremolo volume (not set in player, always 0)
235+
54 2 Sample offset effect argument
236+
56 2 Note delay counter
237+
58 2 Restart delay counter
238+
5A 4 Restart sample data
239+
5E 2 Restart sample length
240+
60 2 Global voice volume (4041)

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Modules in all supported formats can be found on my homepage at https://nostalgi
4444
| Format | Extension | Converter | Player |
4545
| ------ | -------------- | --------- | ------ |
4646
| AC1D Packer | .ac1d / .ac1 | ProWizard | ModTracker |
47+
| Actionamics | .ast | | Actionamics |
4748
| Activision Pro | .avp | | Activision Pro |
4849
| AHX 1.x | .ahx / .thx | | HivelyTracker |
4950
| AHX 2.x | .ahx / .thx | | HivelyTracker |
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/******************************************************************************/
2+
/* This source, or parts thereof, may be used in any software as long the */
3+
/* license of NostalgicPlayer is keep. See the LICENSE file for more */
4+
/* information. */
5+
/******************************************************************************/
6+
using System;
7+
using System.Runtime.InteropServices;
8+
using Polycode.NostalgicPlayer.Kit.Bases;
9+
using Polycode.NostalgicPlayer.Kit.Containers;
10+
using Polycode.NostalgicPlayer.Kit.Interfaces;
11+
12+
// This is needed to uniquely identify this agent
13+
[assembly: Guid("DDC8CC9E-A24D-4743-B54E-C168526BBC7B")]
14+
15+
namespace Polycode.NostalgicPlayer.Agent.Player.Actionamics
16+
{
17+
/// <summary>
18+
/// NostalgicPlayer agent interface implementation
19+
/// </summary>
20+
public class Actionamics : AgentBase
21+
{
22+
private static readonly Guid agent1Id = Guid.Parse("F25342AA-ADED-4AB6-92B5-E9220B0C76E1");
23+
24+
#region IAgent implementation
25+
/********************************************************************/
26+
/// <summary>
27+
/// Returns the name of this agent
28+
/// </summary>
29+
/********************************************************************/
30+
public override string Name => Resources.IDS_AST_NAME;
31+
32+
33+
34+
/********************************************************************/
35+
/// <summary>
36+
/// Returns a description of this agent
37+
/// </summary>
38+
/********************************************************************/
39+
public override string Description => Resources.IDS_AST_DESCRIPTION;
40+
41+
42+
43+
/********************************************************************/
44+
/// <summary>
45+
/// Returns all the formats/types this agent supports
46+
/// </summary>
47+
/********************************************************************/
48+
public override AgentSupportInfo[] AgentInformation =>
49+
[
50+
new AgentSupportInfo(Resources.IDS_AST_NAME_AGENT1, Resources.IDS_AST_DESCRIPTION_AGENT1, agent1Id),
51+
];
52+
53+
54+
55+
/********************************************************************/
56+
/// <summary>
57+
/// Creates a new worker instance
58+
/// </summary>
59+
/********************************************************************/
60+
public override IAgentWorker CreateInstance(Guid typeId)
61+
{
62+
return new ActionamicsWorker();
63+
}
64+
#endregion
65+
}
66+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<RootNamespace>Polycode.NostalgicPlayer.Agent.Player.Actionamics</RootNamespace>
6+
<DocumentationFile>bin\Actionamics.xml</DocumentationFile>
7+
<GenerateDocumentationFile>True</GenerateDocumentationFile>
8+
<Authors>Thomas Neumann</Authors>
9+
<Company>Polycode</Company>
10+
<Product>NostalgicPlayer</Product>
11+
<Description>Plays modules created with Actionamics</Description>
12+
<Version>3.0.0</Version>
13+
</PropertyGroup>
14+
15+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
16+
<TreatWarningsAsErrors>True</TreatWarningsAsErrors>
17+
</PropertyGroup>
18+
19+
<ItemGroup>
20+
<ProjectReference Include="..\..\..\NostalgicPlayer.Kit\NostalgicPlayer.Kit.csproj" />
21+
</ItemGroup>
22+
23+
<ItemGroup>
24+
<Reference Include="Microsoft.Windows.SDK.NET">
25+
<HintPath>C:\Users\Neumann\.nuget\packages\microsoft.windows.sdk.net.ref\10.0.19041.57\lib\net8.0\Microsoft.Windows.SDK.NET.dll</HintPath>
26+
</Reference>
27+
</ItemGroup>
28+
29+
<ItemGroup>
30+
<Compile Update="Resources.Designer.cs">
31+
<DesignTime>True</DesignTime>
32+
<AutoGen>True</AutoGen>
33+
<DependentUpon>Resources.resx</DependentUpon>
34+
</Compile>
35+
</ItemGroup>
36+
37+
<ItemGroup>
38+
<EmbeddedResource Update="Resources.resx">
39+
<Generator>ResXFileCodeGenerator</Generator>
40+
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
41+
</EmbeddedResource>
42+
</ItemGroup>
43+
44+
</Project>

0 commit comments

Comments
 (0)