-
Notifications
You must be signed in to change notification settings - Fork 178
Expand file tree
/
Copy pathTODO
More file actions
3007 lines (2368 loc) · 183 KB
/
TODO
File metadata and controls
3007 lines (2368 loc) · 183 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
FBGM after PBW/RBW update, TE and RB blocking doesn't do anything. does that matter? was it even noticeable before, when it was a pretty small factor?
- might want to make RB matter in pass blocking and TE matter in run blocking, more than they did previously
in play by play, scoring/made FG/3PT streak like on the real app, and how long a run is https://discord.com/channels/290013534023057409/1476936717733728298/1477098494866096374
accessability of sortable tables with screen readers
- https://app.fastmail.com/mail/Inbox/AIwCIDm0KjvB.StqUeSQmhsS7?u=433e4054
- https://app.fastmail.com/mail/Inbox/AE6jH4AIEhFV.StqQgfp1WjLw?u=433e4054
baseball colleges https://app.fastmail.com/mail/Inbox/AJuf0DgaRdwZ.StqPbuY6AxrZ?u=433e4054
when calling getNumPlayoffTeams from SettingsForm, we don't know how many conferences are empty (or don't have enough teams for byConf playoff bracket), which may result in a different number of playoff teams
- could affect other calls of getNumPlayoffTeams and validatePlayoffSettings
- ideally we would replace the contents functions with the one that actually generates playoff series, and then derive the info we need from that (parse, don't validate)
when creating a new league, we don't know numActiveTeams, which gets propagated from initialSettings.numActiveTeams to validatePlayoffSettings, resulting in that validation check not running
- need to store team disabled state, since it could come from league file or real players league, and then dynamically recompute initialSettings.numActiveTeams (similar to how initialSettings.confs is needed in other places)
- currently it assumes none are disabled: `numActiveTeams: displayedTeams.length` when passing value to CustomizeSettings
- make sure it works for all uses of SettingsForm (exhibition game and default new league settings too)
Navigation API
- can integrate with browser loading indicator
- Chrome 102, Firefox 147, Safari 26.2
trading away players should not change willingness to sign of existing free agents https://old.reddit.com/r/BasketballGM/comments/1qsjzds/monthly_suggestions_thread/o5rge16/
- somehow freeze that mood component when a player becomes a free agent
- could save state in player object
- state could be the number of players traded away for each team
- any other components that should be frozen?
show projected pick number in more places, like anywhere a realized pick number is shown https://old.reddit.com/r/BasketballGM/comments/1qsjzds/monthly_suggestions_thread/o2x0kao/
- currently only on Draft Picks page
- use real value that is calculated internally for draft pick projection
https://main.vitest.dev/config/detectasyncleaks
button to sign all rookies on re-sign page https://app.fastmail.com/mail/Archive/AOc4VisnZIYZ.StqmYwT3NgFZ?u=433e4054
Add some way to filter stat feats on player profile page, like game winners vs total stats https://discord.com/channels/290013534023057409/290013534023057409/1474943489367081202
- add tragic deaths to statistical feats or transactions on player pages https://discord.com/channels/290013534023057409/290013534023057409/1471788426024976394
pulled goalie adds player who is in penalty box, then he is released from the penalty box right after! https://discord.com/channels/@me/778760871911751700/1473861582550204673
add option for where the lottery eligibility cutoff is
- currently cola is hardcoded to be before the last 3 rounds of playoffs, and others are hardcoded to be non-playoff teams
- for cola, it's hardcoded in getNumLotteryTeams and also in other parts of cola.ts that look at playoffRoundsWon. then in getTeamsByRound it's hardcoded to sort playoff teams by playoff success, which is necessary to take only first round losers and put them in the lottery
trade player back to original team with 0 GP in between - now there are duplicate stats rows https://discord.com/channels/290013534023057409/1468414393116004442/1468414393116004442
- don't call addStatsRow until saving actual player stats? tricky because (at least in BBGM) we track minAvailable in stats, so even with 0 GP we need a stats row
- minAvailable is not needed once season is over, so in theory could just track that somewhere else, or delete rows with 0 GP when they are not needed. but in theory we might also want to track other things without a GP (like DNP reason) so we should keep these rows with 0 GP. however we don't need to actually create them until saving in writePlayerStats, but we should always create rows there.
- if i ever try this, be careful about the effect it has on the statsTids index!
- real solution is to be able to merge stats rows in some situations
FBGM option to disable FG/XP/punt
- https://app.fastmail.com/mail/Archive/AOc4VisnZIYZ.StqyBxW1iGns?u=433e4054
positions dropdown filter in table, rather than free text https://old.reddit.com/r/Football_GM/comments/1qocv9w/searching_for_player_position_on_free_agents/
dev usability stuff
- send message to any open tabs to pop up notification when a new worker process is built, then send message to worker to mark it as stale, then any new UI tab opened with stale worker show a popup with error message. to prevent accidentally having multiple tabs open
- when loading in dev check if there is an active service worker, and if so warn about it
- what would this look like? 404 error when checking for sw.js?
- in initServiceWorker could check for sw.js being a 404 error. but then that would have to run in prod too, since this would be the prod build code identifying that dev mode is maybe supposed to be running
calcuate bestPos in playersPlus, rather than in processPlayersHallOfFame
- simplifies a lot of consuming code
- for baseball, use gpF rather than ratings to determine pos
- base on career stats if more than one row is returned, or the returned stats row if only that one is used
- a little refactoring is needed to support this - need to separate "identify the stats rows to process" from "process them". similar for ratings - base it only on the season(s) output from playersPlus
- where to use?
- internally in processPlayersHallOfFame, and therefore any place that calls processPlayersHallOfFame
- can all of processPlayersHallOfFame go in playersPlus?
- anywhere the extraStats variable is used, since that was just for baseball processPlayersHallOfFame
- in playersByPos in allStar/create
- PlayerStats page https://discord.com/channels/290013534023057409/944392892905037885/1468895828323205287
players constantly being signed and released https://discord.com/channels/@me/662077709836484618/1461143613776986163
- happens up until team hits the salary cap
- getBest is working by teamOvrDiffs, checkRosterSizes is working by player value
custom awards
- fields
- formula
- short name
- MUST BE UNIQUE
- long name
- some way to filter for SMOY
- MIP filter
- rookie filter
- support some kind of games played limit, like for players who miss a whole season, or baseball
- stats range (regular season, playoffs, semifinals, finals, combined)
- team or individual
- if team
- way to specify if it's position based or not
- maybe just automatically handle this per sport
- number of players per team
- maybe just automatically handle this per sport
- how many teams
- order
- use on...
- player profile page
- league history table
- season summary
- show in league history table?
- SeasonIcon
- icon (give a few options)
- color
- some way to label as an "important" award like MVP equivalent, ROY equivalent
- football has two ROY equivalents, so that shouldn't be unique
- should be able to add/edit/delete awards over time, and still have awards races page show the old awards
- only allow delete if an award has not been assigned yet. otherwise, only allow disabling
- extra things that get stored in player awards, but not in awards object
- should these even be stored in Player.awards, or elsewhere? probably Player.awards makes sense for normalization, might need additional prop to distinguish built-in vs custom awards
- see awardsOrder in groupAwards for list
- All-Star
- Won Championship
- Dunk Contest
- Three Point Contest
- Hall of Fame
- UI to update
- award races
- groupAwards
- awards editor
- player profile
- league history table
- season summary
- awards records
- team records
- GOAT formula
- add triple crown for baseball, like league leader awards
- store top 10 for each individual award, so it can be displayed easily on player profile pages
- should still be able to add an arbitrary one-off custom award - have some place for those in the awards object, and use it for unknown awards in upgraded leagues
- support awards per div/conf
- upgrade
- indexeddb
- import
filter GOAT Season by team https://old.reddit.com/r/BasketballGM/comments/1payyv7/monthly_suggestions_thread/nszvtf8/
positions with a hard cap in ovr (G, K, P) should also have a hard cap in pot
"random" draft lottery type Draft Lottery page issues
- erroneously called Draft Order
- "Draft lottery type" displayed as "No lottery"
- all teams are non-lottery, but would be better to show them all as lottery and have the "Start lottery" button and other normal lottery features, since it still is a lottery
- part of https://github.com/zengm-games/zengm/issues/491
rapm
- https://github.com/EyimofeA/zengm/tree/codex/implement-rapm-calculation-and-display
- only takes like a minute to run
partial draft class from random debuts messing up draft pick valuation - see 3166dbc0f for non random debuts league. ideally should trigger next generation to start being generated rather than leave a partial draft class
error after expansion https://old.reddit.com/r/BasketballGM/comments/1pa4635/error_whenever_i_try_loading_my_league/
- https://x.com/TJMags5/status/1996683016173986257
global untouchable players (persist over reloads and multiple features, like trades, trading block, trade proposals)
- some ideas https://old.reddit.com/r/BasketballGM/comments/1p80kca/i_made_a_chrome_extension_to_set_players_as/nr279ut/?context=1
- UI?
- what happens if we click "trade for" or "trade away" on one?
sentry
- https://docs.sentry.io/platforms/javascript/configuration/filtering/#using-thirdpartyerrorfilterintegration
- one project per sport?
catchers with strong arms never have people try stealing, maybe https://discord.com/channels/290013534023057409/944392892905037885/1441779272048971828 can fix it
rfld is kind of weird, with how it looks at team stats rather than player stats to divide credit https://discord.com/channels/290013534023057409/944392892905037885/1441000354740441128
GM History should not count seasons in spectator mode, ideally
make "export as draft class" move team region to college https://old.reddit.com/r/Football_GM/comments/1ovb0tf/version_202511120731_for_leagues_with_the_default/nqg9suy/?context=3
retire player with scheduled event https://discord.com/channels/@me/361954501365858304/1442064796047507457
baseball pitching tendencies https://old.reddit.com/r/ZenGMBaseball/comments/1p2dwqx/is_there_a_way_to_slider_the_number_of_pitches_a/
- take a look at current way it works, should default be tweaked?
- new setttings
- control how many pitches pitchers throw
- control how fast they recover between starts
- account for these in getTopPlayers in schedule.ts (projected starting pitchers)
don't use positions in substitution, or be less rigid about it https://discord.com/channels/@me/667557235479674880
- ideally - look at ratings, not positions
- allow position change in god mode for BBGM only
point spreads should account for starting pitcher/goalie
injuries
- make more representative of football: https://footballplayershealth.harvard.edu/wp-content/uploads/2017/05/06_Ch2_Injuries.pdf
- https://discord.com/channels/290013534023057409/290015468939640832/859264726247800832
- hockey
- https://discord.com/channels/290013534023057409/290015468939640832/859262222873526272
- more goalie injuries? https://discord.com/channels/@me/926178075614523402/930545643578081320
- baseball
- https://discord.com/channels/290013534023057409/944392892905037885/1440445305232298027
- customize ratings decline https://discord.com/channels/@me/778760871911751700/1445209955010478162
- injuries should depend on position
- wildcard?
- multiple positions per injury?
baseball bug - injuries somehow lead to teams scoring thousands of runs due to endless walks https://discord.com/channels/290013534023057409/1429553391499218955/1429553391499218955
https://www.youtube.com/watch?v=aEx2g636m-4
- when creating a league with custom teams, you can select teams from a god mode league and put them in a non god mode league
real-schedules
- baseball - would be nice for better series
- hockey - idk, maybe nice?
- basketball - could use for historical mode, but is it too much data/trouble to be worth it?
- football - also do for 16 games?
block game sim when schedule editor is dirty so simming a game doesn't overwrite changes
- how does backend know what pages are open in UI?
- https://developer.mozilla.org/en-US/docs/Web/API/Web_Locks_API
- write useLock hook, have it manage setting and clearing this value on mount/unmount. then check it in worker before simming games
- should i replace my whole lock module with this? would need to make lock.get async. but then i could get rid of gameSimInProgress synchronization - tabs could just read the real value? but how would they know it changed?
- would need to keep gameSimInProgress, so UI components can be reactive to it
- could send message to shared worker on lock/unlock
- lock when dirty, unlock when not dirty
- how would this handle multiple tabs with schedule editor open? would need to keep track of all host IDs
make ovr drop get saved from edited injury too https://old.reddit.com/r/BasketballGM/comments/1nutcno/monthly_suggestions_thread/nhr94ld/ https://discord.com/channels/290013534023057409/1432096932938907709/1432102253682233346
- add ratings row too
some way to export play-by-play and box score
- https://discord.com/channels/290013534023057409/1357064671118753904/1357521047934734397
- https://mail.google.com/mail/u/0/#inbox/FMfcgzQbfBvvgXvRgXKHVmHDcgXhJpTq?compose=DmwnWrRttWQWxCKltqpwbvvmKRwvbRxjQBlPPgZnpqcsrSzGXWNdCjCFnGmPkwpmsxkSpsqDZFjG
- https://old.reddit.com/r/BasketballGM/comments/1nutcno/monthly_suggestions_thread/nhaadkv/
- https://old.reddit.com/r/BasketballGM/comments/188okm0/is_there_a_way_to_copy_the_playbyplay/kbq4bei/?context=3
- tricky to handle all the sport-specific stuff!
some way to export season summary https://old.reddit.com/r/BasketballGM/comments/1nutcno/monthly_suggestions_thread/nhaadkv/
retired jersey number should not block the player it was retired for, and instead they should favor it https://discord.com/channels/290013534023057409/331882115119448065/1434939012585488515
button to undo or redo a players preseason progs https://discord.com/channels/290013534023057409/331882115119448065/1433886857481162893
- some way to bulk do it?
run all vitest tests in browser mode?
browserstack in vitest
- semi-working in vitest-browser-replace-karma branch
highlight or color code player ratings in more places, similar to ratingsstatspopover
- compare to position average, or all players? maybe depends on sport
- compare to predefined range, or based on league?
- places
- player profile
- player ratings
in box score, show revenue next to attendance https://discord.com/channels/290013534023057409/331882115119448065/1429340260193534064
schedule editor
- later
- support export/import and editing in spreadsheet
- drag and drop to move a game
- within same column
- to a new column - change the home team
- to a cell with "None" - easy
- to a cell with another game - swap
on roster continuity page (and maybe others) the "table-info" class in the user team's <th> should override the background color of th
A button requesting "expiring contracts" next to the "prospects" and "best current players" in trading block https://old.reddit.com/r/BasketballGM/comments/1n59zzw/monthly_suggestions_thread/nc0wt13/
option to disable retiring for players signed to teams https://old.reddit.com/r/BasketballGM/comments/1n59zzw/monthly_suggestions_thread/nggas7k/
jersey numbers by position and frequency
- football
- make the "classic" range more likely https://operations.nfl.com/the-rules/rules-changes/nfl-jersey-numbers/
- hockey https://discord.com/channels/@me/778760871911751700/1214961240405704757
- goalies are only position that wears #1. also wears 30-39 a lot
- defensemen usually wear 2-9
- forwards wear everything
- except for #1, anyone can wear any number
- make 66 and 99 more common
- allow editing frequencies and ranges
extra validation that would be nice to do during schema check
- draft year is valid (not a draft that hasn't happened yet - breaks some indexes)
- tid is valid for players, draftPicks, etc
button to skip schema check
- not easy because we use some info from the scan (like in fromFile) when processing the "real" stream, but see commit ee3b58dbdda31e8400518796c0509d7f39edb188 for a somewhat working implementaion besides that
customize names of playoff rounds
- see customize-playoff-round-names branch - not sure if it's worth the complexity
forceHistoricalRosters
- later
- handle mid season trades better
- handle offseason better
- draft picks
- apply real contracts in newPhasePreseason, similar to new league
get rid of abbrev_if_new_row, instead just populate entries in teams
support shared lists of names in player bio info
- use for built-in names like chinese/hispanic countries
- also allow for custom usage https://discord.com/channels/@me/1227394978674774038/1416118626582528010
heaves shouldn't count unless they go in https://discord.com/channels/@me/1099138438147624990/1400890557546631329
- heave definition: https://bleacherreport.com/articles/25223156-nba-announces-rule-change-end-quarter-heave-stats-2025-summer-league
for past seasons roster pages, include a "Left" column similar to "Acquired" https://discord.com/channels/290013534023057409/331882115119448065/1409262567230148658
- would need to track more stuff in "transactions" like when a player is released, etc
score bar UI might be better mirrored, like score in the middle and team on the outside for both sides https://discord.com/channels/290013534023057409/816359356424912976/1409956862513778719
feasible AI features from Chrome's built-in AI
- nicknames (pass in existing ones to not repeat)
- social media
leaders on dashboard should account for qualified/non-qualified players like league leaders page https://discord.com/channels/290013534023057409/1403842951574192228/1403842951574192228
now that we have worker modules, what can we do with it?
- code spitting in worker
- single bundle between ui and worker
- tricky with blacklist
- move static files, css into rolldown/vite build?
- for generateJsonSchema see 89674d46cd149cc6276cc0bbac0edbc0de15b3e8 but reverted it because i'm worried about cache busting (no hash in file name, and dynamically loading file rather than putting it in build is tricky) and it actually makes the watch build slower because it reruns generateJsonSchema every time (could short circuit based on fs stat)
use import with json attribute for loading json files, rather than special effort to copy/fetch them
- MAYBE NOT A GOOD IDEA https://jakearchibald.com/2025/importing-vs-fetching-json/ https://x.com/jaffathecake/status/1981010343326540157
- might fix issue with dev mode not letting you create new league if you killed it and did a prod build in background (if file is unchanged, bundler should bundle it to the same extension?)
- this will also allow fairly easy switching to vitest browser mode, since no fancy handling of static files will be needed (see vitest-browser branch)
- needs import assertions (and .default of imported value!) https://caniuse.com/?search=import%20attributes - browser support not great now: Chrome 123, Firefox 138, Safari 17.2
- delete special handling of JSON files in copyFiles and buildJs
- make sure to handle service worker caching properly (see "real-player" stuff in buildSw.ts and sw.js)
- how will i know the resulting name of the chunk?
- src/test/setup.ts needs updating
- if moving JSON files to a new folder in src, make sure to update script for copying real player data
- if i want to get crazy, could rewrite the import to fetch in a plugin maybe, and then maybe have it keep the original json file in its module graph if that gets processed first. not sure if possible. wait until rolldown-only
- or will rollup/rolldown handle something like this automatically, maybe converting into JS chunk? it seems to be trying to do that, but not succeeding completely.
- currently rolldown handles it automatically (converting to js chunk) and rolldown kind of does but it doesn't work right unless you remove the import attribute https://github.com/rolldown/rolldown/issues/2758
- https://chatgpt.com/c/68e53261-8960-8325-b295-c99adf21fb59 are some ideas, not sure if it's worth it really
add legends mode based on league to UI somehow
- should be able to select from "New legends league" or "New custom league"
- show dropdown with all your leagues, and one option for "real players"
- show Loading... as dropdown under "League" selection until all your leagues are loaded asynchronously. don't allow selecting "Loading..." and make sure it disables form for sports without real players
- load league metadata (lid, name, first/last season) asynchronously like generateCrossEraTeams
- allow selecting range of seasons (rather than predefined decades), with quick buttons to select "all"
- similar to cross era year range selector
- quick links
- make decades quick links for BBGM real players league
- for your leagues, do something intelligent based on start/end date
- need to make equivalent of getLeagueInfo
- load relevant gameAttributes from season range
- load teams from seasonRange
- load players (reading from other league database) while creating league
- https://discord.com/channels/290013534023057409/1382240288139116574/1383465548364382308
- https://discord.com/channels/290013534023057409/1384327592433160233/1384957307657523344
- what about free agents?
more injuries for tall players
in non-basketball sports, injured players should show up somewhere in the box score even if they have no stats. but where?
ZGMB live sim UI - show pictures of batter/pitcher and season stats https://discord.com/channels/290013534023057409/331882115119448065/1380594012049903667
ZGMB game sim tweaks
- should have more aggressive baserunning https://discord.com/channels/290013534023057409/944392892905037885/1380189689725587576
- ground balls advancing from 2nd to 3rd
- other situations too
- leads to fewer runs being scored https://discord.com/channels/290013534023057409/944392892905037885/1380517353619460177
- https://discord.com/channels/290013534023057409/944392892905037885/1384962292025921556
- Higher probability of 2B/3B regardless of speed (but perhaps especially on grounders down the line)
- Higher probability of HR on line-drives
- Higher probability of hits on line-drives
use actualPhase in more places rather than just phase
perfect game means there need to be no errors too https://old.reddit.com/r/ZenGMBaseball/comments/1l2rxp6/the_perfect_game_that_wasnt/
option to show contracts as percentage of salary cap
- need to know past salary caps for past seasons
perf issues in large league with 8500 seasons
- filling cache (such as in preseason) is slow
- https://issues.chromium.org/issues/370917918#comment9
- using readwrite transaction maybe fixes it? should i do that everywhere?
- loading some pages is slow https://discord.com/channels/290013534023057409/1378128106585460856/1378773261936103546
- HoF
- player profile pages
- probably also are index issues
Option to resim a exhibition game between the same 2 teams rather than going back into the menu https://discord.com/channels/290013534023057409/331882115119448065/1377067383004594287
ios app store with pwabuilder?
bug with trade value of draft pick for expansion team - valued as 1st rather than 15th? https://old.reddit.com/r/BasketballGM/comments/13x2hhe/monthly_suggestions_thread/jmgzqei/
- more generally, draft order code should be aligned with pick value estimation code. this would also solve issue with weird draftTypes and unbalanced conferences (team makes playoff and no longer is in lottery)
reconnect to meta before use
- same for league?
- maybe have API to get a transaction but make it async
- do the same for meta?
- what about "Attempt to get g.phase while it is not already set" errors?
- if g is cleared, then beforeLeague should reconnect to database and fill g. why isn't it?
- won't be called if ui thinks league has not changed
- call beforeView every time, and in there check if g or idb.league looks funny
- is idb.league check enough?
- these can also happen on API calls, so maybe add a check there too
- how to know if the API call is for league or not?
- try restarting worker manually to debug - do same errors occur?
player ratings page should show "2025 draft class" etc as options in the teams dropdown https://old.reddit.com/r/BasketballGM/comments/1joi4m5/monthly_suggestions_thread/mlgv44r/
HoF should highlight your team like GM History, not your current franchise https://old.reddit.com/r/BasketballGM/comments/1joi4m5/monthly_suggestions_thread/ml0xht0/
- or make it configurable
- would need to process on worker, add a flag to player object
- other pages too?
- retired players list should highlight players who ever played for your team https://old.reddit.com/r/BasketballGM/comments/1joi4m5/monthly_suggestions_thread/mkz8q9k/
make clone player button a dropdown that lets you pick current season or a past season https://old.reddit.com/r/BasketballGM/comments/1joi4m5/monthly_suggestions_thread/moikegn/
option to disable notification popups https://old.reddit.com/r/BasketballGM/comments/1h3racg/monthly_suggestions_thread/m0duybm/
- red ones still go through
- UI-related ones still go through, like warnings or "success" ones
- https://mail.google.com/mail/u/0/#inbox/FMfcgzQbfBnzTbzpmKpRrBLWChBbDBrP
more options to set real rookie ratings https://old.reddit.com/r/BasketballGM/comments/166rgf3/monthly_suggestions_thread/jzri5zh/
- rookie season, draft position, peak performance, and career performance - allow weight of each of those for how important it is
- also random (generate a random players draft class and just put the real names on it)
add way to rig all star contests https://chat.reddit.com/room/!nVGBL_XbTU7q__4Ga_viICk5YF1A5gNCR74Sr7aqhUE%3Areddit.com
report of league edit affecting other league https://chat.reddit.com/room/!gPZoYICDvu6IznSGBE0uAuf37GI6rw9i-txqhVepeE0%3Areddit.com
- could be related to using the back button to switch to a previously loaded league
add comparison to real player, for random player or draft prospect?
- https://twitter.com/messages/1928999030-3723150857
- draftRatings/seasonRatings/seasonStats/seasonPotential/careerRatings/careerStats
- "real life"/"your league" (only basketball)
- make prominent during draft
- reverse search during draft - find players similar to a player from your league (or real life)
no height changes with 100% determinism https://old.reddit.com/r/BasketballGM/comments/mhj2r2/monthly_suggestions_thread/gu9tsqi/
keep track of DNP players in box score explicitly, just with minimal info rather than full stats
- use for basketball to save space
- need at least some metadata to show in box score
- could just delete any 0 stats, that might achieve the same result and work for all sports?
- for other sports, no metadata is needed, could just be an array of pids
- use for player game log, especially for pitchers in baseball https://discord.com/channels/290013534023057409/944392892905037885/1335192150949888032
store list of prior worker console commands https://discord.com/channels/290013534023057409/331882115119448065/1354957789755215953
- save when you run, assuming no existing one is saved with the same contents (hash and use as key)
- save number of times run, first date, last date
- allow starring, delete, and bulk delete (optionally ignoring starred ones)
- also allow searching and other DataTable features
- do this in popup window?
- won't this get filled with a bunk of junk, like running the same code with different parameters? idk, maybe not worth it
population rounding should be dynamic https://discord.com/channels/290013534023057409/331882115119448065/1353247122224451675
If you go onto a team and start spam releasing players quickly (best way to do this is decrease window size) it will show a black error box saying you are not allowed to do this. also happens if you try to release a player twice before the game updates the ui https://discord.com/channels/290013534023057409/290015591216054273/1310075135444783164
- happens in league with tons of free agents https://discord.com/channels/290013534023057409/290015591216054273/1352057685574684742
- ideally should disable other release buttons while releasing
- maybe make it generic to computing contracts, send some signal to UI like it does when simming games
- should also affect bulk action buttons
rolldown
- prod build
- switch from timestamps in filename to hash
hide least popular menu items
- from GA, least popular main menu items are: player graphs, team graphs, and advanced player search
ability to add custom teams to the default list of teams, for selecting when starting a new random players league, or adding a team to a league, etc https://discord.com/channels/290013534023057409/331882115119448065/1351880641762955284
if a player comes back to your team for a 2nd stint but his jersey number is retired, he should be allowed to wear that retired number (and actually it should be his preference) https://old.reddit.com/r/BasketballGM/comments/1ieujhu/monthly_suggestions_thread/
- what if 2 numbers are retired?
- after implementing this, maybe the "Retire Jersey" button should be enabled for players still on your team, since they can keep their jersey number
if you download a spreadsheet of the most lopsided trades, the spreadsheet leaves out the "team" columns https://old.reddit.com/r/BasketballGM/comments/1ieujhu/monthly_suggestions_thread/mceee7x/
update game screenshots
intermittent "tid not found" error when starting real players league with all stats in 1977
hype on league finances page https://discord.com/channels/290013534023057409/331882115119448065/1335735421145186440
add ability to export at any season/phase https://old.reddit.com/r/BasketballGM/comments/1dsfbps/monthly_suggestions_thread/leiay76/
- would need better log of player movement
- player.transactions might be good enough
- should a trade/signing in regular season before any games are played be treated as preseason?
- player contracts
- draft picks
- expansion teams
- scheduled events
starters should start the second half https://old.reddit.com/r/BasketballGM/comments/1hqsb4w/monthly_suggestions_thread/m7rpcrd/
top padding bug https://discord.com/channels/290013534023057409/290015591216054273/1338025503390437478
A more in depth head2head page that lets you look at 2 specific teams regular season and playoff series matchups in a list https://old.reddit.com/r/BasketballGM/comments/1hqsb4w/monthly_suggestions_thread/m6jm1pc/
allow selecting season ranges in more places
- GOAT lab and GOAT season date range filters https://discord.com/channels/290013534023057409/331882115119448065/1327680226477604895
- for players, implement similar to Advanced Player Search
- team stats https://old.reddit.com/r/BasketballGM/comments/1hqsb4w/monthly_suggestions_thread/m5e95dt/
- team records https://old.reddit.com/r/BasketballGM/comments/1ifzsa4/version_202502020634_view_career_totalsaverages/maoyzwm/?context=3
- league stats
- team history
- awards records
- player stats (all seasons)
more randomization settings
- pick a range of seasons for random debuts modes https://old.reddit.com/r/BasketballGM/comments/1ie8oak/how_to_mix_up_historic_draft_classes/mafigb4/?context=3
show # of teams in each division when making expansion draft https://old.reddit.com/r/BasketballGM/comments/1iingd3/i_added_a_bunch_of_expansion_teams_but_added_too/
https://www.compart.com/en/unicode/U+1F3C6 rather than ring
apply checkbox td hack to buttons too
- should correctly handle hover state
- bootstrap utility?
show career totals per team at bottom of stats tables in player profile pages
- add some extra option to playersPlus like careerStatsPerTeam
more aggressively use closers in playoffs https://discord.com/channels/290013534023057409/290015591216054273/1332735406176735263
in FBGM game sim, simming until the next change of position doesn't trigger when a team scores a TD but throws an incomplete pass on the 2-point conversion. It simply skips through the next possession as well
in late game critical situations (like tied, 0 outs, bases loaded) there should never be a fielder's choice, should always try for out at home https://discord.com/channels/290013534023057409/290015591216054273/1333641668762796035
zgmb should have more doubles and triples https://discord.com/channels/290013534023057409/944392892905037885/1332600467502661717
bulk actions - tables should be aware that rows are players who have pids. add bulk/all/select operations at table-level through ... menu
- some way in typescript to impose the type of metadata in a table - rows can only have one type of metadata (or no metadata in some rows is fine, like drafted players table)
- if this was done, then most metadata type checks like `metadata.type === "player"` in BulkActions and ExportPlayers would not be needed, those are just for typescript
- something like this works, but is kind of annoying with the generic being needed in various places:
`type RowOfType<T extends RowMetadata["type"]> = T extends RowMetadata["type"] ? { metadata: Extract<RowMetadata, { type: T }>; other: string } : never;`
- other places to use
- re-signing player and free agents table - sign multiple players at the same time https://mail.google.com/mail/u/0/#inbox/FMfcgxwKkHjZVVXMJCrJkQVrDlmZjHph
- button needs to be disabled if not allowed under the cap
- trading block - would still need separate logic for selecting picks, so maybe not worth it
- trade - would still need separate logic for selecting picks and untradeable players, so maybe not worth it
- retire players button in god mode, along with delete players in bulk actions https://discord.com/channels/290013534023057409/1333871313898573904/1333884981835075584
- ProtectPlayers - maybe not worth it considering all below
- use disableBulkSelectKeys for disabling when hit threshold
- loading initial cache state from storage and then pass to DataTable selectedRows
- "select all" should not actually select all, there is a limit
- when table is filtered to 1 row, checkbox dropdown menu in header is cut off by wrapper div
- interaction between table-responsive and dropdown in bootstrap, many discussions online, many potential solutions, but none of them seem to work
- sticky/sorting interplay
- sorting a row with table scrolled to the right needs to account for scroll in overlay somehow
- same issue for the animation moving the row into place
datatable should support unsorted sort state
- leaders, award races - so we don't have to highlight by default
- roster basketball non-user - so we can allow sorting while still allowing rosterOrder viewing
- maybe also allow sorting for user, but don't persist so by default you can always drag/drop
- check how sort status is passed to row.classNames
- already happens in box scores
unify export players and export draft class code
- export players adds exportedSeason to player, and uses that to process player object on import
- but that is by design, on import you can pick any season
- export draft class processes players on output
- some places with export draft class buttons could be replaced by bulkSelectRows actions
compare players http://www.reddit.com/r/BasketballGM/comments/1saclf/suggestion_compare_players/
- bottom: all the tables from player stats, showing one row for each player
- make sticky header not go over these
investigate trade weirdness https://discord.com/channels/290013534023057409/290015591216054273/1330946762017607751
on drive chart, a 2 point conversion attempt that goes backwards puts the end of the score tag on the wrong side of the field
trading block picks filter should also include negative value players if that allows another pick or a better pick to be included
persistent no trade button
for stat tables with gap placeholders (like on a player profile page, there's a gap for empty space between seasons), that gap should only be rendered when sorting by season https://discord.com/channels/290013534023057409/290015591216054273/1327933313079312446
- somehow need to hide these based on table sort - how to propagate that info?
Add https://mail.google.com/mail/u/0/#inbox/FMfcgzQXKhJZvwmSjwbthGLcdXGfCrJH to rebuilding/contending strategy rewrite
vector logo generation
- https://www.recraft.ai/ai-image-vectorizer
- https://sagipolaczek.github.io/NeuralSVG/
- https://neosvg.com/
counter proposals too jumpy, get rid of that extra iteration at the end maybe?
- https://discord.com/channels/290013534023057409/569726303926878219/840367834965213194
- https://discord.com/channels/290013534023057409/290015591216054273/854580914024480798
- add penalty for too many players in trade?
- if this works, could remove the maxAssetsToAdd constraint in trading block
- try with and without overshooting (without meaning, don't add anyone worth more than the initial trade proposal) and if both work, pick the one with fewest assets
- something about magnitude - no point in adding 20 shitty players when trading a star
- only overshoot if # of players is not too much
Change (or add an option for) the coin flip to be like the old NBA coin flip, which was between the worst teams in each conference, not the worst two teams overall. Alternatively add the ability to edit the teams in the lottery. Probably no one else cares, but I like to be accurate. https://discord.com/channels/290013534023057409/331882115119448065/1322397494335897692
https://discord.com/channels/290013534023057409/331882115119448065/1320819951400910929
- After completed trade, redirect to trading block OR roster. Highlight new additions.
- In trading block, highlight the players you can't trade yet (due to resigning) just like it does in roster view
- Players traded in preseason (my default, so I know who's ratings have improved or dropped) should be included in the regular season preview - example, "top players on New teams" should pretty much always have one of my old players I traded away and it never does
- Show roster spots at top of trading block - do a ton of offloading lowest players and I can only see those slots in roster
add expiration year on trade proposals page https://discord.com/channels/290013534023057409/331882115119448065/1319999415418748938
runner stealing base should only very rarely be caught in double play
make player graphs remember selections https://old.reddit.com/r/BasketballGM/comments/1gplx7g/could_you_make_the_player_graphs_remember_what/
- other pages?
FBGM end of game penalties
- declines penalty when it would have given untimed down in 4th quarter with a chance to win https://discord.com/channels/290013534023057409/290015591216054273/1313017959035179008
- accepts penalty on a scoring play (made FG) that would have won the game in overtime https://discord.com/channels/290013534023057409/1448891925837910228/1448891925837910228
condense develop0 and updateValues into a single function, mainly for worker console
Injury "games missed" has some counting bug. I can't send league (on phone, hundreds of years, etc.) but with standard 82 game seasons... guy plays 6/82 in '65 and 74/82 in '66. But under injuries is listed as "2065: Torn ACL, 148 games" and "2066: Torn ACL, 122 games". So under most injured frivolity, says he missed 400 career games but that's definitely not right. Could at least cap with (team games played - player games played) per season somewhere if the cross-day accounting is needed for playoffs or FA or something https://discord.com/channels/290013534023057409/290015591216054273/1310287379457900564
scheduled events editor
- see "scheduled-events-editor" branch, shit's complicated
players just drafted should not count towards mood when traded away https://old.reddit.com/r/BasketballGM/comments/1gtj4dj/suggestion_for_core_updates_in_newsletter/
too many non-shooting fouls in late game situations when defense is in the bonus - should be rare when tied or up 1-2 points
- https://discord.com/channels/290013534023057409/331882115119448065/1304329744774336522
hype should impact the magnitude of the home court advantage
add option to make rookie contracts not signed, even if there is no hard cap https://discord.com/channels/@me/1256311871980441670/1297925653685080136
get rid of checks for raw state/province names https://old.reddit.com/r/ZenGMHockey/comments/1g57hg5/if_you_make_a_real_state_a_new_country_you_cant/
- still need to check for 2 letter abbrevs, cause that's what alexnoob uses. make sure about that though
- maybe only do this if it's in playerBioInfo, like if there is a country called Maryland
Don't allow play if versions in tabs don't match
- close worker?
- newPhasePreseason being called twice in two different tabs and somehow updating the database twice?
move from my iterate function to async iterators
- all gone now, but some people might still be using it in worker console, so maybe in a couple years (2027?) get rid of the function
customize number of pitchers in rotation https://discord.com/channels/290013534023057409/944392892905037885/1291306004495204363
- use this to set the max pFatigue value in play.ts
- use in UI for how many starting pitchers are shown in depth chart
- use in getStartingPitcher
- use in auto sorting pitcher depth chart
best teams option in legends mode
- iterate over teams, compute ovr, drop ones who don't make the top 30 - is this too slow?
Maybe show latest play at the top somehow in mobile, like in FBGM and ZGMB (corban)
- basketball - could show last possession outcome, all condensed into one line (e.g. shot attempt and result)
- idk if it's worth it - other games don't have it, and you can just watch the play by play if you want
Hall of fame probability https://old.reddit.com/r/BasketballGM/comments/1eh2h9b/monthly_suggestions_thread/lg5hq2c/
- make a model to predict if a player will make the hall of fame - include age and current ovr so it's a prediction of the future, not just checking his current status
- estimate when player will retire
- account for quarterLengthFactor, hofFactor
- could train a model to predict future career WS from (age, ovr, pos)
- need to know the stddev too
- could do monte carlo like pot, although that'd be slow and change every time you reload
- bail out early when...
- we cross the threshold for HoF
- EWA per year has decreased to 0 (this could eliminate the need for estimating retirement age)
- stronger version of above - bail out when there's no realistic chance of HoF, based on some heuristic
- could maybe discard a lot of players - ones already 100%, and ones with no chance for more than 0%
Family rankings in the relatives page? https://old.reddit.com/r/BasketballGM/comments/1eh2h9b/monthly_suggestions_thread/lfwhir1/
Not sure why but if force retire age is set at 100 I've noticed players in my league at the age of 100 will randomly spawn in and start playing, so fixing that would be neat. https://old.reddit.com/r/BasketballGM/comments/1eh2h9b/monthly_suggestions_thread/lfy1lhr/
when game is tied late, teams should usually wait until the last second to shoot https://old.reddit.com/r/BasketballGM/comments/1eh2h9b/monthly_suggestions_thread/lj6ccns/
cancelling expansion draft can somehow delete existing teams, not just expansion teams https://discord.com/channels/@me/1279993011387764818/1280026813812310017
in baseball, after a trade, player could be in the depth chart for LP (no DH lineup) even if there is no DH lineup at all, and then his position there will show up in lineupPos elsewhere on the depth chart. but weirdly, this happened with a pitcher getting listed at CF. seems the CF was sent out in the trade, maybe related? https://discord.com/channels/290013534023057409/290015591216054273/1278535975022231553
fuite
- works with web worker, not shared worker
- only looks in main process, not worker process
use team ovr in updateStrategies https://old.reddit.com/r/nba/comments/1estlxk/basketball_gm_rnba_post_2024_edition/lielvo3/?context=3
- maybe top X% guaranteed to be contending, bottom X% guaranteed to not be?
FBGM timeouts
- don't take timeouts after some plays
-in FBGM, teams sometimes take timeout right after the kickoff, before 1st and 10 even shows up https://discord.com/channels/290013534023057409/290015591216054273/1274484873167507488
- also right before kickoff, such as after missed XP https://discord.com/channels/290013534023057409/1469165154624081951/1469165154624081951
- timeout in last 2 minutes when injury stops clock
Can processPlayersHallOfFame use gpF for baseball? spread season's WAR around by that, if it's available? https://discord.com/channels/290013534023057409/944392892905037885/1272548695459631210
show how many fouls each team has, and bonus status https://old.reddit.com/r/BasketballGM/comments/1ceu3n4/version_202404271260_during_live_sim_the_number/l1ouaf9/?context=3
- design ideas
- could use symbol for bonus
- could show just text like "TO: 5, F: 5" and highlight F in red when in bonus
- could write BONUS as vertical text after the team name/score
- show count of personal/team fouls when a foul happens in text https://old.reddit.com/r/BasketballGM/comments/1d59y20/monthly_suggestions_thread/l8bya7o/
hard to click player ratings popover icon on mobile without hitting player name? https://mail.google.com/mail/u/0/#inbox/FMfcgzQVxlKSNzFsbplCJFNQHjrZjHXz?compose=DmwnWstqxPhppsXNxCfVhCxwWDdnRGXNrVbGqgdPQhDFFgXzxhKzJjlLMSJgtNznJpKSPlRNsZxV
advanced player search
- more filters to add https://old.reddit.com/r/BasketballGM/comments/1dsfbps/monthly_suggestions_thread/lfi9uif/
- current team info (cap space, strategy, record, ovr)
- player (skills, mood traits, chance to re-sign with your/current team, projected contract)
- player awards
- when selecting a team, contract seasons to sum up should be filtered by stats seasons (just like ratings). except it's kind of fake, since it doesn't handle released contract amounts going to original team
- filter UI AND/OR logic, rather than just AND?
- ootp lets you pick and/or, but how to specify grouping? https://manuals.ootpdevelopments.com/index.php?man=ootp16&page=filters
- could make it hierarchical, but that's complicated https://cloud.google.com/looker/docs/and-or-filters-in-explores#filter_groups https://support.airtable.com/docs/filtering-records-using-conditions#condition-groups-and-advanced-filtering
mobile UI ideas https://old.reddit.com/r/BasketballGM/comments/1e5dwvi/some_design_suggestions_to_improve_mobile_uiux/
- #2: add trade link to roster page
- #3: move roster higher on page - make injury stuff at the bottom, and condense other stuff
some generic way to hide ratings in challengeNoRatings
- should be done on worker, so UI never gets an opportunity to display ratings. this is better than a Rating component because it handles all cases, including when ratings are shown inline in some text
show amount in $ over trade limit rather than % https://mail.google.com/mail/u/0/#inbox/FMfcgzQVxRJVkhtPLhkSrSXlJxJVWgrN?compose=DmwnWrRrmRLLHDwLtgDWrwnTFPXrFqTcCQpnNNqHJKtNMsbmsqNqfhtmtPQrTQKMrQjSNfCLSJcg
option to sort playoff teams by power ranking
don't let goalies play as skaters unless there are less than 5 healthy skaters https://discord.com/channels/@me/778760871911751700/1261362360396943430
shot selection revamp
- pick shooter - similar to current
- or maybe factor in shot quality, some players basically only take open shots (mediocre jump shooters, bigs who only dunk)
- determine shot quality - base on team oiq, team skills, player oiq, and player skills
- determine shot type - calculate expected value for all shot types, factoring in shot quality (contested 3 is often the bail out shot for low quality situations). also consider that layup/dunk is harder to get, but the other ones you can pretty much always get.
- 2 layer decision - jump shot vs inside vs layup. if jump shot, use tendency factor to influence likelihood of 2 vs 3
- goals
- the only guys shooting a lot of midrange shots should be either efficient at it, or low oiq
- should be some bigs that basically only take inside shots
for real player draft prospects, link to tankathon
- future years?
- is everyone on https://www.tankathon.com/big_board ?
Support logos being saved to IndexedDB
- what formats to support?
- what about player images?
- how to handle global image data?
- upload or local storage?
- upload - am i responsible for content?
- local storage - mobile disk space constraints
- hash and store globally
- if it's all based on hash, can never edit a logo
- could instead require a key
- special key for srID auto ones
- global metadata
- created date
- edited date
- description text
- source (league id, or "uploaded")
- (maybe) league IDs using it currently
- optionally include in league file
- option on export page - note all the hashes used, and then load them from database
- in league file - some root level "logos"
- importing league file - read from "logos"
- ui to allow CRUD of logos
- if hash based especially, some bulk edit function (replace this logo in all leagues, or maybe some leagues/seasons)
- or allow uploading to server
- https://news.ycombinator.com/item?id=40221210
- data URLs with base64 image data
- currently the JSON parser crashes the browser https://discord.com/channels/290013534023057409/1374150430216556705
- try https://www.npmjs.com/package/@streamparser/json-whatwg
- make sure works with existing community files
- would need to dedupe rather than storing in each TeamSeason
- even deduped, would be big file sizes, and users might accidentally put huge files there
https://discord.com/channels/290013534023057409/569726303926878219/1253099037872226314
- Dpoy is still a little weird. I understand if dm wants it to be evenly spread out among positions, however with my sliders that are damn near identical to irl stats (which I feel should be the default for the game) corners win it 8/10 times
- If you start as an expansion team in the offseason before the draft similar to irl, your team picks in the middle of the pack (16-17 in a 32 team league). In reality expansion teams should get the 1st overall pick.
- I feel like the difference in workload for rb1 and rb2 should be bigger when there’s a huge gap in ovr. I just had a 2k rusher today which is crazy, however even with my rushing-enhanced sliders I pretty much never see over 1700 in a season unless I purposely set my team up to force the ball down a rbs throat. I don’t wanna see 10 guys with 1-1.2k yards, I wanna see 8 guys there and a couple up at 1500+.
- Starting to get more detailed here, but rookie qbs are too high ovr. There’s only a couple rookie qbs to ever pass for over 4k yards but that happens all the time in fbgm, and when that’s happened irl most qbs have like a 1.5:1 td:int ratio. In fbgm I see so many 4k+ passers with like 30+ tds and <10 picks. I like seeing the 50 ovr guys, not the 70-80+ 100 pot dudes all the time
- Personally I would like to see a little more scrambling qbs, I see qbs with high (70+) speed all the time but they never have the elusiveness to run at all in sims, that’s like Lamar Jackson or Justin fields just not scrambling lmao. I feel like more scramblers need to be generated, and maybe they just need to more closely match speed and elu, because no qb has ever run a 4.4 and decided to be a pocket passer their whole career
- Finally I want to see contracts adjusted, irl cap is up to 255m with top guys at 55m, but in game is still 200m/30m. I am able to get 45m max in game with a 255m cap, however I can’t get up to 55m because some positions make way too much. Most look good, but I have rbs making 25-30m which is way off, those dudes make like 16 tops now. If the amount people got paid was tweaked a tiny bit I’m sure a 255/55 setting would be possible to match irl contracts very closely
green highlight (players from your team) most places should be aware of userTid history
on trading block, if salary cap is disabled, hide the Payroll and Cap columns since they are not relevant
- maybe better - show your payroll after trade, rather than the other team's payroll https://mail.google.com/mail/u/0/#sent/FMfcgzGxTFZTnfhSTRFBmTLcjmNhDksw
team season seach - similar to advanced player search
- https://stathead.com/basketball/team-season-finder.cgi
drag and drop
- customize page
- allow drag and drop to reorder confs/divs
- allow drag and drop to move teams to other divs
- https://codesandbox.io/p/sandbox/react-multiple-container-drag-and-drop-forked-sdd2km?file=%2Fsrc%2Findex.tsx
- https://master--5fc05e08a4a65d0021ae0bf2.chromatic.com/?path=/story/presets-sortable-multiple-containers--basic-setup
- https://github.com/clauderic/dnd-kit/blob/master/stories/2%20-%20Presets/Sortable/MultipleContainers.tsx
- https://www.youtube.com/watch?v=RG-3R6Pu_Ik
injured players in hockey shootouts https://discord.com/channels/@me/778760871911751700/1238301880489345184
players switching numbers when they don't switch teams https://discord.com/channels/290013534023057409/290013534023057409/1239346257151918130
support importing players from league file with non-augmented player objects https://discord.com/channels/@me/361954501365858304/1237815968147701760
- need to do all of augmentPartialPlayer, not just name. cause we need ovr/pot too
- should run augmentPartialPlayer after reading file in LeagueFileUpload but before showing in UI for ImportPlayers
triple play logged as double play https://discord.com/channels/290013534023057409/290015591216054273/1235723112310378496
- how does a triple play even happen?
add career totals to export stats https://old.reddit.com/r/BasketballGM/comments/1bsp3ji/monthly_suggestions_thread/
use ptsPct instead of winp in various places if pointsFormula
- team history
- power rankings
indicator of if trade will be accepted
- https://old.reddit.com/r/BasketballGM/comments/1b3h2f6/monthly_suggestions_thread/kswqcuk/
allow undoing actions
- types
- trade
- signing player from table
- drafting player (tricky bc AI goes right after)
- X to hide a trade offer
- releasing player
euro-style team names
- implementation
- add two field allongside abbrev/region/name - customMedium and customLong
- customMedium is a medium length name. if undefined, Region is used. could be defined to disambiguate two teams in the same reason, like "LA Earthquakes" and "LA Lowriders"
- already manually using LA Lowriders in achievements.ts
- customLong is a long name. if undefined, Region Name is used. could be defined to have european-style team names
- ...this still results in weird situations, like not knowing how to use the medium name in a sentence since it might be the city or it might be the team name, like is it plural or not?
- what does FM do?
- usually process in UI. maybe will need some in worker, like for notifications
- add to teamsPlus?
- @Ra98
OTW
- formatRecord as W-OTW-OTL-L-T if both OTW and OTL are available, otherwise if only OTL keep it after L
- add tracking of ROW for tiebreakers even if we don't break out OTW in standings - maybe always track this
- RW might be needed to - doesn't include shootouts. shootouts make this more complicated, maybe not worth doing now...
- complexity details: https://mail.google.com/mail/u/0/#sent/FMfcgzQZTgTgrtpwdkWnWJRqZFwrTBKr?compose=CllgCJlDSvVLngcRlzWGhJkHXrXZNCLksLHSgtmSCGkvXhpVzNRDxLQnvFxjzRTdLxTNgnQFmBq
new achievements
- moneyball 4 - win 3 championships with hardest constraint https://old.reddit.com/r/BasketballGM/comments/1bgxksp/auto_played_almost_9000_seasons_to_get_longevity/lhgnwm1/?context=3
- force challenge mode to remain on
- win title X years after sisyphus mode
- https://chat.reddit.com/room/!CTzWdQJV_o3iD9mGr52VSsuMkPL7xM2O-ZWkauqKxYw%3Areddit.com
- win a chip in your first year with a new team, not just an expansion team
- Draft 10/25/50/100 Hall Of Famers
- Win 5 consecutive championships without losing a playoff game during the streak (obviously this doesn't work for FBGM)
- Lead the league in both passing and rushing yards for 3 consecutive seasons.(Obv just for FBGM)
- finals MVP with no assists https://old.reddit.com/r/BasketballGM/comments/1hyowqb/my_power_forward_is_the_ultimate_ball_hog/
- player ones, like a player with certain stats in a game/season, or years with team, or awards https://old.reddit.com/r/BasketballGM/comments/1jpwg4w/version_202504020886_players_get_a_mood_bonus_if/ml3treh/?context=3
- euro vision - top 5 players in minutes played all european https://old.reddit.com/r/BasketballGM/comments/1jpwg4w/version_202504020886_players_get_a_mood_bonus_if/ml433j6/?context=3
- balanced breakfast - 5 players averaging 15 ppg https://old.reddit.com/r/BasketballGM/comments/1jpwg4w/version_202504020886_players_get_a_mood_bonus_if/ml433j6/?context=3
- homegrown one draft class https://discord.com/channels/290013534023057409/1391797038718386246/1391798124095209554
- 3 ROY in a row https://old.reddit.com/r/BasketballGM/comments/1o4pk7p/i_feel_like_this_should_be_an_actual_ingame/
arrow navigation between players on team https://old.reddit.com/r/BasketballGM/comments/1afy7ba/monthly_suggestions_thread/kr9whzi/
- make it a select? or listen for keyboard shortcut?
offsetting penalties at end of half should lead to untimed down, same as defensive penalty https://discord.com/channels/290013534023057409/290015591216054273/1215714915550232646
draft pick trade logic bug https://old.reddit.com/message/messages/274jbgt AI may value the picks by team record only, even when the better record team is in the lottery and the worse record team is not
hockey: add offsides, icing, puck out of play https://discord.com/channels/@me/778760871911751700/1213624877345411162
- improve stats: more faceoffs, more shifts
- Offsides -> Just leads to another faceoff. Maybe frequency could be calculated by something about Possession Teams' OIQ vs The Defenses DIQ
- Icing -> Team that iced puck cannot line change, leads to another faceoff. Would replace missed shots on Empty Nets. But Icing also happens during games.
- Puck out of play -> Leads to faceoff
- other stuff: https://discord.com/channels/@me/778760871911751700/1223414545234530425
event log
- make sure numbers look reasonable
- offline support
- add yearly prior data
- add to website
- current value
- history
FBGM snap counts https://discord.com/channels/@me/778760871911751700/1206814062621491233
- by position?
Make the Manage Teams table sortable https://old.reddit.com/r/BasketballGM/comments/18vljqg/monthly_suggestions_thread/kj2v734/
add last jersey number to retired player class export https://discord.com/channels/@me/1190366676655558676/1207792999833018458
When using the “can’t sign free agents except to minimum contracts” setting, none of the drafted players were able to sign with the team that drafted them (with the exception of the player controlled team) except for kickers and punters (due to them only asking for the minimum) https://discord.com/channels/290013534023057409/290015591216054273/1207484902384341093
danger zone thing to change current season
random debuts option to shuffle entire draft class years https://old.reddit.com/r/BasketballGM/comments/194kdbc/new_saved_trades_page_under_the_players_menu_save/koj2fg1/?context=3
fix subscriptions
- should not be possible to have multiple subscriptions active for same account
- should be harder to have multiple subscriptions active for different accounts with same email
- password recovery should handle multiple usernames for email
box score overflow with long team name https://discord.com/channels/290013534023057409/290015591216054273/1194104187722661928
auto export to folder every N seasons
- chrome only?
- include box scores?
"field-sizing: content" to replace hacky sizing of top bar selects, when it has browser support https://caniuse.com/?search=field-sizing
- Chrome 123, Firefox ?, Safari 26.2
BBGM injury rate too low? https://discord.com/channels/290013534023057409/290015591216054273/1190784110763970600
better clock handling in BBGM - calculate time as you go in the play
- turnovers/steals
- better separation of frontcourt/backcourt turnovers, rather than doing it only for possession starting in frontcourt
- simulate turnovers on inbound pass
- only meaningful in late game situations, especially intentional foul ones if there is enough time
- lower rate if side out of bounds, so winning team should sometimes use timeouts
- higher turnovers late when defense is trailing, but also higher foul rate and give up better shots
- offensive rebound putbacks on normal plays
- mostly implemented already, but only used now for lateGameOrbPutback. other put backs should be higher percentage. but make sure it doesn't affect stats too much
- tip ins should normally happen sometimes on out of bounds plays
- substitutions should only happen at allowed times (period ends, timeout, foul, out of bounds)
- teams should be less likely to foul in dumb situations late
- substitution stuff
- injury should require a timeout or dead ball to actually make a sub, until then team plays with an injured player
- should not have separate updatePlayersOnCourt call for fouling out, should somehow integrate that with the normal updatePlayersOnCourt call in simPossession
- timeouts
- currently just are used to stop clock and advance ball. should also be used for rest, (maybe) stopping a run, substitutions (especially after injury), and making inbounds easier when leading late
- if down by 2/3 very late, maybe intentionally miss FT to get offensive rebound attempt https://github.com/zengm-games/zengm/issues/392
- fast breaks
- fewer out of bounds after missed free throws, maybe other shot types too
- ORB% should vary by shot type
subs shouldn't happen after offensive rebound https://old.reddit.com/r/BasketballGM/comments/18829x9/substitution_on_offensive_rebounds_shouldnt_be/
some sportState live sim for basketball/hockey
- chart showing margin vs time or win probability vs time (toggle button to switch)
- win probability derive from (margin, time, ovrs)
- complications
- team with possession matters too, at least late in the game - so we need the whole play-by-play
- for free throws, probability would adjust before any FT is taken, and then again after every shot
- for other sports... other stuff matters, like scrimmage/down/distance in football, or pitcher in baseball, or power play in hockey. so maybe make this basketball only for now?
- store margins in box score, or sportState?
- both charts have same x-axis and same tooltip
- if win probaiblity is too hard, just do margin
- use data in playByPlay if it is available to generate chart
- cache in sportState? idk, sportState is usually for temporary stuff, but this would be based on the entire play-by-play
- in basketball, show mini scoring summary (last N plays) next to chart
- in sportState or scoringSummary?
- for most sports, margin is derivable from scoringSummary, but not basketball
- for basketball, store margin in scoringSummary or elsewhere? and for other sports?
- should this just be for live games, or all box scores? what is impact on file size?
storing playByPlay
- first go over all events and make sure they are reasonable and minimal
- replace names in events with pids, like basketball
- options
- all teams
- only my team
- none (default)
- don't include init
unify PlayByPlayLogger
unify processLiveGameEvents
- make it a class, to more easily handle stuff like playersByPid
- after doing this, get rid of gid random.randInt hack in exhibitionGame.ts
- formatLiveGameStat could be simplified as a method
FBGM move event text generation to UI
- to fix after
- bold text
- is "clock" really needed in every PlayEvent? i think it's only needed in the actual clock ones. even scoring plays don't need it, they just use the snap time
- too many formatClock calls
FBGM drive chart
- later
- would be nice to make "1st & 10" gray box have dynamic width in play log
- same for score tag on negative play (defense or kick return)
- some indication of direction in the bars? idk, only confusing on weird plays
- lost info in removeLastScoreOrTurnoversIfNecessary
- rather than removing a row from sportState.plays, might be better to mark it as overturned
- but when rolling back for penalties, we kind of need to delete, because that lets us show the penalty in the main bar, not in a sub-play bar
use team colors as foreground/background in UI in some places - already guaranteed contrast bc used for jersey numbers
- box scores
hockey
- sub out goalies if they're performing badly in a game https://mail.google.com/mail/u/0/#inbox/FMfcgzGtxSvvjwxTVJGWmxftgHClmhhT?compose=VpCqJXKbbdqKZCHqLrSpgWhCKdmkXtZbvDLhlvtPxPZCWDGNKlKCjkltGnbrzGQvkwGllPg
scheduled events for roster size changes https://discord.com/channels/290013534023057409/290015591216054273/1167345210955681802
- 15 in 2006
- 17 in some time
- 18 in 2024
FBGM
- some positions have weird heights, like really short OL/CB/LB
- scorigami
- hail mary as clock runs down
- too many block in the back penalties? https://mail.google.com/mail/u/0/#inbox/FMfcgzQXJGkWRpLHMglFTjVxwkhwRlrP?compose=DmwnWrRnZVhxHCNkTVdJSMmbHbGPgCRltRlKvmhtGwHmGsdBjvVRTGPpCVpwjFrcmmLvVZMKmdrl
- for recovered onside kick, kick shows as 1st and goal in drive chart https://discord.com/channels/290013534023057409/290015591216054273/1270384918748200972