[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freesci-develop] r1577 - in freesci/branches/glutton: . src/engine src/
From: |
freesci |
Subject: |
[freesci-develop] r1577 - in freesci/branches/glutton: . src/engine src/include src/scicore src/sfx |
Date: |
Wed, 01 Nov 2006 20:25:03 +0100 |
Author: skovmanden
Date: 2006-11-01 20:24:50 +0100 (Wed, 01 Nov 2006)
New Revision: 1577
Modified:
freesci/branches/glutton/ChangeLog
freesci/branches/glutton/src/engine/ksound.c
freesci/branches/glutton/src/engine/scriptdebug.c
freesci/branches/glutton/src/include/vm.h
freesci/branches/glutton/src/scicore/script.c
freesci/branches/glutton/src/sfx/iterator.c
Log:
More sound stuff. Remember the changelog this time.
Lars
Modified: freesci/branches/glutton/ChangeLog
===================================================================
--- freesci/branches/glutton/ChangeLog 2006-11-01 15:24:40 UTC (rev 1576)
+++ freesci/branches/glutton/ChangeLog 2006-11-01 19:24:50 UTC (rev 1577)
@@ -1,3 +1,8 @@
+2006-11-01 Lars Skovlund <address@hidden>
+
+ * src/sfx/iterator.c,
+ src/engine/ksound.c: Beginnings of a fade mechanism.
+
2006-07-17 Walter van Niftrik <address@hidden>
* src/gfx/drivers/sdl_driver.c: Removed double buffering code.
Modified: freesci/branches/glutton/src/engine/ksound.c
===================================================================
--- freesci/branches/glutton/src/engine/ksound.c 2006-11-01 15:24:40 UTC
(rev 1576)
+++ freesci/branches/glutton/src/engine/ksound.c 2006-11-01 19:24:50 UTC
(rev 1577)
@@ -81,19 +81,32 @@
#define _K_SCI1_SOUND_UPDATE_VOL_PRI 20
+#define SCI1_SOUND_FLAG_MAY_PAUSE 1 /* Only here for completeness; The
interpreter doesn't touch this bit */
+#define SCI1_SOUND_FLAG_SCRIPTED_PRI 2 /* but does touch this */
+
#define FROBNICATE_HANDLE(reg) ((reg).segment << 16 | (reg).offset)
#define DEFROBNICATE_HANDLE(handle) (make_reg((handle >> 16) & 0xffff, handle
& 0xffff))
#define SCRIPT_ASSERT_ZERO(fun) if (fun) script_debug_flag = script_error_flag
= 1;
-static int
-get_builtin_priority(state_t *s, int song_nr)
+static void
+script_set_priority(state_t *s, reg_t obj, int priority)
{
+ int song_nr = GET_SEL32V(obj, number);
resource_t *song = scir_find_resource(s->resmgr, sci_sound, song_nr, 0);
+ int flags = GET_SEL32V(obj, flags);
- if (song->data[0] == 0xf0)
- return song->data[1]; else
- return 50;
+ if (priority == -1)
+ {
+ if (song->data[0] == 0xf0)
+ priority = song->data[1]; else
+ SCIkdebug(SCIkWARNING, "Attempt to unset song priority
when there is no built-in value!\n");
+
+ flags &= ~SCI1_SOUND_FLAG_SCRIPTED_PRI;
+ } else flags |= SCI1_SOUND_FLAG_SCRIPTED_PRI;
+
+ sfx_song_renice(&s->sound, FROBNICATE_HANDLE(obj), priority);
+ PUT_SEL32V(obj, flags, flags);
}
static song_iterator_t *
@@ -167,6 +180,9 @@
reg_t obj = KP_ALT(1, NULL_REG);
word command = UKPV(0);
song_handle_t handle = FROBNICATE_HANDLE(obj);
+ int number = obj.segment ?
+ GET_SEL32V(obj, number) :
+ -1; /* We were not going to use it anyway */
if (s->debug_mode & (1 << SCIkSOUNDCHK_NR)) {
int i;
@@ -204,7 +220,7 @@
if (obj.segment) {
sciprintf("Initializing song number %d\n",
GET_SEL32V(obj, number));
SCRIPT_ASSERT_ZERO(sfx_add_song(&s->sound,
- build_iterator(s,
GET_SEL32V(obj, number),
+ build_iterator(s,
number,
SCI_SONG_ITERATOR_TYPE_SCI0,
handle),
0, handle));
@@ -284,8 +300,7 @@
if (obj.segment) {
sfx_song_set_loops(&s->sound,
handle, GET_SEL32V(obj, loop));
- sfx_song_renice(&s->sound,
- handle, GET_SEL32V(obj, priority));
+ script_set_priority(s, obj, GET_SEL32V(obj, pri));
}
break;
@@ -323,7 +338,10 @@
{
word command = UKPV(0);
reg_t obj = KP_ALT(1, NULL_REG);
- song_handle_t handle = FROBNICATE_HANDLE(obj);
+ song_handle_t handle = FROBNICATE_HANDLE(obj);
+ int number = obj.segment ?
+ GET_SEL32V(obj, number) :
+ -1; /* We were not going to use it anyway */
if ((s->debug_mode & (1 << SCIkSOUNDCHK_NR))
&& command != _K_SCI01_SOUND_UPDATE_CUES) {
@@ -411,19 +429,15 @@
}
case _K_SCI01_SOUND_INIT_HANDLE :
{
- int number = GET_SEL32V(obj, number);
-
int looping = GET_SEL32V(obj, loop);
int vol = GET_SEL32V(obj, vol);
int pri = GET_SEL32V(obj, pri);
- if (number == 886) break;
-
if (obj.segment && (scir_test_resource(s->resmgr, sci_sound,
number)))
{
- sciprintf("Initializing song number %d\n",
GET_SEL32V(obj, number));
+ sciprintf("Initializing song number %d\n", number);
SCRIPT_ASSERT_ZERO(sfx_add_song(&s->sound,
- build_iterator(s,
GET_SEL32V(obj, number),
+ build_iterator(s,
number,
SCI_SONG_ITERATOR_TYPE_SCI1,
handle),
0, handle));
@@ -456,8 +470,7 @@
sfx_song_set_loops(&s->sound,
handle, looping);
- sfx_song_renice(&s->sound,
- handle, pri);
+ sfx_song_renice(&s->sound, handle, pri);
SCIkdebug(SCIkSOUND, "[sound01-update-handle] -- CUE "PREG);
@@ -608,6 +621,9 @@
word command = UKPV(0);
reg_t obj = KP_ALT(1, NULL_REG);
song_handle_t handle = FROBNICATE_HANDLE(obj);
+ int number = obj.segment ?
+ GET_SEL32V(obj, number) :
+ -1; /* We were not going to use it anyway */
CHECK_THIS_KERNEL_FUNCTION;
@@ -706,8 +722,6 @@
}
case _K_SCI1_SOUND_INIT_HANDLE :
{
- int number = GET_SEL32V(obj, number);
-
int looping = GET_SEL32V(obj, loop);
int vol = GET_SEL32V(obj, vol);
int pri = GET_SEL32V(obj, pri);
@@ -720,9 +734,9 @@
}
if (obj.segment && (scir_test_resource(s->resmgr, sci_sound,
number))) {
- sciprintf("Initializing song number %d\n",
GET_SEL32V(obj, number));
+ sciprintf("Initializing song number %d\n", number);
SCRIPT_ASSERT_ZERO(sfx_add_song(&s->sound,
- build_iterator(s,
GET_SEL32V(obj, number),
+ build_iterator(s,
number,
SCI_SONG_ITERATOR_TYPE_SCI1,
handle),
0, handle));
@@ -799,6 +813,9 @@
}
case _K_SCI1_SOUND_SET_HANDLE_PRIORITY :
{
+ int value = SKPV(2);
+
+ script_set_priority(s, obj, value);
break;
}
case _K_SCI1_SOUND_SET_HANDLE_LOOP :
Modified: freesci/branches/glutton/src/engine/scriptdebug.c
===================================================================
--- freesci/branches/glutton/src/engine/scriptdebug.c 2006-11-01 15:24:40 UTC
(rev 1576)
+++ freesci/branches/glutton/src/engine/scriptdebug.c 2006-11-01 19:24:50 UTC
(rev 1577)
@@ -2720,6 +2720,7 @@
}
#define SFX_DEBUG_MODES 2
+#define FROBNICATE_HANDLE(reg) ((reg).segment << 16 | (reg).offset)
static int
c_sfx_debuglog(state_t *s)
@@ -2734,6 +2735,21 @@
&(s->sound.debug));
}
+static int
+c_sfx_remove(state_t *s)
+{
+ reg_t id = cmd_params[0].reg;
+ int handle = FROBNICATE_HANDLE(id);
+
+ if (id.segment) {
+ sfx_song_set_status(&s->sound,
+ handle, SOUND_STATUS_STOPPED);
+ sfx_remove_song(&s->sound, handle);
+ }
+
+ return 0;
+}
+
#define GFX_DEBUG_MODES 4
int
@@ -3436,6 +3452,8 @@
_debug_commands_not_hooked = 0;
+ con_hook_command(c_sfx_remove, "sfx_remove", "!a",
+ "Kills a playing sound.");
con_hook_command(c_debuginfo, "registers", "",
"Displays all current register values");
con_hook_command(c_vmvars, "vmvars", "!sia*", "Displays
or changes variables in the VM\n\nFirst parameter is either g(lobal), l(ocal),
t(emp) or p(aram).\nSecond parameter is the var number\nThird parameter (if
specified) is the value to set the variable to");
con_hook_command(c_sci_version, "sci_version", "",
"Prints the SCI version currently being emulated");
@@ -3707,6 +3725,7 @@
" 0x0002: Break on warnings\n \0x0004:
Print VM warnings\n");
con_hook_int(&_weak_validations, "weak_validations",
"Set != 0 to turn some validation errors\n"
" into warnings\n");
+
con_hook_int(&script_gc_interval, "gc-interval",
"Number of kernel calls in between gcs");
con_hook_page("codebugging",
Modified: freesci/branches/glutton/src/include/vm.h
===================================================================
--- freesci/branches/glutton/src/include/vm.h 2006-11-01 15:24:40 UTC (rev
1576)
+++ freesci/branches/glutton/src/include/vm.h 2006-11-01 19:24:50 UTC (rev
1577)
@@ -334,6 +334,7 @@
selector_t palette;
selector_t cantBeHere;
selector_t nodePtr;
+ selector_t flags;
selector_t points; /* Used by AvoidPath() */
} selector_map_t; /* Contains selector IDs for a few selected selectors */
Modified: freesci/branches/glutton/src/scicore/script.c
===================================================================
--- freesci/branches/glutton/src/scicore/script.c 2006-11-01 15:24:40 UTC
(rev 1576)
+++ freesci/branches/glutton/src/scicore/script.c 2006-11-01 19:24:50 UTC
(rev 1577)
@@ -207,6 +207,7 @@
FIND_SELECTOR(moveSpeed, "moveSpeed");
FIND_SELECTOR(cantBeHere, "cantBeHere");
FIND_SELECTOR(nodePtr, "nodePtr");
+ FIND_SELECTOR(flags, "flags");
FIND_SELECTOR(points, "points");
}
Modified: freesci/branches/glutton/src/sfx/iterator.c
===================================================================
--- freesci/branches/glutton/src/sfx/iterator.c 2006-11-01 15:24:40 UTC (rev
1576)
+++ freesci/branches/glutton/src/sfx/iterator.c 2006-11-01 19:24:50 UTC (rev
1577)
@@ -67,6 +67,7 @@
static void
_common_init(base_song_iterator_t *self)
{
+ self->fade.action = FADE_ACTION_NONE;
self->resetflag = 0;
self->loops = 0;
}
@@ -259,6 +260,8 @@
break;
case SCI_MIDI_SET_VELOCITY:
+ BREAKPOINT();
+ printf("%d is setting velocity to %d\n", self->ID,
buf[2]);
break;
case SCI_MIDI_HOLD:
@@ -548,6 +551,16 @@
self->channel.playmask |= (1 <<
MIDI_RHYTHM_CHANNEL);
break;
+ case _SIMSG_BASEMSG_SET_FADE:
+ {
+ fade_params_t *fp = (struct fade_params_t *)
msg.args[0];
+ self->fade.action = fp->action;
+ self->fade.final_volume = fp->final_volume;
+ self->fade.ticks_per_step = fp->ticks_per_step;
+ self->fade.step_size = fp->step_size;
+ break;
+ }
+
default:
return NULL;
}
@@ -688,10 +701,10 @@
{
int priority = SONGDATA(1);
- // FIXME: Do something with this!
- // sciprintf("Song has priority %d\n", priority);
+ // Code to take care of this is in src/engine/ksound.c
offset += 8;
}
+
while (SONGDATA(0) != 0xff
&& SONGDATA(0) != self->device_id) {
offset++;
@@ -1133,6 +1146,16 @@
/* Ignore */
break;
+ case _SIMSG_BASEMSG_SET_FADE:
+ {
+ fade_params_t *fp = (struct fade_params_t *)
msg.args[0];
+ self->fade.action = fp->action;
+ self->fade.final_volume = fp->final_volume;
+ self->fade.ticks_per_step = fp->ticks_per_step;
+ self->fade.step_size = fp->step_size;
+ break;
+ }
+
default:
fprintf(stderr, SIPFX "Unsupported command %d to"
" SCI1 iterator", msg.type);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freesci-develop] r1577 - in freesci/branches/glutton: . src/engine src/include src/scicore src/sfx,
freesci <=