Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The future belongs to COINS! #5050

Merged
merged 3 commits into from
Dec 22, 2020
Merged

Conversation

impaktor
Copy link
Member

@impaktor impaktor commented Dec 5, 2020

Introduction

This has been bugging me for many years: prices are not "even". Consider getting $24,441 for an assassination, or $1114 for delivering some cargo.

So I made a function that rounds input x to closest number N (could be float, e.g. 0.5), and returns N if input is below it, else x. I'm sure someone will now tell me we already have this function, or it's standard in Lua, - I'm all ears. (so to explain the title: we can think of this PR as reflecting how the market prefers to price in increments corresponding to some space coin)

I'm demonstrating it here, for those who prefer visual explenation:

round

I'm also including a commit to reduce prevalence of the Donate to free software advert, on request of @Web-eWorks. Worth noting: I think the flying spaghetti monster one is more silly, (so naturally, I like them both).

(Naturally, I'll remove the debug printout commit)

Results

For the modules, I'm rounding the prices in the following increments:

N Module
500 Assassination
5 Breakdown and service
25 CargoRun
100 Combat
1 CrewContracts
5 DeliverPackage
FuelClub
100 SearchRescue
2 SecondHand
50 Taxi

Below I've dumped out some samples. Fuel Club hard codes the price (in increments of $100), and Crew contracts are single integer increments (i.e. were good the way it was), which looks reasonable. Nor do I show Second hand market prices, or Breakdown and service, the latter would show the price down to cents.

Assassination

BEFORE
10003 10054 10291 10847 10856 11493 11578 11703 11823 11987 11994 12121 12190 12410 12570 12836 12931 12933 13168 13585 13694 13999 14550 14729 14745 15379 15763 16111 16464 17814 18267 19361 20389 20458 20635 20948 20998 2138 21608 22477 22701 22841 24441 2462 24816 27118 27534 2854 2943 3371 3495 3519 3788 4066 4141 4157 4185 4199 4206 5085 5182 5461 5525 5528 5735 6272 6404 6494 6513 6557 6570 6707 6711 6778 6836 6916 7196 7272 7397 7953 8066 8261 8337 8648 8674 8852 9752

AFTER
10500 11500 11500 12000 12500 13000 13000 13500 13500 14000 14500 14500 15000 15000 16000 17000 17500 20500 20500 22000 22500 23000 24000 2500 2500 3500 3500 4000 4000 4000 4500 4500 4500 5500 5500 6000 6000 6000 6500 7000 9500

Cargorun

BEFORE
1063 1082 1114 1141 1157 1158 1182 1195 1216 1216 1247 1276 1299 1308 1324 1325 1341 1427 1430 1460 1480 1497 1504 1533 1543 1559 1575 1598 1624 1633 1646 1649 1655 1764 1788 1794 1822 1828 1864 1866 1942 1950 1956 1978 1983 1992 1995 2056 2077 2109 2248 2326 2358 2370 2408 2419 2429 2537 2583 2640 2643 2679 2709 2847 2895 2958 3280 371 437 498 660 719 750 758 758 765 790 824 847 848 850 890 901 903 950 951 960 963 965 990 997

AFTER
1075 1175 1225 1250 1325 1325 1325 1325 1350 1425 1425 1425 1475 1475 1475 1500 1550 1575 1625 1625 1825 1875 1975 2025 2100 2100 2375 2425 2425 2550 2825 3000 3225 400 725 750 750 775 875 900 950

Cargorun local

BEFORE
101 102 109 110 136 138 139 143 144 148 164 164 166 170 174 175 175 186 186 187 194 202 203 206 206 208 211 213 217 219 222 228 231 231 236 240 243 246 263 268 272 272 273 273 274 284 285 291 293 295 300 326 332 364 369 387 403 403 427 467 492 520 56 58 61 62 66 66 67 73 81 95 97

AFTER
100 125 125 175 175 175 175 200 200 225 225 225 250 275 275 275 275 300 325 325 350 350 375 400 475 50 50 500 550 575 625

Combat

BEFORE:
11067 11288 11635 13534 14872 1489 1566 19148 1986 2173 2365 3406 4135 4704 5427 6003 6253 7256 7747 7862 8137 8967 9333 9342

AFTER:
12700 13300 2500 2600 3000 3300 4900 5700 700 7100 7700 8000 8000 9200

Search and Rescue

BEFORE:
11280 12834 1300 1332 13402 13888 1479 1501 15089 1532 15419 16539 16966 18464 1885 1902 1917 1948 195 1979 2049 2078 224 2270 22814 2367 2453 2469 254 2604 2677 268 2709 2784 2793 288 2968 2989 2999 313 3214 3296 340 3422 3457 3480 3484 3645 3950 4103 4992 5125 5169 5285 5580 6450 6635 8214 858 863 865 867 867 874 874 913

AFTER:
1000 1000 10900 1100 1100 11100 11200 11200 11200 11500 1200 1200 1200 12100 13200 1400 1400 1400 14300 14500 14800 1500 1500 1500 1500 1500 15400 1600 1700 1700 1700 1800 1800 1800 18200 1900 1900 200 200 200 200 2000 2100 2100 21500 2200 2400 2400 2400 2500 2500 2500 2500 2500 2500 2600 2600 2600 2700 2700 2700 2700 2900 2900 2900 300 300 300 300 300 3000 3000 3000 3000 3000 3000 3000 3000 3100 3100 3100 3200 3200 3200 3400 3400 3500 3500 3500 3500 3600 3600 3600 3600 3600 3600 3700 3700 3800 400 400 400 4000 4100 4100 4800 4800 4900 5100 5100 5200 5300 5300 5300 600 600 6100 6400 6700 6900 6900 700 700 7000 7500 7500 7900 800 800 800 800 800 8000 8300 8300 8400 8600 900 900 900 900 900 900 900 900 900 900 900 9300 9400

Taxi

BERFORE
1049 1065 1071 1086 11111 11490 11576 11673 11674 11914 12014 1232 1239 1247 1295 1318 13319 1337 1338 1349 1411 14160 1455 1545 1558 1606 1611 1629 16338 1634 1650 1655 1657 1746 1763 1767 1807 1813 1823 1831 1889 1890 1895 1928 1988 1998 2027 2050 2074 2107 2139 2213 2216 2302 2308 2314 2332 2383 2393 2431 2443 2460 2601 2736 2790 2791 2803 2827 2840 2868 2915 2962 2970 2990 3014 3016 3029 3078 3088 3103 3114 3163 3191 3229 3289 3402 3424 3770 3781 3812 3845 3884 3926 3955 4120 4132 4310 4501 4611 4719 4752 4887 4892 4910 5023 5045 5135 5320 5329 5344 5462 5537 5538 560 564 5663 5991 6042 6047 6068 6117 6146 6187 6317 6414 6497 6538 6546 6696 672 6748 676 6842 6945 7095 7124 7277 7378 7434 7489 7517 7872 7951 798 8084 8086 8153 823 8252 827 829 8323 8335 8488 8573 8714 8731 8928 9152 921 923 9253 9497 9556 9727 9774

AFTER
1000 10450 1050 10850 10850 1150 1200 13300 1350 1450 1450 14800 1600 1600 1600 1600 1600 1650 1650 1700 1900 1900 1900 2050 2050 2050 2200 2300 2300 2350 2400 2600 2650 2700 2850 2850 2950 2950 2950 3000 3000 3100 3250 3300 3350 3400 3400 3500 3500 3500 3750 3900 3950 3950 4050 4050 4200 4300 4400 4650 4800 4900 4950 5100 5150 5250 6300 6900 700 7150 7150 7800 8100 8450 9000 9100 9450 950 950 9800

Deliver Package

BEFORE
1032 1033 1047 1058 1070 1099 1112 1143 1147 1169 1181 1186 1208 1280 1329 1349 1351 1357 1405 1410 1554 1558 1614 1677 1846 1893 2324 2468 2469 2768 330 335 382 392 397 410 426 451 452 510 520 531 540 557 571 581 621 621 627 644 651 675 686 687 687 696 714 765 803 814 814 836 853 864 871 888 901 919 949

AFTER
1045 1070 1090 1130 1150 1165 1240 1290 1330 1345 1360 1390 1445 1475 1665 1725 1830 1910 285 315 355 455 465 520 520 550 550 605 630 635 660 670 690 780 810 840 925 970

Deliver Package local

BEFORE
112 112 112 112 112 112 122 123 123 123 128 128 129 139 141 141 141 141 150 153 153 153 153 153 154 154 157 157 165 179 179 188 195 203 203 203 211 211 38 39 39 44 44 44 44 71 74 80 80 80 80 85 85 91 91

AFTER
110 120 120 130 130 140 140 140 150 150 150 150 150 150 155 155 155 155 160 160 165 165 165 170 180 180 185 185 185 200 210 210 210 210 40 40 40 40 40 40 40

This will simply mute many of them,
giving some BBS without any of these adverts at all
To be used when calculating mission rewards
@Gliese852
Copy link
Contributor

Maybe we will round up? So we fly almost free already...

@Web-eWorks
Copy link
Member

@impaktor this may not be what you want to hear, (although given you called this a joke PR on IRC I'll go ahead anyways) but I don't think this is the right solution to the problem. Snapping mission rewards to increments not only doesn't fix the imbalance between risk (and fuel expenditure) and reward, but it also makes prices seem much more artificial. Even if this PR is meant to model the effects of futuristic currency, I'd expect the increment to be in terms of single credits, AKA the unit of currency we currently use.

I appreciate the effort that went into this, but I don't think it solves the problem and I'd much rather allow missions to have variations in price (to keep them from feeling so 'samey') than lock them to increments of 10 or 100 credits.

@impaktor
Copy link
Member Author

impaktor commented Dec 5, 2020

Snapping mission rewards to increments not only doesn't fix the imbalance between risk (and fuel expenditure) and reward

But that's not what this PR is addressing.

it also makes prices seem much more artificial.

I disagree, quite a lot. It's the current prices that are artificial.

I'd expect the increment to be in terms of single credits, AKA the unit of currency we currently use.

Yes, for commodities, that are governed by fluctuating market, like stock market, or real commodities. But for job listings? No, then we tend to round off numbers, (and some do the -1 unit to get the "now, only $9999").

Also, this partially also addresses #1054

Btw, this is exactly how Frontier did it (doesn't mean we must do it, but they obviously reasoned similar to me). Here are some rewards I wrote down when I played some Frontier a few months ago (comment in Passage column indicates passenger count):

Assassination Deliver package Passage Bounty
9000 120 1800 100
19500 375 1200 500
10000 300 1800 200
17000 125 480 300
9000 135 600 (2) 175
11000 120 600 500
17500 220 1000 175
10500 800 200
6000 600 175
1400 4200 (2, fast) 400
21000 9900 (3) 175
11000 800
10000 1200 150
7000 1300 125
8000 1750 (2) 800
10000 1370 (7)
8000 750 (1)
10000 5580 (7 mafia)
20000 8500
4000 625
5000 4500
19500 750 (2, fast)
12000 1080
21000 800
10000 750
5500 400
10500 750 (2)
7000
9000

(although given you called this a joke PR on IRC

Well, I was mainly thinking about the PR title

@Web-eWorks
Copy link
Member

I think I see what you're aiming for with this PR a little better - you're specifically addressing the artificiality of the random trailing digits in mission reward pricing. After having noodled on it for most of the day, I like the idea in theory, but I think there are some rough edge-cases in practice. I would argue that the rounding increment should be relatively uniform based on the number of digits; higher rewards should have higher increments, but when the reward is $1,000 a $10 difference between mission payouts is much more important than when the mission reward is $10,000.

My gut reaction with this PR is that we're still swinging the other direction to where all mission rewards are unnaturally round numbers; even though missions are technically presented through a bulletin board, I'd expect things like fuel cost, tax, etc. to be factored in on the "lore" side, and those costs absolutely do not make for round numbers at all. The station, after all, takes a percentage cut of the rewards offered, among other authorities we don't actually simulate for simplicity.

@Gliese852
Copy link
Contributor

I would like to note that when I give the client the price for my work, I usually round the final number to a thousand, for example.

@bszlrd
Copy link
Contributor

bszlrd commented Dec 6, 2020

To me this seems reasonable. They charge by increments of 5km for bus and train tickets here for example, and you buy postage stamps in a similar manner.

@impaktor
Copy link
Member Author

impaktor commented Dec 6, 2020

I would argue that the rounding increment should be relatively uniform based on the number of digits

Yes, I've thought of this also, but I've opted for the most easy & trivial way to fix something that's been an eyesore (for me) for a long time, and the end result is roughly the same, as long as rewards for a single module don't span several orders of magnitude. (Also, looking at the table in my last post, I think this is how the Frontier-guys did it).

My gut reaction with this PR is that we're still swinging the other direction to where all mission rewards are unnaturally round numbers

I've been thinking that one should perhaps treat local and remote package and cargo delivery separate (because those prices actually do span two orders of magnitude), but beyond that, I don't see anything that might look strange to me. Do you have an example? On current master, every single mission above $100 looks bizarre to me, which is most of them:

  • "Kill person X we offer $23491", implying the person isn't worth killing for $1 more.
  • "Go to X and clear out pirates, we'll offer $13534, (but $13535 would be too much)"
  • "thanks for saving my life, I'll give you $13888 for your effort (but if you wanted $13889, I'd rather be dead)"
  • "Deliver this package for $1351 (but no one would do it for $1350)

Perhaps there is a cultural difference between Europe and US, since (as I've understood it) prices are typically pre-tax(?) in US, (something I've never seen in Europe); and dollar is 10 times more worth than Scandinavian currencies, and 70 times more than Russian rubel. Thus we are used to seeing prices: "1250" or "125", but "1253" for a service / second hand item - that doesn't have an exact price set by fluctuating market (like commodity/stock) - looks strange.

I'd expect things like fuel cost, tax, etc. to be factored in on the "lore" side, and those costs absolutely do not make for round numbers at all.

I'm not changing the cost of fuel, or tax? When I go to my local supermarket, there's an announcement board, for guitar lessons, math tutoring, second hand couch,... The price for these are "round" numbers. What they have to pay in rent, tax, food, is included in the price and rounded to something "even".

I've seen many like:

  • "Used couch, good condition $150"

but never:

  • "Used couch, good condition ($150 + sales tax + other expenses) $157.81"

We have beehives in my family, for the past 25 years, the price for 700g jar started out at 50 kr, then over the years we've increased it to 55, 60, 65, 75, I think we charge 80 or 90 now. Never 83 kr, or 71 kr. And that is on a market with competition for similar product (although honey != honey). The reason supermarket have price down to the cent, is because tough competition on identical products, readily available one store over. If they change price by $0.5 they loose customers and profit. So their prices really are import cost + tax + fuel + rent + x% profit margin. (Thus pioneer's commodity market prices).

Of the modules I'm touching here, I might maybe see a case for Taxi and maybe Cargo Delivery having algorithmic price setting, i.e. down to single digit $1, or even cents, but I cant see any rationale for keeping the current system for the other modules (thus this PR).

I don't know what other people think?

@Web-eWorks Web-eWorks merged commit 3034803 into pioneerspacesim:master Dec 22, 2020
@impaktor impaktor deleted the round branch December 22, 2020 08:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants