Main Restorations Software Audio/Jukebox/MP3 Everything Else Buy/Sell/Trade
Project Announcements Monitor/Video GroovyMAME Merit/JVL Touchscreen Meet Up Retail Vendors
Driving & Racing Woodworking Software Support Forums Consoles Project Arcade Reviews
Automated Projects Artwork Frontend Support Forums Pinball Forum Discussion Old Boards
Raspberry Pi & Dev Board controls.dat Linux Miscellaneous Arcade Wiki Discussion Old Archives
Lightguns Arcade1Up Try the site in https mode Site News

Unread posts | New Replies | Recent posts | Rules | Chatroom | Wiki | File Repository | RSS | Submit news

  

Author Topic: Sega Monaco GP 1979/1980 - My Remake  (Read 182311 times)

0 Members and 1 Guest are viewing this topic.

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9504
  • Last login:Today at 01:40:53 am
  • Designated spam hunter
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #480 on: September 20, 2024, 10:36:00 am »
I wonder what mame would do if you had that type of pedal and wanted to connect it up... Might have a look at the mame source to find out if its possible.
First glance looks promising . . .
https://github.com/mamedev/mame/blob/master/src/mame/sega/turbo.cpp
Lines 443-448
Code: [Select]
ioport_value turbo_base_state::pedal_r()
{
// inverted 2-bit Gray code from a pair of optos in mechanical pedal
uint8_t pedal = m_pedal->read();
return (pedal >> 6) ^ (pedal >> 7) ^ 0x03;
}
Lines 739-740
Code: [Select]
PORT_START("PEDAL")
PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)

. . . then I ran it in MAME 0.262.  There's no "Machine Configuration" menu so it doesn't look like there's currently any way to use the original pedal with MAME.

The good news is that you can clearly see the four different speed settings in low gear as you adjust the pedal potentiometer.   ;D


Scott

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #481 on: September 20, 2024, 11:36:36 am »
I wonder what mame would do if you had that type of pedal and wanted to connect it up... Might have a look at the mame source to find out if its possible.
First glance looks promising . . .
https://github.com/mamedev/mame/blob/master/src/mame/sega/turbo.cpp
Lines 443-448
Code: [Select]
ioport_value turbo_base_state::pedal_r()
{
// inverted 2-bit Gray code from a pair of optos in mechanical pedal
uint8_t pedal = m_pedal->read();
return (pedal >> 6) ^ (pedal >> 7) ^ 0x03;
}
Lines 739-740
Code: [Select]
PORT_START("PEDAL")
PORT_BIT( 0xff, 0, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20)

. . . then I ran it in MAME 0.262.  There's no "Machine Configuration" menu so it doesn't look like there's currently any way to use the original pedal with MAME.

The good news is that you can clearly see the four different speed settings in low gear as you adjust the pedal potentiometer.   ;D


Scott

Nice find Scott, cheers! Looking at that code I bet you could 'hack' mame to connect up the original pedal if you really wanted to. Anyways, looking forward to trying turbo out with my pedal potentiometer later :)

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9504
  • Last login:Today at 01:40:53 am
  • Designated spam hunter
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #482 on: September 20, 2024, 06:01:02 pm »
Looking at that code I bet you could 'hack' mame to connect up the original pedal if you really wanted to.
Well . . . a C++ code monkey probably could do that, but I've only evolved to the level of code paramecium.   :P   :lol

Found some more relevant code in turbo.cpp.

Lines 662-669 define input port "IN0", line 663 shows that port bit 0x03 relates to the pedal.
Code: [Select]
static INPUT_PORTS_START( turbo )
PORT_START("IN0") // IN0
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(turbo_base_state, pedal_r)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Gear Shift") PORT_TOGGLE

Lines 565-582 show the program/address(?) map, line 580 maps port "IN0".
Code: [Select]
void turbo_state::prg_map(address_map &map)
{
map(0x0000, 0x5fff).rom();
map(0xa000, 0xa0ff).mirror(0x0700).rw(FUNC(turbo_state::spriteram_r), FUNC(turbo_state::spriteram_w));
map(0xa800, 0xa807).mirror(0x07f8).w("outlatch", FUNC(ls259_device::write_d0));
map(0xb000, 0xb3ff).mirror(0x0400).ram().share(m_sprite_position);
map(0xb800, 0xbfff).w(FUNC(turbo_state::analog_reset_w));
map(0xe000, 0xe7ff).ram().w(FUNC(turbo_state::videoram_w)).share(m_videoram);
map(0xe800, 0xefff).w(FUNC(turbo_state::collision_clear_w));
map(0xf000, 0xf7ff).ram();
map(0xf800, 0xf803).mirror(0x00fc).rw(m_i8255[0], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xf900, 0xf903).mirror(0x00fc).rw(m_i8255[1], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfa00, 0xfa03).mirror(0x00fc).rw(m_i8255[2], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfb00, 0xfb03).mirror(0x00fc).rw(m_i8255[3], FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0xfc00, 0xfc01).mirror(0x00fe).rw("i8279", FUNC(i8279_device::read), FUNC(i8279_device::write));
map(0xfd00, 0xfdff).portr("IN0");
map(0xfe00, 0xfeff).r(FUNC(turbo_state::collision_r));
}

There are also three references to the pedal in turbo.h.
https://github.com/mamedev/mame/blob/master/src/mame/sega/turbo.h
Line 41
Code: [Select]
, m_pedal(*this, "PEDAL")

Line 47
Code: [Select]
ioport_value pedal_r();

Line 68
Code: [Select]
optional_ioport m_pedal;

. . . and that's about as far as I can take it.

No idea how to change the MAME source code from a potentiometer input to the two opto inputs or how to add a "Machine Configuration" menu item to select between a potentiometer pedal and the original optical pedal.   :dunno
- There might be a clue on how to do the Machine Configuration part in the 720 source code since IIRC MAME can be configured to use either a spinner or the original controller.


Scott

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #483 on: September 24, 2024, 03:38:50 pm »
Cheers for this Scott!

As it turns out, no hack necessary, I'd got an old version of mame that allows me to choose keys for Opto1 and Opto2, so was able to play Turbo and see where the
car moves to on screen (I'll call this a 'marker') depending on pedal position and gear. I reckon there are 7 markers (Why 7? Why not 8 you ask? Its because when you release the pedal in either high or low gear, the car drops to the very lowest (starting point) marker, if that makes sense). Anyways, I played it loads, after which I went and had a look at all Monaco GP youtube vids that exist (again), and I reckon I can definitely see something similar (If not the same thing) going on. Unfortunately, there are no vids of people messing around with pedal position in low gear (Most people are stepping right on the gas in low gear), but you can see a few videos where, in high gear, players ease off for the bridge and I can briefly see instances where the card holds position at 3 distinct markers (roughly).

So! I've made some modifications to MGPr that copies what I've observed, and added options so that you can specify keys/buttons for OPTO1 and OPTO2. Also, if using an analog pedal, MGPr chooses an appropriate OPTO1 and OPTO2 state depending on the analog value. For me, with an analog pedal, it plays much better, the car moves less erratically, you feel like you have more control somehow, and you don't really notice the pedal limiting to a defined set of speeds.

Just need to do some tidying up and I'll upload a new debug package with the new scoreboard_to_relays changes I've done for GPForverer2024.

BTW. just incase anyone was concerned, the game plays exactly the same if you plan to continue to use just the single button/key as the accelerator.

:)
« Last Edit: September 25, 2024, 04:01:19 am by geecab »

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #484 on: September 26, 2024, 03:07:06 pm »
Hi GPForverer2024, xfassa and to whoever fancies giving this a try!

I've put together another debug version v1.5.1D1.

Monaco GP Remake v1.5.1D1 for Windows (Download via My Google Drive)
Please read the release notes HERE.
 
This debug version is the same as version v1.5.1 except for the following modifications:

 - More game elements exported to shared memory (scoreboard_reader utilitly modified to display all the new imported elements).
 - Added new scoreboard_to_relays utility + source code (Operates CH340 relay devices depending on things that happen in the game).
 - OPTO2_DEVICE control configuration option added (See Section 7 'Accelerator Pedal' in release notes for more information regarding the 2 Opto switches used by Monaco GP's mechanical accelerator pedal).
 - Fix mistake in arcade game track file that was causing a 'Number of Opponents' error to appear in the console window (Was not affecting gameplay).
 - The 3cabs artworks now change from dirty glass bezels to clean glass bezels when switching between attract mode and game mode.

Regarding the scoreboard_to_relays utility - You can now specify some basic logic with the many triggers (With no brackets though, so you may need to get your head around operator precedence (I.e. "!" (NOT operator) will get processed before "&" (AND operator) will get processed before "|" (OR operator)). Also, rather than have the relay being on/off depending on a trigger being True/False, you can specify a timeout to ensure the relay only stays on for a short space of time. Actually, this is all quite difficult to explain, much easier to get an idea of what I'm talking about by looking at some examples. One other thing I need to stress is that its best to always encapsulate the triggers command line argument in quotes (Not doing so will confuse the interpreter when the argument contains unusual !&| characters). Here's the command line help for the new scoreboard_to_relays utilty, hopefully it covers everything:-

Code: [Select]
SCOREBOARD TO RELAYS - v1.0.2
=============================

Usage:

  scoreboard_to_relays.exe <com> <device> "<triggers>"


Where:

  com        = Serial COM port number

  device     = The name of the relay device (E.g. 'CH340', 'KMTRONIC',
               'FTDI_BASIC' or 'FTDI_BITBANG'). See supported_devices.ini
               for more information about these devices.

  triggers =   This argument must be specified within double quotes.
               It can be single trigger sequence or a list of comma separated
               sequences. The 1st sequence relates to relay1, the 2nd sequence
               relates to relay2 etc. Setting a sequence to 'none' ensures a
               particular relay will not be used. Sequences omitted from the end
               of the list for which a physical relay exists will not be used
               (They are implicitly set to 'none'). The format of a sequence
               is best understood by looking at the examples below.


Valid triggers:

  gear
  police
  ice
  night
  coin
  puddle
  snow
  rescueAny
  rescueFiretruck
  rescueAmbulance
  rescueHearse
  rescueSubmarine
  hunterAny
  hunterShark
  hunterCrocodile
  gameInplay
  gameBonus
  gameCalculateScore
  gameEnterName
  gameAwardScore
  gameInsertCoin
  gameHiscores
  inplayNormal
  inplaySpin
  inplayCrash
  inplayFlyOverMerge
  inplaySlip
  inplayMarsh
  inplayGoal
  inplayJump
  inplayGridStart
  inplayInBoathouse
  damageNone
  damageHit1Immune
  damageHit1Vulnerable
  damageHit2Immune
  damageHit2Vulnerable
  damageWaitForBackfire
  damageBackfiring
  damageRepairing


Example 1:

  To connect to a 1xRelay CH340 device on COM5 where relay1 is triggered by
  police:

   scoreboard_to_relays.exe 5 CH340 "police"


Example 2:

  To connect to a 4xRelay CH340 device on COM3 where relay1 is triggered by
  police and relay3 is triggered when inplay. Relay2 and Relay4 are not used:

   scoreboard_to_relays.exe 3 CH340 "police,none,gameInplay,none"


Example 3:

  To connect to an 8xRelay FTDI_BITBANG device on COM7 where relay1 is triggered
  by police and relay6 is triggered when inplay. None of the other relays are
  used:

   scoreboard_to_relays.exe 7 FTDI_BITBANG "police,none,none,none,none,gameInplay"


Example 4:

  To connect to a 4xRelay CH340 device on COM3 where relay1 is triggered
  when game is inplay and either the ice or night road is displayed. Relay4 is
  triggered when the game isn't inplay and an ice road is displayed. None of the
  other relays are used:

   scoreboard_to_relays.exe 3 CH340 "gameInplay&ice|gameInplay&night,none,none,!gameInplay&ice"


Example 5:

  To connect to a 4xRelay CH340 device on COM5 where relay1 is triggered
  for 250mS when something hits the car. Relay2 is triggered for 500mS if the
  car drives over a puddle or some snow. None of the other relays are used:

   scoreboard_to_relays.exe 5 CH340 "inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune:250,puddle|snow:500"

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #485 on: September 29, 2024, 07:30:30 am »
Hi GEECAB!

 I just tried the new D1 debug

in my head it's a bit confusing

 I can't understand the inplay function and the timing For example

, can you give me an example of the puddle control line and the passage on the blue strip with the same relay?

 And to use the 8 relays are it in a row for the command line (ch340)?

 FYI to make the whole thing work

 I have to specify each exe in administrator mode for it to work Also know before

 I launch first scoreboard_to_relays before MGPR and now

I have to launch MGPR before and after scoreboard_to_relays (not easy because when I launch it MGPR everything is in full screen 'I hope you see what I mean)

 and when I want to quit he asks me want to close the application scoreboard_to_relays with the yes or no question for my part not practical)

Also for information I installed the small motor for the vibrations of the steering wheel buy on Aliexpress and frankly it's bleffing

really sorry GEECAB with these stupid questions  :(

thank you  :)


geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #486 on: September 29, 2024, 09:40:05 am »
Hi GPForverer2024!

>>I can't understand the inplay function and the timing For example, can you give me an example of the puddle control line and the passage on the blue strip with the same relay?

No worries, it is quite confusing!

The gameInplay, gameEnterName, gameInsertCoin etc.. are just other triggers you can make the relays switch ON and OFF to. I.e. to have relay1 switch ON only when the game is inplay (when you have control of the car), to make relay2 switch ON only when you are entering your name, and relay4 to only switch on during attract mode (When Insert Coin is flashing), you would do:

scoreboard_to_relays.exe 3 CH340 "gameInplay,gameEnterName,none,gameInsertCoin"

The trigger for the 'blue strip' road is now called simply "ice". So if you wanted relay1 to switch ON when you are driving over a puddle OR when there is a ice road, you would do:

scoreboard_to_relays.exe 3 CH340 "puddle|ice"

Note the '|' character means OR.

If you wanted the same thing to happen for all 8 relays, you would do:

scoreboard_to_relays.exe 3 CH340 "puddle|ice,puddle|ice,puddle|ice,puddle|ice,puddle|ice,puddle|ice,puddle|ice,puddle|ice"

Now using the above example, you might notice during attract mode (When the road is rolling past and Insert Coin is flashing on screen) relays will switch ON when you see an ice road. This might be undesirable, and you might only want relays to come on when the car is driving on a puddle, or when there is an ice road and you are actually playing the game. So for just a one relay device you could do:

scoreboard_to_relays.exe 3 CH340 "puddle|gameInplay&ice"

Note. The '&' character means AND. So for relay1 we are saying Switch ON if the car is driving on a puddle OR  if the game is inplay AND there is an Ice road.

And to do this for all 8 relays:

scoreboard_to_relays.exe 3 CH340 "puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice,puddle|gameInplay&ice"

Does this make anymore sense?


I >>have to specify each exe in administrator mode for it to work Also know before  I launch first scoreboard_to_relays before MGPR and now I have to launch MGPR before and after scoreboard_to_relays (not easy because when I launch it MGPR everything is in full screen 'I hope you see what I mean)

You should just be starting scoreboard_to_relays before starting MGPr. You shouldn't need to start MGPr twice... I'm just thinking, can you double check and make sure when you are running scoreboard_to_relays, you are definitely encapsulating the triggers in quotation marks (As shown in my examples), not doing this will cause weird things to happen.

>>really sorry GEECAB with these stupid questions

Absolutely no trouble at all. I really appreciate you giving this stuff a go. My docs/help are very brief at the moment, I need to explain things better.

If you are starting scoreboard_to_relays and MGPr from the same batch file, perhaps you could copy/paste the contents of the batch file so I can check how you are starting scoreboard_to_relays?

Hope this helps?

:)
« Last Edit: September 29, 2024, 09:49:21 am by geecab »

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #487 on: September 29, 2024, 02:01:48 pm »
Hi GPForverer2024!

Something else that I thought might be worth mentioning (Though I worry I might be complicating things), is that if you have a look in  mgpr_v1_5_1D1/utils/scoreboard_to_relays/src/scoreboard_reader.h you'll see the stuff scoreboard_to_relays generates its list of available triggers from. There are some comments in scoreboard_reader.h that might give you a better idea of what a certain trigger actually does.

For example. if you read the scoreboard_to_relays help you'll see one of the available triggers is called "inplaySlip". If you have a look in scoreboard_reader.h, you'll see something called "inplay_state" and some comments above it explaining each state, and one of these comments reads:

    SLIP - Car is slipping on the verge of the road.


Another example, another available trigger is called "damageRepairing". If you have a look in scoreboard_reader.h, you'll see something called "damage_state" and some comments above it explaining each state, and one of these comments reads:

    REPAIRING - Car is being repaired after picking up a spanner/lifesaver and is immune from damage.


Hopefully this helps?

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #488 on: September 30, 2024, 09:53:28 am »
hello GEECAB!


Here I did several tests and yes it works

here is my command line:

 scoreboard_to_relays.exe 4 CH340 "puddle|ice,police,night,rescueAny,inplayCrash,damageRepairing"

The only thing I can't activate is when the car has an accident, I don't know what word to put in?

 I was thinking of damagerepair but it doesn't work even for the repair key when the car and accident... you might say?

after I found the solution of the BATH file that works it's because I simply don't have the word start before...

Here is the config that works perfectly!! :

start scoreboard_to_relays.exe 4 CH340 "puddle|ice,police,night,rescueAny,inplayCrash,damageRepairing"



REM First 'start' (don't wait for sessions to terminate) the artwork instance
start mgpr -cfg 1024x768_pro_monaco_gp_import_scoreboard.cfg


REM wait 4 seconds before starting the game instance to ensure game gets focus.
ping 127.0.0.1

REM Now 'call' (wait for instance to terminate) the game instance.
call mgpr -cfg 1024x768_pro_monaco_gp_export_scoreboard.cfg

REM kill the artwork instance when the game terminates (They terminate themselves anyway after a few seconds timeout once the game instance stops).
taskkill /im mgpr.exe

Then I think it's great that the relays work without playing because from a distance it makes me think when I was little in the arcade the lights that worked by themselves!

Personally I think it's great!!

 I should receive a new toy (wind) this week Oh by the way,

 I noticed that when you play Pursuit even if the car is not in an accident, the yellow keys still scroll, maybe they only scroll when the car is in an accident?

 in any case good job GEECAB as usual!

 I'm waiting to see what word to put activate the relay for the yellow keys and when the car has an accident

 thank you for the description scoreboard_reader.h which was useful to me

big thank you GEECAB

the new video is coming soon a bit of suspense lol    ;)




geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #489 on: September 30, 2024, 11:01:56 am »
Sound good to me GPForverer2024!

So this is your command line:

       scoreboard_to_relays.exe 4 CH340 "puddle|ice,police,night,rescueAny,inplayCrash,damageRepairing"

This tells me you are using 6 relays. On relay5 you're using the inplayCrash trigger, this will only switch ON if the car is exploding on screen.

Say, if you want to relay5 to switch ON if the car is in any type of incident (An explosion, or a spin, or collision with another vehicle or hitting some snow), then you could do the following:

       scoreboard_to_relays.exe 4 CH340 "puddle|ice,police,night,rescueAny,inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow,damageRepairing"

Also (Sorry if I'm complicating things again...), say you didn't want relay5 to be permanently ON for the full duration of an incident... but rather you wanted it to be ON for just a short time just as the incident happens, then you could add say a 250ms timeout, like this:   

      scoreboard_to_relays.exe 4 CH340 "puddle|ice,police,night,rescueAny,inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow:250,damageRepairing"

Note. The damageHit1Immune and damageHit2Immune triggers occur when you collide with another vehicle and your car gets damaged. There are 2 of them because it allows you to hit something (hit1), bounce off it and immediately hit something else (hit2). Again, have a look at the scoreboard_reader.h and see the comments for damage_state, hopefully get an idea of the process that occurs when you take some damage.

Note. I think (But not sure) that for damageRepairing to trigger, the car has to be damaged and you pick up a spanner. If your car is fine and you pick up a spanner, I don't think it'll trigger. Let me know if this is an issue for you.


>>I noticed that when you play Pursuit even if the car is not in an accident, the yellow keys still scroll, maybe they only scroll when the car is in an accident?

When you talk about the yellow keys, you are talking about the yellow spanner? If so, you are still supposed to see them even when the car isn't damaged, and they are still a good thing to collect as they always give you a few seconds extra time. I could probably change the spanner image to a yellow clock when the car isn't damaged I guess?

Hope this helps?

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #490 on: September 30, 2024, 12:23:55 pm »
Hi GEECAB

thank you for your command line but

 I confirm I made a copy paste of your command line and the relay does not light up for the collision of the car even the yellow key does nothing while the other commands work I don't know what to do.

 I even changed the location of the relay just in case but nothing helps

scoreboard_to_relays.exe 4 CH340 "puddle|ice,inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow,night,police,damageRepairing"

 and yes you're right when the car is not in an accident yes it's a good idea to change the yellow key icon to a top chrono clock

thank you GEECAB

 :)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #491 on: September 30, 2024, 12:56:33 pm »
Hi GEECAB

I also forgot the damageRepairing doesn't work even if the car is in an accident to repair it the yellow key doesn't work

thank you GEECAB

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #492 on: September 30, 2024, 01:19:56 pm »
Hi GPForverer2024!

This is really strange... A few things off the top of my head:

1. Can you double check the version of MGPr that is running is v1.5.1D1

2. Can you also try the following (Thus only using the first relay on the device) and see if this does anything:

    scoreboard_to_relays.exe 4 CH340 "inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow"

3. When scoreboard_to_relays is running, can you see what is displayed in its command window as you play the game? It should write when it detects you have hit something, that its attempting to switch relay1 ON. Can you see any evidence of that happening?

4. Can you run scoreboard_reader.exe, and have a look at what is displayed in its command window as you play the game? It will print the contents of the shared memory to screen, you should be able to see the damage_state change when the car is hit.

I'll keep on thinking :)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #493 on: September 30, 2024, 01:59:51 pm »
HI GEECAB !

yes of course I'm in version 1.5.1D1

 I just understood why it doesn't work!

well quite simply I had to modify the batch file dualscreen_pursuit with the line add scoreboard and not another batch that I had created lack of logic sorry GEECAB

! and the colliding car works!!

 on the other hand I added damageRepairing and nothing works

here is the scoreboard window no damageRepairing display :

Relay1 triggers: (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Connecting to COM4...OK
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
MGPr export instance connected OK
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 ON - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)
Switching Relay0 OFF - (inplayCrash) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (damageRepairing)

I hope it makes sense with the language translator lol

thank you GEECAB




GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #494 on: September 30, 2024, 02:55:18 pm »
Hi GEECAB!

I just tried one by one the damage settings and I just found the only one that works for the dammages it's damageWaitForBackfire

 Let me explain:

 When the car is driving is hit another car (collision) the relay lights up then when I touch the yellow key the relay turns off and the car repairs so everything is fine on the other hand there is a latency between the

 collision and the triggering of the relay just for this one then if the car is intact and touches a yellow key (chrono) then nothing happens

 I hope this helps you

 thank you GEECAB

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #495 on: October 01, 2024, 04:16:50 am »
Hi GPForverer2024!

I've checked my MGPr source code and I've made a mistake regarding damageRepairing. Currently you won't ever see it happen with v1.5.1D1. I'll need make a small change to MGPr and do another debug release to get this working.


>>I just tried one by one the damage settings and I just found the only one that works for the dammages it's damageWaitForBackfire

I'm a bit confused with what you are trying to achieve. This might not be what you are after, but lets say you just wanted relay1 to switch ON for the entire duration that the car considered 'damaged', then there are a couple of ways to do this. The first way:

        scoreboard_to_relays.exe 4 CH340 "damageHit1Immune|damageHit1Vulnerable|damageHit2Immune|damageHit2Vulnerable|damageWaitForBackfire|damageBackfiring|damageRepairing"

Note. Above, relay1 switches ON when any of the damage states occur that imply the car is currently damaged, OFF for the rest of the time.


The second (cleaner) way to do this is:

        scoreboard_to_relays.exe 4 CH340 "!damageNone"

Note. Above, relay1 switches ON when damageNone is NOT (By use of the "!" character) the current damage state. If you just had "damageNone", this would switch relay1 ON when the car was undamaged, and OFF when the car was damaged. When you add the "!" character, the ON and OFF is inverted.


So, adding that to what you'd been trying originally...

       scoreboard_to_relays.exe 4 CH340 "inplayCrash|inplaySpin|!damageNone|snow"


Any of this helping? I think I'm just confusing you more lol!

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #496 on: October 01, 2024, 04:08:35 pm »
Hi GEECAB!

 you want to confuse me lol

Well no, because I understood your examples with the command lines that I tested and saw well for the ! which reverses the activity of the relay

well personally I really like the damageWaitForBackfire function because for the collision it works as I like it in addition when the car grazes because it is in an accident the relay cuts off and then resumes at the same

 time as the animation of the car with its exhaust pipe and this adds to my vibration engine it's excellent very good feeling.

 for the damageRepairing I'm glad you saw the problem can't wait to see the modification so that the relay lights up when the car touches the yellow repair key.  :)

 Thank you Geecab  :cheers:

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #497 on: October 01, 2024, 04:54:38 pm »
I forgot here is my command line to give you an idea :

scoreboard_to_relays.exe 4 CH340 "puddle|ice|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|damageWaitForBackfire,police,rescueAny|gameBonus,puddle|ice,night"

For now

My connections Relay 1: Vibration motor
                       Relay 2: Blue and Red Flashing Light
                       Relay 3: Orange flashing light
                       Relay 4: Motor Ventilation Wind
                       Relay 5: Small Lights

 ;)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #498 on: October 02, 2024, 08:47:45 am »
That looks excellent GPForverer2024!

I totally understand why that command line works for you!

May I suggest one small modification:

scoreboard_to_relays.exe 4 CH340 "puddle|ice|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|!inplayJump&damageWaitForBackfire,police,rescueAny|gameBonus,puddle|ice,night"

I'm thinking while the car is in the air you don't want to feel any damage vibration maybe? Up to you :)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #499 on: October 03, 2024, 01:50:56 am »
Hi Geecab!

 thank you for this config for the jump of the car it's excellent!


and on your side you were able to see for the yellow key in chrono and the damageRepairing?

Thank you Geecab

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #500 on: October 03, 2024, 05:27:45 am »
Hi GPForverer2024!

I've put together another debug version v1.5.1D2.

Monaco GP Remake v1.5.1D2 for Windows (Download via My Google Drive)
Please read the release notes HERE.
 
This debug version has the followings modifications:

 - Ensure damageRepairing state is exported to shared memory.
 - scoreboard_to_relays utility debug text now optional (Disabled be default,
   enabled with '--debug'). Also, debug text is timestamped and indicates
   True/False state of each trigger.

I decided to stop (by default) scoreboard_to_relays printing text to the console window as it switches relays on/off. You can enable the text though by setting the '--debug' command line option if you'd prefer to see it (Though I recommend only setting it for debugging purposes, just because printing stuff to console window could potentially impact scoreboard_to_relay's ability to reactive quickly to trigger changes).

Enjoy!

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #501 on: October 04, 2024, 03:05:11 am »
Hi GEECAB

 I just tested version 1.5.1D2 and it doesn't work, impossible to launch scoreboard_to_relays

 The window shows:



SCOREBOARD TO RELAYS - v1.0.3
=============================

Relay1 triggers: (puddle) OR (ice) OR (inplaySpin) OR (damageHit1Immune) OR (damageHit2Immune) OR (snow) OR (!inplayJump AND damageWaitForBackfire)
Relay2 triggers: (police)
Relay3 triggers: (rescueAny) OR (gameBonus)
Relay4 triggers: (puddle) OR (ice)
Relay5 triggers: (night)
Connecting to COM4...OK
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...
Trying to connect to MGPr export instance...

then closes I tried to launch it with the same config as the D1 and even try to launch it scoreboard_to_relays after launching the MGPR game in dual screen mode

could you give me an example with the config option '-debug' maybe?

thank you GEECAB


geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #502 on: October 04, 2024, 04:55:34 am »
Hi GPForverer2024!

Looks like scoreboard_to_relays is unable see any shared memory from the MGPr instance.

I tested v1.5.1D1 and v1.5.1D2 on WinXP and on Win10, everything worked fine. On win10 I had to edit the properties for mgpr.exe and scoreboard_to_relays.exe, ensuring I ticked the "Run as administrator" option for both?

If you run, say, the dualscreen_pursuit.bat, and while that is running, double click on scoreboard_reader.exe, you should see that fails to connect to the running MGPr instance, but then if you right click on scoreboard_reader.exe and select "Run as administrator", it should connect fine. Can you try this?

>>could you give me an example with the config option '-debug' maybe?

I don't think adding --debug (Its double dash by the way) will help, because that only outputs more stuff after the connection to MGPr has been made. But if you did want to set it, you'd do it like this:

scoreboard_to_relays.exe 4 CH340 "puddle|ice|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|damageWaitForBackfire,police,rescueAny|gameBonus,puddle|ice,night" --debug

Hope this helps?

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #503 on: October 05, 2024, 03:14:36 am »
Hi GEECAB!

 But of course I had forgotten to put the run option in administrator mode for the scoreboard_to_relays file

and there it works Indeed without the -debug we gain latency and it's perfect I tested the damageRepairing function and now with the D2 version it works

BRAVO GEECAB (I am still impressed by your work and efficiency)    :applaud: :applaud: :applaud:

otherwise I think to change the yellow key logo to chrono when the car is not in an accident and if you can change the sound when it is in chrono when the car touches the chrono?

When do you think?

 in any case the D2 version works very well

Thank you GEECAB!

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #504 on: October 06, 2024, 09:27:11 am »
This is excellent to hear GPForverer2024!

Sounds like scoreboard_to_relays is working nicely. In light of the administrator thing,  I shall l make a little modification to the scoreboard_reader and scoreboard_to_relays utils, so that while they display they are trying to connect every second, they also display a hint "Trying to connect to MGPr export instance (If running on WIndow 7 or newer, please ensure you are running this utility in administrator mode)..." sort of thing because its easy to forget. I won't bother doing another debug version for this though as there's no change in functionality.

Regarding the spanner / clock thing, I'm having second thoughts about suggesting this lol! The thing is, the lifesaver ring during the boat stages is the equivalent to the spanner during the cars stages. If I have the yellow spanner change to a yellow clock, I'll need to do something similar for the lifesaver, but I don't really want a clock floating on the water (Its a minor thing lol!). Also, I kind of feel that we could be introducing too many "power up" symbols appearing, which don't really benefit the player. At the moment, if there's a spanner / lifesaver nearby, you should always just pick it up because 1) you'll be invulnerable for a few seconds 2) you'll gain some extra time & 3) it'll repair your car/boat if its damaged - I suppose the more I think about it, I kind of happy the way it is?

Lets both have a think about it, see how we feel in a few days :)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #505 on: October 07, 2024, 02:49:22 pm »
Hi GEECAB!

 yes you're right, let's give ourselves a few days to think

 about it otherwise on the D2 version (I don't stop testing and I came across a small bug.

 namely:

 when I select ICE the relay sometimes works then the next ICE not detect sometimes the relay stay stuck continuously even if you close MGPR, for information it's the only one that beugs I even add timing in test but

 this is always irregular

I have the impression that ICE is not detecting all the time

 I hope it makes sense

Thank you GEECAB!

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #506 on: October 08, 2024, 06:29:08 am »
Hi GPForverer2024!

Hm, could be a bug in scoreboard_to_relays, or a sticky/faulty relay...

Are you still using the following triggers for scoreboard_to_relays:
"puddle|ice|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|!inplayJump&damageWaitForBackfire,police,rescueAny|gameBonus,puddle|ice,night"

If so,  because the 'ice' trigger is used on both relay1 and relay4, have you seen the problem on both relay1 and relay4, or does the problem only happen on one particular relay?

Also, what happens if you remove 'ice' from relay1 (Does that make relay4 consistently work), and visa versa (remove 'ice' from relay4, does that make relay1 consistently work)?


>>sometimes the relay stay stuck continuously even if you close MGPR

This is quite interesting, because just before scoreboard_to_relays exits it attempts to switch off any relays that it thinks is on. If it thinks a relay is already off, it won't bother sending another OFF command to it (As that would be pointless). So it sounds to me like scoreboard_to_relays thinks it has switched the relay off at some point, but at the hardware level the OFF didn't work.

It might be worth using the --debug option and seeing what is reported after you exit MGPr with a relay is stuck on. Can you run scoreboard_to_relays like this from your batch file (It will save the output from scoreboard_to_relays to a text file) and paste the contents of the output.txt that gets created:

start cmd.exe /c scoreboard_to_relays.exe 4 CH340 "puddle|ice|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|!inplayJump&damageWaitForBackfire,police,rescueAny|gameBonus,puddle|ice,night" --debug ^> output.txt

Hope this helps!

:)

Edit: I've just been looking at this git project https://github.com/Brasme/usb_ch340_4x_relay_control/blob/main/ch340_relay.py written in python to control a 4xRelay CH340 device. Interestingly, there's a few comments saying  "We need to add some delay. The CH340 only can handle one command at a time" and I can see their code delays every command sent to the CH340 by 100ms. scoreboard_to_relays, doesn't delay the sending of commands, they get sent immediately one after the another. So I now suspect this is the most likely reason for the problem you are seeing. I could add a new scoreboard_to_relays option to set delay in-between commands...
« Last Edit: October 08, 2024, 08:59:43 am by geecab »

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #507 on: October 08, 2024, 05:36:46 pm »
Hi GEECAB!

After trying different tests following your recommendations for the different relays all work very well,

 and I found the problem if I put puddle|ice 2 times for relay 2 and relay 4 at the same time and well it doesn't work, it's random,

on the other hand if I put puddle|ice once on a single relay it works perfectly (in fact I wanted to run my fan and my vibration motor in Same time on Puddle and Ice )

Here is my configuration that works :

 scoreboard_to_relays.exe 4 CH340 "rescueAny|gameBonus,puddle|ice,police,damageRepairing|inplayCrash|inplaySpin|damageHit1Immune|damageHit2Immune|snow|! inplayJump&damageWaitForBackfire,night"

and for the record when I leave MGPR everything turns off very well

 Tell me if you still want the contents of the output.txt file?

thank you GEECAB

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #508 on: October 09, 2024, 05:31:07 am »
Thanks for this GPForverer2024!

From your response, it does sound like all your relays are fine/reliable. I think its pretty safe to assume the CH340 device just has trouble processing multiple commands sent in quick succession.

No worries about getting me the output.txt. I'll make a modification to scoreboard_to_relays, allowing you to set a delay time that occurs in-between sending commands to the CH340. I think it should be fairly straight forward to make that change, give us a couple of days and I'll have something for you to try :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #509 on: October 12, 2024, 07:58:46 am »
Hi GPForverer2024!

I've made a new version (v1.0.4) of  scoreboard_to_relays. In this version, you can change the delay in-between commands sent to the relay device by modifying the "SendDelay" value in the 'supported_devices.ini' file. I've set the default value to 50mS, which should be enough to fix the 'ice' trigger issue:-

Here's the link to a zip containing the source code, Visual Studio project and a pre-built exe:-

https://drive.google.com/file/d/1ryEdHlCswhSZNVMpQ29xE27NJvNObeuD/view?usp=drive_link

Hope it works ok :)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 68
  • Last login:October 14, 2024, 12:10:09 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #510 on: October 14, 2024, 12:10:09 pm »
Hi Geecab!

 I tested it for a long time and frankly wow it works very well!  :applaud: :applaud: :applaud:

 I don't know how you make people think of things like send_delays... in any case 50 MS in time is really good

 GPMR has a realism with the same objects as on a pincab, flashing lights, etc. at the top

I hope to make you soon a beautiful video that is up to your incredible skills

see you soon GEECAB

Thank you so much

 ;)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 312
  • Last login:Yesterday at 10:21:49 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #511 on: Yesterday at 05:18:47 am »
Excellent stuff GPForverer2024 and thanks again for your kind words!

Can't wait to see the finished article! Actually, with what you've managed to achieve, I think it would be pretty straightforward for anyone with a virtual Pinball pinball to add MGPr to it (Dual Screens + relays). I'd probably build myself one but I have no more space left in my house lol!

I'll hold back on doing another full release for a bit (in case you find more bugs).

:)