/*
* Copyright (c) 2007 (Mike) Maurice Kienenberger (mkienenb@gmail.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.gamenet.application.mm8leveleditor.data;
import java.util.List;
import java.util.Map;
import org.gamenet.application.mm8leveleditor.data.mm6.fileFormat.Str;
public interface EventFormat
{
public interface IndirectValue<E,F>
{
public int getDirectArgumentDataType();
public F getDirectValueForIndirectValue(E indirectValue);
public E getIndirectValueForDirectValue(F directValue);
}
public static final int ARGUMENT_TYPE__UNKNOWN = 0;
public static final int ARGUMENT_TYPE__UNKNOWN_BYTE = -1;
public static final int ARGUMENT_TYPE__UNKNOWN_SHORT = -2;
public static final int ARGUMENT_TYPE__UNKNOWN_INTEGER = -4;
public static final int ARGUMENT_TYPE__UNKNOWN_ZERO_BYTE = -11;
public static final int ARGUMENT_TYPE__UNKNOWN_ZERO_SHORT = -12;
public static final int ARGUMENT_TYPE__UNKNOWN_ZERO_INTEGER = -14;
public static final int ARGUMENT_TYPE__TARGET_TYPE = 1;
public static final int ARGUMENT_TYPE__TARGET_NUMBER = 2;
public static final int ARGUMENT_TYPE__SEQUENCE = 3;
public static final int ARGUMENT_TYPE__2DEVENT_NUMBER = 4; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__LOCAL_EVENT_STRING_NUMBER = 5; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__COORDINATE_SET = 6; // 3 x ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__DIALOG_NUMBER = 7; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__MINI_ICON_NUMBER = 8; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__FILENAME_13 = 9; // 8 to 13?
public static final int ARGUMENT_TYPE__CHEST_NUMBER = 10; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__PARTY_MEMBER = 11; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__FACE_IMAGE_NUMBER = 12; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__3DOBJECT_NUMBER = 13; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__FACET_NUMBER = 14; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__SPRITE_NUMBER = 15; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__BOOLEAN = 16; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__SPECIES_TYPE = 17; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__SUBSPECIES_TYPE = 18; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__MONSTER_CREATION_COUNT = 19; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__SPELL_NUMBER = 20; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__SPELL_SKILL_EXPERTISE = 21; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__SPELL_SKILL_LEVEL = 22; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__NPCTEXT_NUMBER = 23; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__NPCDATA_NUMBER = 24; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__NPC_MENU_INDEX = 25; // ByteConversions.convertByteToInt
public static final int ARGUMENT_TYPE__GLOBAL_EVENT_NUMBER = 26; // ByteConversions.getIntegerInByteArrayAtPosition
public static final int ARGUMENT_TYPE__FILENAME_12 = 27; // 8 to 13?
public static final int ARGUMENT_TYPE__FACET_ATTRIBUTE_TYPE = 28;
public static final int ARGUMENT_TYPE__ZERO_BYTE_PLACEHOLDER = 29;
public static final int ARGUMENT_TYPE__SOUND_NUMBER = 30;
public static final int ARGUMENT_DATA_TYPE__UNSIGNED_BYTE = 1;
public static final int ARGUMENT_DATA_TYPE__UNSIGNED_SHORT = 2;
public static final int ARGUMENT_DATA_TYPE__SIGNED_INT = 3;
public static final int ARGUMENT_DATA_TYPE__STRING = 4;
public static final int ARGUMENT_DATA_TYPE__COORDINATE_SET = 5;
public static final int ARGUMENT_DATA_TYPE__CHOICE_PULLDOWN = 6;
public static final int ARGUMENT_DATA_TYPE__BYTE_ARRAY = 7;
public static final int ARGUMENT_DATA_TYPE__PLACEHOLDER = 8;
// Event management
public Event createEventInstance();
public int initialize(Event event, byte[] dataSrc, int offset, byte eventLength);
public void initializeWithValues(Event event, int eventNumber, int sequence,
int commandType);
public List<Event> readEvents(byte data[]);
public byte[] writeEvents(List<Event> eventList);
public int updateData(Event event, byte[] newData, int offset);
public boolean isDebugging(Event event);
public boolean isUnderstood(Event event);
public String eventDescription(Event event);
public Integer[] getCommandTypes();
public String getCommandTypeName(int commandType);
public int[] getArgumentTypeArrayForCommandType(int commandType);
public String[] getArgumentTypePrefixLabelArrayForCommandType(int commandType);
public String[] getArgumentTypeSuffixLabelArrayForCommandType(int commandType);
public int[] getArgumentTypeSortOrderingArrayForCommandType(int commandType);
public boolean getArgumentTypeIsIndirectFor(Event currentEvent, int argumentTypeIndex);
public IndirectValue getArgumentTypeIndirectValueFor(Event currentEvent, int argumentTypeIndex);
public int getArgumentTypeAtIndexForCommandType(int index, int commandType);
public int getArgumentDataType(int argumentType);
public int getArgumentTypeDataSize(int argumentType);
public Integer[] getTargetTypes();
public String getTargetTypeName(int targetType);
public Map getArgumentTypeChoicesArray(int argumentType);
// TODO: This doesn't seem appropriate, yet it's the only place for it right now
public void setStrResource(Str eventStr);
public Str getStrResource();
}