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 298175 times)

0 Members and 8 Guests are viewing this topic.

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #480 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #481 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #482 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #483 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #484 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #485 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #486 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #487 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #488 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #489 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #490 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #491 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #492 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #493 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #494 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #495 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #496 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #497 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #498 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #499 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: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #500 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: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #501 on: October 15, 2024, 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).

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #502 on: October 20, 2024, 09:03:47 am »
Hello GEECAB and to all of you!!

 As promised here is the video of MGPR with these gadgets connect on ch340 relays,

 I link you all the necessary equipment to make this machine, of course I cannot be held responsible for your connections  all this is for information purposes.

 Once again, a big thank you to geecab for this magnificent work.  :applaud: :applaud: :applaud:

 without whom all this would never have been possible MGPR

has an incredible realism with all these objects FYI

yes I put the ventilation motor on my foot when the car passes on the ice funny effect lol

(GEECAB I'm sure you'll find room to build one too  ;) )



 Happy watching to all !






___________________________________________________
Material Lists

https://fr.aliexpress.com/item/1005003676371759.html?spm=a2g0o.productlist.main.1.2229EEQNEEQNkV&algo_pvid=1b765122-9925-4cde-a1ad-c43b978686f6&algo_exp_id=1b765122-9925-4cde-a1ad-c43b978686f6-0&pdp_npi=4%40dis%21EUR%213.35%210.94%21%21%213.55%211.00%21%40211b664d17294266271858517e85b3%2112000027183357731%21sea%21BE%210%21ABX&curPageLogUid=9FSfb4x3zRLP&utparam-url=scene%3Asearch%7Cquery_from%3A


red led

https://fr.aliexpress.com/item/1005007225924475.html?spm=a2g0o.productlist.main.13.36674351pC04fs&algo_pvid=4ceebeff-db6a-4208-826a-8357b0aae10e&algo_exp_id=4ceebeff-db6a-4208-826a-8357b0aae10e-6&pdp_npi=4%40dis%21EUR%2152.71%2120.68%21%21%21397.81%21156.11%21%402103868817294268302045034e9f8c%2112000039874942237%21sea%21BE%210%21ABX&curPageLogUid=BXjHk3zhtOwe&utparam-url=scene%3Asearch%7Cquery_from%3A


motor wind


https://fr.aliexpress.com/item/1005003992496644.html?spm=a2g0o.productlist.main.1.6a873adbSdAEMs&algo_pvid=48ba4afe-09ba-423f-8b41-0a9005c01204&algo_exp_id=48ba4afe-09ba-423f-8b41-0a9005c01204-0&pdp_npi=4%40dis%21EUR%217.14%214.14%21%21%217.56%214.38%21%402103868817294269579528059e9f8c%2112000027669023747%21sea%21BE%210%21ABX&curPageLogUid=scs3ezFAMWPN&utparam-url=scene%3Asearch%7Cquery_from%3A


Relays ch340 8 canaux usb

https://fr.aliexpress.com/item/1005007413459188.html?spm=a2g0o.productlist.main.3.2a235777LQ5dIw&algo_pvid=e13adec7-9788-4a5f-a53b-c27be4f5a335&algo_exp_id=e13adec7-9788-4a5f-a53b-c27be4f5a335-1&pdp_npi=4%40dis%21EUR%2157.34%2125.84%21%21%21432.79%21195.03%21%40211b617a17294270604358448e1ffe%2112000040650870102%21sea%21BE%210%21ABX&curPageLogUid=ez3wbYAWbPyl&utparam-url=scene%3Asearch%7Cquery_from%3A


vibrating motor  DC 12 volts

https://fr.aliexpress.com/item/1005006449167608.html?spm=a2g0o.productlist.main.9.223f14bcKCRtRW&algo_pvid=4e302088-21f1-4ee3-9dc5-5bf40a9397cc&algo_exp_id=4e302088-21f1-4ee3-9dc5-5bf40a9397cc-4&pdp_npi=4%40dis%21EUR%2118.03%2112.36%21%21%2119.08%2113.08%21%40211b655217294271237735103e04e5%2112000037210042077%21sea%21BE%210%21ABX&curPageLogUid=WdseyYxwbi9Y&utparam-url=scene%3Asearch%7Cquery_from%3A

feeding 12V 20A

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #503 on: October 21, 2024, 05:40:57 am »
Wow, that's awesome GPForverer2024!!

That wind motor sounds really powerful, so I guess the reasoning why it switches on during the ice stage is to give you a chill / cold feeling? Its a good idea, I like it! The red led that appears during the night stage works really well too! It just all looks really fun to play!

I'm not sure why, perhaps because its Halloween soon, but I kind of wish something spooky would happen during the night stage. Like you see a ghost in your headlights, then you could switch the wind motor on for that too... I don't know, I think that might be a step too far in the silly direction lol!

Great job and thanks so much for uploading the video and the parts list!!  :applaud: :cheers:

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #504 on: October 21, 2024, 09:40:29 am »

Hi GEECAB!

 Glad you like it mdr for the Halloween ghost

 and yes the feeling of cold is bluffing lol

if not, do you think it will be possible to add a real tachometer in USB port?

 Here is a link below I know that SymProjects knew how to do it tell me if so,

 so I can order it and be your tester When do you think?

 

Thank you GEECAB

 ;)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #505 on: October 24, 2024, 09:08:38 am »
Hi GPForverer2024!

>> do you think it will be possible to add a real tachometer in USB port?

Unfortunately, I've had a look at the SymProjects stuff. Their software/hardware only supports a certain set of games, there doesn't seem to be an interface that lets me control their stuff :/

I've never tried connecting a PC to a tachometer before, but from what I've read, they need to be sent pulses at a frequency relative to RPM. As the pulses increase in frequency, then so does the gauge needle.

I guess one way you could achieve this is would be to use a cheap Arduino (or Teensy) dev board to produce the tachometer input signal. You'd need to write some Arduino code that adjusts the frequency of signal based on serial (com port) data received. Then you'd hack the scoreboard_reader tool, so that instead of printing the revcounter value to screen, you'd send the revcounter value to the Arduino as serial data.

Sounds like it could be tricky to me. I think quite a lot of trial and error will be involved to get this working. Perhaps lets give this some more thought before purchasing anything. I can't help thinking that there must be an easier way to do this...

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #506 on: October 27, 2024, 05:22:58 pm »
Hi GEECAB!

Sorry to answer late but I've been very busy lately with work

 I suspected that it would have been too complicated with the USB tachometer And yes you're right, your logic (again) would be to use an arduino board.

the Teensy I didn't know and for the record I'm not good at soldering...

I keep looking my way

I'm waiting for your feedback to know if there would be a possible possibility

See you soon

Thank you Geecab

 ;)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #507 on: November 02, 2024, 04:10:14 am »
Hi GPForverer2024!

Just letting you know, I've just bought a cheap rev counter off ebay lol! I'll try and get it working over Xmas and will post my progress. Hopefully it won't involve too much soldering.

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #508 on: November 03, 2024, 10:34:36 am »
Hi Geecab

excellent news !!

really looking forward to seeing your progress soon

 :)

beylie

  • Trade Count: (0)
  • Jr. Member
  • **
  • Offline Offline
  • Posts: 6
  • Last login:November 29, 2024, 04:13:12 pm
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #509 on: November 27, 2024, 07:10:45 am »
Can't even begin to say how awesome v1.5 is! The work is incredible! Thank you!

Xiaou2

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 4135
  • Last login:August 14, 2025, 10:57:09 am
  • NOM NOM NOM
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #510 on: November 29, 2024, 04:04:08 pm »
Hi Geecab

excellent news !!

really looking forward to seeing your progress soon

 :)

 Very cool build !   :applaud:

 I do have some suggestions... Most especially, to make a change to your Vibration motor setup..
to mirror how Out Run does things:

- With Outrun..  the entire steering wheel assembly is mounted to a Sliding Plate,  and can slide the wheel left to right,
about 1 inch in distance (which is a lot more Violent, than most people realize)

- The sliding mounting plate is slid left to right, using a Crank Arm on the Motor... similar to a Steam Engine / Locomotive

- The diameter of the drive wheel, attached to the motor, causes the assembly to move about One Inch from left to right

- The motor in Outrun, is a Single-Direction DC motor

- The Outrun motor, is ran at different speeds..  depending on In-Game situations:

 A) Fast (Full) Rotation speed, when you crash  (for the most Violent Effect possible)

 B) Slower rotation speeds,  when you drive "off-road" (simulating a bumpy driving surface.  Speeds might also be dependent
on your Cars actual driving speed, too)


 The sliding assembly is actually quite simple.   Probably more so, than most would assume.


 Anyway... if you could re-create it, you could also likely use it to play Outrun properly.

Also, if there is a special "output-effects" scripting type of program system.. for mame/emulators...
you could trigger the motor for other arcade games, that never actually used it.

 Not sure if that type of programable system exists yet.   Ive always thought that AI might make such things possible in
realtime.  Such as the Automatic conversion from 2d, into Stereoscopic 3D (3DVR).   And as said, adding other special
effects, like additional lighting, strobe lights, vibration and solenoid drivers, and or full blown motion-cabinet assemblies.


 As far as the Icy Wind effect goes... Im not sold on that implementation.   For one thing, its annoyingly loud.  You
might choose to place such a loud motor, in the bottom rear of the cabinet, and surrounded in an Insulating material (fiberglass?).
Then feed the wind to the areas you want... using ducting.

 Ive always had the idea to have working car air-vents, to keep players cool as they play (with actual air speed controls, and
aim-able vents).   I also had that idea, used for non-driving games... that blows cool air over your buttons and joysticks,
to keep your hands dry at all times, as you play.

 If you wanted to actually simulate Temperature changes...  you would actually need something a little more robust.
For FAST INSTANT high-heat... an Infrared Lamp, would be the quickest way to heat a player up (great for quick flash
/ explosive effects,  but NOT good for long durations..  as the player would suffer from way too much heat)

 For more gradual heat, you would might want something like a Ceramic heater, heating vented Air up.

 For cooling, thats not so easy to replicate.  If the floor temps in your place are cool..  then piping it upwards, might help a little.
(likely not working well, in the Summer months)

 But for more extreme cooling effects... you are likely going to need some sort of Refrigeration device (maybe an electric "Peltier" ? cooler)
or at very minimum, an Evaporative "Water Mist" Cooling system.

 Water Misters, would also be fun for other Game effect, like Boat Driving simulations.  Such as used in the Boat Stage, in  Spy Hunter.
If the mist is light enough, and driven with enough air... it evaporates quick enough that you dont end up getting wet.  However, its
evaporation effect will be enough to cause a cold sensation... so might need to be offset with warmer air,  depending on your intended
FX use case..  and depending on how long the effects are ran.

 I used to go to an Amusement park, that had a Haunted House "Dark-Ride" in it.  At the very end of the ride, they had a water mister,
that would spray down onto you, right before the ride ended.  It was a spooky + chilling effect, especially in total Darkness.  And since
the water was so fine + evaporated instantly...  it felt magical / surreal.   Especially when you were a small kid, that didnt know what
an evaporative mister.. actually was  (and thus, couldnt quite figure out, what the heck just happened).


 Ive personally never been a fan of Center-Sprung shifters.   There is something special about the feel of a Shifter, that
spring Locks into place.  Center-Sprung is good for Afterburner II 's  analog throttle control lever...  but IMO... not the
best Option for Driving games.

 Id replace that shifter with a 6 position shifter.   They make "Decent" 6 way shifters, for a price that isnt totally absurd, depending
on the quality you choose.   Or, you might choose to create an Analog version, modeled after the Sit-Down version of Atari's
"Race-Drivin".   That game used two Pots,  and lever arms that drove them.   The shifter shaft itself, was welded to a Door Hinge.
It was quite an ingenious design.   I believe there are programs that can translate x/y analog values, into shifter input clicks/values.

 If the cabinet is capable of playing other driving games...  you might also look into using a high quality sim-racing
wheel... that can also be used for 900 degree operation, as well as with actual force feedback, thats independent of the sliding plate
feedback system.   General wheel feedback, is good for feeling the Road + Tire Slip, in sim-racing games.  But the more violent
shaking of the Outrun sliding plate system... is FAR more fantastic, for Simulated Crashes, and more violent "Off-Road" effects.

 Another cool thing to add... would be the use of Bass-Shaker Transducers.   These are like speakers, but they only produce strong
vibration effects, while making virtually no sound at all.   One of the best things about them... is that you do not need any special
effects drivers, to get vibrations from them.  And low-frequencies in the games music and or sound effects, will drive them,
automatically.   This could be from a games low engine rumble sounds... or from the sound of a Punch, in a fighting game.
Its basically like a Subwoofer...  but far more localized vibration effects, without the need to disturb the entire
house (high volume sub-noise).

 A lot of Sim-Racing cabinet builds, also... use Bass shakers.  (at least one per corner of the cabinet.  Some also add smaller
shakers to pedals / shifters, too)

 One might built a Seat, and place them under the seat, and or in the rear of the seat assembly.   Adding a sit down option,
would also open the opportunity for the use of Surround Sound.   Though, you could also do that, using hanging speaker mounts,
attached to the top of the cabinet.

 Bass Shakers could also just be added behind the Control panel,  or attached to the inner sides of the bottom of the cabinet.
So long as the bass shakers are somewhat near the players controls... the vibrations should reach the player effectively.

 Or you could make a 4 inch tall Riser, that you and the entire cabinet are placed on top of... in which you could place bass
shakers inside of.  In that way.. any vibrations would travel right through the riser floor, right into your legs.


 As far as any working controller Displays goes... like a Spedo / Tachometer...  it might be better to have them mounted
much closer to the Display.  As if they are directly in-line with the steering wheel,  you are likely never going to see them,
in-use.

 The use of a Half-Silvered Mirror.. might be an interesting option.  Having the main display, behind the glass... and any
Gauges, being placed in front of the mirror... which would then appear to Hover in front of the games display.
(to prevent hover issues that potentially cover over a display, maybe use a longer glass, where the gauges are lower
than the display)

 Ive thought that this would be a cool option, for displaying Arcade Front-Glass Bezels,  and for other 3D effects.
In fact, if done correctly, it could also be used for glasses free stereoscopic 3d Displays (potentially to be used for
games like  Continental Circuis 3D..  if anyone could hack the driver to use dual displays, rather than just the use of
LCD shutterglass display timings)

 The only issue with using half silvered mirror displays, is that it makes the monitor look a lot further away from the player.
Of course, if you are using a shallow cabinet desing, that actually might be a good thing.

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #511 on: November 29, 2024, 04:54:27 pm »
Can't even begin to say how awesome v1.5 is! The work is incredible! Thank you!

Cheers beylie! I really appreciate the post, great to hear you're liking v1.5! :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #512 on: December 06, 2024, 05:18:59 am »
Hi all!

Commodore Amiga fans may be interested to know, Neil Davis (Who did the recent port of MGPr for Linux and RaspberryPi), has been working on his own version of Monaco GP for the Amiga! :cheers:

Named Riviera '79 - It's free to download and runs on any amiga at an incredibly smooth 50FPS! I believe he intends to add a few more sound effects at some point, in the mean time he's added some background music which just happens to be a tune I wrote on the amiga ages ago!

For more information, visit the following links:-

Main Riviera '79 website and download page:
https://nngaming.itch.io/riviera-79

Recently entered AmigaJam 2024 competition:
https://itch.io/jam/amigamejam/entries



Enjoy! :)
« Last Edit: December 06, 2024, 05:22:51 am by geecab »

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #513 on: December 26, 2024, 06:34:51 am »
Hi GEECAB

 How are you?

 Thank you for sharing Riviera'79, with a great job by Neil Davis Well done!  :applaud:

 and I was also coming to the news for the revs count with MGPR if you had time to move forward on it?

Thank you GEECAB

 :)

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #514 on: December 27, 2024, 06:56:31 am »
Hi GPForverer2024!

I'm all good thanks, hope you're having a good Xmas! Unfortunately, I've not been able to start on the rev counter yet (Just been a bit of a hectic Xmas so far!) But don't worry, I haven't forgotten about it, I've got all the bits here, I'm really looking forward to seeing it work and I should be able to start on it very soon!

:)

MicroPixels

  • Trade Count: (0)
  • Jr. Member
  • **
  • Offline Offline
  • Posts: 7
  • Last login:February 23, 2025, 04:44:17 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #515 on: February 11, 2025, 04:42:19 am »
Hello
New to this forum.
I'm in the process of creating a Monaco GP race cab remake.
First of all, I would like to thank GEECAB for its superb work and all the participants!  :applaud:




I am having some problems with my 4 relay ch340 module whose drivers are well recognized and which is tested functional under windows 11 and mgpr_v1_5_1D2 .
I am in administrator mode in properties.
But I can't get it up and running with scoreboard to relay?
I just want to use relays with on the game with a single screen 19" in 1280X1024 mode.
Can you help me?



« Last Edit: February 11, 2025, 12:39:56 pm by MicroPixels »

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #516 on: February 11, 2025, 02:29:41 pm »
Hi MicroPixels!

Welcome to the forum and thanks for posting pics of your table top Monaco GP Cab, excellent work!!  :applaud:

I can see from the scoreboard_to_relays.exe output that it has connected to your CH340 relay OK. The problem is scoreboard_to_relays.exe can not connect to the mgpr.exe instance that is running the game.

Before you start scoreboard_to_relays.exe, can you ensure that you have the mgpr.exe game instance running as administrator, and that its DISPLAY -> SCOREBOARD_MODE configuration option is set to EXPORT.

Note. On Windows 11, scoreboard_to_relays.exe and mgpr.exe both need to be running in administrator mode.

Hope this helps!

:)

GPForverer2024

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 96
  • Last login:August 04, 2025, 10:20:52 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #517 on: February 12, 2025, 10:27:33 am »
Hello MicroPixels !

if it can help you for I created a bath file here is:

start scoreboard_to_relays.exe 3 CH340

start mgpr -cfg 1024x768_pursuit_import_scoreboard.cfg

ping 127.0.0.1

call mgpr -cfg 1024x768_pursuit_export_scoreboard.cfg

taskkill /im mgpr.exe


For me it works

at the same time a hello to GEECAB  ;)







MicroPixels

  • Trade Count: (0)
  • Jr. Member
  • **
  • Offline Offline
  • Posts: 7
  • Last login:February 23, 2025, 04:44:17 am
  • I want to build my own arcade controls!
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #518 on: February 12, 2025, 11:46:07 am »
Hi Geecab and GPForever2024,
Thank you for your advice. ;)
I managed to get the relays to work by putting everything in administrator mode and putting Mgpr in Export mode.
On the other hand I don't have the bezel and the scores on the side anymore.
Is there anything to do to put them back?



The project is moving forward. :)





When I have all finalized I will prepare a video presentation of my project! :D
« Last Edit: February 12, 2025, 11:49:46 am by MicroPixels »

geecab

  • Trade Count: (0)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 354
  • Last login:Yesterday at 03:29:37 am
Re: Sega Monaco GP 1979/1980 - My Remake
« Reply #519 on: February 12, 2025, 12:55:47 pm »
Hi MicroPixels!

When running mgpr.exe, I think you need to specify the "1280x1024_pursuit_arcade.cfg" configuration. That will give you the pursuit game mode (With police cars etc..) with the arcade bezel artwork. You'll just need to tweak the configuration so that it is set for "export" mode.

Building on what GPForverer2024 said earlier, are you are starting all this from a batch file? If you are, then I think the contents of your batch might look something like this:-

Code: [Select]
REM start the relays.
start scoreboard_to_relays.exe 3 CH340 "puddle|ice,police,night,puddle|ice"

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

REM start the game instance.
call mgpr -cfg 1280x1024_pursuit_arcade.cfg

Hope this helps?

@GPForverer2024 - Hi there! I promise I haven't forgotten about getting the Revcounter working. I've just had loads on my plate recently. I will get it going very soon for sure!

:)