Skip to content

Commit

Permalink
magicard.cpp improvements: [Roberto Fresca, Grull Osgo]
Browse files Browse the repository at this point in the history
 - New machine driver for Simply the Best:
 - Memory map from the scratch after a lot of reverse-engineering.
 - Inputs and outputs from the scratch.
 - Added button-lamps support and control panel layout.
 - Created default signed NVRAM neccessary to boot the game.
 - Promoted to working with machine unemulated protection flag.

Systems promoted to working
---------------------------
Simply the Best (CZ750, v1.0) [Roberto Fresca, Grull Osgo, Team Europe]
  • Loading branch information
RobertoFresca committed Dec 31, 2023
1 parent 2e81e12 commit f0a69f2
Show file tree
Hide file tree
Showing 2 changed files with 413 additions and 40 deletions.
261 changes: 261 additions & 0 deletions src/mame/layout/simpbest.lay
Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
<?xml version="1.0"?>
<!--
license:CC0-1.0
copyright-holders: Roberto Fresca
**************************************************
Simply the Best (Kajot).
Realistic clickable buttons-lamps.
**************************************************
-->
<mamelayout version="2">

<!-- define basic elements -->

<element name="hold1" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="HOLD 1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="QUICK GAMBLE">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="hold2" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="HOLD 2">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="......">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="hold3" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="HOLD 3">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="......">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="hold4" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="HOLD 4">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="......">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="hold5" defstate="0">
<rect state="1">
<color red="1.0" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.0" blue="0.0" />
</rect>
<text string="HOLD 5">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="PAYTABLE">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="cancel" defstate="0">
<rect state="1">
<color red="1.0" green="0.43" blue="0.0" />
</rect>
<rect state="0">
<color red="0.3" green="0.14" blue="0.0" />
</rect>
<text string="CANCEL">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="BET/TAKE">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>

<element name="start" defstate="0">
<rect state="1">
<color red="0.0" green="1.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.25" blue="0.0" />
</rect>
<text string="START">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="BONUS GAMBLE">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>


<element name="hold_b" defstate="0">
<rect state="1">
<color red="0.7" green="0.0" blue="0.0" />
</rect>
<rect state="0">
<color red="0.2" green="0.0" blue="0.0" />
</rect>
</element>

<element name="cancel_b" defstate="0">
<rect state="1">
<color red="0.7" green="0.3" blue="0.0" />
</rect>
<rect state="0">
<color red="0.25" green="0.10" blue="0.0" />
</rect>
</element>

<element name="start_b" defstate="0">
<rect state="1">
<color red="0.0" green="0.7" blue="0.0" />
</rect>
<rect state="0">
<color red="0.0" green="0.15" blue="0.0" />
</rect>
</element>


<!-- define cpanel degradee elements -->

<element name="cpanel">
<rect>
<color red="0.0" green="0.0" blue="0.0" />
</rect>
</element>

<element name="cpanel1">
<rect>
<color red="0.20" green="0.20" blue="0.20" />
</rect>
</element>

<element name="cpanel2">
<rect>
<color red="0.15" green="0.15" blue="0.15" />
</rect>
</element>

<element name="cpanel3">
<rect>
<color red="0.10" green="0.10" blue="0.10" />
</rect>
</element>

<element name="cpanel4">
<rect>
<color red="0.05" green="0.05" blue="0.05" />
</rect>
</element>


<!-- define cpanel layout -->

<view name="Button Lamps">
<screen index="0">
<bounds left="0" top="0" right="4" bottom="3" />
</screen>

<element ref="cpanel"> <bounds left="0" right="4" top="3" bottom="3.50" /></element>
<element ref="cpanel1"><bounds left="0" right="4" top="3.01" bottom="3.49" /></element>
<element ref="cpanel2"><bounds left="0" right="4" top="3.02" bottom="3.48" /></element>
<element ref="cpanel3"><bounds left="0" right="4" top="3.03" bottom="3.47" /></element>
<element ref="cpanel4"><bounds left="0" right="4" top="3.04" bottom="3.46" /></element>
<element ref="cpanel"> <bounds left="0" right="4" top="3.05" bottom="3.45" /></element>

<element name="lamp1" ref="hold_b" inputtag="IN0" inputmask="0x0010">
<bounds x="0.10" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp1" ref="hold1" inputtag="IN0" inputmask="0x0010">
<bounds x="0.12" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp2" ref="hold_b" inputtag="IN0" inputmask="0x0800">
<bounds x="0.65" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp2" ref="hold2" inputtag="IN0" inputmask="0x0800">
<bounds x="0.67" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp3" ref="hold_b" inputtag="IN0" inputmask="0x1000">
<bounds x="1.20" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp3" ref="hold3" inputtag="IN0" inputmask="0x1000">
<bounds x="1.22" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp4" ref="hold_b" inputtag="IN0" inputmask="0x0400">
<bounds x="1.75" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp4" ref="hold4" inputtag="IN0" inputmask="0x0400">
<bounds x="1.77" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp5" ref="hold_b" inputtag="IN0" inputmask="0x0040">
<bounds x="2.30" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp5" ref="hold5" inputtag="IN0" inputmask="0x0040">
<bounds x="2.32" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp6" ref="cancel_b" inputtag="IN0" inputmask="0x0020">
<bounds x="2.90" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp6" ref="cancel" inputtag="IN0" inputmask="0x0020">
<bounds x="2.92" y="3.15" width="0.41" height="0.20" />
</element>

<element name="lamp7" ref="start_b" inputtag="IN0" inputmask="0x0080">
<bounds x="3.45" y="3.13" width="0.45" height="0.24" />
</element>
<element name="lamp7" ref="start" inputtag="IN0" inputmask="0x0080">
<bounds x="3.47" y="3.15" width="0.41" height="0.20" />
</element>

</view>
</mamelayout>
Loading

9 comments on commit f0a69f2

@mamehaze
Copy link
Contributor

@mamehaze mamehaze commented on f0a69f2 Dec 31, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the lack of MCU emulation means you 'always win' as per your video, then I don't think promoting it to working makes sense.

Dropping the NOT WORKING flag will cause it to be listed in the 'new working systems' part of the whatsnew. Nobody would consider a gambling game where the key part of the game (the winning odds calculations) is completely wrong, and always favor the player to be working. It's like a music game with no sound.

@mamehaze
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cuavas any opinion yourself?

I know Kale will say 'Unemulated protection is a red flag' etc. but the fact is if we remove 'not working' people are going to assume the game works, and when we KNOW there are critical issues caused by protection, the not working flag should remain. It feels like we're lying to users if this appears as a new working game in the whatsnew.

Robbie's own video clearly shows that the game doesn't work properly https://www.youtube.com/watch?app=desktop&v=wXZ90_EjU1A and he even says it in the comments.

If this is a policy issue, it needs clarifying as this is far more significant than a music game which might be a frame off.

@angelosa
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Name dropping me over this is really awkward. Also I thought at this point the QA was clear cut about "gamblers that gives a payout of 100% due of unemulated MCU" -> always MNW.

@mamehaze
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm stating that you've previously expressed an opinion on the use of this flag (most recently with Double Dealer, which really was never a working game until the MCU hookup)

Stop being a meme.

@angelosa
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I actually had people playtesting the game, and they didn't reported anything that was deserving the MNW even with the simulation. Stop being a jerk.

@mamehaze
Copy link
Contributor

@mamehaze mamehaze commented on f0a69f2 Dec 31, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the scoring (required to complete a level!) was broken, the coins didn't work, the sound tempo was entirely incorrect.......

I mean it might even have been my fault in the first place that it got promoted, but it absolutely did still deserve a NOT_WORKING flag.

@angelosa
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm still not sure why you are bringing up Double Dealer here, enjoy the lock anyway.

@cuavas
Copy link
Member

@cuavas cuavas commented on f0a69f2 Jan 1, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cuavas any opinion yourself?

If this is a policy issue, it needs clarifying as this is far more significant than a music game which might be a frame off.

Policy is that if you can’t complete a game as the designers intended, it’s not working. A gambler where you always win is not working.

@mamehaze open a PR to demote it if Robbie doesn’t do it.

@RobertoFresca
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will do.

Please sign in to comment.