* New LEVEL2.LVL was not being displayed correctly as I forgot to include the new tiles on Game.c.
* Some work done on runway exit detection, but still TODO. * Minor change in LoadMenu.c.
This commit is contained in:
parent
eb6f4d6d8c
commit
fef6629d96
BIN
Bin/AIRPORT.bin
BIN
Bin/AIRPORT.bin
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -127,8 +127,10 @@ enum
|
||||||
|
|
||||||
TILE_RWY_EXIT,
|
TILE_RWY_EXIT,
|
||||||
TILE_TAXIWAY_CORNER_GRASS_2,
|
TILE_TAXIWAY_CORNER_GRASS_2,
|
||||||
|
TILE_TAXIWAY_4WAY_CROSSING,
|
||||||
|
TILE_RWY_EXIT_2,
|
||||||
|
|
||||||
LAST_TILE_TILESET1 = TILE_TAXIWAY_CORNER_GRASS_2
|
LAST_TILE_TILESET1 = TILE_RWY_EXIT_2
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -259,14 +261,14 @@ static void* GameFileDest[] = { (GsSprite*)&GameTilesetSpr ,
|
||||||
(GsSprite*)&CityBg1Spr ,
|
(GsSprite*)&CityBg1Spr ,
|
||||||
(SsVag*)&BeepSnd };
|
(SsVag*)&BeepSnd };
|
||||||
|
|
||||||
static const char* GamePlt[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" };
|
static const char* GamePlt[] = { "cdrom:\\DATA\\LEVELS\\LEVEL2.PLT;1" };
|
||||||
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData };
|
static void* GamePltDest[] = {(TYPE_FLIGHT_DATA*)&FlightData };
|
||||||
|
|
||||||
static char* GameLevelList[] = {"cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"};
|
static char* GameLevelList[] = {"cdrom:\\DATA\\LEVELS\\LEVEL2.LVL;1"};
|
||||||
static uint16_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
|
static uint16_t GameLevelBuffer[GAME_MAX_MAP_SIZE];
|
||||||
|
|
||||||
static uint8_t GameLevelColumns;
|
static uint8_t GameLevelColumns;
|
||||||
static uint8_t GameLevelSize;
|
static uint16_t GameLevelSize;
|
||||||
|
|
||||||
static char GameLevelTitle[LEVEL_TITLE_SIZE];
|
static char GameLevelTitle[LEVEL_TITLE_SIZE];
|
||||||
|
|
||||||
|
@ -472,6 +474,14 @@ void GameInit(void)
|
||||||
PlayerData[PLAYER_ONE].FlightDataPage = 0;
|
PlayerData[PLAYER_ONE].FlightDataPage = 0;
|
||||||
PlayerData[PLAYER_ONE].UnboardingSequenceIdx = 0;
|
PlayerData[PLAYER_ONE].UnboardingSequenceIdx = 0;
|
||||||
|
|
||||||
|
PlayerData[PLAYER_ONE].ShowAircraftData = false;
|
||||||
|
PlayerData[PLAYER_ONE].SelectRunway = false;
|
||||||
|
PlayerData[PLAYER_ONE].SelectTaxiwayRunway = false;
|
||||||
|
PlayerData[PLAYER_ONE].SelectTaxiwayParking = false;
|
||||||
|
PlayerData[PLAYER_ONE].InvalidPath = false;
|
||||||
|
PlayerData[PLAYER_ONE].LockTarget = false;
|
||||||
|
PlayerData[PLAYER_ONE].Unboarding = false;
|
||||||
|
|
||||||
memset(PlayerData[PLAYER_ONE].UnboardingSequence, 0, GAME_MAX_SEQUENCE_KEYS * sizeof(unsigned short) );
|
memset(PlayerData[PLAYER_ONE].UnboardingSequence, 0, GAME_MAX_SEQUENCE_KEYS * sizeof(unsigned short) );
|
||||||
|
|
||||||
PlayerData[PLAYER_TWO].Active = TwoPlayersActive? true : false;
|
PlayerData[PLAYER_TWO].Active = TwoPlayersActive? true : false;
|
||||||
|
@ -486,6 +496,14 @@ void GameInit(void)
|
||||||
PlayerData[PLAYER_TWO].PadLastKeySinglePressed_Callback = &PadTwoGetLastKeySinglePressed;
|
PlayerData[PLAYER_TWO].PadLastKeySinglePressed_Callback = &PadTwoGetLastKeySinglePressed;
|
||||||
PlayerData[PLAYER_TWO].UnboardingSequenceIdx = 0;
|
PlayerData[PLAYER_TWO].UnboardingSequenceIdx = 0;
|
||||||
|
|
||||||
|
PlayerData[PLAYER_TWO].ShowAircraftData = false;
|
||||||
|
PlayerData[PLAYER_TWO].SelectRunway = false;
|
||||||
|
PlayerData[PLAYER_TWO].SelectTaxiwayRunway = false;
|
||||||
|
PlayerData[PLAYER_TWO].SelectTaxiwayParking = false;
|
||||||
|
PlayerData[PLAYER_TWO].InvalidPath = false;
|
||||||
|
PlayerData[PLAYER_TWO].LockTarget = false;
|
||||||
|
PlayerData[PLAYER_TWO].Unboarding = false;
|
||||||
|
|
||||||
memset(PlayerData[PLAYER_TWO].UnboardingSequence, 0, GAME_MAX_SEQUENCE_KEYS * sizeof(unsigned short) );
|
memset(PlayerData[PLAYER_TWO].UnboardingSequence, 0, GAME_MAX_SEQUENCE_KEYS * sizeof(unsigned short) );
|
||||||
|
|
||||||
// On 2-player mode, one player controls departure flights and
|
// On 2-player mode, one player controls departure flights and
|
||||||
|
@ -1236,7 +1254,7 @@ void GameDrawBackground(TYPE_PLAYER* ptrPlayer)
|
||||||
|
|
||||||
void GameRenderBuildingAircraft(TYPE_PLAYER* ptrPlayer)
|
void GameRenderBuildingAircraft(TYPE_PLAYER* ptrPlayer)
|
||||||
{
|
{
|
||||||
uint8_t tileNr;
|
uint16_t tileNr;
|
||||||
uint8_t rows = 0;
|
uint8_t rows = 0;
|
||||||
uint8_t columns = 0;
|
uint8_t columns = 0;
|
||||||
uint8_t k;
|
uint8_t k;
|
||||||
|
@ -1462,9 +1480,11 @@ void GameLoadLevel(void)
|
||||||
|
|
||||||
Serial_printf("Game level title: %s\n",GameLevelTitle);
|
Serial_printf("Game level title: %s\n",GameLevelTitle);
|
||||||
|
|
||||||
|
DEBUG_PRINT_VAR(GameLevelSize);
|
||||||
|
|
||||||
i += LEVEL_TITLE_SIZE;
|
i += LEVEL_TITLE_SIZE;
|
||||||
|
|
||||||
memset(GameLevelBuffer,0,GAME_MAX_MAP_SIZE);
|
memset(GameLevelBuffer, 0, GAME_MAX_MAP_SIZE);
|
||||||
|
|
||||||
i = LEVEL_HEADER_SIZE;
|
i = LEVEL_HEADER_SIZE;
|
||||||
|
|
||||||
|
@ -1781,10 +1801,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
|
||||||
||
|
||
|
||||||
(CurrentTile == TILE_PARKING_2) ) )
|
(CurrentTile == TILE_PARKING_2) ) )
|
||||||
{
|
{
|
||||||
//init_timer_value = GetRCnt(2);
|
|
||||||
|
|
||||||
//end_timer_value = GetRCnt(2);
|
|
||||||
|
|
||||||
ptrTileset->r = NORMAL_LUMINANCE >> 2;
|
ptrTileset->r = NORMAL_LUMINANCE >> 2;
|
||||||
ptrTileset->g = rwy_sine;
|
ptrTileset->g = rwy_sine;
|
||||||
ptrTileset->b = NORMAL_LUMINANCE >> 2;
|
ptrTileset->b = NORMAL_LUMINANCE >> 2;
|
||||||
|
@ -2329,12 +2345,14 @@ void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightDa
|
||||||
|
|
||||||
void GameGetRunwayArray(void)
|
void GameGetRunwayArray(void)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint16_t i;
|
||||||
uint8_t j = 0;
|
uint8_t j = 0;
|
||||||
|
|
||||||
for (i = 0; i < GameLevelSize; i++)
|
for (i = 0; i < GameLevelSize; i++)
|
||||||
{
|
{
|
||||||
if (GameLevelBuffer[i] == TILE_RWY_START_1)
|
uint8_t tileNr = GameLevelBuffer[i] & ~TILE_MIRROR_FLAG;
|
||||||
|
|
||||||
|
if (tileNr == TILE_RWY_START_1)
|
||||||
{
|
{
|
||||||
if (SystemContains_u16(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false)
|
if (SystemContains_u16(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false)
|
||||||
{
|
{
|
||||||
|
@ -2544,14 +2562,18 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader, uint16_t* rwyArray, size_t s
|
||||||
case TILE_RWY_START_2:
|
case TILE_RWY_START_2:
|
||||||
dir = RWY_DIR_WEST;
|
dir = RWY_DIR_WEST;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TILE_RWY_START_1 | TILE_MIRROR_FLAG:
|
case TILE_RWY_START_1 | TILE_MIRROR_FLAG:
|
||||||
dir = RWY_DIR_SOUTH;
|
dir = RWY_DIR_SOUTH;
|
||||||
|
break;
|
||||||
|
|
||||||
case TILE_RWY_START_2 | TILE_MIRROR_FLAG:
|
case TILE_RWY_START_2 | TILE_MIRROR_FLAG:
|
||||||
dir = RWY_DIR_NORTH;
|
dir = RWY_DIR_NORTH;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Serial_printf("Unknown direction for tile %d\n",rwyHeader);
|
Serial_printf("Unknown direction for tile %d\n",rwyHeader);
|
||||||
return;
|
return;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2632,8 +2654,17 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
||||||
|
|
||||||
if (ptrFlightData->State[aircraftIndex] == STATE_APPROACH)
|
if (ptrFlightData->State[aircraftIndex] == STATE_APPROACH)
|
||||||
{
|
{
|
||||||
|
uint8_t j;
|
||||||
uint16_t rwyArray[GAME_MAX_RWY_LENGTH];
|
uint16_t rwyArray[GAME_MAX_RWY_LENGTH];
|
||||||
|
|
||||||
|
// TODO: Algorithm is not correct. If TILE_RWY_EXIT is placed further,
|
||||||
|
// but returns a match earlier than other rwyExitTiles[], invalid targets
|
||||||
|
// are returned to aircraft. We should check this before proceeding.
|
||||||
|
uint8_t rwyExitTiles[] = { TILE_RWY_EXIT,
|
||||||
|
TILE_RWY_EXIT | TILE_MIRROR_FLAG,
|
||||||
|
TILE_RWY_EXIT_2,
|
||||||
|
TILE_RWY_EXIT_2 | TILE_MIRROR_FLAG };
|
||||||
|
|
||||||
ptrFlightData->State[aircraftIndex] = STATE_FINAL;
|
ptrFlightData->State[aircraftIndex] = STATE_FINAL;
|
||||||
GameScore += SCORE_REWARD_FINAL;
|
GameScore += SCORE_REWARD_FINAL;
|
||||||
|
|
||||||
|
@ -2642,21 +2673,37 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
||||||
for (i = 0; i < GAME_MAX_RWY_LENGTH; i++)
|
for (i = 0; i < GAME_MAX_RWY_LENGTH; i++)
|
||||||
{
|
{
|
||||||
rwyTiles[i] = GameLevelBuffer[rwyArray[i]];
|
rwyTiles[i] = GameLevelBuffer[rwyArray[i]];
|
||||||
|
dprintf("rwyTiles[%d] = 0x%02X\n", i, rwyTiles[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, 0, GAME_MAX_RWY_LENGTH);
|
for (j = 0; j < (sizeof(rwyExitTiles) / sizeof(rwyExitTiles[0])); j++)
|
||||||
|
{
|
||||||
|
i = SystemIndexOf_U8(rwyExitTiles[j], rwyTiles, 0, GAME_MAX_RWY_LENGTH);
|
||||||
|
DEBUG_PRINT_VAR(i);
|
||||||
|
|
||||||
|
if (i != -1)
|
||||||
|
{
|
||||||
|
dprintf("Success!\n");
|
||||||
|
uint8_t nextPos = i + 1;
|
||||||
|
|
||||||
|
for (j = 0; j < (sizeof(rwyExitTiles) / sizeof(rwyExitTiles[0])); j++)
|
||||||
|
{
|
||||||
|
i = SystemIndexOf_U8(rwyExitTiles[j], rwyTiles, nextPos, GAME_MAX_RWY_LENGTH);
|
||||||
|
DEBUG_PRINT_VAR(i);
|
||||||
|
|
||||||
|
if (i != -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
{
|
{
|
||||||
Serial_printf("ERROR: Could not find TILE_RWY_EXIT for runway header %d.\n", assignedRwy);
|
Serial_printf("ERROR: Could not find TILE_RWY_EXIT or TILE_RWY_EXIT_2 for runway header %d.\n", assignedRwy);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, i + 1, GAME_MAX_RWY_LENGTH);
|
|
||||||
|
|
||||||
if (i == -1)
|
|
||||||
{
|
|
||||||
Serial_printf("ERROR: Could not find second TILE_RWY_EXIT for runway header %d.\n", assignedRwy);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2665,7 +2712,7 @@ void GameAssignRunwaytoAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFli
|
||||||
targets[0] = assignedRwy;
|
targets[0] = assignedRwy;
|
||||||
targets[1] = rwyExit;
|
targets[1] = rwyExit;
|
||||||
|
|
||||||
if ( AircraftAddNew(ptrFlightData,
|
if (AircraftAddNew(ptrFlightData,
|
||||||
aircraftIndex,
|
aircraftIndex,
|
||||||
targets ) == false)
|
targets ) == false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -262,21 +262,12 @@ void ISR_LoadMenuVBlank(void)
|
||||||
|
|
||||||
SystemIncreaseGlobalTimer();
|
SystemIncreaseGlobalTimer();
|
||||||
|
|
||||||
if (SystemIsBusy() != false)
|
if ( (SystemIsBusy() != false)
|
||||||
|
||
|
||||||
|
(GfxIsGPUBusy() != false)
|
||||||
|
||
|
||||||
|
(SerialIsBusy() != false) )
|
||||||
{
|
{
|
||||||
dprintf("SystemIsBusy...\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((GfxIsGPUBusy() != false))
|
|
||||||
{
|
|
||||||
dprintf("(GfxIsGPUBusy() != false)\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SerialIsBusy() != false)
|
|
||||||
{
|
|
||||||
dprintf("Serialisbusy\n");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,7 @@ SOUND_OBJECTS = $(addprefix $(OBJ_SOUNDS_DIR)/, BELL.VAG \
|
||||||
# Level objects:
|
# Level objects:
|
||||||
SRC_LEVELS_DIR = $(PROJECT_DIR)/Levels
|
SRC_LEVELS_DIR = $(PROJECT_DIR)/Levels
|
||||||
OBJ_LEVELS_DIR = $(CDROM_ROOT)/DATA/LEVELS
|
OBJ_LEVELS_DIR = $(CDROM_ROOT)/DATA/LEVELS
|
||||||
LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, LEVEL1.LVL LEVEL1.PLT)
|
LEVEL_OBJECTS = $(addprefix $(OBJ_LEVELS_DIR)/, LEVEL1.LVL LEVEL2.LVL LEVEL2.PLT LEVEL1.PLT)
|
||||||
|
|
||||||
# Sprite objects:
|
# Sprite objects:
|
||||||
BMP2TIM = bmp2tim
|
BMP2TIM = bmp2tim
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE QtCreatorProject>
|
<!DOCTYPE QtCreatorProject>
|
||||||
<!-- Written by QtCreator 4.0.3, 2017-12-27T11:30:21. -->
|
<!-- Written by QtCreator 4.0.3, 2017-12-27T14:24:53. -->
|
||||||
<qtcreator>
|
<qtcreator>
|
||||||
<data>
|
<data>
|
||||||
<variable>EnvironmentId</variable>
|
<variable>EnvironmentId</variable>
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
|
||||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_mingw53_kit</value>
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_mingw53_kit</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
@ -291,8 +291,8 @@
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">MapEditor.pro</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">MapEditor.pro</value>
|
||||||
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
|
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
|
||||||
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">C:/cygwin/home/Xavier/Airport/Source/build-MapEditor-Desktop_Qt_5_7_0_MinGW_32bit-Debug</value>
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
|
||||||
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
|
||||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[app_settings]
|
[app_settings]
|
||||||
last_dir=C:/cygwin/home/Xavier/Airport/Levels/LEVEL2.LVL
|
last_dir=C:/cygwin/home/Xavier/Airport/Levels/LEVEL1.LVL
|
||||||
|
|
|
@ -6,3 +6,16 @@ tile3 = "Asphalt"
|
||||||
tile4 = "Runway mid"
|
tile4 = "Runway mid"
|
||||||
tile5 = "Runway start/end 1"
|
tile5 = "Runway start/end 1"
|
||||||
tile6 = "Runway start/end 2"
|
tile6 = "Runway start/end 2"
|
||||||
|
tile7 = "Parking 1"
|
||||||
|
tile8 = "Parking 2"
|
||||||
|
tile9 = "Taxiway crossing, grass border"
|
||||||
|
tile10 = "Taxiway, grass border"
|
||||||
|
tile11 = "Taxiway corner, grass border 1"
|
||||||
|
tile12 = "Water grass border 1"
|
||||||
|
tile13 = "Water grass border 2"
|
||||||
|
tile14 = "Runway holding point 1"
|
||||||
|
tile15 = "Runway holding point 2"
|
||||||
|
tile16 = "Runway enter/exit, asphalt border 1"
|
||||||
|
tile17 = "Taxiway corner, grass border 2"
|
||||||
|
tile18 = "Taxiway 4-way crossing, grass border"
|
||||||
|
tile19 = "Runway enter/exit, asphalt border 2"
|
Binary file not shown.
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 180 KiB |
Binary file not shown.
Loading…
Reference in New Issue