If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Arabian Magic

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Arabian Magic

Developer: Taito
Publisher: Taito
Platform: Arcade (Taito F3 System)
Released in JP: September 1992[1]
Released in US: October 1992[1]
Released in EU: September 1992[2]


DevTextIcon.png This game has hidden development-related text.
TextIcon.png This game has unused text.
DebugIcon.png This game has debugging material.
LevelSelectIcon.png This game has a hidden level select.


Arabian Magic is a slash-and-bash-and-zap 'em up game themed after Arabian mythology. The king has been turned into a monkey by dark magicks, and the player has to find the Jewel of Seven Colors to commence de-monkeyfication.

Debug Features

Round Select

ArabianMagicRoundSelect.png
This game uses the Taito Code:

  • While the game boots up, hold Service 1 until the "SERVICE SWITCH ERROR" message pops up on the screen.
  • Then, press 1P Start (x3), Service 1, 1P Start. The stage select menu should then appear.

Use 1P Joystick to select a round and 1P Start to start the game. "Round" is a bit misleading; what this actually does is select the starting area. For instance, area 4 is the start of Round 2, and area 23 is the final boss screen. Inputting this code will also start the player off with 9 credits.


(Source: RyogaMasaki)

Round Editor

To use this and the next debugging tool without triggering the game's checksum routine, place the following code in MAME's arabianm.xml (World set), arabianmj.xml (JP set), or arabianmu.xml (US set) cheat file and enable it:

  <cheat desc="Skip Checksum">
    <script state="run">
      <action>maincpu.mw@00D6E=0x0002</action>
    </script>
    <script state="off">
      <action>maincpu.mw@00D6E=0x00AE</action>
    </script>
  </cheat>

Then, put the following code in the same file and enable it to access a round editor shortly after the game boots:

  <cheat desc="Round Editor">
    <script state="run">
      <action>maincpu.md@04E24=0x00026312</action>
    </script>
    <script state="off">
      <action>maincpu.md@04E24=0x0000926C</action>
    </script>
  </cheat>

ArabianMagicRoundEditInit.png
First, the user has to select which round to load.

  • 1P Up/Down: Cycles between rounds.
  • 1P Button 1: Loads the selected round.

ArabianMagicRoundEditInitAttract.png

  • 1P Button 2: Spawns the profile and picture of Prince Lassid from the game's attract mode.
  • 1P Button 3: Exits editor.

ArabianMagicRoundEditCodeSet1.png ArabianMagicRoundEditCodeSet2.png
The round editor is actually fairly limited; the user is only able to edit the height definitions of each 16x16 tile. Strangely, loading a round does not also load its height data, so they initially start out blank. It's not clear if this is by design or if this is a consequence of accessing this tool in a retail build. Object loading is also buggy, with objects like vases and traps being present some of the time, and other times not loading at all. Moving the cursor slowly seems to help with loading objects.

  • 1P Joystick: Moves cursor.
  • 1P Button 1 / Button 2: Adjusts the height of the selected tile.
  • 1P Button 3: Switches between the following editing tools:
Code Set
The cursor can only adjust one tile at a time.

ArabianMagicRoundEditBox.png

Box
The user first presses 1P Button 1 to set the cursor's position, then uses 1P Joystick to change the width and height of the cursor. Then, the user presses 1P Button 1 again to save the dimensions of the cursor. From then on, the user can adjust all tiles in the area of the cursor by pressing 1P Button 1 / Button 2.

ArabianMagicRoundEditDaiBox.png

Dai Box
Same controls as the Box tool, but the cursor is shaped like a parallelogram instead of a rectangle.

ArabianMagicRoundEditCopy1.png ArabianMagicRoundEditCopy2.png

Copy
First, the user copies a section of height data using the same controls as the Box tool. Then, the user can press 1P Button 1 to paste that data onto the map.

ArabianMagicRoundEditPitSet1.png ArabianMagicRoundEditPitSet2.png

  • 2P Button 1: Places pit tiles at the cursor's position (except when using the Copy tool)

ArabianMagicRoundEditPit2Set.png

  • 2P Button 2: Place different pit tiles at the cursor's position. It's not clear what the difference is between the two pit types.
  • 1P Start: Switches to object testing mode.

ArabianMagicRoundEditObjectAdd.png
In this mode, the user can spawn objects at the center point of the screen. The "Start is:" text shows which object will be spawned. There are six special options that act as toggles rather than spawns:

  • Stats: Toggles tile data visibility.
  • Gimmick: Toggles certain objects like shadows.
  • PLAYER1: Toggles Prince Lassid in the 1P slot.
  • PLAYER2: Toggles Princess Lisa in the 2P slot.
  • PLAYER3: Toggles Sinbad in the 3P slot.
  • PLAYER4: Toggles Afshaal in the 4P slot.

Controls

  • 1P Joystick: Moves the camera.
  • 1P Button 1 / Button 2: Moves between the object list.
  • 1P Button 3: Spawns a copy of the selected object in the center of the screen.
  • 1P Button 1 + Button 2 + Button 3: Deletes all objects from the round.
  • 1P Start: Exits back to code set mode.
  • 2P Joystick: Function depends on the current edit mode (see below).
  • 2P Start: Cycles between the following edit modes:
  • EDITOR: 1p: 2P joystick moves the PLAYER1 object.
  • EDITOR: 2p: 2P joystick moves the PLAYER2 object.
  • 1p : 2p: 1P Joystick moves PLAYER1, 2P Joystick moves PLAYER2. User cannot move the camera in this mode.
(Source: Original TCRF research)

Running Debug

During development, pressing Tilt (Or, more likely, whatever actual button they had mapped to the same bit) would bring up a debug menu. Put the following code in arabianm.xml / arabianmj.xml / arabianmu.xml to switch the game's normal tilt check with the debug menu:

  <cheat desc="Running Debug">
    <script state="run">
      <action>maincpu.mw@007C6=0x4EB9</action>
      <action>maincpu.mw@007C8=0x0003</action>
      <action>maincpu.mw@007CA=0xF124</action>
      <action>maincpu.mw@007CC=0x4E75</action>
    </script>
    <script state="off">
      <action>maincpu.mw@007C6=0x0839</action>
      <action>maincpu.mw@007C8=0x0000</action>
      <action>maincpu.mw@007CA=0x004A</action>
      <action>maincpu.mw@007CC=0x0002</action>
    </script>
  </cheat>

ArabianMagicDebugMenu.png
The game is paused while the menu is up. The user can pick between the following options:

Cancel
Exits the menu. Pretty obvious.

Reset
Resets the game. Again, obvious.

Color Edit
ArabianMagicColorEdit.png
A tool that lets the user view and change the color values of the game's many palettes.

  • 1P Joystick: Moves cursor.
  • 1P Button 1 / 2: Increments/decrements current palette number or color value.
  • 1P Start: Exits menu.

No Enemy!
Sets bit 6 of RAM address 40E5BC. This should either remove all enemies or prevent them from spawning, but since that address isn't checked anywhere else in the code, this subroutine does nothing.

Player Move
Sets RAM address 41268A to FF. That address is checked nowhere else in the code, so this function does nothing.

Round Select
ArabianMagicRoundSelect2.png
Another round select. Unlike the first menu, this lists areas in a more sensible manner (Round 1-1, 1-2, etc.) and allows the user to jump directly to the end credits by selecting "END".

  • 1P Joystick: Changes selected round.
  • 1P Button 2: Warps to selected round.
  • 1P Start: Exits menu.

Object Display
ArabianMagicObjectDisplay.png
A simple viewer for the game's many different sprites.

  • 1P Left/Right: Adjusts current CHR number by 1.
  • 1P Up/Down: Adjusts current CHR number by 16.
  • 2P Joystick: Changes the sprite's position.
  • 1P Start: Exits menu.

See Invisible
Sets bit 6 of RAM address 40E5BC. This value is referenced in subroutines located at 36360 and 36392, but said subroutines aren't called anywhere in the code.

Hitdata Making Aid
ArabianMagicHitmakeAid.png
A strange tool that allows the user to see different sprites and control a hitbox that doesn't actually correspond with that sprite. The hitbox can be adjusted in size but this doesn't seem to have any effect on gameplay. Maybe this was meant as a visual aid?

  • 1P Joystick: Changes the position of the hitbox.
  • 1P Button 1/2: Adjusts the current object number.
  • 2P Left/Right: Adjusts the width of the hitbox.
  • 2P Up/Down: Increases the height of the hitbox.
  • 2P Button 2 + Joystick: Changes the sprite's position.
  • 1P Start: Exits menu.

Object Status
ArabianMagicObjectStatus.png
Shows the effect of the game's sprites on the main CPU. The first bar seems to be for complex sprites like the player characters and enemies, while the bottom bar is for simple sprites like the players' weapons and other projectiles.

Process Meter
Selecting this option normally does nothing; it toggles RAM address 40DC92, which is only referenced in an orphaned subroutine. However, putting the following MAME code in the appropriate XML file will hook that subroutine into the coin handler...

  <cheat desc="Process Meter Fix">
    <script state="run">
      <action>maincpu.md@014F4=0x4EB90007</action>
      <action>maincpu.mw@014F8=0xFCA0</action>
      <action>maincpu.md@7FCA0=0x4EB90000</action>
      <action>maincpu.md@7FCA4=0x24121039</action>
      <action>maincpu.md@7FCA8=0x004A0001</action>
      <action>maincpu.mw@7FCAC=0x4E75</action>
    </script>
    <script state="off">
      <action>maincpu.md@014F4=0x1039004A</action>
      <action>maincpu.mw@014F8=0x0001</action>
      <action>maincpu.md@7FCA0=0xFFFFFFFF</action>
      <action>maincpu.md@7FCA4=0xFFFFFFFF</action>
      <action>maincpu.md@7FCA8=0xFFFFFFFF</action>
      <action>maincpu.mw@7FCAC=0xFFFF</action>
    </script>
  </cheat>

ArabianMagicProcessMeter.png
...and the process meter will show up in the upper-left corner of the screen. The orange bar tracks how heavily the CPU is being used.

Task Status
Toggles RAM address 40DC93, which isn't checked anywhere else in the game's code. Function does nothing.

EEROM Dump
ArabianMagicEEROM.png
Prints out the raw contents of the EEPROM. Selecting the option again clears the screen.


(Source: ねこ自慢ブログ (升) Wayder Cheat 0.171)
(Additional fixes: Original TCRF research)

Location Test Screen

There's data for a location test screen in the main CPU, but the data is unreferenced. Put this code in either arabianm.xml, arabianmj.xml, or arabianmu.xml to swap out the introductory cutscene with the location test screen:

  <cheat desc="Location Test Screen">
    <script state="run">
      <action>maincpu.mw@2A30C=0xD3F2</action>
    </script>
    <script state="off">
      <action>maincpu.mw@2A30C=0xB54C</action>
    </script>
  </cheat>
JP INT
ArabianMagicLocationTestJP.png ArabianMagicLocationTestEN.png
Congratulations on clearing the round(s)!
However, the journey of the prince and his crew
is from over, so please look forward to the rest.

Note that MAME cannot properly display text during most cutscenes in English-language sets, but the text can still be seen tilemap viewer on layer 9; the second screenshot is a mockup of how it would look like on a real machine.

(Source: Original TCRF research)

Special High Score Names

ArabianMagicHighScore.png
There are three names that are checked at the high score entry:

  • A blank name will be changed to "F3S", short for the Taito F3 System the game is based on.
  • AAA will be replaced with three random characters based on the current RNG value at 40DC84.
  • SEX will be changed to "幸せ。", which translates to happiness or good fortune.
(Source: Original TCRF research)

Developer Text

A large amount of apparent filler text is stored at 0x1059CC in the audio CPU. This seems to be from an OS for an Ensoniq keyboard synthesizer, possibly from the SQ-1 line:

MIDI 
Base 
Channel
CARD 
Ftsw
elect
Time
Glide
Wave
Filter
FC1 
FC2 
Cutoff
nvelope
Keyb
oard
SORRY! 
Save
SOUND
ound
Press
efault
Prog
Pedal
Output
SEQUENCE
Sequence
Record
Click 
Volume
Erase 
Length
Change
Song
Select a 
first.
FROM 
TO 
Bars
Location
New 
oice
SEQ/Pset
SONG/Pset
Preset
Copy 
No free
lease
Operation = 
Stor
Size
Step
Transpose
Event
Edit 
Range
Status
 Command
Card 
 card
Quantize 
Start:
End:
SEQ 
SNG 
SONG 
PUNCH IN:
PUNCH OUT:
data
Shift 
Scale 
 Signature
memory
Decay
Level
Center
Depth
Chorus 
Flange 
Phaser 
Rotor 
Detune 
Rate
Feedback
Delay 
Over
Speed
 Map
Rename 
 Info
 empty
write 
Number
Install a
Loop
locks
Source

 ENTER
  to 
Re 
  wait...

 is
     on
 first.
Write to 
  ENSONIQ EGOS  
Personal  Studio
0.35
  OS Version  
 Unexpected EventID = 
 Press any button
WARNING! Batterylow. See manual.
 Analog Tests
  preparing demo.
Replace edit  ?
  wrong type, erase?
   on ?
  ?
 Reinit 
Reinitialize   & seq RAM?
 changes? 
 to 
 save new  .
 successful!
  not done. 
  editing   
  sending   
 SysEx error 
GPR 
Value
?
/
.
Download retry.
  failed.
 I cannot  ROM.
 RAM 
 seq 
  is .
  is .
Need morespace on .
Need  expanded RAM.
Current   is muted.
You must  a  .
There are  no parameters.
  locating
 must be stopped.
 Out of  .
theYES or NO 
CANNOT APPEND!  Exceeds 999 bars
No   on   
Dest   
Seq state error
   Parameters?
Mixed   s
    on destination?
 s partially  appended
Running out of  
Tempo
Bar
Beat
C
B
b
S
R
Mod
*
XCtrl
Controllers
System Excl
Master Tune
Global Bend
Touch
 TrkName
 Muting
S VOICE:
Key
  Restrike  
Wave
Direction
Start Index
Oct
Semi
Fine
Env1
LFO
  Pitch  ing
Levl
LevV
AtckV
VelCurv
  Trk
Gate 
LFO 
Dlay	
Restart
Noise 
Vol
Boost
Pan
 Scale
Key 
 Bus
Priority
Vel Window
Trk
  ram

Sustain

Timbre

FX1
FX2
HF Damping
HF Bandwidth

Low Frequency   
Diffusion
Stereo  Cross - 
Repeats
 Lag
 mAmount
 Drive
LoRotor  
 Src

Fast 
Slow 

Input Invert

Dist 
Modulate
by 
Compression
Distortion  In
Out
Reverb to Cmprss 
HiPass 

LoPass 

PW
CV
Knob
Reference
Bat
KEYUP

EXT

 Set   
 Clear Key 
  s
  s
  age Type =
 COPY
 COPY
 SAVE
 ,goto
 Keep firstxxx bars?
Clock
Countoff
Free Memory  
  uses effectfrom:
    sDisplayed:
Prompt to    s:
Auto Punch

  Entry
Interval

  ing!
Autostep
Gate
Step
 name =
    = 
     = 

   =
   =
   =
   =
   =
    = 
     = 
  at Bar

Minutes 
Seconds 
Total 
 
Loc
 SEQ
 SONG

Rep

Track
 to  nearest
TO:   
Insert copied   at bar:
Semitones to  :
  of  to shift by:

by factor:

 Duration:  Beats
Clks
  Key   
  RAM  
    #
 A =#
 B =#
 -UNDEFINED- #
*EMPTY SEQ/PSET*
*  EMPTY SONG  *
* END OF SONG * 
 UNDEFINED STEP 
Create  
Create  

Song-00         
Sequence-00     

A complete set of sample names can be found at the start of each bank in the Ensoniq sample ROM (d29-01.ic17):

0x000000 0x080000 0x100000 0x180000
KEN SWING   
NUNO        
HAMMAR FURI 
THUNDER-MAG 
BOSS MAGIC  
POWER UP    
ITEM COIN 3 
POWER UP 2  
P1 NAGE     
P2 NAGE     
P3 NAGE     
P4 NAGE     
HIT 1       
HIT 2       
HIT 3       
HIT 4       
HIT 5       
KEN VS KEN 1
KEN VS KEN 2
KEN VS KEN 3
KEN VS KEN 4
KEN VS KEN 5
NAGURU 1    
NAGURU 2    
OWAZA       
FIRE BALL   
COIN        
PLAYER 1    
PLAYER 2    
PLAYER 3    
PLAYER 4    
ZAKO VOICE 1
ZAKO VOICE 2
SYAZANBREATH
NOKOGIRI    
BOSS DEAD 2 
THUNDER-MUS 
TIMPANI     
WIDE MID STR
SITAR       
HARP        
HORN        
BR ORCH LOW 
TRUMPET MID 
PIANO 1     
PIANO 2     
PIANO 3     
PIANO 4     
PIANO 5     
CYMBAL      
BOWAWA      
SYAZAN 1-2  
SYAZAN 2-2  
SYAZAN 3-2  
CHARM       
TATSUMAKI 2 
IKAKU 2     
HABATAKI    
ROCK BIRD 2 
BOSS DEAD   
ROC TOUJOU  
MISSILE     
BOSS KURUI 2
UNE UNE     
UNE UNE 3   
UNE UNE 2   
UNE DEAD    
BREATH      
TILTOWAIT   
SHIELD MAGIC
IKAKU 3     
SYOKAN 2    
KANJIJIPUNCH
BALANTWARAI 
SUPON       
HYUUU       
COBRA       
POCHI APPIER
TOBISARU    
ZAKO YARARE5
HIKIZURI 2  
DOOR        
TAKARA      
MOKUCRASH   
SHINDO      
IWA KOROGARI
SHIZUKU     
YARI        
ISHI KOWARE 
KOUMORI     
NAMI TO KAZE
FUNE KISIMI 
RIVER       
TOBIKOMI    
ICHIBA 2    
HANA NAKIGOE
RYUUSA 3    
TEKI MAGIC  
TSURIBASI DW
TSURIBASIDON
HONE BUNKAI 
GLASS*TATAKI
P1 DAMAGE   
P1 YARARE   
P2 DAMAGE   
P2 YARARE   
P3 DAMAGE   
P3 YARARE   
P4 DAMAGE   
P4 YARARE   
TIME UP     
KAZI        
SUN MAGIC   
(Source: Original TCRF research)

References