Videos
- edit
- /
- history
- /
- upload files
musicmaker
| author | linda303 |
| date | 2026 may |
| name | musicmaker |
@_@
a work in progress proof of concept :3
the idea is to make an in-engine PUBLIC COMPUTER ^_^
inspired by music trackers and halfquake's music puzzle <3
P.S. feel free 2 make your own programs! =)
INFO
1(!). place samples named from c1.wav to c8.wav into /musicmaker/sound/
2a. use commandmenu.txt for interface navigation with +commandmenu
2b. OR type trigger cam_front_far to enter/exit
3(opt). type exec piano.cfg for a virtual piano layout (UNBINDS KEYS!)
…you might need some prior goldsrc experience 4 this..!
FAQ
svengine, a fork of goldsrc, has many features that make this possible:
- trigger_camera - mouse input events
- trigger_cameratarget - multiple unique i/o
- trigger_changevalue - better trigger_changetarget
- trigger_copyvalue - arithmetic & logic operations
- ambient_generic - play modes, more waveform shapes, more supported audio formats, clientside !activator, linear rolloff, etc.
- wildcards (*) - global targetname matching
- engine limits - 2MB entdata on compile, 8192 MAX_EDICTS on runtime
- VHLT/ZHLT - 1024 bsp_maxnodesize, 512 bsp_subdivide, etc.
- …
…and because, AFAIK, no one has done this before! :P
SOON
1. shorter, fine-tune timings for the envelopes (<100hz/ms)
2. rename, rearrange entities for less entdata (4-letter standard)
3. streaming, for ambient_generics to feed and mix built-in SFX
4. implement trigger_copyvalues with trigger_cameratarget's heal/hurt actions for more precise inputs, instead of AND/OR gates for toggling between different values @_@
…admittedly, i might be reaching the limit of my knowledge… :(
TODO
- .wav loop cue points (I FORGOR IM SORRY)
- commandmenu.txt (vgui)
- example/practice program
- piano (program, piano.cfg)
- paint program (decals, sprites, func_wall_toggle)
- drummachine (program, drum.cfg)
- sequencer/groovebox (program, sequencer.cfg)
- save states (trigger_save, trigger_load)
- default_sentences.txt (mixing)
- non-precached sound streaming (\*name.wav)
- instrument (indicator (trigger_numericdisplay), switcher (???), DSP (env_sound), octave, volume (health, volstart), presets (preset), fade (fadein, fadeout), pitch (pitch, pitchstart), envelope/stepper (spinup, cspinup, spindown), LFO (lfotype, lforate, lfomodpitch, lfomodvol), loop/delay (???), transpose (-11/+11), etc.)
- performance (texture memory, bsp/vis/csg, trigger_changevalues instead of trigger_relays to func_buttons' multisources and trigger_changetargets for locking them, trigger_conditions or trigger_entity_iterators with game_counters instead of multithreaded multi_managers or trigger_randoms, less wpolys/faces, less entdata, etc.)
- notifications (game_text)
- statusbar (taskbar)
- tabmenu (background, border, camera, delete, exit)
- camera (trigger_camera)
- buttons (func_button, trigger_cameratarget)
- sliders (scrollwheel)
- popups (dropdown menu's)
- visualiser (notes, wafeform)
- metronome (4/4)
- modularity (wildcards/regex for future-proofness, #0 or #1 triggerstates and use-types instead of the default 5.26 TOGGLE, simpler targetnames, etc.)
- cursor (sprite)
- font (brush, decal, texture)
- clientside decorations (!activator)
- second screen (b2b)
- separate maps for standalone programs (entdata/MAX_EDICTS)
- …
BUGS
- KVs volstart with fadein and/or spinup/spindown will loop non-looping ambient_generics a certain amount of times (once, twice, etc.) if their values are lesser than "10" and greater than "90" and/or if the .wav file is shorter than the values for pitch modulation, in centiseconds, respectively. luckily, this can be EXPLOITED for the future sequencer, because one could execute arbitrary code to loop sounds, which *IS* neat, *IF* you know which "preset" changes such values. there is a neat table of dynamic effects on TWHL, which is very useful to figuring out how to actually CONTROL looping and sequencing in the future. this is also true for some other oscillation-related keyvalues :)
- KVs lfomodpitch and lfomodvol will loop non-looping ambient_generics, because… AFAIK and as far as the audio system of the engine is concerned, the dynamic effects are "waiting" for themselves to finish, as if there is a "tail". so, unlike other modulation-related keyvalues, these ones are truly infinite - there is simply no attack or release and they are NOT dependant on the sound file's duration. this is how it was coded back in the 90s. i so wish to be wrong :(
- KV playmode does not respect dynamic effects when looping ambient_generics. that is an engine limitation :( i will use trigger_copyvalues instead, just like for the future delay effect :)
- some effects have a rather high "buffer size", which sounds very binary, square waveform-ish. to be fair, retail goldsrc only supported 8 bit depths. all the dynamic effects for the ambient_generics were designed *specifically* for the fan spooling/warming up noises, NOT piano notes! HOWEVER, ambient_generics in SVENGINE actually support ALL the shapes of waveforms, including but not limited to, SINE WAVES!! :D
- piano.cfg's alternative virtual piano layout for black keys (QWERTY) doesnt support dynamic aliasing to "123456" and "234567" - octaves from C1 to C6 and C2 to C7 respectively, because im lazy :P
- font is brushwork. whatever can i do? -_-
- long game_texts are truncated in console. use developer cvar :)
- my spare time is finite :(
- …
btw
- piano sounds are PUBLIC DOMAIN. enjoy! <3
- no ai, no angelscript, no entmod, NO. >:(
- .rmf & .jmf are included. DIY! ^_^
P.P.S. i KNOW that i often confuse svengine and *the* .fgd. cant help it. potato potato…
Tags
Rate this map
4.7 / 5 (3 votes)
Reviews
Comments & discussion
Rules:
- Feedback should be constructive.
- For discussion not related to this map, post in the forum.
- If you need help installing maps, please read the installation guide.












1. "fadein", "fadeout", "spinup" and "spindown" keyvalues are measured in centiseconds (10 milliseconds)
2. "pitch" with "pitchstart" can be converted to cents (pitch interval)
3. svengine has a sinusoid "lfotype" waveform shape!!! this means that all the retail presets can be made "smoother", as an actual *wave*, unlike the default square/triangular discontinuous, incremental "steps" o_O
hi, does any1 know what button do/did i press that toggles the 3d ctrl+mouse1 infinite selection by dragging the cursor? cheers
edit: oh, silly me, it was up in the toolbar, next to texture locking buttons. its a box with "3D" written on it. idk how i accidentally pressed it, there isnt even a hotkey for it! >:(
this looks like a lot of work. kudos for using only map entities, i am sort of a map entity enthusiast myself :P I hope it works fine
yea svengine can just do this. no angelscript! ^_^
the idea is to make a *public computer*. for example, i am making my own music programs. feel free to join! :P