pingthings 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/bin/pingthings.js +1 -0
  2. package/package.json +1 -1
  3. package/packs/0ad-civilizations/openpeon.json +172 -0
  4. package/packs/7kaa-soldiers/openpeon.json +217 -0
  5. package/packs/droid-announcer/openpeon.json +107 -0
  6. package/packs/fighting-announcer/openpeon.json +132 -0
  7. package/packs/freedoom-arsenal/openpeon.json +117 -0
  8. package/packs/kenney-digital/manifest.json +58 -0
  9. package/packs/kenney-digital/openpeon.json +122 -0
  10. package/packs/kenney-digital/sounds/high-up.ogg +0 -0
  11. package/packs/kenney-digital/sounds/low-down.ogg +0 -0
  12. package/packs/kenney-digital/sounds/pep-1.ogg +0 -0
  13. package/packs/kenney-digital/sounds/pep-2.ogg +0 -0
  14. package/packs/kenney-digital/sounds/phase-jump-1.ogg +0 -0
  15. package/packs/kenney-digital/sounds/phase-jump-2.ogg +0 -0
  16. package/packs/kenney-digital/sounds/phaser-down.ogg +0 -0
  17. package/packs/kenney-digital/sounds/phaser-up-1.ogg +0 -0
  18. package/packs/kenney-digital/sounds/phaser-up-2.ogg +0 -0
  19. package/packs/kenney-digital/sounds/power-up-1.ogg +0 -0
  20. package/packs/kenney-digital/sounds/power-up-2.ogg +0 -0
  21. package/packs/kenney-digital/sounds/power-up-3.ogg +0 -0
  22. package/packs/kenney-digital/sounds/space-trash.ogg +0 -0
  23. package/packs/kenney-digital/sounds/three-tone.ogg +0 -0
  24. package/packs/kenney-digital/sounds/tone.ogg +0 -0
  25. package/packs/kenney-digital/sounds/two-tone.ogg +0 -0
  26. package/packs/kenney-digital/sounds/zap-1.ogg +0 -0
  27. package/packs/kenney-digital/sounds/zap-2.ogg +0 -0
  28. package/packs/kenney-fighter/manifest.json +58 -0
  29. package/packs/kenney-fighter/openpeon.json +122 -0
  30. package/packs/kenney-fighter/sounds/begin.ogg +0 -0
  31. package/packs/kenney-fighter/sounds/combo-breaker.ogg +0 -0
  32. package/packs/kenney-fighter/sounds/combo.ogg +0 -0
  33. package/packs/kenney-fighter/sounds/fight.ogg +0 -0
  34. package/packs/kenney-fighter/sounds/final-round.ogg +0 -0
  35. package/packs/kenney-fighter/sounds/flawless-victory.ogg +0 -0
  36. package/packs/kenney-fighter/sounds/game-over.ogg +0 -0
  37. package/packs/kenney-fighter/sounds/loser.ogg +0 -0
  38. package/packs/kenney-fighter/sounds/multi-kill.ogg +0 -0
  39. package/packs/kenney-fighter/sounds/prepare-yourself.ogg +0 -0
  40. package/packs/kenney-fighter/sounds/ready.ogg +0 -0
  41. package/packs/kenney-fighter/sounds/round-1.ogg +0 -0
  42. package/packs/kenney-fighter/sounds/sudden-death.ogg +0 -0
  43. package/packs/kenney-fighter/sounds/tie-breaker.ogg +0 -0
  44. package/packs/kenney-fighter/sounds/time.ogg +0 -0
  45. package/packs/kenney-fighter/sounds/winner.ogg +0 -0
  46. package/packs/kenney-fighter/sounds/you-lose.ogg +0 -0
  47. package/packs/kenney-fighter/sounds/you-win.ogg +0 -0
  48. package/packs/kenney-impacts/manifest.json +57 -0
  49. package/packs/kenney-impacts/openpeon.json +116 -0
  50. package/packs/kenney-impacts/sounds/bell-heavy-2.ogg +0 -0
  51. package/packs/kenney-impacts/sounds/bell-heavy.ogg +0 -0
  52. package/packs/kenney-impacts/sounds/glass-heavy.ogg +0 -0
  53. package/packs/kenney-impacts/sounds/glass-light.ogg +0 -0
  54. package/packs/kenney-impacts/sounds/glass-medium.ogg +0 -0
  55. package/packs/kenney-impacts/sounds/mining-1.ogg +0 -0
  56. package/packs/kenney-impacts/sounds/mining-2.ogg +0 -0
  57. package/packs/kenney-impacts/sounds/plate-heavy-2.ogg +0 -0
  58. package/packs/kenney-impacts/sounds/plate-heavy.ogg +0 -0
  59. package/packs/kenney-impacts/sounds/plate-light-1.ogg +0 -0
  60. package/packs/kenney-impacts/sounds/plate-light-2.ogg +0 -0
  61. package/packs/kenney-impacts/sounds/plate-medium.ogg +0 -0
  62. package/packs/kenney-impacts/sounds/soft-heavy.ogg +0 -0
  63. package/packs/kenney-impacts/sounds/soft-medium.ogg +0 -0
  64. package/packs/kenney-impacts/sounds/tin-medium.ogg +0 -0
  65. package/packs/kenney-impacts/sounds/wood-heavy.ogg +0 -0
  66. package/packs/kenney-impacts/sounds/wood-light.ogg +0 -0
  67. package/packs/kenney-impacts/sounds/wood-medium.ogg +0 -0
  68. package/packs/kenney-interface/openpeon.json +122 -0
  69. package/packs/kenney-rpg/manifest.json +57 -0
  70. package/packs/kenney-rpg/openpeon.json +117 -0
  71. package/packs/kenney-rpg/sounds/belt-handle-2.ogg +0 -0
  72. package/packs/kenney-rpg/sounds/belt-handle.ogg +0 -0
  73. package/packs/kenney-rpg/sounds/book-close.ogg +0 -0
  74. package/packs/kenney-rpg/sounds/book-flip.ogg +0 -0
  75. package/packs/kenney-rpg/sounds/book-open.ogg +0 -0
  76. package/packs/kenney-rpg/sounds/book-place.ogg +0 -0
  77. package/packs/kenney-rpg/sounds/cloth-belt.ogg +0 -0
  78. package/packs/kenney-rpg/sounds/creak.ogg +0 -0
  79. package/packs/kenney-rpg/sounds/door-close.ogg +0 -0
  80. package/packs/kenney-rpg/sounds/door-open.ogg +0 -0
  81. package/packs/kenney-rpg/sounds/draw-knife.ogg +0 -0
  82. package/packs/kenney-rpg/sounds/leather-drop.ogg +0 -0
  83. package/packs/kenney-rpg/sounds/leather-handle.ogg +0 -0
  84. package/packs/kenney-rpg/sounds/metal-click.ogg +0 -0
  85. package/packs/kenney-rpg/sounds/metal-latch.ogg +0 -0
  86. package/packs/kenney-rpg/sounds/metal-pot-2.ogg +0 -0
  87. package/packs/kenney-rpg/sounds/metal-pot.ogg +0 -0
  88. package/packs/kenney-rpg/sounds/sword-draw.ogg +0 -0
  89. package/packs/kenney-scifi/openpeon.json +122 -0
  90. package/packs/kenney-voiceover/openpeon.json +127 -0
  91. package/packs/openarena-announcer/openpeon.json +107 -0
  92. package/packs/retro-8bit/openpeon.json +122 -0
  93. package/packs/retro-movement/manifest.json +58 -0
  94. package/packs/retro-movement/openpeon.json +122 -0
  95. package/packs/retro-movement/sounds/blip-1.ogg +0 -0
  96. package/packs/retro-movement/sounds/blip-2.ogg +0 -0
  97. package/packs/retro-movement/sounds/door-open-1.ogg +0 -0
  98. package/packs/retro-movement/sounds/door-open-2.ogg +0 -0
  99. package/packs/retro-movement/sounds/door-open-3.ogg +0 -0
  100. package/packs/retro-movement/sounds/jump-1.ogg +0 -0
  101. package/packs/retro-movement/sounds/jump-2.ogg +0 -0
  102. package/packs/retro-movement/sounds/jump-3.ogg +0 -0
  103. package/packs/retro-movement/sounds/menu-select-1.ogg +0 -0
  104. package/packs/retro-movement/sounds/menu-select-2.ogg +0 -0
  105. package/packs/retro-movement/sounds/pause-in-2.ogg +0 -0
  106. package/packs/retro-movement/sounds/pause-in-3.ogg +0 -0
  107. package/packs/retro-movement/sounds/pause-in.ogg +0 -0
  108. package/packs/retro-movement/sounds/pause-out.ogg +0 -0
  109. package/packs/retro-movement/sounds/portal-1.ogg +0 -0
  110. package/packs/retro-movement/sounds/portal-2.ogg +0 -0
  111. package/packs/retro-movement/sounds/portal-3.ogg +0 -0
  112. package/packs/retro-movement/sounds/portal-4.ogg +0 -0
  113. package/packs/retro-weapons/manifest.json +57 -0
  114. package/packs/retro-weapons/openpeon.json +117 -0
  115. package/packs/retro-weapons/sounds/death-android-2.ogg +0 -0
  116. package/packs/retro-weapons/sounds/death-android.ogg +0 -0
  117. package/packs/retro-weapons/sounds/death-human-1.ogg +0 -0
  118. package/packs/retro-weapons/sounds/death-human-2.ogg +0 -0
  119. package/packs/retro-weapons/sounds/death-robot.ogg +0 -0
  120. package/packs/retro-weapons/sounds/explosion-1.ogg +0 -0
  121. package/packs/retro-weapons/sounds/explosion-2.ogg +0 -0
  122. package/packs/retro-weapons/sounds/explosion-long.ogg +0 -0
  123. package/packs/retro-weapons/sounds/explosion-soft.ogg +0 -0
  124. package/packs/retro-weapons/sounds/impact-1.ogg +0 -0
  125. package/packs/retro-weapons/sounds/impact-2.ogg +0 -0
  126. package/packs/retro-weapons/sounds/impact-3.ogg +0 -0
  127. package/packs/retro-weapons/sounds/interact-1.ogg +0 -0
  128. package/packs/retro-weapons/sounds/interact-2.ogg +0 -0
  129. package/packs/retro-weapons/sounds/interact-3.ogg +0 -0
  130. package/packs/retro-weapons/sounds/shot-1.ogg +0 -0
  131. package/packs/retro-weapons/sounds/shot-2.ogg +0 -0
  132. package/packs/retro-weapons/sounds/shot-3.ogg +0 -0
  133. package/packs/warzone2100-command/openpeon.json +137 -0
  134. package/packs/wesnoth-combat/openpeon.json +122 -0
  135. package/packs/xonotic-announcer/openpeon.json +107 -0
  136. package/src/cli/cesp.js +101 -0
  137. package/src/packs.js +66 -9
@@ -0,0 +1,117 @@
1
+ {
2
+ "cesp_version": "1.0",
3
+ "name": "retro-weapons",
4
+ "display_name": "8-bit weapons, explosions, death screams, and impacts",
5
+ "version": "1.0.0",
6
+ "license": "CC0-1.0",
7
+ "author": {
8
+ "name": "Juhani Junkala / SubspaceAudio (https://opengameart.org/content/512-sound-effects-8-bit-style)"
9
+ },
10
+ "categories": {
11
+ "task.acknowledge": {
12
+ "sounds": [
13
+ {
14
+ "file": "sounds/interact-1.ogg",
15
+ "label": "interact 1",
16
+ "sha256": "e44d5f728bcf3a14f9df6de95a4e14e46641a06b4e424bb55abe0c8931e437c8"
17
+ },
18
+ {
19
+ "file": "sounds/interact-2.ogg",
20
+ "label": "interact 2",
21
+ "sha256": "667c5819bedf71f8a3093c42a2c34f57f4e9374465467926c2ab9c19469b9455"
22
+ },
23
+ {
24
+ "file": "sounds/interact-3.ogg",
25
+ "label": "interact 3",
26
+ "sha256": "044eb499f95da40387fc8162e54e72d9b9187d91db4eb3a4e2250b89c19cf598"
27
+ },
28
+ {
29
+ "file": "sounds/shot-1.ogg",
30
+ "label": "shot 1",
31
+ "sha256": "20ab631115003f4a6b46a8e5c802ab8b9e119b8be941573d36ef54782c36507b"
32
+ }
33
+ ]
34
+ },
35
+ "input.required": {
36
+ "sounds": [
37
+ {
38
+ "file": "sounds/shot-2.ogg",
39
+ "label": "shot 2",
40
+ "sha256": "0632200d74c0516c54caf448320feb4320700e973ccfc48a97d199d2b6a2ce51"
41
+ },
42
+ {
43
+ "file": "sounds/shot-3.ogg",
44
+ "label": "shot 3",
45
+ "sha256": "7d5861ea07e3baf787845f58fb2bf91a9883c33b2b357fd35603cd3e4d94cf88"
46
+ },
47
+ {
48
+ "file": "sounds/impact-1.ogg",
49
+ "label": "impact 1",
50
+ "sha256": "a85433ec27b1236a47916b2c84606090d466edaacd6c373076a5bd199a293cf7"
51
+ }
52
+ ]
53
+ },
54
+ "task.complete": {
55
+ "sounds": [
56
+ {
57
+ "file": "sounds/explosion-long.ogg",
58
+ "label": "explosion long",
59
+ "sha256": "bded1817168aa729166a262fa5bc6d48a15c4a1e43ea9eed101463617fc1d5b3"
60
+ },
61
+ {
62
+ "file": "sounds/explosion-soft.ogg",
63
+ "label": "explosion soft",
64
+ "sha256": "0c2e36a2d3d121aa47b901f9ad3c0b8346a0c899af0113784133d3581ec6dc92"
65
+ },
66
+ {
67
+ "file": "sounds/impact-2.ogg",
68
+ "label": "impact 2",
69
+ "sha256": "731fe4be43292ee6715a7de561f8a24fbdecfdec5c0999a7a457eb516c6833a0"
70
+ }
71
+ ]
72
+ },
73
+ "task.error": {
74
+ "sounds": [
75
+ {
76
+ "file": "sounds/explosion-1.ogg",
77
+ "label": "explosion 1",
78
+ "sha256": "2b0f21e6495f41dbbd29f4f72965a487d4556198d880be252ce7e23f05ccbd44"
79
+ },
80
+ {
81
+ "file": "sounds/explosion-2.ogg",
82
+ "label": "explosion 2",
83
+ "sha256": "dd87545859a82ba5259316b08e04567ed43739bd6582ff44ec16e337d5463ed3"
84
+ },
85
+ {
86
+ "file": "sounds/death-human-1.ogg",
87
+ "label": "death human 1",
88
+ "sha256": "d02ae1a3997d181d8267cbc97edb9aa78aa731f73df5c9c484ee38fc4f1c4970"
89
+ },
90
+ {
91
+ "file": "sounds/death-human-2.ogg",
92
+ "label": "death human 2",
93
+ "sha256": "3acf60a316cf4febf51b67e6611baeaeebc30fad1f660bc4c1cf5b601e34b12a"
94
+ }
95
+ ]
96
+ },
97
+ "resource.limit": {
98
+ "sounds": [
99
+ {
100
+ "file": "sounds/death-android.ogg",
101
+ "label": "death android",
102
+ "sha256": "5b62a245b4308d653717c8556f4218da94366b4e1b01bda3398ad9eccdf5d306"
103
+ },
104
+ {
105
+ "file": "sounds/death-robot.ogg",
106
+ "label": "death robot",
107
+ "sha256": "10c236cb275039e978416fb14d491c5108b33da43c6143a945c37417e2a815a1"
108
+ },
109
+ {
110
+ "file": "sounds/impact-3.ogg",
111
+ "label": "impact 3",
112
+ "sha256": "fab6953b8a809df9a86d679822c03c717f71f9fea1b56ac684565a823f2175c5"
113
+ }
114
+ ]
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,137 @@
1
+ {
2
+ "cesp_version": "1.0",
3
+ "name": "warzone2100-command",
4
+ "display_name": "Sci-fi military commander voice lines from Warzone 2100",
5
+ "version": "1.0.0",
6
+ "license": "GPL-2.0",
7
+ "author": {
8
+ "name": "Warzone 2100 Project (https://github.com/Warzone2100/warzone2100)"
9
+ },
10
+ "categories": {
11
+ "task.acknowledge": {
12
+ "sounds": [
13
+ {
14
+ "file": "sounds/research-completed.ogg",
15
+ "label": "research completed",
16
+ "sha256": "03ac42308bedb2dcf5e4674bd6500e6a586340df52ddacc0cf4c89395d322bc1"
17
+ },
18
+ {
19
+ "file": "sounds/construction-completed.ogg",
20
+ "label": "construction completed",
21
+ "sha256": "91009e61f3ba8c5f8fdfdaeae1f1c32bfc0506604de973dd8c54546a890a3ce4"
22
+ },
23
+ {
24
+ "file": "sounds/production-completed.ogg",
25
+ "label": "production completed",
26
+ "sha256": "f7d7d5fcb80db77da3ab1b4a8a85b3511b2e0de4b1ff63aa1047dbbb9b91dd73"
27
+ },
28
+ {
29
+ "file": "sounds/design-completed.ogg",
30
+ "label": "design completed",
31
+ "sha256": "09594de5033aab3f3106c33ec0ab24333bc5f8847e4fb8614e7b73e3ce244924"
32
+ },
33
+ {
34
+ "file": "sounds/unit-repaired.ogg",
35
+ "label": "unit repaired",
36
+ "sha256": "d5ec096f284e4f80f9d1a70e81762a8a1a1dffcc5018f82fc24f00928d048c84"
37
+ }
38
+ ]
39
+ },
40
+ "input.required": {
41
+ "sounds": [
42
+ {
43
+ "file": "sounds/incoming-transmission.ogg",
44
+ "label": "incoming transmission",
45
+ "sha256": "dbc29f1830f3b93f965617f5080e866f6f7297668bb2590a7f492d263e001fdd"
46
+ },
47
+ {
48
+ "file": "sounds/mission-objective.ogg",
49
+ "label": "mission objective",
50
+ "sha256": "14ca9d4cf25da6c4ce1cfea323e075c9c1c54318200dc47771bd80df01f3d073"
51
+ },
52
+ {
53
+ "file": "sounds/mission-update.ogg",
54
+ "label": "mission update",
55
+ "sha256": "b75c2f11c81c9a298770f35eedbe3757e60eb427ee7fee115e18d990c60c0327"
56
+ },
57
+ {
58
+ "file": "sounds/new-research-available.ogg",
59
+ "label": "new research available",
60
+ "sha256": "4341c4838796baf35c7e384ef8e10cb0d5fb9c4a909d10f98b927bd1510b2651"
61
+ }
62
+ ]
63
+ },
64
+ "task.complete": {
65
+ "sounds": [
66
+ {
67
+ "file": "sounds/mission-successful.ogg",
68
+ "label": "mission successful",
69
+ "sha256": "a13c5e5606552b86e0e014e1f75cb36e2512f850c8d25807105bbeb166be304c"
70
+ },
71
+ {
72
+ "file": "sounds/major-research-completed.ogg",
73
+ "label": "major research completed",
74
+ "sha256": "54752f579b0d4f72a2931122ee4035184ec4e1f111cdb1baf3769a6c5e48d9f3"
75
+ },
76
+ {
77
+ "file": "sounds/reinforcements-available.ogg",
78
+ "label": "reinforcements available",
79
+ "sha256": "4e124cc7976132e836d589f9460531c485f1212402b16f4d2480537d2be52f29"
80
+ }
81
+ ]
82
+ },
83
+ "task.error": {
84
+ "sounds": [
85
+ {
86
+ "file": "sounds/structure-under-attack.ogg",
87
+ "label": "structure under attack",
88
+ "sha256": "56b214a7aaf7b1d025bbdd09511f30cdb437e409d52d68b41ba22692eb0a81ca"
89
+ },
90
+ {
91
+ "file": "sounds/power-low.ogg",
92
+ "label": "power low",
93
+ "sha256": "a86c2f8b5250251197ca548b33c5c9c4440ff845bd77f8bdad3007d3655f2e63"
94
+ },
95
+ {
96
+ "file": "sounds/mission-failed.ogg",
97
+ "label": "mission failed",
98
+ "sha256": "d2f30c1eff871fb25ba715bdc66c6f5aac28145a6ea12f1309026e8e622fd632"
99
+ },
100
+ {
101
+ "file": "sounds/production-cancelled.ogg",
102
+ "label": "production cancelled",
103
+ "sha256": "7b2df5b169a9dd22bf48409f42f14967505e1188f9073c451806cdadc47f59ce"
104
+ }
105
+ ]
106
+ },
107
+ "resource.limit": {
108
+ "sounds": [
109
+ {
110
+ "file": "sounds/enemy-detected.ogg",
111
+ "label": "enemy detected",
112
+ "sha256": "068870137275bc3f2abd75fa96a82d956235c5e368500cdce0c5dd8c2858fa3b"
113
+ },
114
+ {
115
+ "file": "sounds/incoming-enemy-transport.ogg",
116
+ "label": "incoming enemy transport",
117
+ "sha256": "16eb59edade6fedd849ec5964940df8ccf9cd3c343a897ca28f37798c6cf10fe"
118
+ },
119
+ {
120
+ "file": "sounds/retreat-heavy-damage.ogg",
121
+ "label": "retreat heavy damage",
122
+ "sha256": "245ef4b2fcf3caf363ad67401c4a1fa82f31b77a61b7c4f77540d25e103e2667"
123
+ },
124
+ {
125
+ "file": "sounds/nexus-laugh1.ogg",
126
+ "label": "nexus laugh1",
127
+ "sha256": "7ce6c273104306f29defbf1111ae98244b8ccbd19bf8086b791b931835bea4de"
128
+ },
129
+ {
130
+ "file": "sounds/nexus-laugh2.ogg",
131
+ "label": "nexus laugh2",
132
+ "sha256": "dd67aafdb6483c1c7d76b0680e1dc1990103beec4f6a312f55986d55457c99bc"
133
+ }
134
+ ]
135
+ }
136
+ }
137
+ }
@@ -0,0 +1,122 @@
1
+ {
2
+ "cesp_version": "1.0",
3
+ "name": "wesnoth-combat",
4
+ "display_name": "Fantasy combat and magic sounds from Battle for Wesnoth",
5
+ "version": "1.0.0",
6
+ "license": "GPL-2.0-or-later",
7
+ "author": {
8
+ "name": "Battle for Wesnoth contributors (https://github.com/wesnoth/wesnoth) — licensed under GPL v2+"
9
+ },
10
+ "categories": {
11
+ "task.acknowledge": {
12
+ "sounds": [
13
+ {
14
+ "file": "sounds/gold.ogg",
15
+ "label": "gold",
16
+ "sha256": "f146dda0c8e176414d30131e5220e30fdaadda0373c172858f61a01f918656bf"
17
+ },
18
+ {
19
+ "file": "sounds/sword-1.ogg",
20
+ "label": "sword 1",
21
+ "sha256": "c5409ef75599e766b1ec451b25b4af838ca5de6c089a722dfa55fa3e18b49bfe"
22
+ },
23
+ {
24
+ "file": "sounds/bow.ogg",
25
+ "label": "bow",
26
+ "sha256": "ab7310f71e0751ac83a1d253e25a147195d61b1f2fac54dcb394ff300db17f80"
27
+ },
28
+ {
29
+ "file": "sounds/crossbow.ogg",
30
+ "label": "crossbow",
31
+ "sha256": "23d9dc768616e54cff1e6cbbed6ee149a46ca7f234951f178d60025ae97aaf33"
32
+ },
33
+ {
34
+ "file": "sounds/hatchet.ogg",
35
+ "label": "hatchet",
36
+ "sha256": "15d8dbc7624abdb0783e3bfa1ae19064f88df518337800deb48f76027b0e1960"
37
+ }
38
+ ]
39
+ },
40
+ "input.required": {
41
+ "sounds": [
42
+ {
43
+ "file": "sounds/open-chest.ogg",
44
+ "label": "open chest",
45
+ "sha256": "27a9ce6b8069cef3b01a99be358824604d836d7676b446ff13d18e34119ed542"
46
+ },
47
+ {
48
+ "file": "sounds/potion.ogg",
49
+ "label": "potion",
50
+ "sha256": "15db919af1b4e3403831cd6bbd7f53047be4b1f67759ccd39e87c5d1af4f4ffe"
51
+ },
52
+ {
53
+ "file": "sounds/magic-holy-1.ogg",
54
+ "label": "magic holy 1",
55
+ "sha256": "f97694eedfddf3a8e5d472e6736372b11350b69ef194fd39e248cd44c447e67b"
56
+ }
57
+ ]
58
+ },
59
+ "task.complete": {
60
+ "sounds": [
61
+ {
62
+ "file": "sounds/fanfare-short.ogg",
63
+ "label": "fanfare short",
64
+ "sha256": "84ccd8dba30591e9783d739ad2cb48a121c3ceadb0fda55d797939a4ec186b18"
65
+ },
66
+ {
67
+ "file": "sounds/heal.ogg",
68
+ "label": "heal",
69
+ "sha256": "b97e5de5821226f01e7aec1b809c06024508584560fa91fb1010d03f5f05165b"
70
+ },
71
+ {
72
+ "file": "sounds/dwarf-laugh.ogg",
73
+ "label": "dwarf laugh",
74
+ "sha256": "4e2a253beb2775fc054f9ae1ebdb975d9e79b2ee6153f166ecc32a079f5e5897"
75
+ }
76
+ ]
77
+ },
78
+ "task.error": {
79
+ "sounds": [
80
+ {
81
+ "file": "sounds/explosion.ogg",
82
+ "label": "explosion",
83
+ "sha256": "47a393b24510a46b79938b07e244a43700ceb0bdd57024ac89d3f10c0d8477f9"
84
+ },
85
+ {
86
+ "file": "sounds/flame-big.ogg",
87
+ "label": "flame big",
88
+ "sha256": "1a053353cc5e97e560479c898856002392797e2d2c8682a3550bc2b3b6164074"
89
+ },
90
+ {
91
+ "file": "sounds/lightning.ogg",
92
+ "label": "lightning",
93
+ "sha256": "70de34b9df3625aad10ade1a285ffd34bd6d921c5c7c44d7ccf4d38cce15ab06"
94
+ },
95
+ {
96
+ "file": "sounds/magic-dark.ogg",
97
+ "label": "magic dark",
98
+ "sha256": "e0edc82604dca720365008c7a30ecf13042bbc7c42bf119ec9114572ce4c80cb"
99
+ }
100
+ ]
101
+ },
102
+ "resource.limit": {
103
+ "sounds": [
104
+ {
105
+ "file": "sounds/wolf-growl-1.ogg",
106
+ "label": "wolf growl 1",
107
+ "sha256": "dc5a84ff49593eac86fd0c82bb03cc3ed45407ebb330d36463e3e082e9d39c76"
108
+ },
109
+ {
110
+ "file": "sounds/gryphon-shriek-1.ogg",
111
+ "label": "gryphon shriek 1",
112
+ "sha256": "b31438b0d58956f413314d83947f091f90d30b4ff52e41c6ed753ccae0d6c4e3"
113
+ },
114
+ {
115
+ "file": "sounds/magic-missile-1.ogg",
116
+ "label": "magic missile 1",
117
+ "sha256": "2ae1b5d83509edfb67d051540e59d206f7eb8d9ce260e13e9a9d54365323a2f0"
118
+ }
119
+ ]
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,107 @@
1
+ {
2
+ "cesp_version": "1.0",
3
+ "name": "xonotic-announcer",
4
+ "display_name": "Arena FPS announcer voice lines from Xonotic",
5
+ "version": "1.0.0",
6
+ "license": "GPL-2.0-or-later",
7
+ "author": {
8
+ "name": "Xonotic Project (https://github.com/xonotic/xonotic-data.pk3dir)"
9
+ },
10
+ "categories": {
11
+ "task.acknowledge": {
12
+ "sounds": [
13
+ {
14
+ "file": "sounds/awesome.ogg",
15
+ "label": "awesome",
16
+ "sha256": "a75cf21a39d7faadffe3e2f17b2d0ca0149bab71a31561a7424a149419ca8565"
17
+ },
18
+ {
19
+ "file": "sounds/amazing.ogg",
20
+ "label": "amazing",
21
+ "sha256": "54bc110c31bfb8ea9323cdf9df47826672393aca967421debb601b4d551e20c6"
22
+ },
23
+ {
24
+ "file": "sounds/impressive.ogg",
25
+ "label": "impressive",
26
+ "sha256": "294cef5c449dec7592bc52054e203d5d85277361f7af6da1077a9c4fcd95d340"
27
+ },
28
+ {
29
+ "file": "sounds/airshot.ogg",
30
+ "label": "airshot",
31
+ "sha256": "c07e53928cd4a7e5ef2d56862a43da4f3fafe0b28ddf91554a24174b56e3d527"
32
+ }
33
+ ]
34
+ },
35
+ "input.required": {
36
+ "sounds": [
37
+ {
38
+ "file": "sounds/prepareforbattle.ogg",
39
+ "label": "prepareforbattle",
40
+ "sha256": "20651628c3edf90b414fa8aa063e7568819ff820506920b4a8e86c78c7a336ad"
41
+ },
42
+ {
43
+ "file": "sounds/begin.ogg",
44
+ "label": "begin",
45
+ "sha256": "8bce8664a5735a4df20a7a2667cfeee9d4723238b979db6e87a3f0887050b812"
46
+ },
47
+ {
48
+ "file": "sounds/1fragleft.ogg",
49
+ "label": "1fragleft",
50
+ "sha256": "e1522f8e929369ba4c6f8134598c22caccbbd61439e17ee3a23e165d754580e6"
51
+ }
52
+ ]
53
+ },
54
+ "task.complete": {
55
+ "sounds": [
56
+ {
57
+ "file": "sounds/yoda.ogg",
58
+ "label": "yoda",
59
+ "sha256": "a8bef88c6f1813713f7c1de014b077975a6502f8d0eb87bd223577a299cdce9a"
60
+ },
61
+ {
62
+ "file": "sounds/botlike.ogg",
63
+ "label": "botlike",
64
+ "sha256": "2a05e921c609b5c6be9d74b10bb29e65ada70a89e4d448409bf17a09605dee38"
65
+ },
66
+ {
67
+ "file": "sounds/leadgained.ogg",
68
+ "label": "leadgained",
69
+ "sha256": "f9c1516d185020ca088f14b9ae38709a09f11fbc6acd80fbd610d7022fe5f0cc"
70
+ }
71
+ ]
72
+ },
73
+ "task.error": {
74
+ "sounds": [
75
+ {
76
+ "file": "sounds/terminated.ogg",
77
+ "label": "terminated",
78
+ "sha256": "823553d052e624aaa47f13235906cef52a9a4f74fdc3b323cc2f2a83c77b82bd"
79
+ },
80
+ {
81
+ "file": "sounds/headshot.ogg",
82
+ "label": "headshot",
83
+ "sha256": "571f39f1543a3bbd23d2712845ba7da6d782f24cd370ceffb9912f57a198ee92"
84
+ },
85
+ {
86
+ "file": "sounds/electrobitch.ogg",
87
+ "label": "electrobitch",
88
+ "sha256": "c562648da52d97b775a15610b8284aed6cf283bb7266f0d45f7c0063655cc7af"
89
+ }
90
+ ]
91
+ },
92
+ "resource.limit": {
93
+ "sounds": [
94
+ {
95
+ "file": "sounds/lastsecond.ogg",
96
+ "label": "lastsecond",
97
+ "sha256": "7a0c2f948af8f94bed17ff68a9eb3a45a16a0c75df25cb41ea5ab2106da0cb3b"
98
+ },
99
+ {
100
+ "file": "sounds/narrowly.ogg",
101
+ "label": "narrowly",
102
+ "sha256": "f8d42b5290e1ffd655fbce86c7b3a2021ac146d5afedd464f1d6568b4cc13a53"
103
+ }
104
+ ]
105
+ }
106
+ }
107
+ }
@@ -0,0 +1,101 @@
1
+ import { readFileSync, writeFileSync, existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { resolvePack, listPacks } from '../packs.js';
5
+
6
+ const PINGTHINGS_TO_CESP = {
7
+ done: 'task.acknowledge',
8
+ permission: 'input.required',
9
+ complete: 'task.complete',
10
+ error: 'task.error',
11
+ blocked: 'resource.limit',
12
+ };
13
+
14
+ function showHelp() {
15
+ console.log(`
16
+ Usage: pingthings cesp [pack|--all]
17
+
18
+ Generate CESP-compatible openpeon.json for a pack.
19
+ Makes your packs work with any CESP-compatible tool (PeonPing, etc.)
20
+
21
+ Arguments:
22
+ pack Generate for a specific pack
23
+ --all Generate for all built-in packs
24
+
25
+ Examples:
26
+ pingthings cesp 7kaa-soldiers Generate for one pack
27
+ pingthings cesp --all Generate for all packs
28
+ `);
29
+ }
30
+
31
+ function generateCesp(packName) {
32
+ const pack = resolvePack(packName);
33
+ if (!pack || !pack.manifest) {
34
+ console.error(`Pack not found: ${packName}`);
35
+ return false;
36
+ }
37
+
38
+ const m = pack.manifest;
39
+ const categories = {};
40
+
41
+ for (const [pingEvent, cespEvent] of Object.entries(PINGTHINGS_TO_CESP)) {
42
+ const eventSounds = m.events?.[pingEvent] || [];
43
+ if (eventSounds.length === 0) continue;
44
+
45
+ categories[cespEvent] = {
46
+ sounds: eventSounds.map(file => {
47
+ const fullPath = join(pack.dir, file);
48
+ let sha256 = '';
49
+ try {
50
+ const data = readFileSync(fullPath);
51
+ sha256 = createHash('sha256').update(data).digest('hex');
52
+ } catch {}
53
+
54
+ return {
55
+ file,
56
+ label: file.split('/').pop().replace(/\.\w+$/, '').replace(/[-_]/g, ' '),
57
+ ...(sha256 ? { sha256 } : {}),
58
+ };
59
+ }),
60
+ };
61
+ }
62
+
63
+ const cesp = {
64
+ cesp_version: '1.0',
65
+ name: m.name,
66
+ display_name: m.description,
67
+ version: m.version || '1.0.0',
68
+ license: m.license,
69
+ author: {
70
+ name: m.credits || 'Unknown',
71
+ },
72
+ categories,
73
+ };
74
+
75
+ const outPath = join(pack.dir, 'openpeon.json');
76
+ writeFileSync(outPath, JSON.stringify(cesp, null, 2) + '\n', 'utf8');
77
+ console.log(` Generated: ${outPath}`);
78
+ return true;
79
+ }
80
+
81
+ export default function cesp(args) {
82
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
83
+ showHelp();
84
+ if (args.length === 0) process.exit(1);
85
+ return;
86
+ }
87
+
88
+ if (args.includes('--all')) {
89
+ console.log('\nGenerating CESP manifests for all packs:\n');
90
+ const packs = listPacks();
91
+ for (const pack of packs) {
92
+ if (pack.isBuiltIn) {
93
+ generateCesp(pack.name);
94
+ }
95
+ }
96
+ console.log('\nDone.\n');
97
+ return;
98
+ }
99
+
100
+ generateCesp(args[0]);
101
+ }